几天以来,我在运行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://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
我的控制台上没有错误,问题视图。如果有人可以帮助我,我会很高兴。
错误404表示您请求的资源不可用,与未映射到请求URL的操作相同。
FilterDispatcher不推荐使用,并且可能不适用于当前的Struts版本,请StrutsPrepareAndExcecuteFilter改用。
FilterDispatcher
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像在程序包配置中一样提供。
action
namespace
使用method="execute"是没用的s:submit标签,该方法execute使用的默认情况下,它不会工作,因为你已经在Struts配置关闭DMI。
method="execute"
s:submit
execute
__在旧库中 添加 库WEB-INF/lib并没有太大帮助,您的应用程序可能无法正常工作,直到您 删除 所有较低版本的库 并将其替换 为较高版本,并添加当前版本的Struts框架所需的新库。
WEB-INF/lib