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         }
View Code

jsp

<a href="springmvc/testCookieValue">testCookieValue</a><br>

2.使用 POJO 对象绑定请求参数值

POJO:

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
支持业务逻辑的协助类.
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹
配,自动为该对象填充属性值。支持级联属性。
例子:
jsp
 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>
View Code

java

1 @RequestMapping(value="/testPojo")
2     public String testPojo(User user)
3     {
4             
5             System.out.println("testPojo"+user);
6             return SUCCESS;
7         }
View Code

注意两点

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 }
View Code

返回页面的时候用到了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>
View Code

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         }
View Code
原文地址:https://www.cnblogs.com/baipeng/p/5816161.html