什么是mvc
M:model 模型层 javabean service或dao 实体类
V:view 视图层 html 或jsp 页面
C:controller 控制层 接受请求或者响应浏览器
工作流程:视图层发送请求到服务器,在服务器中请求被controller接收,调用model层处理请求,处理完毕返回给controller,在根据请求处理结果找到view试图,渲染结果给浏览器
什么是springmvc
spring的一个后续产品,是spring的一个子项目 前端控制器dispatcherservlet重点,对请求和响应进行统一处理
RequestMapping注解作用 value 属性必须设置
@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。
@RequestMapping
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">
<!--配置springmvc的前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--
url-pattern 中 / 匹配所有的请求(不包括.jsp) /*匹配所有请求包括(.jsp)
-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
spring-mvc.xml 配置
<?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: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/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.spring.controller"></context:component-scan>
<!-- 配置thymeleaf试图解析器-->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"></property>
<property name="characterEncoding" value="utf-8"></property>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!-- 试图前缀-->
<property name="prefix" value="/WEB-INF/templates/"></property>
<!-- 试图后缀-->
<property name="suffix" value=".html"></property>
<property name="templateMode" value="HTML5"></property>
<property name="characterEncoding" value="utf-8"></property>
</bean>
</property>
</bean>
</property>
</bean>
</beans>
目录如下:
inteceptors 拦截器
public class FirstInterceptors implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("controller执行前拦截器");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("在处理过程中进行拦截");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("执行后,返回前执行....");
}
}
<mvc:interceptors>
<!-- <bean class="com.demo.interceptors.FirstInterceptors"></bean>-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/"/>
<bean class="com.demo.interceptors.FirstInterceptors"></bean>
</mvc:interceptor>
</mvc:interceptors>
DispatcherServlet 工作流程 DispatcherServlet是一个servlet a>processRequest b>doService() c>doDispatch() d>processDispatcherResult()
初始化 onRefresh
protected void initStrategies(ApplicationContext context) {
this.initMultipartResolver(context);
this.initLocaleResolver(context);
this.initThemeResolver(context);
this.initHandlerMappings(context);
this.initHandlerAdapters(context);
this.initHandlerExceptionResolvers(context);
this.initRequestToViewNameTranslator(context);
this.initViewResolvers(context);
this.initFlashMapManager(context);
}
前端控制器dispatcherServlet捕获
处理器映射器handleMapping (注意拦截器preHandle)
处理器 handle
处理器执行器 handleAdapter --> ModelAndView (注意拦截器postHandle)
试图解析器 ViewResolver (注意拦截器afterHandle) 试图 View
Post 方式 @RequestBody 转换实体类
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
@ResponseBody