springmvc学习(四)
1.使用 @CookieValue 绑定请求中的 Cookie 值
例子:
java
1 @RequestMapping(value="/testCookieValue") 2 public String testCookieValue(@CookieValue(value="JSESSIONID")String cookie) 3 { 4 5 System.out.println("testRequestCookie"+cookie); 6 return SUCCESS; 7 }
jsp
<a href="springmvc/testCookieValue">testCookieValue</a><br>
2.使用 POJO 对象绑定请求参数值
POJO:
配,自动为该对象填充属性值。支持级联属性。
1 <form action="springmvc/testPojo" method="post"> 2 username 3 <input type="text" name="username"><br> 4 password 5 <input type="password" name="password"><br> 6 email 7 <input type="text" name="email"><br> 8 age 9 <input type="text" name="age"><br> 10 city 11 <input type="text" name="address.city"><br> 12 province 13 <input type="text" name="address.province"><br> 14 <input type="submit" value="submit"> 15 16 </form>
java
1 @RequestMapping(value="/testPojo") 2 public String testPojo(User user) 3 { 4 5 System.out.println("testPojo"+user); 6 return SUCCESS; 7 }
注意两点
1.直接system.out.print打印出对象的时候,是要调用对象pojo类的toString() 方法的,所以需要重新写这个方法。
原因:
System.out的println方法只能在控制台输出字符串,而Person实例是一个内存中的对象,怎么能直接转换为字符串输入呢?当使用该方法输出Person对象时,实际上输出Person对象的toString()方法的返回值,也就是这面代码效果相同
System.out.println(p);
System.out.println(p.toString());
toString方法是Object类里的一个实例方法,所有Java类都是object类的子类,因此所有Java对象都具有toString方法。
不仅如此,所有Java对象都可以和字符串进行连接运算,当Java对象和字符串进行连接运算时,系统自动调用Java对象toString()方法返回值和字符串进行连接运算下面代码效果相同
String pStr=p+””;
StringpStr=p.toString()+””;
toString()方法是一个非常特殊的方法,是一个“自我描述”方法,该方法通常用于实现当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用以告诉外界该对象具有的状态信息。
Object类提供的toString()方法总是返回该对象实现类的”类名+@+hashCode”值,这个返回值不能真正实现“自我描述”功能,因此我们可以重写object的toString()方法。
下面是user类的源码
1 package com.bai.entities; 2 3 public class User { 4 private String username; 5 private String password; 6 private String email; 7 private int age; 8 private int id; 9 10 public int getId() { 11 return id; 12 } 13 14 public void setId(int id) { 15 this.id = id; 16 } 17 18 private Address address; 19 20 public String getUsername() { 21 return username; 22 } 23 24 public void setUsername(String username) { 25 this.username = username; 26 } 27 28 public String getPassword() { 29 return password; 30 } 31 32 public void setPassword(String password) { 33 this.password = password; 34 } 35 36 public String getEmail() { 37 return email; 38 } 39 40 public void setEmail(String email) { 41 this.email = email; 42 } 43 44 public int getAge() { 45 return age; 46 } 47 48 public void setAge(int age) { 49 this.age = age; 50 } 51 public Address getAddress() { 52 return address; 53 } 54 public void setAddress(Address address) { 55 this.address = address; 56 } 57 /*@Override 58 public String toString() { 59 return "User [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age 60 + ", address=" + address + "]"; 61 }*/ 62 public User(String username, String password, String email, int age) { 63 super(); 64 this.username = username; 65 this.password = password; 66 this.email = email; 67 this.age = age; 68 } 69 public User(String username, String password, String email, int age, int id) { 70 super(); 71 this.username = username; 72 this.password = password; 73 this.email = email; 74 this.age = age; 75 this.id = id; 76 } 77 78 @Override 79 public String toString() { 80 return "User [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age + ", id=" 81 + id + "]"; 82 } 83 84 public User() { 85 super(); 86 // TODO Auto-generated constructor stub 87 } 88 89 90 91 92 }
返回页面的时候用到了EL表达式的requestScope
这里说一下requestScope与request的区别:
pageContext.request是一个具体的对象,在你的http请求过程中存在。
requestScope是一个定义, 表明一个http请求的整个声明周期,它只是一个定义而已,不是一个对象。 EL中你可以在这个周期中放置、获取对象。(当然,其实真正的操作也是针对request对象的)。 比如${requestScope.a.b},其实就是要表明我告诉jsp要到requestScope这个声明周期中获取对象a.b.而背后的实现就是从request.getAttribute("a",然后根据表达式得到相应的a.b对象。
3.使用 Servlet API 作为入参
MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数
HttpServletRequest •
HttpServletResponse •
HttpSession •
java.security.Principal •
Locale •
InputStream •
OutputStream •
Reader •
Writer •
例子:
jsp
1 <a href="springmvc/testServlet">testServlet</a><br>
java
1 @RequestMapping(value="/testServlet") 2 public void testServlet(HttpServletRequest req,HttpServletResponse res,Writer out) throws IOException 3 { 4 5 System.out.println("testServlet"+req+res); 6 out.write("hello springmvc"); 7 //return SUCCESS; 8 }