私はSpring MVCでかなり新しいです。
この期間、私はSTS ダッシュボードからダウンロードできるSpring MVC ショーケースの例を研究しています。
この例でカスタムの解決可能な Web 引数がどのように処理されるかを理解するのに問題があります。
実際には、次のような状況があります。
私の home.jsp ビューには、次のリンクがあります。
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
このリンクは、URL への HTTP リクエストを生成します: "/data/custom"
この要求を処理するメソッドを含むコントローラー クラスには、次のコードがあります。
@Controller
public class CustomArgumentController {
@ModelAttribute
void beforeInvokingHandlerMethod(HttpServletRequest request) {
request.setAttribute("foo", "bar");
}
@RequestMapping(value="/data/custom", method=RequestMethod.GET)
public @ResponseBody String custom(@RequestAttribute("foo") String foo) {
return "Got 'foo' request attribute value '" + foo + "'";
}
}
この HTTP リクエストを処理するメソッドはcustom()
したがって、前のリンクをクリックすると、HTTP リクエストはカスタム メソッドによって処理されます...
@RequestAttribute
注釈が何であるかを理解するのに問題があります。
String foo
この場合、foo という名前のリクエスト属性を新しい変数にバインドしていると思います。
しかし... この属性はどこから取得されますか? この変数はSpringによって取得されますか?
わかりました...私の考えでは、このリクエスト属性はHttpServletRequest
オブジェクトから取得されます...
これは、このクラスには、話す名前を持つメソッドもあるためだと思います...したがって、このメソッドは、オブジェクト内にandbeforeInvokingHandlerMethod()
を持つ属性を設定しているようです...そして、メソッドは使用できますこの値...name=foo
value=bar
HttpServletRequest
custom()
実際、私の出力は次のとおりです。
Got 'foo' request attribute value 'bar'
がメソッドのbeforeInvokingHandlerMethod()
前に呼び出されるのはなぜですか?custom()
そして、なぜ注釈beforeInvokingHandlerMethod()
によって@ModelAttribute
注釈が付けられているのですか? このケースはどういう意味ですか?