我有一个具有以下目录结构的 Struts 2 项目。但是当我尝试在 Tomcat 7 上使用 Eclipse 运行这个项目时,它给了我 404 错误。
Struts.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<struts>
<action name="login" class="com.actions.LoginAction" method="execute">
<result name="success">/jsp/login.jsp</result>
</action>
</struts>
login.jsp
:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Page</title>
</head>
<body>
<s:form action="login" method="post">
Login name : <input type="text" value="name"/>
</s:form>
</body>
</html>
在路径
http://localhost:8080/StrutsPro/jsp/login.jsp
上运行时,会出现 HTTP 404 错误。
改为检查 web.xml。
否则将所有 .jsp 文件放在 WebContent 文件夹中
根据您的代码结构,您的项目屋顶文件夹中没有 index.jsp/html。在运行服务器时,默认情况下它会首先找到 index.html/jsp。如果它不可用,它将返回 404 错误。要解决此问题,您可以在 web.xml 文件中添加以下行,
<welcome-file-list>
<welcome-file>/jsp/login.jsp</welcome-file>
</welcome-file-list>
保存所有更改并运行服务器。如果问题再次存在,您必须检查 Struts 配置文件和构建路径。
你的项目真奇怪
顺便说一句,你必须:
在你的
struts.xml中声明一个
<package>
;动作不要直接进入 <struts>
元素;给那个包"/StrutsPro"命名空间;
在您的 LoginAction 中声明一种检查用户凭据的方法(然后
execute()
将打开 JSP 页面以供用户填写,例如 tryToLogin()
将接收来自 POST 的数据并尝试根据数据库验证它们);或者,您可以使用两种方法指定两个不同的 Action 而不是一个 Action,这取决于您;在您的
<s:submit />
中放置一个<s:form>
按钮,以将数据发送到登录方法/操作;调用指向您的操作的 url,而不是您的 JSP。 JSP就是视图,它总是由控制器返回,在Struts2中就是Action。您运行 Action,Action 会为您提供已评估的 JSP。你不运行 JSP.
例如,您应该调用:
http://localhost:8080/StrutsPro/login.action
或 http://localhost:8080/StrutsPro/login.do
,根据您在 web.xml 中给 Actions 的扩展名
试试这个答案:
登录.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Page</title>
</head>
<body>
<s:form action="login" method="post">
Login name : <s:textfield name="name"/>
<s:submit value="Click Me" name="Click Me"></s:submit>
</s:form>
</body>
</html>
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="com.actions.LoginAction">
<result name="success">/jsp/login.jsp</result>
</action>
</package>
</struts>
LoginAction.java
private String name;
//Create setter and getter methods for NAME.
public String execute(){
return SUCCESS;
}
您可以保存所有更改并重新启动服务器。要访问您输入网址的页面
http://localhost:8080/StrutsPro/login.action
希望这对你有帮助。
我是 struts 的新手,我遇到了同样的错误。与 404 一起,在控制台中,它有 UnableToLodaConfiguration 错误,尽管我已经放置了正确的 struts.xml 配置。有人建议我将我的工作区从 Desktop 迁移到 C:\,令人惊讶的是它奏效了。
404 状态代码实际上意味着给定 url 的资源不可用。
要从服务器请求资源,请确保其有效且可编译,并在文档中包含 taglib 定义。
<%@ taglib prefix="s" uri="/struts-tags" %>
您不应该直接在 URL 中访问 JSP 页面。使用 action configuration 返回调度程序结果。
<action name="UnderConstruction"> <result>/UnderConstruction.jsp</result> </action>