栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring MVC 框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring MVC 框架

一、SpringMVC简介 1、什么是MVC

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分
-M:    Model,模型层,指工程中的JavaBean,作用是处理数据
JavaBean分为两类:
        一类称为实体类Bean:专门存储业务数据的,如Student-User等
        一类称为业务处理Bean:指Service或Dao对象,专门用于处理业务逻辑和数据访问。

-V:    View,视图层,指工程中的htm或isp等页面,作用是与用户进行交互,展示数据

-C:    Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器
MVC的工作流程:
用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器

2、什么是SpringMVC

SpringMVC是Spring的一个后续产品,是Springl的一个子项目
SpringMVC是Spring为表述层开发提供的一整套完备的解决方案。在表述层框架历经Strust、WebWork、
Strust2等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC作为Java EE项目表述层开发的首选方案。

3、SpringMVC的特点

- Spring家族原生产品,与IOC容器等其出设施无隆对接
- 基于原生的Servlet,通过了功强大的前端控制器DispatcherServlet,对请求和响应进行统一处理
- 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
- 代码清新简洁,大悟度提升开发效率
- 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
- 性能卓若,尤其适合现代大型、超大型互联网项目要求
 

4、pom.xml中添加spring-webmvc依赖项

org.springframework
spring-webmvc
5.3.14


提示:如果后续运行时提示不可识别Servlet相关类,则补充添加以下依赖项:

javax.servlet
javax.servlet-api
3.1.0
provided
 二、@RequestMapping注解 1、@RequestMapping注解的功能

从注解名称上我们可以看到,@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。
SpringMVC接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。

2、@RequestMapping注解的位置

@RequestMapping标识一个类:设置映射请求的请求路径的初始信息

http://localhost:8080/springmvc01_war_exploded/login.do
@RequestMapping("/login.do")
@ResponseBody
public String login(){
return "'UserController.login()";
}


@RequestMapping标识一个方法:设置映射请求请求路径的具体信息

@Controller
@RequestMapping("/user")
public class UserController{}
-在类上添加了此注解并配置路径后,每个方法实际映射到的请求路径都是
“类上的配置的路径+方法上的配置的路径”,例如/user/login.do
通常,在开发实践中,推荐为每一个控制器类都配置此注解,以指定某个URL前缀

3、@RequestMapping配置:
-method:请求方式(增加配置method属性可以限制客户端的请求方式)
        @RequestMapping(value="/login.do",method = RequestMethod.POST)
若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method,属性,则浏览器报4O5:Request method 'POST'not supported
-value:请求地址
-headers:请求头
-params:请求参数
-consumes:请求文档类型
-produces:响应文档类型(在部分版本中,响应结果不会自动添加响应头的文档类型此属性添加,解决乱码问题)
        @RequestMapping(value = "/login.do", produces="text/html; charset=utf-8")

-如果没有配置method属性,则表示可以使用任何请求方式,包括:
GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS,TRACE
-另外,Spring MVC框架还提供了@RequestMapping的相关注解,例如:
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
等等.....

注意
在开发实践中,在类的上方肯定使用@RequestMapping(其它的@XxxMapping不可以加在类上),方法上一般都使用@GetMapping、@PostMapping等注解,除非在极特殊的情况下,某些请求同时允许多种请求方式,才会在方法上使用@RequestMapping

三、响应正文

在Spring MVC框架中,还提供了@RestControlleri注解,它同时具@Controller@ResponseBody注解的效果,所以,在响应正文的控制器上,只需要使用@RestController即可,不必再添加@Controllera和@ResponseBody注解。

Spring MVC内置了一系列的转换器(Converter),用于将方法的返回值转换为响应到客户端的数据(并补充其它必要数据),并且,SpringMVC会根据方法的返回值不同,自动选取某个转换器,例如,当方法的返回值是String时,会自动使用StringHttpMessageConverter,.这个转换器的特点就是直接将方法返回的字符串作为响应的正文,并且,在许多版本的Spring MVC框架中,其默认的响应文档的字符集是1S0-8859-1,所以在在许多版本的Spring MVC中响应String正文时默认不支持非ASCl川字符(例如中文)

1、响应JSON格式的正文

-在开发实践中,不会使用String作为处理请求的方法的返回值类型,主是因为普通的字符串不足以清楚的表现多项数据,通常建议使用ML或JSON语法来组织数据
-主流的做法是向客户端响应JSON格式的字符串,需要在项目中添加ackson-databind的依赖项:
 


com.fasterxml.jackson.core
jackson-databind
2.12.3


以上jackson-databind依赖项中也有一个转换器,
当Spring MVC调用的处理请求的方法的返回值是Spring MVC没有匹配的默认转换器时,
会自动使用jackson-databind的转换器,而jackson-databind转换器就会解析方法的返回值,
并将其处理为JSON格式的字符串,在响应头中将Content-Type设置为application/json 
● 注意:在Spring MVC项目中,
  还需要在Spring MVC的配置类上添加 @EnableWebMvc注解,否则响应时将导致出现HTTP的406错误。
 四、SpringMVC获取请求参数 1、通过ServletAPI获取

将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象
 

@RequestMapping("/testParam")
public String testParam(HttpServletRequest request){
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println("username:"+username+",password:"+password);
    return "success";
}
2、通过控制器方法的形参获取请求参数

在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参
 

@RequestMapping("/testParam")
public String testParam(String username, String password){
    System.out.println("username:"+username+",password:"+password);
    return "success";
}


注:

若请求所传输的请求参数中有多个同名的请求参数,
此时可以在控制器方法的形参中设置字符串数组或者字符串类型的形参接收此请求参数
若使用字符串数组类型的形参,此参数的数组中包含了每一个数据
若使用字符串类型的形参,此参数的值为每个数据中间使用逗号拼接的结果
3、@RequestParam

@RequestParam是将请求参数和控制器方法的形参创建映射关系
@RequestParam注解一共有三个属性:
value:指定为形参赋值的请求参数的参数名
required:设置是否必须传输此请求参数,默认值为true
        若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required String parameter 'xxx' is not present;若设置为false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为null
defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值

4、@RequestHeader

@RequestHeader是将请求头信息和控制器方法的形参创建映射关系
@RequestHeader注解一共有三个属性:value、required、defaultValue,用法@RequestParam

5、@CookieValue

@CookieValue是将cookie数据和控制器方法的形参创建映射关系
@CookieValue注解一共有三个属性:value、required、defaultValue,用法同@RequestParam

6、通过POJO获取请求参数

可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值

五、解决获取请求参数的乱码问题

解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册
 



    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        UTF-8
    
    
        forceResponseEncoding
        true
    


    CharacterEncodingFilter
    /*


注:

SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效
六、RESTFUL 1、RESTful简介

REST:Representational State Transfer,表现层资源状态转移。

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源

注意:RESTful只是一种设计风格,并不是一种规定,也没有明确的或统一的执行方式

2、RESTful的实现

具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。
它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。

REST 风格提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。

操作传统方式REST风格
查询操作getUserById?id=1user/1-->get请求方式
保存操作saveUseruser-->post请求方式
删除操作deleteUser?id=1user/1-->delete请求方式
更新操作updateUseruser-->put请求方式
3、@PathVariable注解
///user/3/info.do
@GetMapping("/[id}/info.do")
public Uservo info(@PathVariable Long id){
System.out.println("即将查询id="+id+"的用户的信息");
Uservouservo new Uservo();
uservo.setUsername("chengheng");
userV0.setPassword("1234567890");
userVo.setEmail("chengheng@qq.com");
return userVO;
}

提示:在以上代码中,URL中使用的占位符是{id},则方法的参数名称也应该是id,就可以直接匹配上!如果无法保证这2处的名称一致,则需要在@PathVariable注解中配置占位符中的名称,例如:

@GetMapping("/{userId}/info.do")
public Uservo info(@PathVariable("userId")Long id){
......
}

在使用格式的占位符时,还可以结合正则表达式进行匹配.
例如:
@GetMapping("/[id:[0-9]+}/info.do")

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013452.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号