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:

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>

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()方法总是返回该对象实现类的”类名[email protected]+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         }

时间: 2024-08-15 07:56:06

springmvc学习(四)的相关文章

SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBatis框架的学习(六)——MyBatis整合Spring.本文我再来讲SpringMVC和MyBatis整合开发的方法,这样的话,Spring.MyBatis和SpringMVC三大框架的整合开发我们就学会了.这里我使用的Spring是Spring4.1.3这个版本(SpringMVC自然也是这个版本),MyBatis是MyBatis3.2.7这个版本. 为了更好的学习SpringMVC和MyBatis整合开发的方法

SpringMVC学习四、数据处理与乱码问题

数据处理 处理提交数据 提交的域名称和处理方法的参数名一致 提交的域名称和处理方法的参数名不一致 @GetMapping("/t1") public String test1(@RequestParam("name1") String name, Model model) { //1.接收前端参数 System.out.println("接收到前端的参数为:" + name); //2.将返回代结果传递给前端 model.addAttribute

SpringMVC学习(五)——SpringMVC的参数绑定

SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案例代码的编写均建立在前文SpringMVC学习(四)——Spring.MyBatis和SpringMVC的整合的案例基础之上,因此希望读者能仔细阅读这篇文章. 默认支持的数据类型 现在有这样一个需求:打开商品编辑页面,展示商品信息.这是我对这个需求的分析:编辑商品信息,需要根据商品id查询商品信息,然后展示到页面.我这里假设请求的url为/itemEdit.action,由于我想要根据商品id查询商品信息,所以需要传

SpringMVC学习笔记(二): 日常使用功能

前提: 1.web.xml 和spring-mvc核心配置如:SpringMVC学习笔记(一): 基础知识中注解实现. 2.类的@RequestMapping(value="/annotationController") 3.spring-mvc 推荐使用注解实现. 一.数据的接收 (一)URL参数数据的接收 1.使用 HttpServletRequest 获取参数 <span style="font-size:18px;"><span style

史上最全的SpringMVC学习笔记

SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--configure the setting of springmvcDispatcherServlet and configure the mapping--> <servlet> <servlet-name>springmvc</servlet

springMVC3学习(四)--访问静态文件如js,jpg,css

如果你的DispatcherServlet拦截的是*.do这样的URL,就不存在访问不到静态资源的问题 如果你的DispatcherServlet拦截了"/"所有的请求,那同时对*.js,*.jpg的访问也就被拦截了. 我们在进行springMVC开发时,必定会在jsp页面引入js.img和css等文件. 大多数人会将这些分类存放在WebRoot文件下新建的文件夹下面. 同时,会在web.xml文件中配置拦截所有请求.这样就造成了页面无法访问到js.img和css文件夹中的文件了 方法

(转)SpringMVC学习总结

Marvel_Will 博客园 首页 新随笔 联系 订阅 管理 SpringMVC学习总结1 转自:http://www.cnblogs.com/sunniest/p/4555801.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--configure the setting of springmvcDispatcherServlet and conf

SpringMVC学习指南

今天终于把SpringMVC学习指南这本书看完了,写下这篇博客记录一下. 搭配SpringMVC环境 第一步:在web.xml文件添加DispatcherServlet,对于这个我的理解就是调度以@Controller注解的Action分配器 第二步:初始化springmvc.xml路径 第三步:通过配置url-pattern元素,将所有的url映射到该servlet 第四步:配置JSP文件的路径,与后缀 第五步:<annotation-driven>元素做的事情包括注册用于支持基于注解的控制

springMVC学习笔记汇总(持续更新)

SpringMVC 学习笔记(一) Hello World SpringMVC 学习笔记(二) @RequestMapping.@PathVariable等注解 SpringMVC 学习笔记(三) 使用ServletAPI 和 实体 做为参数 SpringMVC 学习笔记(四) 处理模型数据 SpringMVC 学习笔记(五) 基于RESTful的CRUD SpringMVC 学习笔记(六) 数据绑定和JSR校验 SpringMVC 学习笔记(七) JSON返回:HttpMessageConve

SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现

到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProjects:是抽取出的基础项目,主要封装了一些通用的操作. SpringMVC3Demo:就是管理系统所在的项目. WeiXinAPI:是之前做微信管理平台测试时封装一些操作,如果不需要把该项目移除即可. 注:项目的前端UI框架用的是国外的一个基于Bootstrap框架的开发的Demo,如不需要替换为