【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

posted @   VVS,冷漠的心  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?

囚鸟该如何超越今生?

点击右上角即可分享
微信分享提示