首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringMVC之细说HandlerAdapter

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
复制
} 
下一篇
举报
领券