0

私は現在、Spring MVC アプリケーションに取り組んでおり、web.xml ファイル内で、すべての受信 URL を単一の DispatcherServlet にマッピングしたときに、効果的にマッピングされた URI を取得できるかどうかを知りたいと思いました。私の懸念を説明する例を次に示します。

import static org.springframework.web.bind.annotation.RequestMethod.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {


    @RequestMapping(method={GET})
    public String processAllRequest(){
        return "viewName";
    }
}

web.xml で URL-MAPPING を "/*" として定義したので、すべての着信要求は上記のコントローラー クラスで終了します。たとえば、次の両方のリクエストは、コントローラーの processAllRequest() メソッドによって処理されます。

  • myApplicationContext/ホーム
  • myApplicationContext/ログアウト

どういうわけか、マップされた URI を取得することは可能ですか? つまり、processAllRequest() の内部に入ると、それが .../home または .../logout に対して呼び出されたかどうかをどのように知ることができますか? メソッドの引数として HttpServletRequest または別のオブジェクトを挿入することにより、この種の情報を取得することは可能ですか?

4

2 に答える 2

2

SpringはHttpServletRequest、ハンドラー引数に挿入すると注入されるため、必要に応じて挿入できます。

ただし、異なるURLを区別する必要がある場合は、それらを異なるハンドラーに配置するだけです。

@Controller
public class HomeController {

    @RequestMapping(value="/home", method={GET})
    public String processHome(){
        return "viewName";
    }

    @RequestMapping(value="/login", method={GET})
    public String processLogin(){
        return "viewName";
    }
}

web.xmlのマッピングは、すべてのリクエストをSpringサーブレットに転送します。それでも、好きなだけ書くことができ@Controller、クラスレベルとメソッドレベルで遊んで@RequestMapping、アプリケーションを論理コンポーネントに分割することができます。

于 2012-05-11T08:27:59.523 に答える
0

あいまいな方法で質問を定式化した可能性がありますが、探していたのはむしろパス変数でした。だから私の問題はこのように解決されました:

@Controller public class HomeController {

@RequestMapping(value="/{uri}", method={GET})
public String processMappedUri(@PathVariable uri){
    return uri;
}

}

このソリューションでは、次のリクエストをリクエストするたびに、processMappedUri() メソッドからの uri 引数が変数値を保持します。

  • myApplicationContext/home --> uri = ホーム
  • myApplicationContext/logout --> uri = ログアウト
于 2012-05-13T20:26:17.220 に答える