前言
使用@Controller、@RequestMapping 注解提供Web服务,介绍如何获取请求参数。
1、@Controller
@Controller 注解可以将一个普通的 Java 类标识成控制器(Controller)类
2、@RequestMapping
2.1、类作用域
@RequestMapping("/springMvc")
public class HelloWorldController {
@RequestMapping("/")
public String sayHelloWorld(){
return "index";
}
}
2.2、value是默认属性,可以对应多个地址
@RequestMapping(value = {"/register","/login"})
public String register(){
return "register";
}
2.3、method属性
仅支持GET请求
@RequestMapping(value = "/",method = RequestMethod.GET)
支持GET、POST请求
@RequestMapping(value = "/",method = {RequestMethod.GET,RequestMethod.POST})
2.4、params属性
params 属性用于指定请求中的参数,只有当请求中携带了符合条件的参数时,控制器方法才会对该请求进行处理
序号 | 表达式 | 含义 |
---|---|---|
① | “param” | 请求中必须携带名为 param 的参数 |
② | “!param” | 与表达式 ① 的含义完全相反,请求中不能携带名为 param 的参数 |
③ | “param=value” | 请求中必须携带名为 param 的参数,且参数的取值必须为:value |
④ | “param!=value” | 与表达式 ③ 的含义完全相反,请求中不能携带参数:param = value。 |
2.5、headers属性
headers 属性用于设置请求中请求头信息,只有当请求中携带指定的请求头信息时,控制器方法才会处理该请求。
序号 | 表达式 | 含义 |
---|---|---|
① | “header” | 请求必须携带请求头信息:header |
② | “!header” | 与表达式 ① 的含义完全相反,请求中不能携带请求头信息:header |
③ | “header=value” | 请求中必须携带请求头信息:header=value 。 |
④ | “header!=value” | 与表达式 ③ 的含义完全相反,请求中不能携带请求头信息:header=value。 |
2.6、value可用通配符表示
通配符 | 说明 |
---|---|
? | 表示任意的单个字符。 |
* | 表示任意的 0 个或多个字符。 |
** | 表示任意的一层或多层目录。 注意,在使用该通配符时,其使用方式只能时是"/**/xxx"。 |
3、获取请求参数
Spring MVC 提供了多种获取请求参数的方式
3.1、通过 HttpServletRequest 获取请求参数
@RequestMapping("/register")
public String register(HttpServletRequest request){
String userName= request.getParameter("userName");
String password = request.getParameter("pwd");
log.info("用户:{} , 密码:{}" , userName, password);
return "register";
}
3.2、通过控制器方法的形参获取请求参数
@PostMapping(value = "/register")
public ModelAndView register(String userName,String password){
log.info("用户:{} , 密码:{}" , userName, password);
ModelAndView modelAndView = new ModelAndView();
//给request对象设置一个属性
modelAndView.addObject("userName","zhangsan");
//设置跳转的视图
modelAndView.setViewName("success");
return modelAndView;
}
3.3、使用 @RequestParam 注解获取请求参数
@PostMapping(value = "/register")
public ModelAndView register(@RequestParam("userName") String userName,@RequestParam("password") String password){
log.info("用户:{} , 密码:{}" , userName, password);
ModelAndView modelAndView = new ModelAndView();
//给request对象设置一个属性
modelAndView.addObject("userName","zhangsan");
//设置跳转的视图
modelAndView.setViewName("success");
return modelAndView;
}
3.4、通过实体类对象获取请求参数(推荐)
<form th:action="@{/register}" method="post">
用户名:<input type="text" name="userName"/><br/>
密码:<input type="password" name = "password"/><br/>
<button type="submit">提交</button>
<button type="reset">重置</button>
</form>
@PostMapping(value = "/register")
public ModelAndView register(User user){
log.info("用户:{} , 密码:{}" , user.getUserName(), user.getPassword());
ModelAndView modelAndView = new ModelAndView();
//给request对象设置一个属性
modelAndView.addObject("userName","zhangsan");
//设置跳转的视图
modelAndView.setViewName("success");
return modelAndView;
}
3.5、中文乱码解决:(web.xml增加以下的过滤器)
<!--请求和响应的字符串过滤器-->
<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>