请求处理方法签名:
1) Spring MVC 通过分析处理方法的签名(方法名+ 参数列表),HTTP请 求信息绑定到处理方法的相应形参中。
2) Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任何方式对方法进行签名。
3) 必要时可以对方法及方法入参标注相应的注解( @PathVariable 、@RequestParam、@RequestHeader 等)、
4) Spring MVC 框架会将 HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。
在SpringMVC 获取客户端传递的数据的方式:
1、在处理请求的方法中,加入相对应的形参,保证形参参数名和传递的数据的参数名保持一致,就可以自动赋值。
2、通过@RequestParam
package com.blh.controller;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.blh.bean.User;
@Controller
public class ParamController {
/*
* 在SpringMVC 获取客户端传递的数据的方式:
* 1、在处理请求的方法中,加入相对应的形参,保证形参参数名和传递的数据的参数名保持一致,就可以自动赋值
* @RequestParam:
* value:设置参数的别名,当不满足赋值条件时,可以使用此属性来指定映射关系
* required:设置形参是否必须被赋值,默认为true必须赋值,若设置为false则会默认赋值为null。
* defaultValue:当形参的值为null时,则给其设置一个默认值(分页和模糊查询中可用到)
*
* @RequestHeader:在处理请求的方法上,获取请求头的信息,用法同上
*
* @CookieValue:在处理请求的方法上,获取cookie的信息,用法同上
*/
// @RequestMapping(value = "/param",method = RequestMethod.POST)
// public String param(@RequestHeader("Accept-Language")String AcceptLanguage,String username,@RequestParam(value="pwd",required = false,defaultValue = "admin")String password,String age) {
// System.out.println("AcceptLanguage="+AcceptLanguage+"username:"+username+",password:"+password+",age:"+age);
// return "success";
// }
/*
* @RequestMapping(value = "/param",method = RequestMethod.POST) public String
* param1(@CookieValue("JSESSIONID")String JSESSIONID) {
* System.out.println("JSESSIONID:"+JSESSIONID); return "success"; }
*/
/*
* 可以使用pojo获取客户端数据,要求实体类对象中的属性名一定要与页面表单元素的name属性值一致,而且支持级联关系(也就是可以通过类.属性名)
*
* 可以通过设置形参的方式来获取servletAPI
*/
/*
@RequestMapping(value = "/param",method = RequestMethod.POST)
public String param(User user,HttpServletRequest request,HttpServletResponse response) {
String username = request.getParameter("username");
System.out.println("User:"+user);
System.out.println(username);
return "success";
}
*/
/*
* SspringMVC处理请求过程中,往作用域中放值有以下三种方式
* 总结:根据ModelAndView的源码调试,不管使用哪种方式,最终都会把Model数据和View数据封装到一个ModelAndView中
*/
//第一种方式使用ModelAndView给作用域赋值(标准方式)
/*
@RequestMapping(value = "/param",method = RequestMethod.POST)
public ModelAndView param() {
ModelAndView mav = new ModelAndView();
mav.addObject("username","root");//往request作用域中放值
mav.setViewName("success");//设置视图名称,实现页面跳转
return mav;
}
*/
//第二种赋值方式(底层也是跟ModelAndView的实现一样)
/*
@RequestMapping(value = "/param",method = RequestMethod.POST)
public String param(Map<String, Object> map) {
map.put("username", "admin");//向作用域中放值
return "success";//放回视图名称
}
*/
//第三种方式(底层也是封装成一个ModelAndView)
@RequestMapping(value = "/param",method = RequestMethod.POST)
public String param(Model model) {
model.addAttribute("username", "bsq");//向作用域中放值
return "success";//放回视图名称
}
}