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

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

一、前言:

为什么要封装

先看看初始代码:

addUser.jsp中代码段


用户名称:
别名:
性别:
生日:
邮箱:
电话:


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-beanutilsgroupId>

        <artifactId>commons-beanutilsartifactId>

        <version>1.9.3version>

    dependency>

复制粘贴进pom.xml即可

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

 

 

三、使用:

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

Map 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 protected],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 protected],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 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 protected], birthday=Thu May 09 00:00:00 GMT+08:00 1996]

 

五、总结:

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


你可能感兴趣的:(Java,后台开发)