servlet获取表单数据的源码

来源:互联网 发布:如何用微信付款淘宝 编辑:程序博客网 时间:2024/06/05 02:19

通用文件Register.html

<!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>Insert title here</title></head><body><form action="/day09_HttpServletRequest/servlet/demo3" method="post">用户名:<input type="text" name="username"/><br>密码:<input type="password" name="pwd"/><br>性别:<input type="radio" name="sex" value="男" checked="checked"/>男<input type="radio" name="sex" value="女"/>女<br>爱好:<input type="checkbox" name="hobby" value="篮球"/>篮球<input type="checkbox" name="hobby" value="唱歌"/>唱歌<input type="checkbox" name="hobby" value="编码"/>编码<br>所在城市:<select name="city"><option> --------请选择----------</option><option value="bj">北京</option><option value="sh">上海</option><option value="gz">广州</option></select><br><input type="submit" value="注册"/></form></body></html>


1.基础版本获取

private void test1(HttpServletRequest request) {//获取表单数据//根据表单中name属性的名,获取value属性的值方法String username = request.getParameter("username");String pwd = request.getParameter("pwd");String sex = request.getParameter("sex");String[] hobbys = request.getParameterValues("hobby");String city = request.getParameter("city");System.out.println(username);System.out.println(pwd);System.out.println(sex);for(int i=0;hobbys!=null&&i<hobbys.length;i++){System.out.print(hobbys[i]+"\t");}System.out.println();System.out.println(city);}
2.进阶版本(getParameterNames方法获取)

private void test2(HttpServletRequest request) {//获取所有的表单name的名字Enumeration names = request.getParameterNames();while(names.hasMoreElements()){String name = (String)names.nextElement();//得到每一个name名String[] values = request.getParameterValues(name);for(int i=0;values!=null&&i<values.length;i++){System.out.println(name+"\t"+values[i]);}}}

3.框架的方法获取
新建一个com.itheima.entity的包,里面新建一个User.java的类

package com.itheima.entity;import java.util.Arrays;//在实体类中的字段要与表单中的name名一致,约定优于编码public class User {private String username;private String pwd;private String sex;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 getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}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;}@Overridepublic String toString() {return "User [username=" + username + ", pwd=" + pwd + ", sex=" + sex+ ", hobby=" + Arrays.toString(hobby) + ", city=" + city + "]";}}

框架方法:

private void test3(HttpServletRequest request) {try {User u=new User();System.out.println("封装数据前:"+u);//获取表单数据Map<String,String[]> map = request.getParameterMap();for (Map.Entry<String, String[]> m : map.entrySet()) {String name = m.getKey();String[] value = m.getValue();//创建一属性描述器PropertyDescriptor pd=new PropertyDescriptor(name,User.class );//得到setter属性Method setter = pd.getWriteMethod();if(value.length==1){setter.invoke(u, value[0]);//给一个值的变量赋值}else{setter.invoke(u, (Object)value);//相当于给复选框赋值}}System.out.println("封装之后:"+u);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
4.最终版

(1)需在lib中添加两个jar包,可自行百度下载 commons-beanutils-1.8.3.jar commons-logging-1.1.1.jar

(2)具体方法:

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//要告诉服务器要使用说明编码,注意游览器使用的是编码传过来的就是什么编码request.setCharacterEncoding("UTF-8");try {User u=new User();System.out.println("封装数据前:"+u);BeanUtils.populate(u, request.getParameterMap());System.out.println("封装之后:"+u);} catch  (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}


提示:在myeclipse中快速添加try/catch block 方法,快捷键alt+shift+z



原创粉丝点击