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"?>
<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>SpringMVC</servlet-name>
<!--servlet全类名-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

</servlet>
<!--要保证servlet与servlet-mapping的name一致-->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
<!--这里/指的是SpringMVC核心控制器所能处理的请求路径/所匹配的请求可以是/login-->
<!--.html或.js或.css的请求,不包括.jsp请求-->
</servlet-mapping>
</web-app>

 

 

 

 

     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>SpringMVC</servlet-name>
<!--servlet全类名-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- 如果不设置init-param标签,则必须在/WEB-INF/下创建xxx-servlet.xml文件,其中xxx是servlet-name中配置的名称。 -->
<init-param><!--配置SpringMvc配置文件的位置和名称-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value><!--classpath对应resources类路径-->
</init-param>
<!--将前端控制器DispatcherServlet初始化时间提前至服务器启动时-->
<load-on-startup>1</load-on-startup><!--生命周期-->

</servlet>
<!--要保证servlet与servlet-mapping的name一致-->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
<!--这里/指的是SpringMVC核心控制器所能处理的请求路径/所匹配的请求可以是/login-->
<!--.html或.js或.css的请求,不包括.jsp请求-->
</servlet-mapping>
</web-app>

 

 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过滤器来设置编码

<!--过滤器,设置请求响应编码方式-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

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

 

 

posted @ 2022-02-13 12:46  饿了快点吃  阅读(60)  评论(0)    收藏  举报