springmvc的2种处理器适配器

本文详细介绍了SpringMVC中两种处理器适配器:SimpleControllerHandlerAdapter与HttpRequestHandlerAdapter的功能与配置方式。通过示例代码展示了如何使用这两种适配器来处理请求并返回视图。

1、SimpleControllerHandlerAdapter

           功能:执行controller

           调用controller里面方法,返回modelAndView。

1.1 springmvc.xml配置

 <!-- HttpRequestHandlerAdapter负责执行实现接口HttpRequestHandler的后端
             控制器。
         -->
        <!--处理器适配器2  实现接口HttpRequestHandler-->
 <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

1.2 后台controller实现Controller接口

public class TestSpringMvcController implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();
        //设置页面回显数据
        mv.addObject("hello", "欢迎学习springmvc!");
        //返回逻辑视图
        mv.setViewName("hello");

        return mv;
    }
}

2、HttpRequestHandlerAdapter

      功能:执行controller,跳转到视图

      2.1 springmvc配置

      

 <!-- 配置处理器适配器执行Controlelr ,springmvc默认的
        SimpleControllerHandlerAdapter:执行Controller
        -->
        <!--处理器适配器1默认-->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

      2.2 后台controller实现HttpRequestHandler接口

      

public class TestHttpController implements HttpRequestHandler {
    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("http", "测试http适配器成功");
        request.getRequestDispatcher("/WEB-INF/jsps/http.jsp").forward(request, response);
    }
}

总结:两种适配器可以共存,配置不同的映射器找到不同的controller

    <!-- 简单处理器映射器:
             把Url进行集中配置
         -->
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
                <property name="mappings">
                        <props>
                                <prop key="/abc.do">myController</prop>
                                <prop key="/ss.do">http</prop>
                                <prop key="/mine.do">http</prop>
                        </props>
                </property>

        </bean>

      <!-- 配置自定义Controler -->
        <bean id="myController" name="/hello.do" 
         class="controller.TestSpringMvcController"></bean>

        <!--&lt;!&ndash; 配置自定义HttpController &ndash;&gt;-->
        <bean id="http" class="controller.TestHttpController"></bean>

 

随着 SpringMVC 的注解功能使用,SpringMVC 已逐渐取代 Struts2 成为主流的 MVC 框架。在 SpringMVC 中,处理器映射器、处理器适配器和前端控制器(核心控制器 DispatcherServlet)是重要的组件,它们在整个运行流程中扮演着关键角色。 前端控制器 DispatcherServlet 相当于 MVC 模式中的 C,是整个流程控制的中心。用户请求到达前端控制器,由它调用其他组件处理用户的请求,其存在降低了组件之间的耦合性 [^1][^5]。 处理器映射器(HandlerMapping)主要负责根据浏览器输入的 URL 映射对应的 Handler,具体的映射规则取决于所使用的映射器。随着注解的发展,映射器的使用越来越方便。非注解的处理器映射器在使用时需要在 XML 中进行配置并遵循一些实现规则,而使用注解的处理器映射器,只需在指定的地方声明一些注解信息即可。在 spring.xml 中配置注解的处理器映射器,可声明相关的 bean,如 `<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>`。使用注解方式进行 SpringMVC 开发时,若不配处理器映射器,框架会默认加载 DefaultAnnotationHandlerMapping [^1][^2][^4]。 处理器适配器(HandlerAdapter)的作用是决定调用哪个 Handler 来实现具体的业务逻辑。前端控制器知道要执行哪个 Handler,但只是把信息转发给处理器适配器,由处理器适配器调用程序写好的 Handler。Handler 执行完后,返回一个 ModelAndView 对象给适配器处理器适配器再把这个对象返回给前端控制器。同样,非注解的处理器适配器在使用时需在 XML 中配置,注解的处理器适配器只需声明注解信息。在 spring.xml 中配置注解的处理器适配器,可声明相关的 bean,如 `<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>`。使用注解方式开发时,若不配处理器适配器,框架会默认加载 AnnotationMethodHandlerAdapter [^1][^2][^3][^4]。 ```xml <!-- 配置注解的处理器映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- 配置注解的处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值