Struts 2 Hello World Tutorial给出了404

时间:2017-09-01 01:18:26

标签: java jsp tomcat struts2

我一直在关注Struts的this教程。

这是我的文件结构:

This is my file structure

我以为我一步一步地遵循了所有内容,我之前做了类似的教程,并且能够让它在另一个版本中工作,但我现在正在尝试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>

1 个答案:

答案 0 :(得分:0)

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

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

  • 首先,您指定版本=&#34; 2.5&#34; ,其中版本=&#34; 3.0&#34;

  • 其次,您指定了 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 而不是 org.apache.struts2.dispatcher.FilterDispatcher 用于过滤器类

鉴于本教程在没有修改 web.xml 的情况下工作正常,我建议您还原两个更改并重试。

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

根据OP的评论更新回复

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

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

您可以通过选择项目,右键单击,从弹出菜单中选择属性,然后选择 Web来查看项目的上下文根项目设置。无论您在上下文根字段中看到什么,都应该在您的网址中指定。

所以澄清一下:

  • 完全是您项目的上下文根?
  • 您为网址指定了什么完全

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