2011-04-21 7 views
5

DefaultAnnotationHandlerMappingの動作について混乱します。私はDefaultAnnotationHandlerMappingのしくみ

<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/somePath/someWork</url-pattern> 

    <url-pattern>/users</url-pattern> 
    <url-pattern>/user/*</url-pattern> 
    </servlet-mapping> 

を持っている私のweb.xmlに

私は、このようなコントローラを持って

@RequestMapping(value="/user/adduser", method={RequestMethod.POST}) 
    public void addAdmin(@ModelAttribute("myData") myData data) { 

     System.out.println("We reached adduser controller"); 

    } 

およびJSPファイルで私は、これは動作しません

<form:form id="adduser" method="post" action="/user/adduser" commandName="myData"> 

を持っています。私はそれが動作、またはI場合

<url-pattern>/user/adduser</url-pattern> 

に言及している場合私は、ハンドラマッピングが「/ adduserの」および404ページのための「/ユーザ/ adduserの」

のためではなく、.xmlファイルに見つからないエラーが発生します

@RequestMapping(value="/adduser", method={RequestMethod.POST}) 

も同様です。ページを送信するときに、正しいコントローラに到達します。

@ReuqestMappingが動作する方法が混乱しています。リクエストが "/ user/adduser"のように来たら、正しいクラスと正しい方法を探し始めるでしょうか?

答えて

9

春は、HttpServletRequestpathInfoプロパティと一致します。

あなたweb.xml<url-pattern>/user/*</url-pattern>を指定した場合、pathInfoは削除/user接頭辞パスになりますので、@RequestMapping/adduserなければなりません。

web.xml<url-pattern>/user/adduser</url-pattern>を指定した場合、pathInfoはフル/user/adduserパスになりますので、@RequestMappingはその照合する必要があります。

これは春で行われますが、サーブレットコンテナによって、それが時には少し混乱することができますされていません。

あなたは、例えば、@RequestMappingでワイルドカードを使用して、このを軽減することができます返信skaffmanため

@RequestMapping(value="**/adduser", method={RequestMethod.POST}) 
+0

感謝。これは私に洞察を与えます。別の関連する質問。プロダクション環境では、人々は実際に * .doのようなマッピングを行いますか?私はこのような実際の例は見ていない。 – kalyan

+1

@kalyan: '* .do'はStrutsの悪い昔からの二日酔いです。あなたはまだ "実際の"ウェブサイトでそれを見ることができます。 – skaffman

関連する問題