一、HttpServletRequest
@RequestMapping("/...")
public ModelAndView doSome(HttpservletRequest request,HttpServletResponse response,HttpSession session)
{
String name = request.getParameter("name");//接收到的参数
}
二、HttpServletResponse
三、HttpSession
四、用户提交的数据
接收用户提交的参数:
1.逐个接收
第一种:
要求:处理器方法的形参名和请求中参数名必须一致。同名的请求参数赋值给同名的形参
例如,用前端用表单提交数据时
<form action="dosome.do" method="post">
<input type="text" name="name">
<input type="text" name="age">
<input type="submit" value="提交">
</form>
@Controller
class MyController{
@RequestMapping("/dosome.do")
public ModelAndView doSome(String name,int age)
{
//可以直接使用参数...
//例如:
ModelAndView mv = new ModelAndView();
mv.addObject("myname",name);
mv.addObject("myage",age);
......
.......
}
}
框架处理参数的原理:
①使用request对象接收请求参数
String strName = request.getParameter("name");
String strAge = request.getParameter("age");
②springmvc框架通过DispatcherServlet调用MyController中的dosome()方法,调用方法时,按名称对应,把接收的参数赋值给形参
dosome(strName,Integer.valueOf(strAge));
框架会提供类型转化的功能,能把String转为int、long、float、double等类型。所以可以直接在方法中使用参数中的值
注意事项:如果上述案例中int age接收的值为空值,页面会出现400错误
解决办法:使用它的包装类Integer。参数中使用包装类命名变量,可以避免空字符串转化的错误
@Controller
class MyController{
@RequestMapping("/dosome.do")
public ModelAndView doSome(String name,Integer age)
{
//可以直接使用参数...
//例如:
ModelAndView mv = new ModelAndView();
mv.addObject("myname",name);
mv.addObject("myage",age);
......
.......
}
}
第二种:
使用@RequestParam注解,解决请求中参数名与形参名不一样的问题
@RequestParam的 属性:1.value 请求中的参数名称
2.required 是一个boolean,默认为true,true表示请求中必须包含此参数
位置:在处理器方法形参定义的前面
例如,现在有一个表单提交数据
<form action="dosome.do" method="post">
<input type="text" name="rname">
<input type="text" name="rage">
<input type="submit" value="提交">
</form>
@Controller
class MyController{
@RequestMapping("/dosome.do")
public ModelAndView doSome(@RequestParam(value = "rname") String name,@RequestParam(value = "rage") Integer age)
{
ModelAndView mv = new ModelAndView();
mv.addObject("myname",name);
mv.addObject("myage",age);
......
.......
}
}
2.对象接收
将处理器方法的参数定义为一个对象,只要保证请求参数名与这个对象的属性同名即可。
创建一个保存请求参数值的普通类,属性名和请求中的参数名相同
public class Student{
private String name;
private int age;
get...
set...
}
@Controller
class MyController{
@RequestMapping("/dosome.do")
public ModelAndView doSome(Student student)
{
ModelAndView mv = new ModelAndView();
mv.addObject("myname",student.getName());
mv.addObject("myage",student.getAge());
mv.addObject("mystudent",student);
......
.......
}
}
框架会创建形参的java对象,给属性赋值。比如,请求中的参数是name,框架会调用它的setName()方法