2016-11-17 85 views
3

我是Struts2的初學者,我知道這個問題在這裏被問了很多次,但我試過要解決這個問題,並在這裏閱讀很多線索,花費6個小時,仍然無法完成工作。真的需要更多的建議...Struts2沒有Action映射的命名空間[/]和動作名稱[登錄]與上下文路徑[/ Struts2Test]相關聯

這裏是我的包

Struts2Test 
    +Struts2Test/src 
    +tw.com.rrstudio.java.test 
     -TestAction.java 
    +Struts2Test/build 
    +Struts2Test/WebContent 
    +Struts2Test/WebContent/META-INF 
     +Struts2Test/WebContent/WEB-INF/classes 
     +Struts2Test/WebContent/WEB-INF/lib 
     -Struts2Test/WebContent/WEB-INF/spring-context.xml 
     -Struts2Test/WebContent/WEB-INF/spring-mvc.xml 
     -Struts2Test/WebContent/WEB-INF/struts.xml 
     -Struts2Test/WebContent/WEB-INF/struts2-action.xml 
     -Struts2Test/WebContent/WEB-INF/web.xml 
    -Struts2Test/WebContent/error.jsp 
    -Struts2Test/WebContent/index.jsp 
    -Struts2Test/WebContent/TestAction.jsp 

我的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>Struts2Test</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring-context.xml 
     /WEB-INF/spring-mvc.xml 
    </param-value> 
    </context-param> 

    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <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>tw.com.rrstudio.java.test</param-value> 
    </init-param> 
    </filter> 

    <jsp-config> 
    <taglib> 
     <taglib-uri>HTTP://java.sun.com/jsp/jstl/core</taglib-uri> 
     <taglib-location>/WEB-INF/lib/tld/c.tld</taglib-location> 
    </taglib> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <page-encoding>UTF-8</page-encoding> 
    </jsp-property-group> 
    </jsp-config> 

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

    <servlet> 
    <servlet-name>springmvc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring-mvc.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>springmvc</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
    <session-timeout>10</session-timeout> 
    </session-config> 

</web-app> 

而且也struts.xml的

<?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> 
    <!-- struts 2.3.16.3 has problem of security,needing to set DynamicMethodInvocation=false --> 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="false" /> 

    <constant name="struts.objectFactory" value="spring" /> 

    <constant name="struts.action.extension" value="do"/> 
    <constant name="struts.action.excludePattern" value="/jsp/.*?,/image/.*?,/css/.*?,/js/.*?,.*\\.jsp"/> 

    <package name="default" extends="json-default" ></package> 

    <package name="Strut2Test" extends="json-default" > 
    <global-results> 
     <result name="SystemErrorPage">/WebContent/error.jsp</result> 
    </global-results> 
    <action name="login" class="tw.com.rrstudio.java.test.TestAction"> 
     <result name="index">/WebContent/index.jsp</result> 
     <result name="success">/WebContent/TestAction.jsp</result> 
    </action> 
    </package> 

</struts> 

的index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=login.action"> 
<title>Index of Struts2Test</title> 
</head> 
<body> 
    <h1>Index of Struts2Test</h1> 
    <form action="testAction" method="post"> 
    <label for="name">Please enter your name</label><br/> 
    <input type="text" name="name"/> 
    <input type="submit" value="Say Hello"/> 
    </form> 
</body> 
</html> 

服務器是Tomcat 8.0.38,它以無錯誤啓動。但是,當我訪問

它給了我這個(標題)的錯誤,如果我訪問

我會得到一個正常的404結果。

現在我不知道,有什麼建議或提示,歡迎...

+0

你爲什麼用Spring MVC的混合Struts2的?嘗試從web.xml中刪除任何Spring MVC引用,也從struts2過濾器中刪除actionPackages參數,並註釋Spring objectFactory設置。另外請注意,你需要struts2-spring-plugin使用spring作爲objectFactory,而SpringMVC與它無關。 –

+0

因爲這是我的公司做到的,所以它是一個多年來存在的結構。我需要嘗試一些關於錯誤修復/新功能的東西,全部基於這種結構。 – RRTW

+1

那麼,你最好的辦法就是看看你的配置和基於這個結構的工作項目配置(同一部分)之間的差異。特別注意到xml struts文件(我看到你有兩個,你只發布了一個)。但在這個單調乏味的工作之前,你仍然可以嘗試(如果不存在的話,可以添加它)[** config-browser-plugin **](https://struts.apache.org/docs/config-browser-plugin.html )並尋找'http://127.0.0.1:8080/Struts2Test/config-browser/actionNames.action':它會告訴你到底是什麼被映射到你的整個webapp中。值得一試; –

回答

2

有關問題:有沒有映射與上下文路徑關聯的命名空間和操作名稱動作

如果你使用url來調用一個動作,確保這個url映射到struts配置。要解決URL映射問題,您可以使用config-browser插件。只需將此插件添加到項目依賴關係中,並在部署時即可訪問顯示運行時配置的網站,並使用可用的URL來調用該操作。例如,如果你是在本地端口8080上的context運行Tomcat和部署應用程序,那麼你就可以

http://localhost:8080/[context]/config-browser/index.action 

訪問插件的網址,您可以點擊任何操作可用的操作頁面上的命名空間下側邊欄。另請注意,如果您的操作未在包裝上找到,它可能位於default包裝中。 Struts會在default命名空間中爲不在URL中映射的名稱空間上的操作執行其他搜索。


退房的config-browser插件來調試配置 問題。

要正確映射url到動作,需要兩個參數: 動作名稱和命名空間。

Struts在啓動時加載xml配置,它應該知道struts.xml的 位置。默認情況下,它在類路徑上查找到 找到一個文件,名稱如struts.xml。然後它解析文檔 並創建運行時配置。此配置用於 爲動作url找到適當的配置元素。如果在請求期間沒有找到這樣的 元素,則返回404錯誤代碼 消息:There is no Action mapped for namespace and action name

此消息還包含用於查找 操作配置的名稱空間和操作名稱。然後您可以在 struts.xml中查看您的配置設置。有時存儲在 ActionMapping中的操作名稱和名稱空間指向錯誤的操作。這些值由ActionMapper確定爲 ,其可以具有不同的實現,通過插件使用 。

還有另一個設置可能會影響這個映射器和映射,但是如果你得到這個消息那麼點是相同的,那麼URL是 使用沒有映射運行時配置中的任何動作配置。如果您的 無法識別您應該使用哪個網址,則可以嘗試使用 config-browser插件查看可供使用的網址列表。


+0

它幫助我瞭解我的真實行動路徑,謝謝。現在我又有一個404問題...... – RRTW

相關問題