【问题标题】:when trying to run struts2 with eclipse juno server,getting HTTP Status 404 error尝试使用 Eclipse Juno 服务器运行 struts2 时,出现 HTTP 状态 404 错误
【发布时间】:2017-05-10 17:13:07
【问题描述】:

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

没有为命名空间 [/] 和与上下文路径 [/StrutsTrial6] 关联的动作名称 [trial] 映射的动作。

这是我的 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 显示出如此奇怪的行为。提前致谢..

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

无论我在包中使用 namespace="/" 还是不使用 namespace ,这都是相同的页面,并且在此页面中,它们没有在默认列中的操作中定义。

【问题讨论】:

  • 1) 从 Maven 启用 struts2-confifgbrowser-plugin(并记住在投入生产之前将其删除),并检查发布操作的相应 URL; 2)when I am changing some code in my project, Eclipse server does not update my project and instead it runs my earlier code, so please tell me why my eclipse is showing such a srange behaviour它被称为缓存:)
  • 感谢 andrea 的帮助....但是请您描述一下您的第一个答案,因为我是 struts 新手,所以我对它们了解不多。

标签: java xml eclipse maven struts2


【解决方案1】:

调试此类问题:

添加这个

<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>
    

    &lt;action&gt; 没有 namespace 属性,&lt;package&gt; 有:

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

    注意:不要调用 ActionFirstBean,因为动作不是 bean,所以动作应该包含 bean 并通过 getter 和 setter 公开它们。 Actions are controllers and part of the model,不仅仅是模型(就像 bean 一样)。

  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,这两种方式都不鼓励;)

【讨论】:

  • 我试过这个,但它没有在列表中显示我的操作名称(试用)
  • 我也改变了包中的命名空间属性,但它也显示了同样的错误。
  • 您可以编辑您的问题,添加配置浏览器页面的屏幕截图吗?一个用于默认命名空间,一个用于“/”命名空间,等等...
  • 感谢 Andrea 提供的宝贵帮助...我已经按照您所说的做了,我使用了 maven 原型,但是我遇到了一个新错误,我在我的问题中显示了这个错误。请检查并为我提供解决方案...再次感谢您的贡献..
  • @yogeshmeghnani,这不是 StackOverflow 的工作方式。当你提出一个问题并得到回答时,它就结束了。如果您有另一个问题,则必须单独提出;如果新问题与前一个问题共享一些细节,为避免冗余,您可以简单地链接新问题中的旧问题。除此之外,像 romanc 这样的人不会等待其他任何事情能够将您的问题作为重复项关闭,并且可能会要求删除,所以不要喂巨魔,如果没有问题就问一个新问题已经回答可以解决您的问题。干杯。
猜你喜欢
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多