form表单传递到servlet数据的封装

form表单传递到servlet数据的封装

一、前言:

为什么要封装

先看看初始代码:

addUser.jsp中代码段

<!-- 这里只是写个测试,数据没用到handler也没用到BaseServlet -->
<form action="${ctxPath }/userInfo.do" method="post">
	<input type="hidden" name="handler" value="addUser"> 
	
	用户名称:<input type="text" name="realName"><br>
	别名:<input type="text" name="avatar"><br>
	性别:<input type="radio" name="gender" value="F">女<input type="radio" name="gender" value="M">男<br>
	生日:<input type="text" name="birthday"><br>
	邮箱:<input type="text" name="email"><br>
	电话:<input type="text" name="phone"><br>
	
	<input type="submit" value="提交">
</form>


UserInfoServlet.java中代码段

request.setCharacterEncoding("UTF-8");
String realName=request.getParameter("realName");
String avatar=request.getParameter("avatar");
String gender=request.getParameter("gender"); 
String birthday=request.getParameter("birthday"); 
String email=request.getParameter("email");
String phone=request.getParameter("phone"); 


 

你会发现 StringrealName=request.getParameter("realName"); 这种代码要写一堆,如果一个表单几十条数据(写表单的瓜皮丧心病狂啊)。

就需要几十条get方法。

 

然后封装成对象,就要写几十条set方法。

(例如:UserDetailInfo udi = new UserDetailInfo();

               udi.setRealName(realName);

               ......balabala

 

很不方便。所以,愚蠢的人类妄图want to 封装伊特。

 

二、工具包:

commons-beanutils包

用maven导入。如果没用过maven可以看我的上一篇文章如何使用maven,哦好吧,我还没写,这是个假的超链接,先立个flag在这吧。

导入代码

    <dependency>

        <groupId>commons-beanutils</groupId>

        <artifactId>commons-beanutils</artifactId>

        <version>1.9.3</version>

    </dependency>

复制粘贴进pom.xml即可

主要使用org.apache.commons.beanutils.BeanUtils类的populate方法

 

 

三、使用:

//将属性全放到map里面。相当于那一堆get

Map<String, String[]> map = request.getParameterMap();

System.out.println("========看看是个啥========>"+ map);

 

输出:

========看看是个啥========>org.apache.catalina.util.ParameterMap@20a1e884

 

发现阔以直接存Map里。

 

//然后将请求的Map封装成JavaBean。相当于一堆set

BeanUtils.populate(udi, map);

System.out.println("==================>" + udi);

输出:==================>UserDetailInfo[userId=0, realName=chenyu, gender=M, avatar=xue, phone=999, email=soccor@163.com,birthday=Thu May 09 00:00:00 GMT+08:00 1996]

HTTP Status 500

 

还差一个东西。封装时日期格式不对。

UserDetailInfo.java中定义属性时:

private Date birthday;

String和Date相遇的尴尬

 

解决:

利用这个类的方法 org.apache.commons.beanutils.ConvertUtils将String转换成日期格式

UserInfoServlet.java中代码段

//添加一个转换器。成功转换日期
ConvertUtils.register(new Converter(){
			public Date convert(Class type, Object value) {
				if(value != null){
					try {
						return new SimpleDateFormat("yyyy-MM-dd").parse(value.toString());
					} catch (ParseException e) {
						e.printStackTrace();
					}
				}
				return null;
			}
			
		}, Date.class);

添加上之后,输出:==================>UserDetailInfo[userId=0, realName=chenyu, gender=M, avatar=xue, phone=999, email=soccor@163.com,birthday=Thu May 09 00:00:00 GMT+08:00 1996]

所以,这个代码段的作用是减去一个删除线(我在扯淡)。是将String转换成日期格式。

 

四、完整java代码:

BaseServlet祥见利用反射简化(抽象)Servlet层

反射基础详见java反射机制

 

UserInfoServlet.java完整代码

package com.zzit.mvc.user.action;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;

import com.zzxtit.mvc.common.servlet.BaseServlet;
import com.zzxtit.mvc.user.entity.UserDetailInfo;


@WebServlet("/userInfo.do")
public class UserInfoServlet extends BaseServlet{

	private static final long serialVersionUID = 7050340646138731680L;

	public void addUser(HttpServletRequest request, HttpServletResponse response) throws Exception{
		
		request.setCharacterEncoding("UTF-8");
		
		UserDetailInfo udi = new UserDetailInfo();
		
		//将属性全放到map里面
		Map<String, String[]> map = request.getParameterMap();
		System.out.println("=========看看是个啥========>" + map);
		
		//添加一个转换器。成功转换日期
		ConvertUtils.register(new Converter(){
			public Date convert(Class type, Object value) {
				if(value != null){
					try {
						return new SimpleDateFormat("yyyy-MM-dd").parse(value.toString());
					} catch (ParseException e) {
						e.printStackTrace();
					}
				}
				return null;
			}
			
		}, Date.class);
		
		
		
		//将请求的Map封装为JavaBean
		BeanUtils.populate(udi, map);
		System.out.println("==================>" + udi);	
	}
}

 

输出:=========看看是个啥========>org.apache.catalina.util.ParameterMap@20a1e884

==================>UserDetailInfo[userId=0, realName=chenyu, gender=M, avatar=xue, phone=999,email=soccor@163.com, birthday=Thu May 09 00:00:00 GMT+08:00 1996]

 

五、总结:

这次学到了一个很简单的方法封装数据,以后写后台又方便了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值