JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)
JavaEE学习日志(九十四)
SpringMVC
@RequestMapping注解参数
path
:默认,表示访问路径method
:必须使用GET或POST方法访问
@RequestMapping(value = "/test3",method = RequestMethod.POST)
params
:必须携带某个参数
@RequestMapping(value = "/test4",params = "username" )
headers
:必须携带某个请求头
@RequestMapping(value = "/test4",headers = "user-agent")
请求参数的绑定
简单参数的绑定
简单参数的绑定:
@RequestMapping(value = "/test6",headers = "user-agent")
public ModelAndView test6(ModelAndView modelAndView, int id, String username, double price){
System.out.println(id+"+"+username+"+"+price);
//将当前时间显示给用户
Date date = new Date();
//resp.getWriter().print(date.toLocaleString());
String content = "当前时间"+date.toLocaleString();
//类似于写的req.setAttribute("content",content);
modelAndView.addObject("content",content);
//等同于req.getRequestDispatcher("/WEB-INF/pages/hello/list.jsp").forward(req,resp);
modelAndView.setViewName("user/list");
return modelAndView;
}
<form action="/user/test6" method="post">
<input type="text" name="id"><br>
<input type="text" name="username"><br>
<input type="text" name="price"><br>
<input type="submit" value="提交">
</form>
没有设置编码,获取中文时会报错,所以使用过滤器来设置编码
spirngmvc的编码过滤器CharacterEncodingFilter
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:如果idea的设置中没有勾选这一项,则编译后生成的class文件中,形参只会有参数类型,不会有参数名,就会导致参数绑定失败
如果没有勾选也能使用参数绑定,则需要添加注释@RequestParam(name="")
该注解解决两个问题:
- 前后端参数名不一致
- 默认值
- 解决编译导致的无参数名问题
public ModelAndView test6(ModelAndView modelAndView, @RequestParam(name="id") int id,@RequestParam(name="username") String username,@RequestParam(name="price") double price)
该注解还有第二个参数defaultValue
,可以在页面没有传递参数时给服务器传递一个默认参数。
public ModelAndView test6(ModelAndView modelAndView, @RequestParam(name="id",defaultValue = "123") int id,@RequestParam(name="username") String username,@RequestParam(name="price") double price)
javabean参数的绑定
绑定user对象
@RequestMapping(value = "/test7")
public ModelAndView test7(ModelAndView modelAndView, User user){
System.out.println(user);
//将当前时间显示给用户
Date date = new Date();
//resp.getWriter().print(date.toLocaleString());
String content = "当前时间"+date.toLocaleString();
//类似于写的req.setAttribute("content",content);
modelAndView.addObject("content",content);
//等同于req.getRequestDispatcher("/WEB-INF/pages/hello/list.jsp").forward(req,resp);
modelAndView.setViewName("user/list");
return modelAndView;
}
<form action="/user/test7" method="post">
id:<input type="text" name="id"><br>
用户名:<input type="text" name="username"><br>
描述:<input type="text" name="desc"><br>
<input type="submit" value="提交">
</form>
复合对象的属性绑定
QueryVo对象中有user对象
package com.itheima.domain;
public class QueryVo {
private User user;
private String age;
@Override
public String toString() {
return "QueryVo{" +
"user=" + user +
", age='" + age + '\'' +
'}';
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
@RequestMapping(value = "/test8")
public ModelAndView test8(ModelAndView modelAndView, QueryVo queryVo){
System.out.println(queryVo);
//将当前时间显示给用户
Date date = new Date();
//resp.getWriter().print(date.toLocaleString());
String content = "当前时间"+date.toLocaleString();
//类似于写的req.setAttribute("content",content);
modelAndView.addObject("content",content);
//等同于req.getRequestDispatcher("/WEB-INF/pages/hello/list.jsp").forward(req,resp);
modelAndView.setViewName("user/list");
return modelAndView;
}
使用层级结构来写name属性
<form action="/user/test8" method="post">
id:<input type="text" name="user.id"><br>
用户名:<input type="text" name="user.username"><br>
描述:<input type="text" name="user.desc"><br>
年龄:<input type="text" name="age">
<input type="submit" value="提交">
</form>
简单类型的数组、list和set集合属性的绑定
简单类型的数组、list和set集合的绑定:和简单属性一样
<form action="/user/test9" method="post">
id:<input type="text" name="user.id"><br>
用户名:<input type="text" name="user.username"><br>
描述:<input type="text" name="user.desc"><br>
年龄:<input type="text" name="age">
爱好:<input type="checkbox" name="hobbies" value="1">1
<input type="checkbox" name="hobbies" value="2">2
<input type="checkbox" name="hobbies" value="3">3
<input type="submit" value="提交">
</form>
map类型的参数绑定
注意map集合的参数名不能写map,否则无法得到结果
public class QueryVo {
private User user;
private String age;
private String[] hobbies;
private Map xmap;
...省略
}
收款人:
<input type="text" name="xmap['name']">
<input type="text" name="xmap['tel']">
装对象的list集合绑定
private List<User> userList;
收货人列表:<br>
收货人1:<input type="text" name="userList[0].id"><input type="text" name="userList[0].username">
收货人2:<input type="text" name="userList[1].id"><input type="text" name="userList[1].username">
收货人3:<input type="text" name="userList[2].id"><input type="text" name="userList[2].username">
参数绑定请求头或cookie值
使用两个注解
@RequestHeader
@CookieValue
@RequestMapping(value = "/test10")
public ModelAndView test10(ModelAndView modelAndView, @RequestHeader(name="user-agent") String userAgent){
System.out.println(userAgent);
//将当前时间显示给用户
Date date = new Date();
//resp.getWriter().print(date.toLocaleString());
String content = "当前时间"+date.toLocaleString();
//类似于写的req.setAttribute("content",content);
modelAndView.addObject("content",content);
//等同于req.getRequestDispatcher("/WEB-INF/pages/hello/list.jsp").forward(req,resp);
modelAndView.setViewName("user/list");
return modelAndView;
}
@RequestMapping(value = "/test11")
public ModelAndView test11(ModelAndView modelAndView, @CookieValue(name="JSESSIONID") String jSessionId){
System.out.println(jSessionId);
//将当前时间显示给用户
Date date = new Date();
//resp.getWriter().print(date.toLocaleString());
String content = "当前时间"+date.toLocaleString();
//类似于写的req.setAttribute("content",content);
modelAndView.addObject("content",content);
//等同于req.getRequestDispatcher("/WEB-INF/pages/hello/list.jsp").forward(req,resp);
modelAndView.setViewName("user/list");
return modelAndView;
}