为什么我简单的Struts2 hello world不起作用?

时间:2014-04-09 10:09:58

标签: java jsp tomcat struts2

我创建了一个简单的struts2项目。

首先,我将此添加到web.xml

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

这是我完整的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" 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>pos</display-name>


    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

其次,我创建了struts.xml到src

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="default" extends="struts-default">
            <action name="index" class="nerdy.action.IndexAction" method="index">
                <result name="success">/index/index.jsp</result>
            </action>        
        </package>
    </struts>

最后,我在src中创建了包和类,并将Struts2的jar复制到lib

    package nerdy.action;
    import com.opensymphony.xwork2.ActionSupport;

    @SuppressWarnings("serial")
    public class IndexAction extends ActionSupport {

      public String index() {
        return "success";
      }

    } 

我运行服务器并尝试了这些网址

本地主机:8080 / POS / index.action

本地主机:8080 / index.action

本地主机:8080 / POS /的indexAction

本地主机:8080 / POS /索引

本地主机:8080 / POS /动作

但是所有显示404:请求的资源不可用。

我检查了所有名称是否匹配,并且在build\classes中编译了类,而index.jsp在WebContent/index/

我的配置中是否还有错误?为什么URL应该是“index.action”?哪个xml配置了这种模式?

这是我完整的日食项目:157.7.141.139/pos.7z(http)

4 个答案:

答案 0 :(得分:0)

请将所有必需的库添加到WEB-INF / lib文件夹,清理项目。

按照图片进行参考,

enter image description here

答案 1 :(得分:0)

 <filter>
       <filter-name>struts2</filter-name>
       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
       <init-param>
           <param-name>actionPackages</param-name>
           <param-value>user.actions</param-value>
       </init-param>
   </filter>
   <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping> 

像这样更改你的web.xml。它在2.3.16.1版本中对我有用。

public String index() {
        return "success";
      }

代替上面的代码
public String execute() {
        return "success";
      }

答案 2 :(得分:0)

我遇到了同样的问题。删除所有jar文件并尝试从http://archive.apache.org/dist/struts/binaries/下载struts 2.3.1.1,然后使用相同的JAR文件。它肯定适用于您的过滤器配置。

答案 3 :(得分:0)

我遇到了同样的问题,因为我正在使用外部JRE。

请检查您是否使用内部JRE。 内部JRE位于JDK内部。 enter image description here

项目中的SO,

转到构建路径

- &GT;配置

- &GT;库

- &gt;已安装的JRE

- &gt;给出jdk的路径,如图

所示

- &GT;完成

刷新项目。