Spring3 フレームワークで HTTP リクエストがあった場合に、URL と起動するクラス・メソッドをマッピングするサンプルを掲載しています。なお、本サンプルは Web サーバに tomcat を使用して、動作検証しています。
スポンサーリンク
コントローラクラスのパッケージを設定
検索対象とするベースのパッケージを指定し、コントローラクラスの検索負荷を軽減させることができます。 WEB-INF/applicationContext.xml に、context:component-scan base-package にコントローラの検索を行うベースとなるパッケージを設定ます。
-- WEB-INF/applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd"> <context:annotation-config /> <context:component-scan base-package="masao.controller" /> </beans>
メソッドに URL を直接マッピングする
メソッドに URL を直接マッピングするには、クラスの前に @Controller アノテーションを、 メソッドの前に @RequestMapping アノテーションを記述します。
package masao.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class TestController { @RequestMapping(value = "/Controller1/action1/", method = { RequestMethod.GET }) public void func1(HttpServletRequest request) { System.out.println("Request /Controller1/action/"); } @RequestMapping(value = "/Controller2/action2/", method = { RequestMethod.GET }) public void func2(HttpServletRequest request) { System.out.println("Request /Controller2/action2/"); } }
本例では、以下のようにマッピングされます。
URL | 実行されるメソッド |
---|---|
/Controller1/action1/ | TestController.func1 |
/Controller2/action2/ | TestController.func2 |
クラスに URL をマッピングする
上記では、メソッドと URL をダイレクトにマッピングさせました。直接マッピングすることで URL の階層とクラス / メソッドの階層と同一とならないように設定できます。この点は利点でもありますが、間違いを起こしやすいことにもなってしまうと思います。次は、クラスに @RequestMapping アノテーションを設定し、URLをマッピングさせるサンプルコードになります。
@Controller @RequestMapping(value = "/Controller") public class TestController { @RequestMapping(value = "/action1/", method = { RequestMethod.GET }) public void func1(HttpServletRequest request) { System.out.println("Request /Controller/action1/"); } @RequestMapping(value = "/action2/", method = { RequestMethod.GET }) public void func2(HttpServletRequest request) { System.out.println("Request /Controller/action2/"); } }
URL | 実行されるメソッド |
---|---|
/Controller/action1/ | TestController.func1 |
/Controller/action2/ | TestController.func2 |
Pingback: [ Java Spring3 ] @RequestMapping method 属性 [ POST / GET ] – 偏差値40の高い壁
SpringMVC(STS最新版)でWeb開発をしています。
ControllクラスのGETメソットにコントロールが遷移せつ直接JSPに制御が移ってしまいます。
どこに原因があるのかもし、わかるようならばご指摘いただければありがたいです。
(ちなみに以下の簡単なクラスです)
@Controller
@RequestMapping(value = “/AMenu”)
public class AMenuController {
private static final Logger logger = LoggerFactory.getLogger(AMenuController.class);
@RequestMapping(value = “/AMenu”, method = RequestMethod.GET,
headers=”Content-Type=text/*” )
public ModelAndView getAMenu(Locale locale, Model model) throws IOException{
logger.info(“AMenu(GET) The client locale is {}.”, locale);
try{
// システム情報設定
EnvironmentInfo environmentInfo = new EnvironmentInfo();
model.addAttribute(“systemImage”,environmentInfo.getSystemImage());
model.addAttribute(“systemName”,environmentInfo.getSystemName());
ModelAndView wView = new ModelAndView(“/AMenu”);
return wView;
}catch(Exception e){
logger.info(“AMenu(GET) Error {“+ e.toString() + “}”, locale);
ModelAndView wView = new ModelAndView(“Login”);
return wView;
}
}
}
headers=”Content-Type=text/*” の条件を満たしていない可能性はありませんか?
クライアント(ブラウザ)からのHTTPリクエストにContent-Typeがない、POST のときはあるけどGETのときはないとか。
適当ですいません。
とても興味深いと感じました!