目录
1.什么是MVC
MVC就是一个分层架构模式:
2. 什么是SpringMVC框架
springMVC它是spring框架的一个分支,该springMVC框架主要完成的功能是:接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示 可以把它理解为和Servlet干的工作是一样的。
3.为什么要使用SpringMVC框架
4.如何使用SpringMVC框架
(1)创建一个maven-web工程
注意: 用原来的web.xml文件替换现在的web.xml文件
maven-web工程中的webapp下的WEB-INF下的web.xml版本(2.3版本)太低,可能会出现意料之外的错误,所以我们可以web.xml文件里面的内容全部替换成如下代码(4.0版本)
<?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">
</web-app>
(2)引入springmvc的依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
</dependencies>
(3) 注册DispatcherServlet到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">
<!--默认DispactherServlet加载的springmvc配置文件:WEB-INF/[servlet-name]-servlet.xml
能不能你指定加载的配置文件呢:可以。
-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载springmvc的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!--classpath:表示编译后的路径-->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<!--servlet映射路径
/: 表示所有的控制层路径 以及静态资源
/*: 表示全部 包含jsp网页
-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
(4) 创建我们的springmvc配置文件
<?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.wzh.controller"/>
</beans>
(5)创建一个controller类 务必加@Controller,不然不能识别该类为处理类
@Controller //该注解标记该类为处理层类----类似@WevServlet
public class HelloController {
@RequestMapping(value="/hello01") //把请求路径映射到该方法
public String hello(){
System.out.println("业务处理");
return "hello.jsp";
}
}
这里如果报500,说明没有指定加载的springMVC.xml配置文件的路径
我们的DispatcherServlet默认加载的springmvc配置文件目录为:WEB-INF/[servlet-name]-servlet.xml,除了将springmvc.xml放到这个路径下,我们也可以在web.xml中指定我们要加载的springmvc.xml配置文件。
解决办法:(1)在WEB-INF下创建DispatcherServlet.xml
(2)在web.xml中添加springmvc的配置文件
1.1.引入依赖 spring-webmvc
2.注册DispatcherServlet到web.xml文件。需要指定加载的springmvc配置文件的路径
tomcat启动时会加载servlet
3.创建springmvc的配置文件。
4.创建一个类,在类上加上@Controller 并且在方法上加上@RequestMapping注解
5.SpringMVC的运行流程
第一步:用户发送请求到前端控制器(DispatcherServlet)。
第二步:前端控制器请求 HandlerMapping 查找 Handler,可以根据 xml 配置、注解进行查找。
第三步: 处理器映射器 HandlerMapping 向前端控制器返回 Handler
第四步:前端控制器调用处理器适配器去执行 Handler
第五步:处理器适配器执行 Handler
第六步:Handler 执行完成后给适配器返回 ModelAndView
第七步:处理器适配器向前端控制器返回 ModelAndView
ModelAndView 是SpringMVC 框架的一个底层对象,包括 Model 和 View
第八步:前端控制器请求试图解析器去进行视图解析
根据逻辑视图名来解析真正的视图。
第九步:试图解析器向前端控制器返回 view
第十步:前端控制器进行视图渲染
就是将模型数据(在 ModelAndView 对象中)填充到 request 域
第十一步:前端控制器向用户响应结果
6.如何在controller接受请求的参数
之前:
request.getParamter("name")----这种接受参数的问题,麻烦。类型都是String.需要手动转型。
6.1.接受少量的参数
譬如:删除,只需要接id
只需要给定方法的参数,参数必须要求和请求的参数名称一致。
常见错误:
400:参数(类型)错误
6.2.接受多个参数
譬如: 表单提交。
封装一个实体类来接受这些参数:
发现接受的参数值乱码:---只能添加过滤器
解决办法:
(1)自己创建编码过滤器. jdk1.8一定要重写init和destory方法 1.9以后可以不写
先引入javax-servlet-api依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
package com.wzh.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @ProjectName: SpringMVC0607
* @Package: com.wzh.filter
* @ClassName: EncodingFilter
* @Author: 王振华
* @Description:
* @Date: 2022/6/7 21:00
* @Version: 1.0
*/
@WebFilter(filterName = "filter",urlPatterns = "/*")
public class EncodingFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
filterChain.doFilter(servletRequest,servletResponse);
}
public void destroy() {
}
}
(2)springmvc提供了一个编码过滤器.
html乱码:
6.3 接收的参数含有日期类型
不能把String类型转化为date类型
解决办法:
在时间类型的属性上添加一个注解:@DateTimeFormat(pattern = "yyyy-MM-dd")
//yyyy年 MM:月 dd日 24小时制 HH:mm:ss
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;//出生日期
在springmvc配置文件上开启注解驱动
<!--开启注解驱动-->
<mvc:annotation-driven/>
7.处理静态资源
什么是静态资源: 比如: css, js, img,html
无法加载图片: 原因:springmvc的前端控制器DispatcherSerlvet也把静态资源拦截器。放行静态资源
解决方案:
<!--放行静态资源:哪些资源为静态资源。css img js html-->
<mvc:default-servlet-handler/>
总结
springmvc框架----作用:自动接受参数和封装参数。等价于servlet. 它是model和view之间的一座桥梁。
如何搭建springmvc框架,
(1)spring-webmvc依赖.
(2) 注册DispatcherServlet类到web.xml容器中。
(3) springmvc配置文件
(1)controller的扫描
(2)注解的驱动.
(3)静态文件的放行。必须在开启注解驱动的基础上否则无效。
springmvc接受请求参数.
参数个数比较少: 直接在controller层方法处,写参数名称即可。
参数比较多: 封装到一个实体类上,并在方法处写实体类对象。
日期类型: @DateTimeFormat(pattern="yyyy-MM-dd"); 接受时间格式的参数
静态资源放行编码过滤器: 防止接受参数时的乱码