前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC之细说HandlerAdapter

SpringMVC之细说HandlerAdapter

作者头像
一觉睡到小时候
发布2019-07-02 17:10:43
4180
发布2019-07-02 17:10:43
举报
文章被收录于专栏:国产程序员国产程序员

DispatcherServlet与HandlerAdapter关系

处理器映射器和处理器适配器的配置方式有三种:

代码语言:javascript
复制
①  xml配置
代码语言:javascript
复制
<!-- 配置处理器适配器 SimpleControllerHandlerAdapter-处理器需要实现Controller接口 -->
代码语言:javascript
复制
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
代码语言:javascript
复制
<!-- 配置处理器映射器 BeanNameUrlHandlerMapping-使用bean的名字进行映射 -->
代码语言:javascript
复制
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />  
代码语言:javascript
复制
<!-- 配置处理器适配器 -->
代码语言:javascript
复制
<bean name="/test.action" class="com.undergrowth.controller.TestController1"></bean>
代码语言:javascript
复制
<bean id="testController1" class="com.undergrowth.controller.TestHttpRequestController"></bean>  
代码语言:javascript
复制
代码语言:javascript
复制
②xml配置
代码语言:javascript
复制
<!-- HttpRequestHandlerAdapter-处理器需要实现HttpRequestHandler接口 -->
代码语言:javascript
复制
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
代码语言:javascript
复制
<!-- SimpleUrlHandlerMapping-使用bean的id和路径进行映射 -->
代码语言:javascript
复制
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
代码语言:javascript
复制
<property name="mappings">
代码语言:javascript
复制
<props>
代码语言:javascript
复制
<prop key="/test1.action">testController1</prop>
代码语言:javascript
复制
</props>
代码语言:javascript
复制
</property>
代码语言:javascript
复制
</bean>  
代码语言:javascript
复制

③通过注解的方式

代码语言:javascript
复制
<!-- 使用注解方式配置处理器映射器和处理器适配器 -->
代码语言:javascript
复制
<mvc:annotation-driven></mvc:annotation-driven>
代码语言:javascript
复制
<context:component-scan base-package="com.undergrowth.controller"></context:component-scan>  

来看第一种方式的实现:

代码语言:javascript
复制
/**
代码语言:javascript
复制
 * 自定义处理器  
代码语言:javascript
复制
 *  实现Controller接口 
代码语言:javascript
复制
 */
代码语言:javascript
复制
public class TestController1 implements Controller {
代码语言:javascript
复制
    @Override
代码语言:javascript
复制
    public ModelAndView handleRequest(HttpServletRequest request,                             
                              HttpServletResponse response) throws Exception {
代码语言:javascript
复制
        //创建数据  
代码语言:javascript
复制
        List<String> list=new ArrayList<>();
代码语言:javascript
复制
        list.add("qq");
代码语言:javascript
复制
        list.add("ww");
代码语言:javascript
复制
        ModelAndView modelAndView=new ModelAndView();
代码语言:javascript
复制
        modelAndView.addObject("list", list);
代码语言:javascript
复制
        modelAndView.setViewName("/WEB-INF/test/test.jsp");
代码语言:javascript
复制
        return modelAndView;
代码语言:javascript
复制
    }
代码语言:javascript
复制
}  

第二种方式实现:

代码语言:javascript
复制
/**
代码语言:javascript
复制
 * 实现HttpRequestHandler接口 
代码语言:javascript
复制
 */
代码语言:javascript
复制
public class TestHttpRequestController implements HttpRequestHandler {
代码语言:javascript
复制
    @Override
代码语言:javascript
复制
    public void handleRequest(HttpServletRequest request, HttpServletResponse response)
代码语言:javascript
复制
            throws ServletException, IOException {
代码语言:javascript
复制
        // 创建数据  
代码语言:javascript
复制
        List<String> list = new ArrayList<>();
代码语言:javascript
复制
        list.add("qq");
代码语言:javascript
复制
        list.add("ww");
代码语言:javascript
复制
        list.add("ee");
代码语言:javascript
复制
        request.setAttribute("list", list);
代码语言:javascript
复制
        request.getRequestDispatcher("/WEB-INF/test/test.jsp").forward(request, response);
代码语言:javascript
复制
    }
代码语言:javascript
复制
}

第三种方式实现:

代码语言:javascript
复制
/**
代码语言:javascript
复制
 * 测试注解处理器映射器与处理器适配器 
代码语言:javascript
复制
 */
代码语言:javascript
复制
@Controller
代码语言:javascript
复制
public class TestAnnotationController {
代码语言:javascript
复制
    @RequestMapping("/test3.action")
代码语言:javascript
复制
    public ModelAndView test(){
代码语言:javascript
复制
        List<String> list=new ArrayList<>();
代码语言:javascript
复制
        list.add("qq");
代码语言:javascript
复制
        list.add("ww");
代码语言:javascript
复制
        list.add("ee");
代码语言:javascript
复制
        list.add("rr");
代码语言:javascript
复制
        ModelAndView modelAndView=new ModelAndView();
代码语言:javascript
复制
        modelAndView.addObject("list", list);
代码语言:javascript
复制
        modelAndView.setViewName("/WEB-INF/test/test.jsp");
代码语言:javascript
复制
        return modelAndView;
代码语言:javascript
复制
    }
代码语言:javascript
复制
} 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 国产程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档