5.SpringMVC的数据请求

5.1-SpringMVC的请求-获得请求参数-请求参数类型(理解)

客户端请求参数的格式是:name=value&name=value……

服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数

  • 基本类型参数

  • POJO类型参数

  • 数组类型参数

  • 集合类型参数

5.2-SpringMVC的请求-获得请求参数-获得基本类型参数(应用)

Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配。并且能自动做类型转换;

自动的类型转换是指从String向其他类型的转换

http://localhost:8080/itheima_springmvc1/quick9?username=zhangsan&age=12

    @RequestMapping(value="/login11")@ResponseBodypublic void login11(String uname,int age) throws IOException {System.out.println(name);System.out.println(age);}

5.3-SpringMVC的请求-获得请求参数-获得POJO类型参数(应用)

Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。

public class User {private String username;private int age;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", age=" + age +'}';}
}
//获取请求数据
@RequestMapping(value="/login12")@ResponseBodypublic void login12(User user) throws IOException {System.out.println(user);}

5.4-SpringMVC的请求-获得请求参数-获得数组类型参数(应用)

Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配。

@RequestMapping(value="/login13")@ResponseBodypublic void login13(String[] strs) throws IOException {System.out.println(Arrays.asList(strs));}

5.5-SpringMVC的请求-获得请求参数-获得集合类型参数1(应用)

获得集合参数时,要将集合参数包装到一个POJO中才可以。

<form action="${pageContext.request.contextPath}/user/login14" method="post"><%--表明是第一个User对象的username age--%><input type="text" name="userList[0].username"><br/><input type="text" name="userList[0].age"><br/><input type="text" name="userList[1].username"><br/><input type="text" name="userList[1].age"><br/><input type="submit" value="提交"></form>
import java.util.List;public class VO {private List<User> userList;public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}@Overridepublic String toString() {return "VO{" +"userList=" + userList +'}';}
}
//获取请求数据
@RequestMapping(value="/login14")@ResponseBodypublic void login14(VO vo) throws IOException {System.out.println(vo);}

5.6-SpringMVC的请求-获得请求参数-获得集合类型参数2(应用)

当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装

<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script><script>var userList = new Array();userList.push({username:"zhangsan",age:18});userList.push({username:"lisi",age:28});//ajax请求$.ajax({type:"POST",url:"${pageContext.request.contextPath}/user/login15",data:JSON.stringify(userList),contentType:"application/json;charset=utf-8"});</script>
//获取请求数据
@RequestMapping(value="/login15")@ResponseBodypublic void login15(@RequestBody List<User> userList) throws IOException {System.out.println(userList);}

5.7-SpringMVC的请求-获得请求参数-静态资源访问的开启(应用)

当有静态资源需要加载时,比如jquery文件,通过谷歌开发者工具抓包发现,没有加载到jquery文件,原因是SpringMVC的前端控制器DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作,我们可以通过以下两种方式指定放行静态资源:

•在spring-mvc.xml配置文件中指定放行的资源

<mvc:resources mapping="/js/**"location="/js/"/>

•使用<mvc:default-servlet-handler/>标签

 <!--开放资源的访问权限mapping:是服务端访问资源的地址location:是具体资源的路径--><!--<mvc:resources mapping="/js/**" location="/js/"/>--><!--springMVC找不到资源,就交给原始的容器的内部机制找资源--><mvc:default-servlet-handler/>

5.8-SpringMVC的请求-获得请求参数-配置全局乱码过滤器(应用)

当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤。

<!--配置全局过滤的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></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

5.9-SpringMVC的请求-获得请求参数-参数绑定注解@RequestParam(应用)

当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定

<form action="${pageContext.request.contextPath}/login16" method="post"><input type="text" name="name"><br><input type="submit" value="提交"><br>
</form>
@RequestMapping(value="/login16")@ResponseBodypublic void login16(@RequestParam(value="name",required = false,defaultValue = "NanYu") String username) throws IOException {System.out.println(username);}

5.10-SpringMVC的请求-获得请求参数-Restful风格的参数的获取(应用)

Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。

Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:

  • GET:用于获取资源

  • POST:用于新建资源

  • PUT:用于更新资源

  • DELETE:用于删除资源

例如:

  1. /user/1 GET : 得到 id = 1 的 user

  2. /user/1 DELETE: 删除 id = 1 的 user

  3. /user/1 PUT: 更新 id = 1 的 user

  4. /user POST: 新增 user

上述url地址/user/1中的1就是要获得的请求参数,在SpringMVC中可以使用占位符进行参数绑定。地址/user/1可以写成/user/{id},占位符{id}对应的就是1的值。在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。

http://localhost:8080/NanYu/login17/zhangsan

@RequestMapping(value="/login17/{name}")
@ResponseBodypublic void login17(@PathVariable(value="name") String username) throws IOException {System.out.println(username);}

5.11-SpringMVC的请求-获得请求参数-自定义类型转换器(应用)

SpringMVC 默认已经提供了一些常用的类型转换器,例如客户端提交的字符串转换成int型进行参数设置。

但是不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自定义转换器。

public class DateConverter implements Converter<String, Date> {public Date convert(String dateStr) {//将日期字符串转换成日期对象 返回SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = format.parse(dateStr);} catch (ParseException e) {e.printStackTrace();}return date;}
}
@RequestMapping(value="/login18")@ResponseBodypublic void login18(Date date) throws IOException {System.out.println(date);}

5.12-SpringMVC的请求-获得请求参数-获得Servlet相关API(应用)

SpringMVC支持使用原始ServletAPI对象作为控制器方法的参数进行注入,常用的对象如下:

  • HttpServletRequest

  • HttpServletResponse

  • HttpSession

@RequestMapping(value="/login19")@ResponseBodypublic void login19(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {System.out.println(request);System.out.println(response);System.out.println(session);}

5.13-SpringMVC的请求-获得请求参数-获得请求头信息(应用)

使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name)

  • @RequestHeader注解的属性如下:

  • value:请求头的名称

  • required:是否必须携带此请求头

@RequestMapping(value="/login20")@ResponseBodypublic void login20(@RequestHeader(value = "User-Agent",required = false) String user_agent) throws IOException {System.out.println(user_agent);}

使用@CookieValue可以获得指定Cookie的值

  • @CookieValue注解的属性如下:

  • value:指定cookie的名称

  • required:是否必须携带此cookie

 @RequestMapping(value="/login21")@ResponseBodypublic void login21(@CookieValue(value = "JSESSIONID") String jsessionId) throws IOException {System.out.println(jsessionId);}

SpringMVC的数据请求相关推荐

  1. springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格

    springMVC获取异步请求的参数 JQuery发送异步请求回顾 <a href="javascript:void(0);" id="testAjax" ...

  2. SpringMVC自动将请求参数和入参对象的属性进行一一绑定;要求请求参数的名字和javaBean入参的对象里面的属性名是一样的||员工的增删改查案例

    SpringMVC自动将请求参数和入参对象的属性进行一一绑定:要求请求参数的名字和javaBean入参的对象里面的属性名是一样的 1.SpringMVC中配置HiddenHttpMethodFilte ...

  3. SpringMVC对Ajax请求的处理

    SpringMVC对Ajax请求的处理 [1] 问题: 当浏览器发起一个ajax请求给服务器,服务器调用对应的单元方法处理ajax请求. 而ajax的请求在被处理完成后,其处理结果需要直接响应.而目前 ...

  4. SpringMVC实现PUT请求上传文件

    在JQuery中,我们可以进行REST ful中delete和put的请求,但是在java EE标准中,默认只有在POST请求的时候,servlet 才会通过getparameter()方法取得请求体 ...

  5. SpringMVC重定向与请求转发

    SpringMVC重定向与请求转发 一,请求转发 ①请求转发地址栏不会发生改变 ②请求转发只发送一次请求.能携带原有的参数 ③请求转发只可以在同一个服务器中进行转发 ④实际上视图解析器的转发本质也是请 ...

  6. 使用 AFNetworking 进行 XML 和 JSON 数据请求

    (1)XML 数据请求 使用 AFNetworking 中的 AFHTTPRequestOperation 和 AFXMLParserResponseSerializer,另外结合第三方框架 XMLD ...

  7. springMVC保存数据到mysql数据库中文乱码问题解决方法

    springMVC保存数据到mysql数据库中文乱码问题解决方法 参考文章: (1)springMVC保存数据到mysql数据库中文乱码问题解决方法 (2)https://www.cnblogs.co ...

  8. SpringMVC无法获取请求中的参数的问题的调查与解决(1)

    SpringMVC无法获取请求中的参数的问题的调查与解决(1) 参考文章: (1)SpringMVC无法获取请求中的参数的问题的调查与解决(1) (2)https://www.cnblogs.com/ ...

  9. SpringMVC如何获取请求带来的各种信息 ||如果我们的请求参数是一个POJO(自定义参数类型), SpringMVC会自动的为这个POJO进行赋值

    SpringMVC如何获取请求带来的各种信息 默认方式获取请求参数: 直接给方法入参上写一个和请求参数名相同的变量.这个变量就来接收请求参数的值: 带:有值,没带:null: 如果我们的请求参数是一个 ...

最新文章

  1. 在工作中有被动转主动的体会_积极主动应对眼前的一切,就是对自己最好的犒赏...
  2. 正则表达式:密码中至少包含大写字母、小写字母、数字、特殊字符等字符中的2种或3种
  3. 【Python】处理UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa2 in position…
  4. JS面向对象之封装自定义构造函数
  5. 解决Mac文件乱码问题
  6. 贝叶斯概率推断:短信数据推断行为
  7. android TTS语音播报
  8. 使用selenium + pytest + allure做WBE UI自动化
  9. sigmoid/softmax指数运算溢出问题的解决方法
  10. 小心!第三方支付最常遇到的 6 大骗局!
  11. 实变函数(3)-可测函数
  12. win10文件夹当作服务器,win10文件夹加密不了怎么办_网站服务器运行维护,win10
  13. 英文字符和数字间隔突然变大
  14. 1、junit学习之junit的基本介绍
  15. 读取excel文件数据,封装成hashmap
  16. Failed to load response data:No data found for resource with given identifier
  17. ArcGIS api 4.x label文字,图片显示
  18. VMware 15 出现的EFI VMware Virtual SCSI Hard Drive(0,0) …. unsuccessful、Directory “EZBOOT“ not found问题
  19. 在学习JavaScript的过程
  20. PHP urldecode()与urlencode()函数

热门文章

  1. 手机影像内卷几时休?
  2. 20181225股市复盘
  3. 1024·程序员节校园编程专业活动策划(低调版)
  4. 程序员系列头像表情包一
  5. 启动Spring项目报错,Springboot启动报错 Disconnected from the target VM 解决过程
  6. 【Matlab】一、解常微分方程ODE
  7. Prompt for Extraction? PAIE:Prompting Arguement Interaction for Event Argument Extraction
  8. 计算机教师师徒结对师傅总结,师徒结对师傅总结
  9. 【微信小程序控制硬件⑥ 进阶篇】服务器如何集成七牛云存储SDK,把用户自定义设备图片存储在第三方服务器!
  10. 南昌大学计算机考研学硕,南昌大学电子信息工程专硕考研心得