处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(一)
生活随笔
收集整理的這篇文章主要介紹了
处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
非注解 處理器映射器 和 處理器適配器
處理器映射器:
第一種:?BeanNameUrlHandlerMapping
<!-- 配置Handler --> <bean id="userController1" name="/queryUsers.action" class="com.bjxb.ssm.controller.UserController" /><!-- 處理器映射器 將bean的name作為url進行查找, bean就是我們寫的Handler,所以我們需要在配置Handler時指定beanname(就是url) --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />?
第二種:SimpleUrlHandlerMapping
?
<!-- 配置Handler 實現 Controller 接口 的 Handler既有 name 屬性 可以讓 BeanNameUrlHandlerMapping 處理器映射器 映射到,
又有 id 屬性 可以在 SimpleUrlHandlerMapping 處理器映射器 中進行映射--> <bean id="userController1" name="/queryUsers.action" class="com.bjxb.ssm.controller.UserController" /><!-- 配置Handler,實現 HttpRequestHandlerAdapter 接口 的 Handler --> <bean id="userController2" class="com.bjxb.ssm.controller.UserController2"/><!-- 簡單URL映射 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><!-- 對userController1進行URL映射,URL是/queryUsers.action同一個Bean可以有多個URL與之映射--><prop key="/queryUsers1.action">userController1</prop><prop key="/queryUsers2.action">userController1</prop><prop key="/queryUsers3.action">userController2</prop></props></property> </bean>
?
?
?
注意:上面兩種處理器映射器,我們是在同一個 xml 文件中配置,并且根據不同的 URL 都能正常訪問。
結論:多個處理器映射器可以并存,前端控制器判斷 URL 能讓哪些映射器映射,從中選擇正確的映射器處理。
?
?
非注解的適配器:
第一種:SimpleControllerHandlerAdapter
<!-- 處理器適配器 所有的處理器適配器都實現 HandlerAdapter接口 這里我們使用SimpleControllerHandlerAdapter 處理器適配器--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
注意:這款適配器要求我們編寫的 Handler 實現 Controller 接口
Handler如下:
public class UserController implements Controller{@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {ArrayList<User> userlist = new ArrayList<User>();User user1 = new User("騰博","123456");User user2 = new User("小兵","123456");System.out.println("我來了");userlist.add(user1);userlist.add(user2);// 返回ModelAndViewModelAndView modelAndView = new ModelAndView();// 相當于request的setAttribute,在jsp頁面中通過userlist取數據modelAndView.addObject("userlist", userlist);// 指定視圖modelAndView.setViewName("/WEB-INF/jsp/users/user.jsp");return modelAndView;}}?
?
?
第二種:HttpRequestHandlerAdapter
<!-- 另一個非注解的處理器適配器 HttpRequestHandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>?
注意:這款適配器要求我們編寫的 Handler 實現 HttpRequestHandler 接口
?
? Handler如下:
?
?
public class UserController2 implements HttpRequestHandler{@Overridepublic void handleRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {ArrayList<User> userlist = new ArrayList<User>();User user1 = new User("騰博","123456");User user2 = new User("小兵","123456");System.out.println("我來了");userlist.add(user1);userlist.add(user2);// 設置模型數據request.setAttribute("userlist", userlist);// 設置轉發的視圖request.getRequestDispatcher("/WEB-INF/jsp/users/user.jsp").forward(request, response);// 使用此接口,我們可以通過修改response,設置響應的數據格式,比如響應json數據// response.setCharacterEncoding("utf-8");// response.setContentType("application/json;charset=utf-8");// response.getWriter().write("json串"); }}?
經過上面的分析我們發現:
處理器映射器就是:根據我們的 URL 尋找 Handler
處理器適配器就是:按照它要求的規則去執行 Handler
而且我們發現:非注解形式的 HandlerMapping 和 HandlerAdapter 所對應的 Handler,一個類中只有一個方法,處理能力有限,比較繁瑣
?
轉載于:https://www.cnblogs.com/xb1223/p/10185280.html
總結
以上是生活随笔為你收集整理的处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea创建Package时出现包名累加
- 下一篇: QQ空间 1314学习网的日志 神奇的