0

クラスがあります

@Controller
@RequestMapping("/auth")
public class LoginController {


 @RequestMapping(value = "/login", method = RequestMethod.GET)
 public String getLoginPage(@RequestParam(value="error", required=false) boolean error, 
   ModelMap model) {

}

}

web.xml

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
                classpath:META-INF/spring-servlet.xml
        </param-value>
    </init-param>
<load-on-startup>1</load-on-startup>
</servlet>

appcontext.xml

<mvc:annotation-driven/>

<context:component-scan base-package="mysrc.src"/>

春サーブレット.xml

<context:component-scan base-package="mysrc.src"/>

           <mvc:annotation-driven/>

「ディスパッチャにマッピングが見つかりません」などのエラーが発生しました

しかし今、私はコンソールで例外を見ることができません。

404しか見えない

http://localhost:9090/app/auth/login

デバッグモードのgetLoginPageメソッドにブレークポイントを設定しましたが、フローはありません。

提案のほかに、Springが実現した@RequestMappingクラスをスキャンしたことをどのように確認できますか?多分コンソールの起動を検索していますか?

4

2 に答える 2

3

通常、Springからエラーメッセージのない404が表示された場合、それは通常、アプリが予想とは異なるコンテキストでデプロイされていることを意味します。たとえば、コードサンプルは、Webアプリを/にデプロイしていることを示していますが、それがデプロイされている場所であると確信していますか?Tomcatを使用していますか?その場合、Webアプリの名前はROOT.warにする必要があります。Webアプリやおそらくweb.xmlをどこに/どのようにデプロイするかなどの詳細を提供できますか?

マッピングに関する限り、SpringはスキャンしたコントローラーとそのリクエストパスをINFOログレベルでログに記録します。ディスパッチャサーブレットは、要求をコントローラに一致させることができない場合、常にエラーメッセージを表示するため、要求がディスパッチャサーブレットを通過していないことを示すエラーメッセージは表示されません。

于 2012-08-17T18:32:08.793 に答える
1

リクエストのマッピングは正しく見えています。

コントローラーのコンストラクターを作成し、そこにログステートメントまたはブレークポイントを配置して、コントローラーがSpringによって作成されているかどうかを確認できます。

コンポーネントスキャンでは、コントローラーも2回初期化されることに注意してください(appcontext.xmlに対して1回、servlet.xmlに対して1回)。フィルタを追加して、コントローラがservlet.xmlからのみ作成されるようにする必要があります。

appcontext.xml(コントローラーを除くすべて):

<context:component-scan base-package="x.y.z">
  <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation" />
</context:component-scan>

servlet.xml(コントローラーのみ):

<context:component-scan base-package="x.y.z" use-default-filters="false">
  <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>

そして念のために言っておきますが、のbase-package属性はcomponent-scan有効なjavaパッケージである必要があり、srcディレクトリへのパスではありません(mysrc.srcsrcフォルダに少し似ています;-))

于 2012-08-17T17:25:41.720 に答える