Struts 2动作类不起作用

时间:2012-02-09 07:25:33

标签: java java-ee struts2


我正在使用struts2来开发Web应用程序 我已经为struts2包含了必需的jar,但是当它要调用struts动作类时,它会抛出404错误。
控制台上没有错误,浏览器没有显示struts.xml调用动作类时显示的.action扩展名 我使用的是jdk 1.6struts 2.0 我错过了任何负责这一切的罐子。

在jsp中我只是从中调用函数 <s:form action = "Mergexmlaction" method = "post"/>

这是我的struts.xml和web.xml

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.multipart.maxSize" value="6000000000" /> 

  <package name="default" namespace="/jsp" extends="struts-default">
    <action name="Mergexmlaction" class="com.hm.merge.mergeaction.Mergexmlaction">
      <result name="success" >/jsp/Result.jsp</result>
      <result name="error" >/jsp/Browse_multiplexmlfiles.jsp</result> 
      <interceptor-ref name="fileUpload">
        <param name="maximumSize">600000000</param> 
      </interceptor-ref> 
    </action>
  </package>
</struts>

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="xml_file_merging" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
  <display-name>xml_file_merging</display-name>
  <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>

    <welcome-file-list>
        <welcome-file>jsp/Browse_multiplexmlfiles.jsp</welcome-file>
    </welcome-file-list>
</web-app>

3 个答案:

答案 0 :(得分:4)

有一些问题。

<package name="default" namespace="/jsp" extends="struts-default">

1)我建议反对的命名空间为“jsp”,它没有任何意义。命名空间应该对应用程序和/或用户有意义。

  <action name="Mergexmlaction" class="com.hm.merge.mergeaction.Mergexmlaction">

2)不要使用“操作”命名操作,将会有.action扩展名,或根本没有扩展名。无论哪种方式,在第一种情况下没有理由复制“动作”,如果没有扩展,没有理由使用“动作”。只需“mergexml”,“mergeXml”等等。

    <result name="success" >/jsp/Result.jsp</result>

3)我建议将您的JSP页面放在WEB-INF下,以避免直接访问客户端。

    <interceptor-ref name="fileUpload">

4)声明任何拦截器后,必须声明所有拦截器。此操作只有一个拦截器在运行。这是可能的这没关系,但它几乎不是正确的事情。

<welcome-file>jsp/Browse_multiplexmlfiles.jsp</welcome-file>

5)这是最终的问题,具体取决于您访问应用程序的方式。您将欢迎文件显示为JSP页面,该页面可能使用S2标记。这不起作用:标签依赖于它们是完整的S2请求,值栈等等。

对S2应用程序的所有访问都应通过S2操作进行,不是 JSP。如果您查看直接访问的JSP的呈现HTML,您将看不到呈现的名称空间和操作扩展名。

答案 1 :(得分:1)

错误404是一个错误的链接。意味着你只是在调用一个不存在的链接。检查struts配置文件中的映射,并确保使用正确的URL。

答案 2 :(得分:0)

package元素的namespace属性是可选的,如果不存在,则假定默认值为“/”。如果namespace属性具有非缺省值,则必须将名称空间添加到调用包中的操作的URI中。

例如,在具有默认命名空间的包中调用操作的URI是:

/上下文/ actionName

要在具有非默认命名空间的包中调用操作,您需要此URI:

/上下文/命名空间/ actionName