2013-09-30 11 views
6

spring mvc 3.2.4.RELEASEを使用して非常に単純なページを実装する際に問題があります。 Iは、所望のように、それぞれの方法が実行されているSpring DispatcherServlet:HTTPリクエストのマッピングが見つかりません

http://127.0.0.1:8080/member 

を呼び出すとき

@Transactional 
@Controller 
public class MembersDetailsController { 
    @Autowired 
    private MemberService memberService; 

    @RequestMapping(value = "/member/{name}", method = RequestMethod.GET) 
    public String displayMember(@PathVariable String name) { 
     System.out.println(name); 
     return "member"; 
    } 

    @RequestMapping(value = "/member", method = RequestMethod.GET) 
    public String displayMember() { 
     System.out.println("Empty"); 
     return "member"; 
    } 
} 

私のコントローラは、このようになります。しかし、wenn私は、ログ出力で404を取得

http://127.0.0.1:8080/member/test 

または

http://127.0.0.1:8080/member/test/ 

を呼び出す:

WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/member/test] in DispatcherServlet with name 'mvc-dispatcher' 

いただきましたが、本当にweiredされる以前のログは言う:

INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/member/{name}],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String 
INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/member],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String 

これは、マッピングが私がこれを理解する限り正しい。

これは私のweb.xmlです:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> 

<web-app> 
    <display-name>Mitgliederdatenbank</display-name> 

    <!--Configuration--> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring-security.xml, /WEB-INF/applicationContext.xml</param-value> 
    </context-param> 

    <filter> 
     <filter-name>hibernateFilter</filter-name> 
     <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> 
     <init-param> 
      <param-name>sessionFactoryBeanName</param-name> 
      <param-value>hibernateSessionFactory</param-value> 
     </init-param> 
    </filter> 

    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <!--Spring Security Filter--> 
    <filter-mapping> 
     <filter-name>hibernateFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

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

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

    <!-- Servlets --> 
    <servlet> 
     <servlet-name>springGwtRemoteServiceServlet</servlet-name> 
     <servlet-class>org.spring4gwt.server.SpringGwtRemoteServiceServlet</servlet-class> 
    </servlet> 

    <servlet> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/applicationContext.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 


    <!-- Mapping --> 
    <servlet-mapping> 
     <servlet-name>springGwtRemoteServiceServlet</servlet-name> 
     <url-pattern>/ui/springGwtServices/*</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/welcome</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/login</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/logout</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/loginfailed</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>mvc-dispatcher</servlet-name> 
     <url-pattern>/member/*</url-pattern> 
    </servlet-mapping> 

    <!-- Default page to serve --> 
    <welcome-file-list> 
    <welcome-file>/login</welcome-file> 
    </welcome-file-list> 

</web-app> 

は誰が私にここで何が悪かったのかヒントを与えてくださいませんか?

+0

'@ Transactional'アノテーションを削除すると機能しますか? –

+0

他のコントローラは正常に動作していますか、またはあなたのアプリでこのコントローラだけですか?あなたが含んでいるマッピングログは整理されていますか?これは通常、(少なくともSpring 3.1では)マップされたControllerクラスも表示します。 –

+0

web.xmlとコンテキストパスを表示してください。 –

答えて

7

この問題は、URL Mapping issue - Spring web MVCに記載されているものと同じであると信じています。

alwaysUseFullPathを使用しない限り、mvcは指定したマッピング(*/member/member/testなど)に* partを一致させます。ドキュメントのalwaysUseFullPath here(セクション17.4)http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.htmlを参照してください。

しかし、残念ながら、このプロパティーはxml構成要素(xml構成を使用している場合)によって公開されていないため、マッピングをあなたの質問に書いているようにしたい場合は、構成する必要がありますここで説明するように:http://blog.sarathonline.com/2013/07/enable-alwaysusefullpath-with.html

0

私はDefaultAnnotationHandlerMappingとAnnotationMethodHandlerAdapter 2つのBeanを設定します

<mvc:annotation-driven/> 

このタグを使用して同じ問題と解決の問題に直面しました。

また、ディスパッチャーサーブレット設定ファイルにタグを追加しました。

<context:component-scan base-package="PATH WHERE FIND CONTROLLERS" /> 
関連する問題