SpringMVCノート(二)-SimpleUrlHandlerMapping
23303 ワード
SpringMVCにはHandlerMappingがたくさん入っていて、これについてはまだよく知らないので、これらの役割を理解することにしました.
まず1つ目:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
公式apiドキュメントは以下のように説明されています.
Implementation of the
簡単に言えば、次のようなurlからbeanへのマッピングを処理するHandlerMappingインタフェースが実装されています.
urlはbeanに対応しますが、このbeanにはControllerインタフェースを実装する必要があります.次に、インスタンスを見てみましょう.
1.controllerは次のとおりです.
2.比較のために、Controllerインタフェースを実装するのではなく、注釈を使用するControllerを再構築します.
3.ページsimpleController.jsp:
4.MVCプロファイル:
テスト1:
simpleControllerにアクセスします.jsp、コミットをクリックして、正常にアクセスします
テスト2:
アクセス/user/add、表示404
まとめ:
SimpleUrlHandlerMappingはControllerインタフェースを実装したbeanのみをサポートし、その属性にurlパス-->beanのマッピングを行う必要があり、@RequestMapping注釈はサポートされていないため、このSimpleUrlHandlerMapping機能は限られている
注意:mappingsプロパティを使用して構成することもできます.効果は同じです.
まず1つ目:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
公式apiドキュメントは以下のように説明されています.
Implementation of the
org.springframework.web.servlet.HandlerMapping
interface to map from URLs to request handler beans. 簡単に言えば、次のようなurlからbeanへのマッピングを処理するHandlerMappingインタフェースが実装されています.
/welcome.html=ticketController
/show.html=ticketController
urlはbeanに対応しますが、このbeanにはControllerインタフェースを実装する必要があります.次に、インスタンスを見てみましょう.
1.controllerは次のとおりです.
1 package com.springmvc.demo.controller;
2
3 import javax.servlet.http.HttpServletRequest;
4 import javax.servlet.http.HttpServletResponse;
5
6 import org.springframework.stereotype.Controller;
7 import org.springframework.web.servlet.ModelAndView;
8 import org.springframework.web.servlet.mvc.AbstractController;
9
10 @Controller
11 public class SimpleController extends AbstractController {
12
13 @Override
14 protected ModelAndView handleRequestInternal(HttpServletRequest request,
15 HttpServletResponse response) throws Exception {
16 System.out.println("SimpleController...");
17 System.out.println(request.getParameter("username"));
18 ModelAndView mv = new ModelAndView("simpleController");
19 mv.addObject("msg", "hello,SimpleController");
20 return mv;
21 }
22
23 }
2.比較のために、Controllerインタフェースを実装するのではなく、注釈を使用するControllerを再構築します.
1 package com.springmvc.demo.controller;
2
3 import javax.servlet.http.HttpSession;
4
5 import org.springframework.stereotype.Controller;
6 import org.springframework.ui.ModelMap;
7 import org.springframework.validation.BindingResult;
8 import org.springframework.web.bind.annotation.ModelAttribute;
9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.bind.annotation.RequestParam;
11 import org.springframework.web.servlet.ModelAndView;
12
13 import com.springmvc.demo.model.User;
14
15 @Controller
16 @RequestMapping("/user")
17 public class UserController {
18
19 @RequestMapping("/add")
20 public ModelAndView addUser(@RequestParam String username,
21 @RequestParam String password,
22 @RequestParam int id,
23 HttpSession session){
24
25 ModelAndView mv = new ModelAndView();
26 mv.setViewName("hello");
27 User u = new User();
28 u.setUsername(username);
29 u.setPassword(password);
30 u.setId(id);
31 mv.addObject("user", u);
32 session.setAttribute("user", u);
33
34 return mv;
35 }
36
37 /*@ModelAttribute
38 public User getUser(){
39 User u = new User();
40 u.setId(12);
41 return u;
42 }*/
43
44 @RequestMapping("/preAddUser")
45 public String preAddUser(ModelMap map){
46 User u = new User();
47 map.addAttribute("user", u);
48 return "index";
49 }
50
51 @RequestMapping("/addUser")
52 public String addUser2(@ModelAttribute("user") User user,BindingResult result,ModelMap map){
53 if(user.getUsername().equals("yang")){
54 map.addAttribute("user", user);
55 return "index";
56 }
57 /*ModelAndView mv = new ModelAndView();
58
59 mv.setViewName("hello");
60 mv.addObject("user", user);*/
61
62 return "hello";
63 }
64
65 }
3.ページsimpleController.jsp:
1 <!DOCTYPE html>
2 <html>
3 <body>
4
5 <form action="/springmvc/simpleController" method="post">
6 <input type="text" name="username"/>
7 <input type="text" name="password"/>
8 <!-- <input type="text" name="id"/> -->
9 <input type="submit" value="submit" />
10 </form>
11 </body>
12 </html>
4.MVCプロファイル:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
5 xsi:schemaLocation="
6 http://www.springframework.org/schema/beans
7 http://www.springframework.org/schema/beans/spring-beans.xsd
8 http://www.springframework.org/schema/context
9 http://www.springframework.org/schema/context/spring-context.xsd
10 http://www.springframework.org/schema/mvc
11 http://www.springframework.org/schema/mvc/spring-mvc.xsd">
12
13 <context:component-scan base-package="com.springmvc.demo.controller" />
14
15 <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
16 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" /> -->
17 <!-- <mvc:default-servlet-handler/> -->
18 <!-- <mvc:annotation-driven /> -->
19 <!-- <mvc:resources location="/resource/images/" mapping="/images/**" /> -->
20 <bean id="simpleController" class="com.springmvc.demo.controller.SimpleController"></bean>
21
22 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
23
24 <property name="urlMap">
25 <map>
26 <entry key="/simpleController" value-ref="simpleController" />
27 </map>
28 </property>
29 </bean>
30
31 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
32 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
33 <property name="prefix" value="/" />
34 <property name="suffix" value=".jsp" />
35 </bean>
36
37
38 </beans>
テスト1:
simpleControllerにアクセスします.jsp、コミットをクリックして、正常にアクセスします
テスト2:
アクセス/user/add、表示404
まとめ:
SimpleUrlHandlerMappingはControllerインタフェースを実装したbeanのみをサポートし、その属性にurlパス-->beanのマッピングを行う必要があり、@RequestMapping注釈はサポートされていないため、このSimpleUrlHandlerMapping機能は限られている
注意:mappingsプロパティを使用して構成することもできます.効果は同じです.
<!-- mappings Properties -->
<property name="mappings">
<props>
<prop key="/simpleController">simpleController</prop>
</props>
</property>