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视图