一、简单数据绑定
1.绑定默认数据类型
1)引入JAR包
2)配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<servlet>
<!-- 配置前端控制器 -->
<servlet-name>SpringMVC</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 初始化时加载配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Spring-config.xml</param-value>
</init-param>
<!-- 表示容器在启动时立即加载servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3)在src目录下创建 SpringMVC 的核心配置文件 Spring-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.kangxg.controller"/>
<!-- 定义视图解析器 -->
<bean id = "viewResolver" class ="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 设置前缀 -->
<property name = "prefix" value="/WEB-INF/jsp/"/>
<!-- 设置后缀 -->
<property name = "suffix" value=".jsp"/>
</bean>
</beans>
4)创建 com.kangxg.controller 包 并在包中创建 UserController类
package com.kangxg.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/selectUser")
public String selectUser(HttpServletRequest request)
{
String id = request.getParameter("id");
System.out.println("id"+id);
return "success";
}
}
5. debug 运行 地址为:
http://localhost:8080/SpringMVCDataBind/selectUser?id=1
2.绑定简单数据类型
简单数据类型的绑定,就是指Java中几种基本数据类型的绑定,如int String Double等类型,如果前端请求参数名和后台控制器类方法中的形参名不一样需要加入@RequestParam注解来进行间接数据绑定
package com.kangxg.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class UserController {
@RequestMapping("/selectUser")
public String selectUser(@RequestParam(value="user_id")Integer id)
{
System.out.println("id"+id);
return "success";
}
}
3.当需要传递多个不同的参数数据时,2方法中手动添加多个不同的数据类型参数,这时候就需要POJO类型进行数据绑定。
1)创建 com.kangxg.po 包并创建User类
package com.kangxg.po;
/**
*
* @author kangxg
* 用户POJO类
*/
public class User {
private Integer id;
private String username;
private Integer password;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username= username;
}
public Integer getPassword()
{
return password;
}
public void setPassword(Integer password)
{
this.password = password;
}
}
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)在jsp文件夹下创建register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
</head>
<body>
<form action ="${pageContext.request.contextPath }/registerUser" mothod="post">
用户名:<input type = "text" name = "username"/><br/>
密 码:<input type = "text" name = "password"/><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
4) debug
http://localhost:8080/SpringMVCDataBind/toRegister
这时候 数据可通过User类进行传递
4.绑定包装POJO
使用简单POJO类型可以满足完成多数的数据绑定,但有时候客户端请求中传递的参数会比较复杂。例如,在用户查询订单时,页面传递的参数可能包含订单编号、用户名称等信息,这就包含了订单和用户对象的信息。如果将订单和用户的所有查询条件都封装在一个简单POJO中,显然会比较混乱,这时就可以考虑使用包装POJO类型的数据绑定。
所谓的包装POJO,就是一个POJO中包含另一个简单的POJO,例如,在订单对象中包含用户对象,这样在使用时,就可以通过订单查询到用户信息。
1)在com.kangxg.po 包中创建Orders订单类
package com.kangxg.po;
/**
*
* @author kangxg
* 订单POJO
*/
public class Orders {
private Integer ordersId;
private User user;
public Integer getOrdersId()
{
return ordersId;
}
public void setOrdersId(Integer ordersId)
{
this.ordersId = ordersId;
}
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return user;
}
}
2)在com.kangxg.controller 包中创建OrdersController订单控制器类
package com.kangxg.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.kangxg.po.Orders;
import com.kangxg.po.User;
@Controller
public class OrdersController {
/**
*
* 向订单查询页面跳转
*/
@RequestMapping("/tofindOrdersWithUser")
public String tofindOrdersWithUser()
{
return "orders";
}
/**
*
* 查询订单和用户信息
*/
@RequestMapping("/findOrdersWithUser")
public String tofindOrdersWithUser(Orders orders)
{
Integer orderId = orders.getOrdersId();
User user = orders.getUser();
String username = user.getUsername();
System.out.println("orderId="+orderId);
System.out.println("username="+username);
return "success";
}
}
3)在jsp文件夹中创建order.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册</title>
</head>
<body>
<form action ="${pageContext.request.contextPath }/findOrdersWithUser" mothod="post">
订单编号:<input type = "text" name = "ordersId"/><br/>
所属用户:<input type = "text" name = "user.username"/><br/>
<input type="submit" value="查询"/>
</form>
</body>
</html>
4) debug 运行
5.一般情况下,使用基本数据类型和POJO类型的参数数据已经能够满足需求,然而有些特殊类型的参数是无法在后台进行直接转换的,例如日期数据就需要开发者自定义转换器(Converter)或格式化(Formater)来进行数据绑定
1)Converter
创建com.kangxg.convert 包 ,并创建日期转换类 DateConverter
package com.kangxg.convert;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
public class DateConverter implements Converter<String,Date> {
private String datePattern = "yyyy-MM-dd HH:mm:ss";
@Override
public Date convert(String source)
{
SimpleDateFormat sdf = new SimpleDateFormat( datePattern);
try{
return sdf.parse(source);
}catch(ParseException e)
{
throw new IllegalArgumentException("无效的日期格式,请使用这种格式:"+datePattern);
}
}
}
在配置文件中增加配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.kangxg.controller"/>
<!-- 定义视图解析器 -->
<bean id = "viewResolver" class ="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 设置前缀 -->
<property name = "prefix" value="/WEB-INF/jsp/"/>
<!-- 设置后缀 -->
<property name = "suffix" value=".jsp"/>
</bean>
<!-- 显示的装配自定义类型转换器 -->
<mvc:annotation-driven conversion-service="conversionService"/>
<!-- 自定义类型转换器配置 -->
<bean id = "conversionService" class ="org.springframework.context.support.ConversionServiceFactoryBean">
<property name = "converters">
<set>
<bean class = "com.kangxg.convert.DateConverter"/>
</set>
</property>
</bean>
</beans>
在com.kangxg.DateController控制器类
package com.kangxg.controller;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
*
* @author kangxg
* 日期控制器类
*/
@Controller
public class DateController {
/**
*
* 使用自定义类型数据绑定日期数据
*/
@RequestMapping("/customDate")
public String CustomDate(Date date)
{
System.out.println("date = "+date);
return "success";
}
}
debug