1

我有一个具有以下目录结构的 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>

在 path 上运行时http://localhost:8080/StrutsPro/jsp/login.jsp,它给出了 HTTP 404,为什么?

4

6 回答 6

1

改为检查 web.xml。

否则将所有 .jsp 文件放在 WebContent 文件夹中

于 2013-05-17T07:41:32.740 回答
0

你的项目真的很奇怪。

顺便说一句,您必须:

  • <package>在你的struts.xml中声明一个;动作不会直接进入<struts>元素内部;

  • 给那个包“/StrutsPro”命名空间;

  • 在LoginAction中声明一个检查用户凭据的方法(然后execute()将打开由用户填写的 JSP 页面,tryToLogin()例如,将接收来自 POST 的数据并尝试根据数据库验证它们);或者,您可以使用两种方法指定两个不同的动作而不是一个动作,这取决于您;

  • 在您的内部放置一个<s:submit />按钮<s:form>以将数据发送到登录方法/操作;

  • 调用指向您的操作的 url,而不是指向您的 JSP。JSP 是视图,它总是由控制器返回,在 Struts2 中是 Action。您运行 Action,Action 会为您提供评估的 JSP。您不运行 JSP。

例如,您应该调用:http://localhost:8080/StrutsPro/login.actionhttp://localhost:8080/StrutsPro/login.do,根据您在web.xml中为 Actions 提供的扩展名

于 2013-05-13T08:15:42.920 回答
0

根据您的代码结构,您的项目屋顶文件夹中没有 index.jsp/html。在运行服务器时,它会默认首先找到 index.html/jsp。如果它不可用,它将返回 404 错误。要解决此问题,您可以在 web.xml 文件中添加以下行,

<welcome-file-list>
<welcome-file>/jsp/login.jsp</welcome-file>
</welcome-file-list>

保存所有更改并运行您的服务器。如果问题再次存在,您必须检查 Struts 配置文件和构建路径。

于 2013-05-13T06:32:46.320 回答
0

404 状态码实际上意味着给定 url 的资源不可用。

要从服务器请求资源,请确保它有效且可编译,并将taglib 定义包含在文档中。

<%@ taglib prefix="s" uri="/struts-tags" %>

您不应直接在 URL 中访问 JSP 页面。使用返回调度程序结果的操作配置

<action name="UnderConstruction">
    <result>/UnderConstruction.jsp</result>
</action>
于 2013-05-13T22:54:01.380 回答
0

我是struts的新手,我遇到了同样的错误。与 404 一起,在控制台中,它有 UnableToLodaConfiguration 错误,尽管我已经放置了 struts.xml 的正确配置。有人建议我将我的工作区从桌面重新定位到 C:\ 并且令人惊讶的是它起作用了。

于 2013-05-14T05:53:26.930 回答
0

试试这个答案:

登录.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> 

登录操作.java

private String name;

//Create setter and getter methods for NAME.

public String execute(){
  return SUCCESS;
}

您可以保存所有更改并重新启动服务器。要访问您已输入 url 的页面http://localhost:8080/StrutsPro/login.action

希望这会帮助你。

于 2013-05-13T10:28:33.857 回答