首页 > 其他 > 详细

第四章 处理请求数据

时间:2020-10-05 23:02:42      阅读:20      评论:0      收藏:0      [点我收藏+]
  • 回顾Servlet的处理方式:

请求数据:请求参数,请求cookie信息,请求头信息...

javaWEB:通过HttpServletRequest request

       request.getParameters(参数名),request.getParameterMap()

       request.getCookie(),request.getHeader();

第一种方式在处理请求的方法中,加入相应的形参,保证参数名和传递的数据参数名保持一致,就可以自动赋值

  • 请求处理方法签名(即怎么获取客户端传递的数据)

    • SpringMVC通过分析处理方法的签名(方法名+参数列表),Http请求信息绑定到处理方法的相应形参中。
    • SpringMVC对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名。
    • 必要时可以对方法及方法入参标注相应的注解(@PathVariable,@RequestParam,@RequestHeader等)
    • SpringMVC框架将Http请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。
  • @RequestParam注解

    • 在处理方法入参使用@RequestParam可以把请求参数传递给请求方法
    • value:当不满足赋值条件时,可以使用value属性,指定映射关系
    • required:设置形参是否必须被赋值,默认为true:必须赋值,若设为false:则不必赋值,因此形参的值为null
    • defaultValue:若形参所获得的值为null,则设置为一个默认值,使用场景:分页,模糊查询

  param.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" language="java" %>
 2 <html>
 3 <head>
 4     <title>传参</title>
 5 </head>
 6 <body>
 7     <form action="/param" method="post">
 8         用户名:<input type="text" name="username"><br>
 9         密  码:<input type="password" name="password"><br>
10         年  龄:<input type="text" name="age"><br>
11         省  份:<input type="text" name="province"><br>
12         城  市:<input type="text" name="city"><br>
13         乡  镇:<input type="text" name="country"><br>
14         <input type="submit" value="提交">
15     </form>
16 </body>
17 </html>

  ParamController.java

 

 1 package com.iwakan.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 
 7 /**
 8  * 在springMVC获取客户端传递的数据的方式:
 9  * 1.在处理请求的方法中,加入相应的形参,保证参数名和传递的数据参数名保持一致,就可以自动赋值
10  * value:当不满足赋值条件时(即参数名和传递的数据参数名比一致),可以使用@RequestMapping的value属性,指定映射关系
11  * required:设置形参是否必须赋值,默认为true,必须赋值,若设置为false,则不必须赋值,因此形参的值为null
12  * defaultValue:若形参所获得的值为null,则设置哟个默认值,使用场景:分页和模糊查询等。
13  *
14  */
15 @Controller
16 public class ParamController {
17     @RequestMapping(value = "/param",method = RequestMethod.POST)
18     public String param(String username, String password, Integer age){
19         System.out.println("username=="+username+",password=="+password+",age=="+age);
20         return "success";
21     }
22 }

 

技术分享图片

 

 

 

技术分享图片

 

 

 

参数名和传递的数据参数名不一致时,可以使用@RequestParam注解

param.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" language="java" %>
 2 <html>
 3 <head>
 4     <title>传参</title>
 5 </head>
 6 <body>
 7     <form action="/param" method="post">
 8         用户名:<input type="text" name="name"><br>
 9         密  码:<input type="password" name="password"><br>
10         年  龄:<input type="text" name="age"><br>
11         省  份:<input type="text" name="province"><br>
12         城  市:<input type="text" name="city"><br>
13         乡  镇:<input type="text" name="country"><br>
14         <input type="submit" value="提交">
15     </form>
16 </body>
17 </html>

 

ParamController.java

 1 package com.iwakan.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 import org.springframework.web.bind.annotation.RequestParam;
 7 
 8 /**
 9  * 在springMVC获取客户端传递的数据的方式:
10  * 1.在处理请求的方法中,加入相应的形参,保证参数名和传递的数据参数名保持一致,就可以自动赋值
11  * value:当不满足赋值条件时(即参数名和传递的数据参数名不一致),可以使用@RequestMapping的value属性,指定映射关系
12  * required:设置形参是否必须赋值,默认为true,必须赋值,若设置为false,则不必须赋值,因此形参的值为null
13  * defaultValue:若形参所获得的值为null,则设置哟个默认值,使用场景:分页和模糊查询等。
14  *
15  */
16 @Controller
17 public class ParamController {
18     @RequestMapping(value = "/param",method = RequestMethod.POST)
19     public String param(@RequestParam(value = "name",required = false,defaultValue = "admin") String username, String password, Integer age){
20         System.out.println("username=="+username+",password=="+password+",age=="+age);
21         return "success";
22     }
23 }

 

技术分享图片

 

 

 技术分享图片

 

 

 当用户名不填写实会怎样呢。

技术分享图片

 

 

 

技术分享图片

 

 

  •  @RequestHeader注解

    • 使用@RequestHeader绑定请求报头的属性值
    • 请求头包含了若干个属性,服务器可据此获知客户端的信息,通过@ReqestHeader即可将请求头中的属性值绑定到处理方法的入参中
  • @CookieValue注解

    • 使用@CookieValue绑定请求中的cooike值
    • @CookieValue可以处理方法入参绑定某个cookie值
ParamController .java
 1 package com.iwakan.controller;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.*;
 5 
 6 /**
 7  * 在springMVC获取客户端传递的数据的方式:
 8  * 1.在处理请求的方法中,加入相应的形参,保证参数名和传递的数据参数名保持一致,就可以自动赋值
 9  * value:当不满足赋值条件时(即参数名和传递的数据参数名不一致),可以使用@RequestMapping的value属性,指定映射关系
10  * required:设置形参是否必须赋值,默认为true,必须赋值,若设置为false,则不必须赋值,因此形参的值为null
11  * defaultValue:若形参所获得的值为null,则设置哟个默认值,使用场景:分页和模糊查询等。
12  */
13 @Controller
14 public class ParamController {
15 
16     /**
17      * 
18      * @RequestHeader: 在处理请求的方法上,获取请求头信息,用法和@RequestParam一致
19      */
20     @RequestMapping(value = "/getHeader", method = RequestMethod.POST)
21     public String getHeader(@RequestHeader(value = "Accept-Language") String acceptLanguage) {
22 
23         System.out.println(acceptLanguage);
24         return "success";
25     }
26 
27     /**
28      *
29      * @CookieValue: 在处理请求的方法上,获取cookie信息,用法和@RequestParam一致
30      */
31     @RequestMapping(value = "/getCookie", method = RequestMethod.POST)
32     public String getCookie(@CookieValue(value = "JSESSIONID") String sessionId) {
33         System.out.println(sessionId);
34         return "success";
35     }
36 }

 

param.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" language="java" %>
 2 <html>
 3 <head>
 4     <title>传参</title>
 5 </head>
 6 <body>
 7     <form action="/param" method="post">
 8         用户名:<input type="text" name="name"><br>
 9         密  码:<input type="password" name="password"><br>
10         年  龄:<input type="text" name="age"><br>
11         省  份:<input type="text" name="province"><br>
12         城  市:<input type="text" name="city"><br>
13         乡  镇:<input type="text" name="country"><br>
14         <input type="submit" value="提交">
15     </form>
16     <form action="/getHeader" method="post">
17         <input type="submit" value="@RequestHeader测试">
18     </form>
19     <form action="/getCookie" method="post">
20         <input type="submit" value="@CookieValue测试">
21     </form>
22 
23 </body>
24 </html>

技术分享图片

 

 

 

 

技术分享图片

 

 

 

第二种方式使用POJO作为参数

  • 使用POJO对象绑定请求参数值
  • SpringMVC会按请求参数名和POJO属性名进行自定匹配,自动为该对象填充属性值。支持级联属性。

User.java

技术分享图片
 1 package com.iwakan.pojo;
 2 
 3 public class User {
 4     private Integer id;
 5     private String username;
 6     private String password;
 7     private Integer age;
 8     private Address address;
 9 
10     public Integer getId() {
11         return id;
12     }
13 
14     public void setId(Integer id) {
15         this.id = id;
16     }
17 
18     public String getUsername() {
19         return username;
20     }
21 
22     public void setUsername(String username) {
23         this.username = username;
24     }
25 
26     public String getPassword() {
27         return password;
28     }
29 
30     public void setPassword(String password) {
31         this.password = password;
32     }
33 
34     public Integer getAge() {
35         return age;
36     }
37 
38     public void setAge(Integer age) {
39         this.age = age;
40     }
41 
42     public Address getAddress() {
43         return address;
44     }
45 
46     public void setAddress(Address address) {
47         this.address = address;
48     }
49 
50     @Override
51     public String toString() {
52         return "User{" +
53                 "id=" + id +
54                 ", username=‘" + username + ‘\‘‘ +
55                 ", password=‘" + password + ‘\‘‘ +
56                 ", age=" + age +
57                 ", address=" + address +
58                 ‘}‘;
59     }
60 }
User.java

 

 

Address.java

技术分享图片Address.java

 

 param.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" language="java" %>
 2 <html>
 3 <head>
 4     <title>传参</title>
 5 </head>
 6 <body>
 7     <form action="/param" method="post">
 8         用户名:<input type="text" name="username"><br>
 9         密  码:<input type="password" name="password"><br>
10         年  龄:<input type="text" name="age"><br>
11         省  份:<input type="text" name="address.province"><br>
12         城  市:<input type="text" name="address.city"><br>
13         乡  镇:<input type="text" name="address.country"><br>
14         <input type="submit" value="提交">
15     </form>
16     <form action="/getHeader" method="post">
17         <input type="submit" value="@RequestHeader测试">
18     </form>
19     <form action="/getCookie" method="post">
20         <input type="submit" value="@CookieValue测试">
21     </form>
22 
23 </body>
24 </html>

 

ParamController.java
 1 package com.iwakan.controller;
 2 
 3 import com.iwakan.pojo.User;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.*;
 6 
 7 @Controller
 8 public class ParamController {
 9 
10 
11     /**
12      * 可以使用POJO获取客户端数据,要求实体对象中的属性名一定要和页面中表单元素的name属性值一致,且支持级联关系
13      * @param user
14      * @return
15      */
16     @RequestMapping(value="/param",method = RequestMethod.POST)
17     public String param(User user){
18         System.out.println(user);
19         return "success";
20     }
21 }

 

技术分享图片

 

 技术分享图片

 

 

 

第三种方式使用Servlet原生API作为参数

  • MVC的handler方法可以接受哪些ServletAPI类型的参数
    • HttpServletRequest
    • HttpServletResponse
    • HttpSession
    • java.security.Principal
    • Locale
    • InputStream
    • OutputStream
    • Reader
    • Writer

  问题情况:IDEA中使用HttpServletRequest不能导入

技术分享图片

  IDEA中引用不到HttpServletRequest的解决方案

  分析:这个问题实际上是引用不到servlet-api.jar,IDEA 没有导入 servlet-api.jar 这个架包,需要你手动导入支持。

  技术分享图片

 

   技术分享图片

 

   技术分享图片

 

   解决问题。

 

  案例:ParamController.java

 1 package com.iwakan.controller;
 2 
 3 import com.iwakan.pojo.User;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.*;
 6 import org.springframework.web.multipart.support.AbstractMultipartHttpServletRequest;
 7 
 8 import javax.servlet.http.HttpServletRequest;
 9 
10 
11 @Controller
12 public class ParamController {
13 
14     /**
15      * 可以使用POJO获取客户端数据,要求实体对象中的属性名一定要和页面中表单元素的name属性值一致,且支持级联关系
      可以通过设置形参的方式,获取ServletRequest
16 * @param user 17 * @return 18 */ 19 @RequestMapping(value="/param",method = RequestMethod.POST) 20 public String param(User user, HttpServletRequest request) { 21 System.out.println(request.getParameter("username")); 22 //System.out.println(user); 23 return "success"; 24 } 25 }

 

技术分享图片

 

 技术分享图片

 

 

 

 





 

第四章 处理请求数据

原文:https://www.cnblogs.com/iwakan/p/13771927.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!