学科分类
目录
SSM框架

绑定POJO类型

在使用简单数据类型绑定时,可以很容易的根据具体需求来定义方法中的形参类型和个数,然而在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,那么就需要手动编写多个不同类型的参数,这种操作显然比较繁琐。此时就可以使用POJO类型进行数据绑定。

POJO类型的数据绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。

接下来通过一个用户注册案例,来演示POJO类型数据的绑定,具体实现步骤如下。

(1)在src目录下,创建一个com.itheima.po包,在该包下创建一个User类来封装用户注册的信息参数,编辑后如文件1所示。

文件1 User.java

 1    package com.itheima.po;
 2    /**
 3     * 用户POJO类
 4     */
 5    public class User {
 6        private Integer id;       //用户id
 7        private String username; //用户
 8        private Integer password;//用户密码
 9        public Integer getId() {
 10            return id;
 11        }
 12        public void setId(Integer id) {
 13            this.id = id;
 14        }
 15        public String getUsername() {
 16            return username;
 17        }
 18        public void setUsername(String username) {
 19            this.username = username;
 20        }
 21        public Integer getPassword() {
 22            return password;
 23        }
 24        public void setPassword(Integer password) {
 25            this.password = password;
 26        }
 27    } 

(2)在控制器UserController类中,编写接收用户注册信息和向注册页面跳转的方法,代码如下所示。

/**
 * 向用户注册页面跳转
 */
@RequestMapping("/toRegister")
public String toRegister( ) {
    return "register";
}
/**
 * 接收用户注册信息
 */
@RequestMapping("/registerUser")
public String registerUser(User user) {
    String username = user.getUsername();
    Integer password = user.getPassword();
    System.out.println("username="+username);
    System.out.println("password="+password);
    return "success";
}

(3)在/WEB-INF/jsp目录下,创建一个用户注册页面register.jsp,在该界面中编写用户注册表单,表单需要以POST方式提交,并且在提交时会发送一条以“/registerUser”结尾的请求消息,如文件2所示。

文件2 register.jsp

 1    <%@ page language="java" contentType="text/html; charset=UTF-8"
 2         pageEncoding="UTF-8"%>
 3    <html>
 4    <head>
 5    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 6    <title>注册</title>
 7    </head>
 8    <body>
 9        <form action="${pageContext.request.contextPath }/registerUser" 
 10                                                                        method="post">
 11            用户名:<input type="text" name="username" /><br />
 12            密&nbsp;&nbsp;&nbsp;码:<input type="text" name="password" /><br />
 13            <input type="submit" value="注册"/>
 14        </form>
 15    </body>
 16    </html> 

注意:

在使用POJO类型数据绑定时,前端请求的参数名(本例中指form表单内各元素的name属性值)必须与要绑定的POJO类中的属性名一样,这样才会自动将请求数据绑定到POJO对象中,否则后台接收的参数值为null。

(4)将项目发布到Tomcat服务器并启动,在浏览器中访问地址http://localhost:8080/chapter13/toRegister,就会跳转到用户注册页面register.jsp,如图1所示。

图1 register.jsp注册页面

在图1中,填写对应的用户名和密码,然后单击“注册”按钮即可完成模拟注册功能。这里假设用户注册的用户名和密码分别为“tom”和“123”,当单击“注册”按钮后,浏览器会跳转到结果页面,此时控制台的输出结果如图2所示。

图2 运行结果

从图2可以看出,使用POJO类型同样可以获取前端请求传递过来的数据信息,这就是POJO类型的数据绑定。

多学一招:解决请求参数中的中文乱码问题

在前端请求中,难免会有中文信息传递,例如在图13-6中的用户名和密码输入框中输入用户名“小雪”和密码“123”时,虽然浏览器可以正确跳转到结果页面,但是在控制台中输出的中文信息却出现了乱码,如图3所示。

图3 运行结果

从图3可以看到,密码信息已正确显示,但用户名却显示为“?°?é??”。

为了防止前端传入的中文数据出现乱码问题,我们可以使用Spring提供的编码过滤器来统一编码。要使用编码过滤器,只需要在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>

上述代码中,通过<filter-mapping>元素的配置会拦截前端页面中的所有请求,并交由名称为CharacterEncodingFilter的编码过滤器类进行处理;在<filter>元素中,首先配置了编码过滤器类org.springframework.web.filter.CharacterEncodingFilter,然后通过初始化参数设置统一的编码为UTF-8。这样所有的请求信息内容都会以UTF-8的编码格式进行解析。

配置完成后,再次在页面中输入中文用户名“小雪”以及密码“123”,此时控制台的打印信息如图4所示。

图4 运行结果

从图4可以看出,控制台中已经正确显示出了中文数据,这说明编码过滤器配置成功。

点击此处
隐藏目录