spring MVC 노트(둘) - SimpleUrlHandlerMapping

23333 단어 springMVC
Spring MVC에는 Handler Mapping이 많이 들어있는데 이것에 대해 잘 몰라서 이것들의 작용을 알아보기로 했습니다.
첫 번째:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
공식api 문서는 다음과 같습니다.
Implementation of the org.springframework.web.servlet.HandlerMapping interface to map from URLs to request handler beans.
간단히 말하면HandlerMapping 인터페이스를 실현하고 URL에서 bean까지의 비주얼을 처리한다. 예를 들어 다음과 같은 비주얼을 처리한다./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. 페이지 단순 Controller.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:
단순 Controller에 액세스합니다.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>

좋은 웹페이지 즐겨찾기