2016-11-17 10 views
3

私はStruts2の初心者です。それを解決し、ここで多くのスレッドを読み、6時間を費やしても、それを動作させることはできません。本当に多くの提案が必要...Struts2コンテキストパス[/ 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

なぜあなたは春のMVCでStruts2の混合されていますか? web.xmlから任意のSpring MVCリファレンスを削除し、struts2フィルタからactionPackages paramを削除し、SpringのobjectFactory設定にコメントしてください。また、SpringMVCはそれと関係がないのに対し、SpringをobjectFactoryとして使用するにはstruts2-spring-pluginが必要です。 –

+0

これは私の会社のことでしたので、何年も使用していた構造です。私はこの構造に基づいて、バグ修正/新機能について何か試してみる必要があります。 – RRTW

+1

これは、この構造に基づいて、作業中のプロジェクトの設定と(同じ部分の)設定の違いを調べるのに最適です。特にXML strutsファイルを見てください(私はあなたに2つあります、あなたは1つしか投稿していません)。しかし、この面倒な作業の前に、[** config-browser-plugin **](https://struts.apache.org/docs/config-browser-plugin.html)をまだ試してみることができます) 'http://127.0.0.1:8080/Struts2Test/config-browser/actionNames.action'を探してください:あなたのウェブアプリケーション全体に何がマップされているかを正確に教えてくれます。試しにふさわしいです;) –

答えて

2

問題...任意の提案やヒントは歓迎されている、見当がつかない:場合は、コンテキスト・パス

に関連付けられた名前空間とアクション名にマッピングされたアクションはありませんurlを使用してアクションを呼び出すときは、このURLがstrutsの設定にマップされていることを確認してください。 URLマッピングの問題を解決するには、config-browserプラグインを使用できます。このプラグインをプロジェクトの依存関係に追加するだけで、展開時に、利用可能なURLを持つ実行時設定を示すWebサイトにアクセスして、アクションを呼び出すことができます。あなたはポート8080上でローカルにTomcatを実行しているとcontextでアプリケーションを展開している場合たとえば、あなたは

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

とプラグインのURLにアクセスすることができますあなたは上の名前空間の下にアクションのページで利用可能な任意のアクションをクリックすることができますサイドバー。また、パッケージにアクションが見つからない場合は、defaultパッケージに含まれている可能性があります。 Strutsは、default名前空間で、URLからマップされた名前空間にないアクションを追加検索します。


デバッグ構成 問題にconfig-browserプラグインをチェックしてください。

URLをアクションに正しくマップするには、アクション名と名前空間の2つのパラメータが必要です( )。

Strutsは起動時にxml構成をロードし、struts.xmlの の位置を知っている必要があります。デフォルトでは、 へのクラスパスを探しています。struts.xmlのような既知の名前のファイルを検索します。次に、文書 を解析し、実行時設定を作成します。この設定は、 アクションURLの適切な構成要素を見つけるために使用されます。要求中に 要素が見つからない場合、 メッセージにThere is no Action mapped for namespace and action nameという404エラーコードが返されます。

また、このメッセージには、アクション設定 を見つけるために使用される名前空間とアクション名が含まれています。次に、構成設定を struts.xmlで確認できます。時々、アクション名と名前空間は、 ActionMappingに格納されている間違った動作を指します。これらの値は、異なる実装を持つActionMapperによって と決定され、プラグインによって が使用されます。

このマッパーと マッピングに影響する可能性のある別の設定もありますが、このメッセージが表示された場合は同じ点が使用されます。URLは です。 で、使用するURLを認識できない場合は、 config-browserプラグインを試して、使用可能なURLのリストを確認してください。


+0

私の実際の行動を知るのに役立ちます、ありがとう。今私は別の404号を持っています...... – RRTW

関連する問題