一、自定义适配器
-
HandlerAdapter适配器:用来转发HandlerMapping映射器的访问地址,HandlerAdapter指定对应的自定义Controller的方法执行。
-
之前都是实现Controller接口,通过默认的HandlerAdapter执行实现的handleRequest方法。现在我们想通过自己定义的Controller控制器的方法去处理请求和响应以及ModelAndView视图模型。
-
第一步:自定义控制器MyController接口(相当于springframework中的Controller接口),该接口包含自己定义的方法(自定义参数列表);
-
第二步:创建MyController接口的实现类MyControllerImpl,实现执行方法;
-
第三部:自定义MyControllerAdapter适配器,实现springframework中的HandlerAdapter接口,并实现接口中的方法;
-
第四部:Spring配置文件需要额外配置自定义HandlerAdapter和自定义Controller以及其他配置信息。
-
自定义接口以及实现类:
//自定义适配器接口 public interface MyController { public ModelAndView myTest() throws Exception; } //自定义控制器 public class MyControllerImpl implements MyController { @Override public ModelAndView myTest() throws Exception { ModelAndView mv = new ModelAndView("hello"); mv.addObject("name","MyControllerImpl"); return mv; } } //自定义适配器:指定调用MyController中的myTest方法 public class MyControllerAdapter implements HandlerAdapter { //判断是否符合自定义控制器接口类型,满足要求则调用handle方法 @Override public boolean supports(Object handler) { return (handler instanceof MyController); } //调用自定义控制器的指定方法 @Override public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return ((MyController) handler).myTest(); } @Override public long getLastModified(HttpServletRequest request, Object handler) { return 0; } }
-
spring配置文件:
- 配置解决静态资源拦截问题
- 自定义控制器
- 视图解析器:需要处理逻辑视图名
xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 解决静态资源无法访问问题 --> <mvc:default-servlet-handler /> <!-- ================================= --> <!-- 自定义适配器:向容器中注入自定义适配器 --> <!-- 该适配器实现了HandlerAdapter接口:判断自定义控制类型 --> <bean class="com.briup.adapter.MyControllerAdapter"></bean> <!-- ================================= --> <!-- 配置controller控制器 --> <bean id="/adapter" class="com.briup.adapter.MyControllerImpl"></bean> <!-- ================================= --> <!-- 配置ViewResolver视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!-- 添加逻辑视图名的前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 添加逻辑视图名的后缀 --> <property name=
-