目的:就是为了了解下面的原理!spring提供好的Controller
为什么实现了Controller就能够返回视图???
public interface Controller {
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
public class SimpleControllerHandlerAdapter implements HandlerAdapter {
@Override
public boolean supports(Object handler) {
return (handler instanceof Controller);
}
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return ((Controller) handler).handleRequest(request, response);
}
@Override
public long getLastModified(HttpServletRequest request, Object handler) {
if (handler instanceof LastModified) {
return ((LastModified) handler).getLastModified(request);
}
return -1L;
}
}
HelloController.java
public class HelloController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
return mv;
}
}
/
新建接口MyController.java,,模拟spring提供好的Controller
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface MyController {
//自己写的service方法
String service(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
Test2Controller.java实现MyController
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.briup.web.adapter.MyController;
public class Test2Controller implements MyController{
//重写自己写的service方法
@Override
public String service(HttpServletRequest request, HttpServletResponse response) throws Exception {
return "test";//跳转到test.jsp页面
}
}
在spring-web-mvc.xml中配置
<bean name="/test2" class="com.briup.web.controller.Test2Controller"></bean>
需要相应的适配器
将我们自己写的Test2Controller implements MyController转化成spring能够认识的Controller
自定义适配器
MyAdapter.java实现spring提供的接口HandlerAdapter,表示是一个适配器的功能
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.ModelAndView;
public class MyAdapter implements HandlerAdapter{
//判断这个适配器是否支持当前要调用的控制器
@Override
public boolean supports(Object handler) {
return (handler instanceof MyController);
}
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String viewName = ((MyController)handler).service(request, response);
ModelAndView mv = new ModelAndView(viewName);
return mv;//返回ModelAndView
}
@Override
public long getLastModified(HttpServletRequest request, Object handler) {
return 0;
}
}
配置自定义适配器
<bean class="com.briup.web.adapter.MyAdapter"></bean>
访问 /test2
自定义适配器只是在原来的基础上进行扩展,而原来的适配器规则正常有效使用