【SpringMVC 框架(自学)】Day03(SpringMVC获取请求参数)--2022/4/10
二、SpringMVC获取请求参数
通过Servlet获取请求参数
@Controller
public class ServController{
@RequestMapping("/servletAPI")
public String testServletAPI(HttpServletRequest request){
//存放cookie值
HttpSession session = request.getSession();
//获取前端参数的传递值
String name = request.getParameter("username");
String password = request.getParameter("password");
sout(username+password)
return "target";
}
}
通过控制器方法的形参获取请求参数
一般通过servlet获取请求的参数,但是在SpringMVC中,获取请求参数很简单,一般要求前端参数和方法中设置的参数一致即可
@Controller
public class ParamController{
@RequestMapping("/paramTarget")
public String paramTarget(
String username,
String password,
String[] hobby
){
sout(username+password+Arrys.toString(hobby))
}
}
<form th:action="@{/paramTarget}" method = "get">
<input type="text" name="username">
<input type ="password" name="password">
a<input type="checkbox" name="hobby" value="a">
b<input type="checkbox" name="hobby" value="b">
c<input type="checkbox" name="hobby" value="c"><br/>
<input type="submit" value="通过控制器方法的形参获取请求参数">
</form>
@RequestParam注解
当前端参数与控制层参数不一致时,需要用到此注解:
<form th:action="@{/paramTarget}" method = "get">
<input type="text" name="user_name"></input>
</form>
@Controller
public class ParamController{
@RequestMapping("/paramTarget")
public String paramTarget(
@RequestParam(
value = "user_name",
required = false,
defaultValue = "test") String username
){
sout(usernmae)
return "target";
}
}
- value:对应着前端参数的值
- required:表示值传递时是否可以省略该参数
- defaultValue:表示值传递缺省或者省略时,赋予该参数的值
@RequestHeader注解
- value:头信息
- required:是否可以省略该头信息
- defaultValue:头信息缺省时,赋予该头信息的值
@CookieValue注解
通过实体类请求参数
如果需要从实体类中请求参数的话,那么需要前端参数于实体类中的属性保持一致,再直接创建实体类对象就可以实现参数的请求
public class User{
private String username;
private String password;
private String[] hobby;
//有参、无参、getter、setter、toString方法
}
@Controller
public class ParamController{
@RequestMapping("/paramTarget")
public String paramPojo(User user){
return "target"
}
}
通过Filter处理获取请求参数的乱码问题
以通过实体类请求参数为例,如果需要解决乱码问题,则要在环境(web.xml)中配置:characterEncodingFilter,再根据它的底层架构,配置相对应的参数信息
<!--配置过滤器-->
<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>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这里会涉及到:监听器、过滤器、Servlet的执行顺序:
- 监听器>过滤器>Servlet
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?