JavaWeb学习-Servlet系列-22-HttpServletRequest获取表单内容并封装成高级对象

这篇还是来学习HttpServletRequest如何获取表单内容的相关方法,本篇重点学习getParameterMap()这个方法,就是得到表单里全部键值对,返回一个map对象。我们实际开发中,得到表单数据肯定不是为了打印到控制台,而是存入到数据库。在存入数据库之前,我们拿到零散的数据去操作效率很低,一般我们都要封装成高级对象(Java Bean),然后通过JDBC存入数据库。本篇具体来学习如何得到表单数据并封装成高级对象的过程。

1.先写一个高级对象User.java

package com.anthony.entity;

import java.util.Arrays;

public class User {
	private String userName;
	private String pwd;
	private String gender;
	private String[] hobby;
	private String city;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String[] getHobby() {
		return hobby;
	}
	public void setHobby(String[] hobby) {
		this.hobby = hobby;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	
	@Override
	public String toString() {
		return "User [userName=" + userName + ", pwd=" + pwd + ", gender=" + gender + ", hobby="
				+ Arrays.toString(hobby) + ", city=" + city + "]";
	}
	
	

}

这些字段和register.html中name一致,具体register.html内容请看前面文章。

 

2.ServletDemo.java内容

package com.anthony.servlet;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.anthony.entity.User;


public class ServletDemo4 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		try {
			User u = new User();
			System.out.println("封装数据之前的用户数据:" + u);
			//获取表单里数据,返回是一个map
			Map<String, String[]> map = req.getParameterMap();
			
			for (Entry<String, String[]> m : map.entrySet()) {
				String name = m.getKey();
				String[] value = m.getValue();
				
				//创建一个属性描述器
				PropertyDescriptor dp = new PropertyDescriptor(name, User.class);
				Method setter = dp.getWriteMethod();
				
				if(value.length == 1) {
					setter.invoke(u, value[0]);
				}else {
					setter.invoke(u, (Object)value);
				}
			}
			System.out.println("封装数据之后的用户数据:" + u);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	private void test(HttpServletRequest req) {
		//获取表单中全部name的值
		Enumeration<String> names = req.getParameterNames();
		while(names.hasMoreElements()) {
			String name = names.nextElement();
			
			//考虑到hobby下有多个值
			String[] values = req.getParameterValues(name);
			for (int i = 0; values != null && i < values.length; i++) {
				System.out.println(name +"\t"+ values[i]);
			}
		}
	}


	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
	
}

重点理解上面代码描述器PropertyDescriptor的使用,通过反射可以找到User.class,然后PropertyDescriptor对象有获取高级对象类中setter和getter方法,上面我们只用了得到setter方法,然后遍历map集合,封装成User对象。

测试运行效果

信息: Server startup in 522 ms
封装数据之前的用户数据:User [userName=null, pwd=null, gender=null, hobby=null, city=null]
封装数据之后的用户数据:User [userName=AnthonyLiu, pwd=123abc, gender=男, hobby=[唱歌, 编码], city=BJ]

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值