springmvc学习笔记1_DispatcherServlet_HandlerMapping_HandlerAdapter_ViewResolver

来源:互联网 发布:手机淘宝店面 编辑:程序博客网 时间:2024/05/31 06:22


参考源:

http://java.itcast.cn/news/20150512/13543033211.shtml 这是传智播客的燕青老师讲的 讲的很好 强烈推荐


springmvc 的 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.AcceptHeaderLocaleResolverorg.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolverorg.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMappingorg.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterorg.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolverorg.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslatororg.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolverorg.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

相关的类图  用pd画了下  方便理解





SpringMvc流程   * 1、前端控制器--DispatcherServlet的doDispatch方法 * 2、获取处理器映射器--mappedHandler = getHandler(processedRequest, false); * 3、获取处理器适配器--HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); * 4、处理器处理 返回ModelAndView mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); * 5、使用视图解析器进行渲染 processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException); * render(mv, request, response); *   view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request); * view.render(mv.getModelInternal(), request, response); * renderMergedOutputModel(mergedModel, request, response); * exposeModelAsRequestAttributes(model, requestToExpose);


本文使用两种xml方式配置处理器映射器和处理器适配器 一种注解方式配置处理器映射器和处理器适配器


1、web.xml中配置springmvc的前端控制器

<!-- springmvc的前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping>


2、springmvc.xml 配置文件

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "><!-- 配置处理器适配器 SimpleControllerHandlerAdapter-处理器需要实现Controller接口 --><beanclass="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /><!-- HttpRequestHandlerAdapter-处理器需要实现HttpRequestHandler接口 --><bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean><!-- 配置处理器映射器 BeanNameUrlHandlerMapping-使用bean的名字进行映射 --><beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><!-- SimpleUrlHandlerMapping-使用bean的id和路径进行映射 --><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/test1.action">testController1</prop></props></property></bean><!-- 视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver" ><!-- 配置视图解析器的前后缀 --><!-- <property name="prefix" value="/WEB-INF/"></property><property name="suffix" value=".jsp"></property> --></bean><!-- 配置处理器 --><bean name="/test.action" class="com.undergrowth.controller.TestController1"></bean><bean id="testController1" class="com.undergrowth.controller.TestHttpRequestController"></bean><!-- 使用注解方式映射和适配处理器 --><mvc:annotation-driven></mvc:annotation-driven><context:component-scan base-package="com.undergrowth.controller"></context:component-scan></beans>


3、三种处理器实现

TestController1--针对BeanNameUrlHandlerMapping 和 SimpleControllerHandlerAdapter

TestHttpRequestController--针对SimpleUrlHandlerMapping 和 HttpRequestHandlerAdapter

TestAnnotationController--针对@Controller 和 @RequestMapping 注解 和注解解析器  <mvc:annotation-driven>

代码分别如下

package com.undergrowth.controller;import java.util.ArrayList;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerAdapter;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;import org.springframework.web.servlet.view.InternalResourceView;/** * 自定义处理器 * 实现Controller接口 * @author u1 *  * SpringMvc流程   * 1、前端控制器--DispatcherServlet的doDispatch方法 * 2、获取处理器映射器--mappedHandler = getHandler(processedRequest, false); * 3、获取处理器适配器--HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); * 4、处理器处理 返回ModelAndView mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); * 5、使用视图解析器进行渲染 processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException); * render(mv, request, response); *   view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request); * view.render(mv.getModelInternal(), request, response); * renderMergedOutputModel(mergedModel, request, response); * exposeModelAsRequestAttributes(model, requestToExpose); */public class TestController1 implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {// TODO Auto-generated method stub//创建数据List<String> list=new ArrayList<>();list.add("qq");list.add("ww");ModelAndView modelAndView=new ModelAndView();modelAndView.addObject("list", list);modelAndView.setViewName("/WEB-INF/test/test.jsp");return modelAndView;}}



package com.undergrowth.controller;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.HttpRequestHandler;/** * 实现HttpRequestHandler接口 * @author u1 * */public class TestHttpRequestController implements HttpRequestHandler {@Overridepublic void handleRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stub// 创建数据List<String> list = new ArrayList<>();list.add("qq");list.add("ww");list.add("ee");request.setAttribute("list", list);request.getRequestDispatcher("/WEB-INF/test/test.jsp").forward(request, response);}}


package com.undergrowth.controller;import java.util.ArrayList;import java.util.List;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;/** * 测试注解处理器映射器与处理器适配器 * @author u1 * */@Controllerpublic class TestAnnotationController {@RequestMapping("/test3.action")public ModelAndView test(){List<String> list=new ArrayList<>();list.add("qq");list.add("ww");list.add("ee");list.add("rr");ModelAndView modelAndView=new ModelAndView();modelAndView.addObject("list", list);modelAndView.setViewName("/WEB-INF/test/test.jsp");return modelAndView;}}



测试jsp  使用jstl

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>${list }</body></html>


还有一些EL表达式的整理




<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>${list }</br><h1>EL11个隐含对象</h1><ul><li>${pageContext}</li><li>${initParam.list}</li><li>${param.list}</li><li>${paramValues.list}</li><li>${header }</li><li>${headerValues }</li><li>${cookie }</li><li>${pageScope.list }</li><li>${requestScope.list }</li><li>${sessionScope }</li><li>${applicationScope.list }</li></ul><h1>EL运算符</h1><ul><li>${5+5 }${4-5 }</li><li>${5*5 }${0/5 }</li><li>${5%5 }</li><li>${5==5 }</li><li>${5<=5 }</li><li>${5!=5 }</li><li>${5>=5 }</li><li>${5<5 }</li><li>${(5>5) and (5<=5) }</li><li>${(5>5) or (5<=5) }</li><li>${not (5<=5) }</li><li>${empty (5<=5) }</li><li>${empty null }</li><li>${ 4>5?true:false}</li></ul><h1>.(点运算符用于访问对象的特性,当访问对象时,属性需要getter)和[]运算符(用于检索数组和集合的元素)</h1><ul><li>${requestScope.list }</li><li>${requestScope["list"] }</li></ul><h1>查看pageContext的隐含对象</h1><ul><li>${pageContext.out }</li><li>${pageContext.request }</li><li>${pageContext.response }</li><li>${pageContext.exception }</li><li>${pageContext.page }</li><li>${pageContext.session }</li><li>${pageContext.servletContext }</li><li>${pageContext.servletConfig }</li></ul></body></html>


记录学习的脚步




0 0
原创粉丝点击