2012-02-09 83 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