当尝试 运行 struts2 使用 eclipse juno 服务器时,出现 HTTP 状态 404 错误

when trying to run struts2 with eclipse juno server,getting HTTP Status 404 error

这是我在 eclipse 服务器页面上遇到的错误:

There is no Action mapped for namespace [/] and action name [trial] associated with context path [/StrutsTrial6].

这是我的 web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>StrutsTrial6</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

这是我的 struts.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<struts>
<package name="default" extends="struts-default">
<action name="trial" namespace="/" class="first.FirstBean">
<result name="success">/first.jsp</result>
</action>
</package>
</struts>

这是我输入的jsp页面:

<%@ taglib uri="/struts-tags" prefix="s" %>
<s:form action="trial">
<s:textfield name="name" label="NAME"></s:textfield>
<s:submit value="save"></s:submit>
</s:form>

这是我的输出jsp页面:

<%@ taglib uri="/struts-tags" prefix="s" %>
name:<s:property value="name"/>

这是pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>StrutsTrial6</groupId>
  <artifactId>StrutsTrial6</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.4</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.3</version>
    </dependency>
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>
    <dependency>
      <groupId>org.javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.20.0-GA</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.7</version>
    </dependency>
    <dependency>
      <groupId>ognl</groupId>
      <artifactId>ognl</artifactId>
      <version>3.1.12</version>
    </dependency>
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.5.10.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-servlet-api</artifactId>
      <version>7.0.56</version>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

过去 10 个小时以来,我一直被这个错误困扰。 我还发现,有时,当我更改项目中的某些代码时,Eclipse 服务器不会更新我的项目,而是运行我之前的代码,所以请告诉我为什么我的 eclipse 显示这样的范围 behaviour.Thanks提前..

这是配置浏览器页面的截图:

无论我是在程序包中使用名称空间=“/”还是不使用名称空间,这都是我得到的同一个页面,并且在这个页面中,他们没有在默认列的操作中定义任何操作。

调试此类问题:

添加这个

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-config-browser-plugin</artifactId>
    <version>2.5.10.1</version>
</dependency>

到你的pom.xml,部署,然后打开下面的URL:

http://localhost:8080/YOUR_PROJECT_NAME/config-browser/index.action

并发现您的操作是如何映射的 as described here

重要提示:记得在投入生产之前将其删除,否则将是一个严重的安全漏洞。


您的具体问题:

  1. struts.xml 上的语法错误:

    <package name="default" extends="struts-default">
        <action name="trial" namespace="/" class="first.FirstBean">
            <result name="success">/first.jsp</result>
        </action>
    </package>
    

    <action> 没有 namespace 属性,<package> 有:

    <package name="default" extends="struts-default" namespace="/" >
        <action name="trial" class="first.FirstBean">
            <result name="success">/first.jsp</result>
        </action>
    </package>
    

    注意:不要调用动作 FirstBean,因为动作不是 beans,动作应该包含 beans 并通过 getter 和 setter 公开它们。 ,不仅仅是模型(就像豆子一样)。

  2. 您没有遇到语法错误,因为您没有阅读struts.xml。它在 WEB-INF 中,但它应该保留在类路径的根目录中,因此在 src/main/resources 中,在构建时将被 Maven 复制到 WEB-INF/classes

还要注意WebContent/WEB-INF不是archetypes默认生成的Maven结构,应该是src/main/webapp/WEB-INF...

如果您从 maven archetype 开始生成您的项目(您手动或使用 Eclipse,这两种不鼓励的方式),您将永远不会遇到任何此类错误;)