1. Springmvc原理
1.1. 什么是springmvc
SpringMVC是一个Spring框架内置的对MVC模式的实现,就spring的一个子模块
1.2. 什么是mvc
Model - view-controller(模型-视图-控制器),实现页面与业务代码分离
|
1.3. mvc的作用
SpringMVC就是MVC这种思想一个实现.所以作用就是实现页面代码和后台代码的分离.
1.4. Springmvc的配置流程
|
1.5. Springmvc的体系结构
|
2. 入门案例
2.1. 导入jar包
|
2.2. 配置核心控制器
<!-- 配置核心控制器 servlet加载的时候会默认会去WEB-INFO下找spring的配置文件 默认的文件名为:<servlet名字>-servlet.xml --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 修改spring配置文件的路径 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-mvc.xml</param-value> </init-param> <!-- 配置tomcat启动时加载该servlet--> <load-on-startup>1</load-on-startup> </servlet> <!-- 配置路径映射 --> <servlet-mapping> <servlet-name>spring</servlet-name> <!-- 映射的路径 *.mvc 拦截 .mvc结尾的请求 / 所有请求全部由springmvc解析 (resful风格) /* 如果配置了/* 返回jsp也由springmvc进行解析(不使用) --> <url-pattern>*.mvc</url-pattern> </servlet-mapping>
|
配置请求路径拦截的注意事项:
可以配/,此工程所有请求全部由springmvc解析
可以配置*.mvc或者*.do,所有请求的url扩展名为*.mvc或者*.do由springmvc解析
不可配置/* ,如果配置了/* 返回jsp也由springmvc进行解析了。
配置了
<load-on-startup>1</load-on-startup>
spring对象容器随项目启动
2.3. 配置处理器映射器和处理器控制器
<!-- 配置处理器映射器 (HandlerMapping) BeanNameUrlHandlerMapping 根据bean的name属性去匹配对应的处理类 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 配置处理器适配器(HandlerAdapter) 处理类是什么样的规则--> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
|
2.4. 编写处理类
/** * ModelAndView 模型与视图 */ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("第一个springmvc的程序。。。。"); /* //请求转发 request.setAttribute("username", "小明"); request.getRequestDispatcher("/hellospringmvc.jsp").forward(request, response);*/ ModelAndView modelAndView = new ModelAndView(); //设置模型,等同于request.setAttribute modelAndView.addObject("username", "春哥"); //设置响应的视图 modelAndView.setViewName("hellospringmvc.jsp"); returnmodelAndView; } |
在配置文件中配置
<!-- spring管理TestController name为请求的路径 --> <beanid="testController"name="/hellospringmvc.mvc" class="com.ys.controller.TestController"></bean> |
2.5. 编写测试代码
<%@ 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>springmvc测试</title> </head> <body> <a href="${pageContext.request.contextPath}/hellospringmvc.mvc">测试springmvc</a> </body> </html> |
3. Springmvc核心介绍
3.1. DispathcerServlet核心控制器
DispathcerServlet作为springmvc的中央调度器存在,DispatcherServlet创建时会默认从DispatcherServlet.properties文件加载springmvc所用的各各组件,如果在applicationContext.xml中配置了组件则以applicationContext.xml中配置的为准,DispatcherServlet的存在降低了springmvc各各组件之间的耦合度。
3.2. HandlerMapping处理器映射器
HandlerMapping 负责根据request请求找到对应的Handler处理器及Interceptor拦截器,
将它们封装在HandlerExecutionChain对象中给前端控制器返回。
3.2.1. BeanNameUrlHandlerMapping
BeanNameUrl处理器映射器,根据请求的url与spring容器中定义的bean的name进行匹配,从而从spring容器中找到bean实例
3.2.2. SimpleUrlHandlerMapping
simpleUrlHandlerMapping是BeanNameUrlHandlerMapping的增强版本,它可以将url和处理器bean的id进行统一映射配置。
3.2.3. RequestMappingHandlerMapping
注解式处理器映射器,对类中标记@ResquestMapping的方法进行映射,根据ResquestMapping定义的url匹配ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装url对应的方法Method
注解描述:
@RequestMapping:定义请求url到处理器功能方法的映射
3.3. HandlerAdapter处理器适配器
HandlerAdapter会根据适配器接口对后端控制器进行包装(适配),包装后即可对处理器进行执行,通过扩展处理器适配器可以执行多种类型的处理器,这里使用了适配器设计模式。
3.3.1. SimpleControllerHandlerAdapter
SimpleControllerHandlerAdapter简单控制器处理器适配器,所有实现了org.springframework.web.servlet.mvc.Controller 接口的Bean通过此适配器进行适配、执行。
3.3.2. HttpRequestHandlerAdapter
HttpRequestHandlerAdapter,http请求处理器适配器,所有实现了org.springframework.web.HttpRequestHandler 接口的Bean通过此适配器进行适配、执行。
3.3.3. RequestMappingHandlerAdapter
注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
3.4. ViewResolver视图解析器
InternalResourceViewResolver:支持JSP视图解析viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar 包;prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:前缀+逻辑视图名+后缀,逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为hello,则最终返回的jsp视图地址 “WEB-INF/jsp/hello.jsp”
<!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 响应的路径为前缀+viewName+后缀 --> <!-- 前缀 --> <property name="prefix" value="/"></property> <!-- 后缀 --> <property name="suffix" value=".jsp"></property> </bean> |
4. 注解开发springmvc
配置注解处理器映射器和处理器适配器
<!-- 配置包扫描 --> <context:component-scan base-package="com.ys.controller"></context:component-scan>
<!-- 配置注解的处理器映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"< |