概述
目录
(1)SpringMVC的请求处理
1、SpringMVC对请求参数的处理
①、@RequestParam:获取请求的参数:
②@RequestHeader:获取请求头信息:
2、乱码问题的解决:
3、SpringMVC对原生API的支持:
(1)SpringMVC的请求处理
1、SpringMVC对请求参数的处理
在之前的servlet中我们可以通过request.getParameter()来获取请求中的参数,但是在我们编写的SpringMVC的应用程序中,在具体请求的方法中并不包含request参数,那么我们应该如何获取请求中的参数呢?
需要使用以下几个注解:
1、@RequestParam:获取请求的参数
2、@RequestHeader:获取请求头信息
3、@CookieValue:获取cookie(饼干)中的值
java文件:RequestController(请求控制器)
@Controller
public class RequestController {
@RequestMapping("/testRequest")
public String testRequest(String name){
System.out.println(name);
return "success"; //成功
}
}
//此时name为zhangsan
//换成username也可以
//但是获取不到当前的参数值
当发送请求的时候,找到对应的处理方法之后,会根据参数的名称从request(请求)中获取对应的参数值,并封装到方法中
此时要求,方法的名字和url中参数的名字必须一致,如果不一致,设置不成功
======================== 解决方式: =========================
①、@RequestParam:获取请求的参数:
如果设置的值不同,同时又想让参数获取到对应的属性值,可以通过@RequestParam(获取请求参数)来使用
经常跟@PathVariable混淆,主要注意,两个注解有不同的用处
次注解的参数:
value(值):获取的参数值
required(必需):表示当前属性值是否是必须存在的,默认是true,表示请求中必须要包含此参数,如果没有,400,bad request
//李四
//可以自己加上age有参?
defaultValue(默认值):如果传递参数了,那么使用传递进来的参数,没有使用默认值
如何获取SpringMVC中请求中的信息:
默认情况下,可以直接在方法的参数中填写跟请求一样的名称,此时会默认接受参数
如果有值,直接赋值,如果没有,那么直接给空值
@RequestParam:获取请求中的参数值,之后,参数的名称不需要跟请求的名称一致,但是必须要写
public String request(@RequestParam("user") String username){
此注解还包含三个参数:
value:表示要获取的参数值
required:表示此参数是否必须,默认是true,如果不写参数那么会报错,如果值为false,那么不写参数不会有任何错误
defaultValue:如果在使用的时候没有传递参数,那么定义默认值即可
②@RequestHeader:获取请求头信息:
RequestHeader类下也包含四个参数(value(值)、required(必须)、defaultValue(默认值)、@RequestParam(请求的参数))
java文件:RequestController(请求控制器)
@Controller
public class RequestController {
·
·
·
================================== 添加 =======================================
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader String userAgent){
System.out.println(userAgent);
return "success"; //成功
===============================================================================
}
}
java文件:RequestController(请求控制器)
如果要获取请求头中没有的信息,那么此时会报错,同样,此注解中也包含三个参数,跟@RequestParam一样
value
required
defalutValue
③@CookieValue:获取cookie(饼干)中的值:
@CookieValue类下也包含四个参数(value(值)、required(必须)、defaultValue(默认值)、@RequestParam(请求的参数))
如果需要获取cookie信息该如何处理呢?
可以使用@CookieValue注解:
public String cookie(@CookieValue("JSESSIONID") String id){
相当于:
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies){
cookie.getValue();
}
如果要获取cookie中没有的信息,那么此时会报错,同样,此注解中也包含三个参数,跟@RequestParam一样
value
required
defalutValue
========================================================
2、乱码问题的解决:
如果请求中传递的是某一个对象的各个属性值,此时如何在控制器的方法中获取对象的各个属性值呢?
在SpringMVC的控制中,能直接完成对象的属性赋值操作,不需要人为干预
将对象里的值拿过来:
java文件:User(用户)
public class User {
private Integer id;
private String name;
private Integer age;
private String gender;
public User() {}
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Integer getAge() {return age;}
public void setAge(Integer age) {this.age = age;}
public String getGender() {return gender;}
public void setGender(String gender) {this.gender = gender;}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + ''' +
", age=" + age +
", gender='" + gender + ''' +
", address=" + address +
'}';
}
}
java文件:UserController2(用户控制器2)
@Controller
public class UserController2 {
·
·
·
================================== 添加 =======================================
@RequestMapping("/testUser")
public String testUser(User user){
System.out.println(user);
return "success";
}
===============================================================================
}
user.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
================================== 添加 =======================================
<%
pageContext.setAttribute("ctp",request.getContextPath());
%>
<body>
<form action="${ctp}/testUser" method="post">
编号:<input type="text" name="id"><br>
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
性别:<input type="text" name="gender"><br>
<input type="submit" value="提交"><br>
===============================================================================
</form>
</body>
</html>
//乱码
//原因在于执行顺序问题
java文件:Address(住址)
public class Address {
private String province;
private String city;
private String town;
public Address() {}
public Address(String province, String city, String town) {
this.province = province;
this.city = city;
this.town = town;
}
public String getProvince() {return province;}
public void setProvince(String province) {this.province = province;}
public String getCity() {return city;}
public void setCity(String city) {this.city = city;}
public String getTown() {return town;}
public void setTown(String town) {this.town = town;}
@Override
public String toString() {
return "Address{" +
"province='" + province + ''' +
", city='" + city + ''' +
", town='" + town + ''' +
'}';
}
}
user.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<%
pageContext.setAttribute("ctp",request.getContextPath());
%>
<body>
<form action="${ctp}/testUser" method="post">
编号:<input type="text" name="id"><br>
姓名:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
性别:<input type="text" name="gender"><br>
================================== 添加 =======================================
省份:<input type="text" name="province"><br>
城市:<input type="text" name="city"><br>
区域:<input type="text" name="town"><br>
===============================================================================
<input type="submit" value="提交"><br>
</form>
</body>
</html>
乱码问题解决:
我们需要设置request和response的编码方式,可以自己手动编写过滤器,也可以由现成的框架来实现
post:必须要分别设置request和response的编码格式
get: 在tomcat的server.xml文件中,添加URIEncoding=utf-8
在一个应用程序中可能会包含N多个过滤器,这N多个过滤器一般是没有顺序的要求的,但是如果你设置了编码过滤器,
那么要求必须要将编码过滤器设置到最上面,保证编码过滤器优先执行
//将myFilter编码过滤器放hidden上面
web.xml
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
//关联springmvc的配置文件:
此配置文件的属性可以不添加,但是需要在WEB-INF的目录下创建 前端控制器名称+servlet.xml文件
//设置初始化参数,指定默认的springmvc的配置文件
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name
<url-pattern>/</url-pattern>
</servlet-mapping>
================================== 去掉 =======================================
//自定义编码过滤器
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.mashibing.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
===============================================================================
================================== 添加 =======================================
//springMVC提供的编码过滤器
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
//解决post请求乱码
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
//解决响应乱码
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
===============================================================================
//此过滤器完成请求方式的转换,将post请求转换为put或者delete
<filter>
<filter-name>hidden</filter-name>
<filter-class>
org.springframework.web.filter.HiddenHttpMethodFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hidden</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
//也能解决乱码问题
注意:如果配置了多个过滤器,那么字符编码过滤器一定要在最前面,否则失效
========================================================
3、SpringMVC对原生API的支持:
java文件:UserController2(用户控制器2)
@RequestMapping("api")
public String servletAPI(HttpServletRequest request, HttpServletResponse response, HttpSession session){
request.setAttribute("request","request");
session.setAttribute("session","session");
return "success"; //成功
}
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
操作成功<br> //<br>是换行
================================== 添加 =======================================
request:${requestScope.get("request")} //request(请求)
session:${sessionScope.get("session")} //session(会话)
===============================================================================
</body>
</html>
Controller中也支持原生Servlet的对象,需要在参数中给出:
HttpServletRequest:
HttpServletResponse:
HttpSession:
Locale:设置区域信息,国际化的操作
InputStream:
OutputStream:
Reader:
Writer:
========================================================
//了解一下即可
========================================================
最后
以上就是欢喜鸭子为你收集整理的springMVC -- 3①@RequestParam(获取请求的参数)②@RequestHeader(获取请求头信息)③@CookieValue(获取cookie(饼干)中的值)④解决乱码⑤API(1)SpringMVC的请求处理的全部内容,希望文章能够帮你解决springMVC -- 3①@RequestParam(获取请求的参数)②@RequestHeader(获取请求头信息)③@CookieValue(获取cookie(饼干)中的值)④解决乱码⑤API(1)SpringMVC的请求处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复