一尘不染

使用Struts应用程序时出现错误404问题

jsp

几天以来,我在运行Struts Web应用程序时遇到一些问题。我尝试了与我的问题有关的StackOverflow的几种解决方案,但均无效果。

web.xml

<display-name>Struts2 Application</display-name>
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>

        org.apache.struts2.dispatcher.FilterDispatcher
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping>
<welcome-file-list>
    <welcome-file>Login.jsp</welcome-file>
</welcome-file-list>

struts.xml

<struts>
    <constant name="struts.enable.DynamicMethodInvocation"
        value="false" />
    <constant name="struts.devMode" value="false" />

    <constant name="struts.custom.i18n.resources"
        value="ApplicationResources" />

    <package name="default" extends="struts-default" namespace="/">

        <action name="login"
            class="net.viralpatel.struts2.LoginAction">
            <result name="success">Welcome.jsp</result>
            <result name="error">Login.jsp</result>

        </action>
    </package>
</struts>

Login.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>

<title>Struts 2 - Login Application | ViralPatel.net</title>
</head>

<body>
<h2>Struts 2 - Login Application</h2>
<s:actionerror />
<s:form action="login.action" method="post">

    <s:textfield name="username" key="label.username" size="20" />
    <s:password name="password" key="label.password" size="20" />

    <s:submit method="execute" key="label.login" align="center" />
</s:form>
</body>
</html>

LoginAction.java

package net.viralpatel.struts2;

public class LoginAction {
    private String username;
    private String password;

    public String execute() {

        if (this.username.equals("admin")
                && this.password.equals("admin123")) {
            return "success";
        } else {
            return "error";
        }
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

我添加的库

1.commons-logging-1.1.3.jar
2. freemarker-2.3.19.jar
3. ognl-3.0.6.jar
4. struts2-core-2.3.15.1.jar
5. xwork-core-2.3.15.1.jar

访问网址时出错 http://localhost:8080/StrutsHelloWorld/

HTTP Status 404 - /StrutsHelloWorld/

type Status report

message /StrutsHelloWorld/

description The requested resource is not available.

Apache Tomcat/7.0.42

我尝试了这个http://java.dzone.com/articles/struts2-tutorial-
part-27

我的控制台上没有错误,问题视图。如果有人可以帮助我,我会很高兴。


阅读 164

收藏
2020-06-08

共1个答案

一尘不染

错误404表示您请求的资源不可用,与未映射到请求URL的操作相同。

FilterDispatcher不推荐使用,并且可能不适用于当前的Struts版本,请StrutsPrepareAndExcecuteFilter改用。

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  </filter-class>
</filter>
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

struts.xml添加以下内容

<package name="default" extends="struts-default" namespace="/">
   <action name=""><result>/Login.jsp</result></acton>

这会将您转到登录页面。还应考虑使用到JSP资源的绝对路径。

在JSP中,使用需要重写的表格

<s:form namespace="/" action="login" method="post">

    <s:textfield name="username" key="label.username" size="20" />
    <s:password name="password" key="label.password" size="20" />

    <s:submit key="label.login" align="center" />
</s:form>

action属性中,使用操作名称并namespace像在程序包配置中一样提供。

使用method="execute"是没用的s:submit标签,该方法execute使用的默认情况下,它不会工作,因为你已经在Struts配置关闭DMI。

__在旧库中 添加WEB-INF/lib并没有太大帮助,您的应用程序可能无法正常工作,直到您 删除 所有较低版本的库 并将其替换
为较高版本,并添加当前版本的Struts框架所需的新库。

2020-06-08