我在运行Struts网络应用程序时遇到了一些问题。我尝试了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;
}
}
Libs我添加了
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
我的控制台上没有错误,问题视图。如果有人可以帮助我,我会很高兴。
答案 0 :(得分:2)
错误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框架所需的新库。