SpringMVC(三)——处理请求数据
1.form组件
action属性表示提交地址
method属性表示提交方式
表单内容可以有< input>、< textarea>、< button>、< select>、< option>、< optgroup>、< fieldset>、< label>等标签
2.传递字面量参数
(1)在处理请求的方法中,加入相对应的形参,保证形参的名字 和 传递数据的名 保持一致,就可以自动赋值。
(2)如果名字不一样,可以用@RequestParam注解 标识 哪个形参对应哪个数据。
@RequestMapping(value="/param",method=RequestMethod.POST) public String param(@RequestParam(value="name",required=false,defaultValue="守林鸟")String username,String password,String age) { System.out.println("username="+username+" password="+password+" age="+age); return "success"; }
<form action="param" method="post"> username:<input type="text" name="name"/> <br /> password:<input type="text" name="password"/> <br /> age:<input type="text" name="age"/> <br /> <input type="submit" value="提交"> <!-- text是默认的 --> </form>
- value表示该形参对应哪个提交过来的数据名
- required默认为true,表示传递的数据中必须要有名叫name的,否则会报错,改为false则可有可无
- defaultValue表示没有这个值的时候的默认
显然,如果参数太多则代码臃肿
4.非自定义的数据则直接用相关注解修饰形参
- 请求头:@RequestHeader
- cookie:@CookieValue
5.传递POJO类型
要求实体类对象中的属性名要和表单中的name属性值一致,支持级联关系(POJO封装POJO)。
@RequestMapping(value="/param",method=RequestMethod.POST) public String param(User user) { System.out.println(user); return "success"; }
<form action="param" method="post"> username:<input type="text" name="username"/> <br /> password:<input type="text" name="password"/> <br /> age:<input type="text" name="age"/> <br /> province:<input type="text" name="address.province"/> <br /> city:<input type="text" name="address.city"/> <br /> <input type="submit" value="提交"> <!-- text是默认的 --> </form>
通过[.]来实现级联关系,如果还有下一层,再来一个[.]。
6.获取ServletAPI
直接在响应方法里写形参,例如HttpServletRequest、HttpServletResponse、HttpSession
@RequestMapping(value="/param",method=RequestMethod.POST) public String param(HttpServletRequest request) { System.out.println("request="+request); System.out.println(request.getParameter("username")); return "success"; }
7.传递数组
直接用(类型[] 形参)就可以,在表单中相同名字的都被弄进数组
8.传递集合
不支持这种形参方式,需要将集合放在一个类里作为属性封装。例如一个List<User>类型在form表单中写list[0].username、list[1].password。
9.往作用域中放值
- ModelAndView:mav.addObject(String,Object);
- Map:map.put(String,Object);
- Model:model.addAttribute(String,Object);
10.中文乱码问题
在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> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>