【问题标题】:Struts 2 Hello World Tutorial Gives 404Struts 2 Hello World 教程给出 404
【发布时间】:2017-09-01 01:18:26
【问题描述】:

我一直在关注this Struts 教程。

这是我的文件结构:

我以为我一步一步地遵循了一切,我之前做过一个类似的教程,并且能够让它在另一个版本中工作,但我现在正在尝试 Struts 2.3.33。我在 Apache Tomcat 8.5 服务器上运行它。我尝试转到http://localhost:8080/HelloWorldStruts2/index.jsp,但它给出了 404 错误消息,我不知道为什么。我还确保 Struts 文件位于我的构建路径和部署程序集以及我的 WEB-INF/lib 文件夹中。

我的控制台没有错误,这是我的 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_3_0.xsd"
   id="WebApp_ID" version="3.0">

   <display-name>Struts 2</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.FilterDispatcher
      </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"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
   <package name="helloworld" extends="struts-default">

      <action name="hello" 
            class="com.tutorialspoint.struts2.HelloWorldAction" 
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>

【问题讨论】:

  • 此版本不适用于 jre 1.8
  • @Roman C 我使用 OP 的环境(Struts 2.3.33 和 Tomcat 8.5)运行了本教程,它使用 JRE 1.8 对我有用。请参阅下面的更新帖子。
  • OP的环境是什么意思?据我阅读该教程,它使用的是 Struts 2.2.3,与 JRE 版本无关。

标签: java jsp tomcat struts2


【解决方案1】:

我在您的环境(Eclipse + Struts 2.3.33 + Tomcat 8.5.20)上按照该教程进行操作,它使用 Java 1.8 在 Windows 10 上运行。

像你一样,我不得不偏离教程,将 commons-lang3-3.2.jar 添加到 WEB-INF/lib 以避免 NoClassDefFoundError 使用 Struts 2.3.33 时在运行时。但是,我看到您还对 web.xml 进行了两项不同于本教程的更改:

  • 首先,您将 version="2.5" 指定为 version="3.0"

  • 其次,您指定了 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 而不是 org.apache.struts2.dispatcher.FilterDispatcher 用于 filter-class

鉴于本教程对我来说很好,无需修改他们的 web.xml,我建议您恢复您的两个更改并重试。

是什么促使您修改他们的 web.xml 文件?


更新的响应基于以下 OP 的评论:

好的。与我刚刚注意到的教程的另一个偏差是您将项目命名为 Struts2.3 with Tiles 2 而不是 HelloWorldStruts2。我怀疑您的项目是否了解 HelloWorldStruts2,这可以解释为什么您会得到 404。

默认情况下,您的上下文根将是 Struts2.3_with_Tiles_2,而不是 HelloWorldStruts2,因此您的 URL 需要更改为 http://localhost:8080/Struts2.3_with_Tiles_2/index.jsp

您可以通过选择您的项目,右键单击,从弹出菜单中选择 Properties,然后选择 Web Project Settings 来查看您的项目的 Context Root强>。无论您在 Context Root 字段中看到什么,都应该在您的 URL 中指定。

所以澄清一下:

  • 究竟是您项目的上下文根?
  • 您为 URL 指定的究竟是什么

如果这不能解决问题,我建议再次运行本教程,但请严格按照他们的说明进行(除了您需要复制的特定 Struts 2 文件,但您已经正确地执行了该操作)。

【讨论】:

  • 我偏离的原因是我在启动服务器时,完全按照教程操作后收到了 404 消息。我之前使用另一个版本的 Struts (2.5) 完成了本教程,但发现与其他插件集成时出现问题,因此我尝试返回并使用 2.3.33 版本重新创建本教程。得到 404 后,我尝试从另一个项目中复制我的 web.xml,但这没有用。我将 web.xml 恢复为教程,但仍然收到 404 错误。
  • 我相信你是对的,我现在不在家,但是当我使用有这个的机器时,我会尝试一下。我认为这是我在制作这个项目时忘记更改的愚蠢错误,感谢您指出这一点,我会更新,如果可行,请接受您的回答。
  • 这是我的问题,感谢您帮助我认识到这个愚蠢的错误!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 2020-08-07
  • 2011-07-01
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
相关资源
最近更新 更多