springMVC
执行流程

具体流程:
用户发送出请求被前端控制器DispatcherServlet拦截进行处理DispatcherServlet收到请求调用HandlerMapping(处理器映射器)HandlerMapping找到具体的处理器(查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServletDispatcherServlet调用HandlerAdapter(处理器适配器)HandlerAdapter经过适配调用具体的处理器(Handler/Controller)Controller执行完成返回ModelAndView对象HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServletDispatcherServlet将ModelAndView传给ViewReslover(视图解析器)ViewReslover解析ModelAndView后返回具体View(视图)给DispatcherServletDispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)DispatcherServlet响应View给用户。
组件的解释
DispatcherServlet
客户端浏览器向前端控制器(DispatcherServlet)发出请求。
DispatcherServlet接收到请求后,调用处理器映射器(HandlerMapping)。
HandlerMapping
根据请求url查找相应的处理器(Handler,也称后端控制器),返回处理器对象(Handler),并且如果有处理器拦截器(HandlerInterceptor)的话,会将处理器对象(Handler)和处理器拦截器对象(HandlerInterceptor)一并返回给DispatcherServlet。
DispatcherServlet拿到这些信息后,会调用处理器适配器(HandlerAdapter),HandlerAdapter会执行Handler,Handler执行处理DispatcherServlet发来的请求,生成ModelAndView对象返回给HandlerAdapter。
HandlerAdapter
将ModelAndView对象返回给DispatcherServlet。
DispatcherServlet在拿到ModelAndView对象之后,将ModelAndView对象发给视图解析器(ViewResolver)。
ViewResolver
将ModelAndView对象进行解析,生成View对象,将View对象返回给DispatcherServlet。
DispatcherServlet拿到View对象,对jsp页面进行渲染(将模型数据填充到视图中),将渲染后的页面呈现给用户。
搭建框架
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- <display-name>springMVC</display-name>-->
<!-- 部署 DispatcherServlet -->
<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-servlet.xml</param-value>
</init-param>
<!-- 表示容器再启动时立即加载servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 处理所有URL排除以.jsp结尾的 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
对应的springmvc-servlet.xml
其中的映射器和适配器可以用一个注解来表示:<mvc:annotation-driver>需要开启命名空间支持
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:nvc="http://www.springframework.org/schema/mvc"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!-- <context:component-scan base-package="com.smu.controller" />-->
<!-- 处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- 处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 视图解析器 以后可能会用到的模板引擎Thymeleaf Freemarker-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀-->
<property name="suffix" value=".jsp"/> </bean>
<!-- 根据自己的类来写 -->
<bean id="/hello" class="com.smu.controller.HelloController"/>
<!-- 拦截器配置-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.smu.config.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!-- 静态资源放行 -->
<mvc:resource mapping="/static**" location="/static/"/>
<!-- 文件上传支持-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 请求表单的格式,需要和jsp的pageEncoding一样,默认为ISO-8859-1-->
<property name="defaultEncoding" value="utf-8"/>
<!-- 上传文件的大小上限,单位为字节10485760=10m-->
<property name="maxUploadSize" value="10485760"/>
<property name="maxInMemorySize" value="40960"/>
</bean>
</beans>
注解
@RequestParam
接收前端参数,且默认不能为空,可以配置是否必须要这个参数,以及如果没有传输的时候给定默认值等等
@RequesBody
用于Post请求的请求体的参数获取,Get请求不可以使用此注解,因为get请求的参数在路径里面
@ResponseBody
标注在方法上表示返回的是json字符串而不是视图名称,可以和@controller组合成@RestController
.

浙公网安备 33010602011771号