2012-02-09 88 views
0


我使用struts2开发web应用程序。
我已经包含了struts2所需的jar,但是当它打算调用struts动作类时,它会抛出404错误。
在控制台上没有错误,浏览器没有显示.action扩展,它显示了struts.xml调用操作类时的情况。
我正在使用jdk 1.6struts 2.0
我是否缺少任何负责这一切的jar。
Struts 2 action class not working

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

网络。 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> 
+0

web.xml怎么样?你在那里设置了struts调度器吗? – Thomas 2012-02-09 07:29:44

+0

需要大量信息?关于你的web.xml,当你得到这些信息时你打的是什么URL,没有这个URL就无法回答。 – 2012-02-09 07:31:42

+0

我已经添加了我的struts和web.xml文件....
在jsp中,我只是简单地调用函数s:form – 2012-02-09 07:47:27

回答

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,您将看不到名称空间或动作扩展。

+0

感谢您的答复戴夫,但我的欢迎页面运行良好..问题是当我打电话任何行动,然后它没有运行,甚至没有显示任何行动的延伸。 – 2012-02-10 04:31:56

+0

我做了一个愚蠢的错误....我已经把struts.xml的名字命名为Struts.xml ....现在它的工作很好,谢谢所有我通过你的答案学到了很多,并会提醒这些东西为未来...感谢一个基调... :) – 2012-02-10 05:53:33

1

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

0

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

例如,URI用于与默认名称空间包调用动作是这样的:

/上下文/ actionName

要在包与非默认名称空间调用动作,则需要这个URI:

/context/namespace/actionName

+0

我做了一个愚蠢的错误。 ...我将Struts.xml的名字命名为Struts.xml ....现在它的工作很好,谢谢大家,我通过你的答案学到了很多东西,并且会为将来提醒这些事情......感谢一下。 .. :) – 2012-02-10 05:56:29