SpringMVC
SpringMVC是基于原生Servlet。作为表述层的首选方案,代替web开发里的servlet,通过功能强大的前端控制器DispatcherServlet,对请求和响应统一处理,SpringMVC 框架是以请求为驱动,围绕 Servlet 设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是 DispatcherServlet,它是一个 Servlet,顶层是实现的Servlet接口。
1.SpringMVC配置文件web.xml(要想通过servlet处理请求,必须在web.xml先注册DispatcherServlet)需要在 web.xml 中配置 DispatcherServlet 。并且需要配置 Spring 监听器ContextLoaderListener
Web.XML默认配置方式
<?xml version="1.0" encoding="UTF-8"?>
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
org.springframework.web.servlet.DispatcherServlet
SpringMVC
/
Web.xml扩展配置方式(常用)
<?xml version="1.0" encoding="UTF-8"?>
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
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
SpringMVC
/
2.创建请求控制器
由于前端控制器对浏览器发送请求进行统一处理,但是具体请求肯定需要不同的处理,因此创建处理具体请求的类即为请求控制器
在请求控制器中,每一个处理请求的方法称为控制器方法,,因为SpringMVC的控制器由一个POJO类(普通java类),因此需要通过@Controller注解将其标识为一个控制层组件,交由Spring的IOC容器管理,这样SpringMVC才可以识别控制器的存在
(WEB-INF文件下的页面不可以通过浏览器直接访问,只可以通过转发)
3关于RequestMapping
3.1RequestMapping的value属性,value可以有多个,符合其中一个就可以
3.2RequestMapping的method属性,method参数也可以是多个,只要符合一个就可以
3.3RequestMapping的派生注解,这种方式就不用写method参数,只要写value就可以
3.4RequestMapping的params属性
3.5RequestMapping的headers属性
请求头信息
4.SpringMVC支持ant风格的路径(请求地址上的,且?和/不可以代替一个字符)
5.SpringMVC关于支持路径中的占位符
springmvc路径中的占位符常用restful风格,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapp注解的value属性中通过占位符{xxx}表述传输数据,在通过@PathVariable注解,将占位符表示的数据赋值给控制器方法的形参
直接在请求的后面加用/参数/参数即可
如
在控制器里用@RequestMapp(“/testRest/{id}/{username}”),这里id就对应请求里1,username对应admin
,会把占位符id的值赋值给控制器方法的id
6.SpringMVC获取请求参数
6.1通过ServletAPI获得请求参数 (建议不用)
6.2通过控制器方法的形参获取请求参数
只要保证控制器方法中的形参名与请求参数名一致,就可以自动赋值否则为null
当遇到多个同名请求参数
6.2.1@RequestParam处理请求参数与控制器方法的形参映射关系,
他的作用是当请求参数与控制方法不是同一个名字时,所定义的映射关系
@RequestParam的required意思是,是否必须传输这个参数,defaultValue是默认值(当value指定的请求参数没有传输或传输为空时,使用默认值为形参赋值)
6.2.2@RequestHeader注解
@RequestHeader是将请求头部信息和控制器方法的形参创建映射关系,用于获取请求头信息
6.2.3@CookieValue
@CookieValue是将cookie信息与控制器方法形参创建映射
7.通过POJO获取请求参数
可以在控制器方法中设置一个实体类类型的形参,若浏览器传输的请求参数的参数名与实体类的属性名一致,那么请求参数就会对此属性赋值
创建实体类的变量、get set方法和toString()方法、无参构造、有参构造
8.乱码问题的解决
在web.xml里在注册DispatcherServlet前用filter过滤器来设置编码
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceResponseEncoding
true
CharacterEncodingFilter
/*
9.域对象共享数据
9.1使用servletAPI向request域对象共享数据
9.2使用ModelAndView向request域对象共享数据(建议使用)
9.3使用Model向request域对象共享数据
9.4使用map向request域对象共享数据
9.5使用ModelMap向request域对象共享数据
9.6向session域对象共享数据
访问session数据用
9.7向application域对象共享数据
访问application域对象的数据用
10.SpringMVC视图
springmvc视图种类有很多种,默认有转发视图(InternalResourceView)、重定视图(RedirectView)
首先当控制器方法中设置的视图名称没有任何前缀,此时视图名称会被SpringMVC配置文件中的视图解析器解析,视图名称拼接视图前缀、视图后缀所得到最终路径,会通过转发实现跳转。
但是当控制器方法所设置的视图名称以forward:为前缀创建InternalResourceVier视图
当控制器方法所设置的视图名称以redirect:为前缀创建RedirectViewVier视图