学习SpringMVC这一篇就够了

目录

1 什么是 SpringMVC

2 SpringMVC 中重要的组件

3 Spring MVC 工作流程

4  SpringMVC 的基本使用

4.1配置前端控制器

  4.2 配置controller

5 SpringMVC 基于注解的使用方式

5.1 @Controller

5.2 @RequestMapping

5.3 配置web.xml  和上面一样,略----------

5.4 配置注解扫描和注解驱动

6 获取请求参数

6.1 @RequestParam 注解

6.11 注入集合参数

6.12  注入对象参数

6.13 注入关联对象

6.14  向集合中注入对象

7 关于乱码问题

7.1 字符编码过滤器

7.2 Get 请求含有中文乱码解决方案

7.3 Post 请求含有中文乱码解决方案 

8 指定处理请求类型

8.1 @RequestMapping

 8.2 @GetMapping

8.3 @PostMapping

9 SpringMVC 处理响应

9.1 配置视图解析器

9.2 SpringMVC 作用域传值

9.21  Request 作用域传值 

9.22 Session 作用域传值

9.23 Application 作用域传值

10 SpringMVC 的响应方式

10.1 请求转发

10.12 使用 Servlet API

10.13 使用 Forward 关键字实现请求转发跳转

10.14 使用视图解析器实现请求转发

10.2 重定向

11 静态资源映射

11.1 通过 DefaultServlet 处理静态资源

11.2 通过 SpringMVC 的静态资源映射器处理静态资源

11.3 通过处理静态资源

12 SpringMVC 常用注解


1 什么是 SpringMVC

SpringMVC 是一个基于 MVC 模式的 Web 框架,是 Spring 框架的一个模块 。它以 SpringIOC容器为基础,并利用容器的特性来简化它的配置,所以 SpringMVC Spring 可直接整合使,SpringMVC MVC 流程进行了封装,屏蔽掉很多底层代码,让开发者可以更加轻松快
捷的完成基于 MVC 模式的 Web 开发。

2 SpringMVC 中重要的组件

DispatcherServlet :前端控制器,接受所有请求。
HandlerMapping :处理器映射器,根据配置的映射规则,找到对应的处理器。
HandlerAdapter :处理器适配器,执行处理器中处理请求的方法。
ViewResolver :视图解析器,定位视图。

3 Spring MVC 工作流程

Spring MVC 的工作流程如下:
 客户端请求提交到 DispatcherServlet
 由 DispatcherServlet 控制器通过 HandlerMapping ,找到处理请求的 Controller
 DispatcherServlet 将请求提交到 Controller
 Controller 调用业务逻辑处理后返回 ModelAndView。
 DispatcherServlet 通过 ViewResolver 视图解析器,找到 ModelAndView 指定的视图。

 视图负责渲染并将结果显示到客户端。

4  SpringMVC 的基本使用

4.1配置前端控制器

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-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--如果未指定springMVC配置文件的路径以及名称,那么前端控制器默认
        会去WEB/INF目录中查找一个名称为'springmvc'-servlet.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

  4.2 配置controller

springmvc.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置Controller-->
    <bean id="/demo" class="com.web.controller.DemoController"/>
</beans>

SpringMVC 基于注解的使用方式

SpringMVC 的基本使用中我们是以传统方式创建的控制器,它需要实现 Controller 接 口。传统风格的控制器不仅需要在配置文件中配置映射,而且只能编写一个处理方法,不够灵活。
使用基于注解的控制器具有以下两个优点:
 在基于注解的控制器类中可以编写多个处理方法,进而可以处理多个请求,这就允许将
相关的操作编写在同一个控制器类中,从而减少控制器类的数量,方便以后的维护。
 基于注解的控制器不需要在配置文件中部署映射,仅需要使用 @RequestMapping 注解
就可以将一个 URI 绑定到类或方法上。

5.1 @Controller

@Controller 注解用于指定 Bean 对象为控制器。

5.2 @RequestMapping

@RequestMapping 用于将一个 URI 绑定到类上或类的方法中。

5.3 配置web.xml  和上面一样,略----------

5.4 配置注解扫描和注解驱动

springmvc.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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <context:component-scan base-package="com.web.controller"/>
    <!-- 配置注解驱动-->
    <mvc:annotation-driven/>
</beans>

注意:配置注解驱动的话需要添加mvc命名空间

xmlns: mvc ="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
在基于注解方式开发控制器时,需要添加 <mvc:annotation-driven/> 标签,它是启用 MVC
注解的钥匙。如果没有使用这个标签,而仅仅是使用 <context:component-scan/> 标签扫描并
注册了相关的控制器,那么仅是 @Controller @RequestMapping 基本功能的注解可以使用除
此以外的相关的注解并不能使用。 <mvc:annotation-driven/>的作用是提供扩展功能的。
它的处理类 AnnotationDrivenBeanDefinitionParser 会注册很多基于注解开发时所用到的 Bean 对 象 到 容 器 中 。 其 中 包 含 RequestMappingHandlerMapping 、 RequestMappingHandlerAdapter 与 ExceptionHandlerExceptionResolver 三个 bean

获取请求参数

Servlet 中我们通过 request.getParameter(name)方法获取请求参数。该方式存在
两个问题:
 请求参数较多时会出现代码冗余的显现。
 与容器紧耦合。 在 SpringMVC 中可以使用 HttpServletRequest 对象获取请求数据,同时还提供了参数注
入的方式用于获取请求数据。
SpringMVC 参数注入的优点:
 简化参数接收形式(不需要调用任何方法。需要什么参数, 就在控制器方法中提供
什么参数)。
 参数类型不需要自己转换了。如果类型不符会抛出 400 异常。
 可将参数自动封装为对象。
 如果没有该参数对应的数据,可为该参数指定默认值。

6.1 @RequestParam 注解

@RequestParam :将请求参数绑定到控制器的方法参数上。
value :参数名
required :是否包含该参数,默认为 true ,表示该请求路径中必须包含该参数,如果不
包含就报错。
defaultValue :默认参数值,如果设置了该值, required=true 将失效,自动为 false, 如果没有传该参数,就使用默认值
这个注解对大家来说都是小儿科
@RequestParam
/**
*
@RequestParam 使用
*
@param
username
*
@param
userage
*
@return
*/
@RequestMapping ( "/addUsers2" )
public ModelAndView addUsers2( @RequestParam (value = "name" ,required
= true ,defaultValue = "oldlu" ) String username, @RequestParam ( "age" )
int userage){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName( "/index.jsp" );
modelAndView.addObject( "name" ,username);
modelAndView.addObject( "age" ,userage);
return modelAndView;
}

6.11 注入集合参数

SpringMVC 请求参数注入中,如果有多请求参数的 name 相同,那么可以使用 String[] 或 List 集合来接收请求参数。如果使用的 List 类型需要在该参数前添加 @RequestParam 注 解,String[] 则不需要

6.12  注入对象参数

SpringMVC 的请求参数注入中,可以使用注入 POJO 方式来接收请求参数。要求:请 求参数的 name 必须与 POJO 的属性名相同。

6.13 注入关联对象

SpringMVC 可以根据对象的关联关系实现请求参数的注入。

6.14  向集合中注入对象

SpringMVC 中可以向一个集合属性中注入对象。

7 关于乱码问题

7.1 字符编码过滤器

在请求参数中如果含有中文,会出现乱码现象。

7.2 Get 请求含有中文乱码解决方案

修改 Tomcat server.xml 配置文件

7.3 Post 请求含有中文乱码解决方案 

修改web.xml

<!--Spring 中提供的字符编码过滤器 -->
< filter >
< filter-name >encFilter</ 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 >
</ filter >
< filter-mapping >
< filter-name >encFilter</ filter-name >
< url-pattern >/*</ url-pattern >
</ filter-mapping >

指定处理请求类型

8.1 @RequestMapping

@RequestMapping 注解中如果并未指定处理请求类型,那么含有该注解的方法既可以 处理 GET 类型请求也可以处理 POST 类型的请求。如果需要指定只能处理某种类型的请求,可以通过 method 属性指定请求类型。

 8.2 @GetMapping

@GetMapping 注解表示只能处理 Get 类型请求。

8.3 @PostMapping

@PostMapping 注解表示只能处理 Post 类型请求

SpringMVC 处理响应

9.1 配置视图解析器

SpringMVC 中提供了 13 个视图解析器,用于支持不同的视图技术。视图解析器最大
的特点是可以将控制器中处理请求的逻辑和视图中渲染实现解耦。
InternalResourceViewResolver SpringMVC 中默认的视图解析器,用来解析 JSP 视图。
能将视图名映射为 JSP 文件。
<!-- 配置视图解析器 -->
< bean id ="viewResolver"
class ="org.springframework.web.servlet.view.InternalResourceViewR
esolver" >
< property
name ="prefix"
value ="/WEB-INF/jsp/" />
< property
name ="suffix"
value =".jsp" />
</ bean >

9.2 SpringMVC 作用域传值

作用域:“数据共享的范围”,也就是说数据能够在多大的范围内有效。

9.21  Request 作用域传值 

1 使用原生的 HttpServletRequest
@RequestMapping ( "/login" )
public String showLogin(HttpServletRequest request){
request.setAttribute( "msg" , "Hello Oldlu" );
return "login" ;
}
使用 Map 集合
SpringMVC 会为 Map 接口注入 BindingAwareModelMap 对象。该对象是由 Spring 提供的
一个实现了 Map 接口的对象。 SpringMVC 会把该对象中的数据放入到 HttpServletRequest
象中,其目的是为了解除控制器与容器的耦合
@RequestMapping ( "/login" )
public String showLogin(HttpServletRequest
request,
Map<String,String> map){
map.put( "msg" , "Hello Bjsxt" );
return "login" ;
}
使用 Model 接口
SpringMVC 中提供了一个 Model 类型的接口,该接口定义了传递数据的基本行为。
如果 在处 理请求 的方 法中指 定了 Model 类型 的参 数,那 么 SpringMVC 会注 入一个
BindingAwareModelMap 对象,并通过该对象把数据放入到 HttpServletRequest 对象中。

9.22 Session 作用域传值

Session 作用域表示在当前会话中有效。在 SpringMVC 中对于 Session 作用域传值,只能 使用 HttpSession 对象来实现。对于 HttpSession 对象的获取方式有两种:
 通过参数注入方式获取 HttpSession 对象。
 通过注入 HttpServletRequest 对象,并通过该对象获取 HttpSession
@RequestMapping ( "/login" )
public String showLogin(HttpServletRequest request,
Map<String,String> map, Model model,HttpSession session){
//HttpSession session = request.getSession();
session.setAttribute( "msg" , "Hello Bjsxt" );
return "login" ;
}

9.23 Application 作用域传值

Application 作用域表示在整个应用范围都有效。在 SpringMVC 中对于 Application 作用域 传值,只能使用 ServletContext 对象来实现。但是对于该对象的获取方式不能直接向方法中 注入。需要通过 HttpServletRequest 或者 HttpSession 对象获取
@RequestMapping ( "/login" )
public String showLogin(HttpServletRequest request,
Map<String,String> map, Model model,HttpSession session){
//ServletContext servletContext =
request.getSession().getServletContext();
ServletContext servletContext = session.getServletContext();
servletContext.setAttribute( "msg" , "Hello Bjsxt" );
return "login" ;
}

10 SpringMVC 的响应方式

10.1 请求转发

10.12 使用 Servlet API

request.getRequestDispatcher( "/WEB-INF/jsp/login.jsp" ).forward(re
quest,response);

10.13 使用 Forward 关键字实现请求转发跳转

如果使用 forward 关键字实现请求转发跳转时,是通过 SpringMVC 的 DispatcherServlet
组件来完成的。不会执行视图解析器,所以需要指定请求跳转页面的完整 URI
return "forward:/WEB-INF/jsp/login.jsp" ;

10.14 使用视图解析器实现请求转发

SpringMVC 的视图解析器中使用的是请求转发方式来实现页面跳转。可以在配置视图
解析器时指定视图的前置与后缀。
<!-- 配置视图解析器 -->
< bean id ="viewResolver"
class ="org.springframework.web.servlet.view.InternalResourceViewR esolver" >
< property name ="prefix" value ="/WEB-INF/jsp/" />
< property name ="suffix" value =".jsp" />
</ bean >

10.2 重定向

SpringMVC 需要使用 redirect 关键字实现重定向的跳转。在重定向跳转中是不经过视
图解析器的。
return "redirect:/page/login4" ;

11 静态资源映射

当在 DispatcherServlet <url-pattern> 中配置拦截 “/” 时,除了 *.jsp 不会拦截以外,其
他所有的请求都会经过前端控制器进行匹配,此时静态资源,例如 *.css *.js *.jpg……
会被前端控制器拦截,导致不能访问,出现 404 问题。

11.1 通过 DefaultServlet 处理静态资源

修改 web.xml
< servlet-mapping >
< servlet-name >default</ servlet-name >
< url-pattern >*.jpg</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name >default</ servlet-name >
< url-pattern >*.css</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name >default</ servlet-name >
< url-pattern >*.js</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name >default</ servlet-name >
< url-pattern >*.png</ url-pattern >
</ servlet-mapping >

11.2 通过 SpringMVC 的静态资源映射器处理静态资源

spring3.0.4 以后的 SpringMVC 模块提供了静态资源映射器组件。通过 mvc:resources
标签配置静态资源映射器
修改 SpringMVC 配置文件
<!-- 配置静态资源映射器 -->
<!-- mapping: 配置请求的 URL
location: 配置映射路径 -->
< mvc :resources mapping ="/img/**" location ="/img/" />
< mvc :resources mapping ="/js/**" location ="/WEB-INF/js/" />

11.3 通过<mvc:default-servlet-handler />处理静态资源

SpringMVC 的配置文件中配置 <mvc:default-servlet-handler /> 后,会在 Spring MVC
下文中定义一个 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler
它会像一个检查员,对进入 DispatcherServlet URL 进行筛查,如果发现是静态资源的请求, 就将该请求转由 Web 应用服务器默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet 继续处理。

修改 SpringMVC 配置文件

<mvc:default-servlet-handler/>

12 SpringMVC 常用注解

1 @Controller
@Controller 用于标记在一个类上,使用它标记的类就是一个 SpringMVC Controller 对象。
2 @RequestMapping
@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,
表示类中的所有处理请求的方法都是以该地址作为父路径。
value :指定请求的实际地址;
method :指定请求的 method 类型, GET POST PUT DELETE 等;
produces: 指定返回的内容类型;
3 @GetMapping
@GetMapping 是用来指定处理 Get 请求类型的注解。表示该方法只能处理 Get 类型的
请求。
value :指定请求的实际地址;
4 @PostMapping
@PostMapping 是用来指定处理 Post 请求类型的注解。表示该方法只能处理 Post 类型请 求。
value :指定请求的实际地址;
5 @PathVariable
@PathVariable 用于将请求 URL 中的模板变量映射到功能处理方法的参数上,即取出 uri
模板中的变量作为参数。
name :指定 uri 模板中的标识名称;
6 @RequestParam
@RequestParam 用于在控制器方法中获取请求参数;
defaultValue : 表示设置默认值;
required :设置是否是必须要传入的参数,类型为 boolean
name :指定请求参数名称;
7 @RequestBody
@RequestBody 将请求中的 JSON 格式数据转换为 Java 对象;
8 @ResponseBody
@ResponseBody 将响应的对象转换为 JSON 格式数据;
9 @RequestHeader
@RequestHeader 将请求头的数据,映射到处理请求的方法参数上。
name :指定请求头 name
10 @CookieValue
@CookieValue 注解主要是将请求的 Cookie 数据,映射到处理请求的方法参数上。
name :指定 CookieName
11 @CrossOrigin
@CrossOrigin 注解用于处理跨域请求访问。

大家先看  后面的异常处理,跨域请求,整合ssm,拦截器等另外写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值