通过上一篇springmvc的原理学习后。
不同的处理器适配器(HandlerAdapter)执行实现不同规则接口的处理器(Handler),所以开发Handler对应于HandlerAtapter
1. SimpleControllerHandlerAdapter(处理器适配器)执行实现Controller接口处理器(Handler)
DemoController 实现
public class DemoController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("我是dispatch1下handler");
// 调用service层处理数据,为简单demo,这里使用静态数据
List list = new ArrayList();
list.add(new User((long) 1,"zhangsan"));
list.add(new User((long) 2,"lisi"));
//创建方法返回对象
ModelAndView modelview = new ModelAndView();
//查看ModelAndView源码发现一个对象含有modelMap,view,HttpStatus,cleared属性
// 将数据存储到modelMap ,该方法相当于request.setAttribute();
modelview.addObject("list", list);
//指定视图
modelview.setViewName("/WEB-INF/jsp/demo/demo.jsp");
return modelview;
}
}
2. HttpRequestHandlerAdapter(处理器适配器)执行实现HttpRequestHandler接口的处理器(Handler)
DemoHttpRequestHandler 实现
public class DemoHttpRequestHandler implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("我是dispatch1下httprequesthandler");
// 调用service层处理数据,为简单demo,这里使用静态数据
List list = new ArrayList();
list.add(new User((long) 1,"zhangsan"));
list.add(new User((long) 2,"lisi"));
//存放数据
request.setAttribute("list", list);
//跳转页面
request.getRequestDispatcher("/WEB-INF/jsp/demo/demo.jsp").forward(request, response);
}
}
3 . 前端控制器DispatchServlet的注册(可以同时存在多个DispatcheServlet)
web.xml
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
springmvc
*.do
springmvc1
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc1.xml
2
springmvc1
*.action
index.jsp
4. 其中一个DispatchServlet对应springmvc.xml
springmvc.xml
demoContorller
httpRequestHandler
5. 未配置各大组件时时,springmvc会默认启动org.springframework.web/servlet.DispatcherServlet.properties下所有配置
DispatcherServlet.properties
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager