servlet 获取表单数据

来源:互联网 发布:社交网络 评论音轨 编辑:程序博客网 时间:2024/05/21 11:34

html注册表单

<!DOCTYPE html><html>  <head>    <title>Login.html</title>    <meta name="keywords" content="keyword1,keyword2,keyword3">    <meta name="description" content="this is my page">    <meta name="content-type" content="text/html; charset=UTF-8">    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->  </head>  <body>    <form action="/M1/demo1" method="post">        用户名<input type="text" name="user"><br>        密码:<input type="password" name="pass"><br>        性别:<input type="radio" value="男" name="sex" checked="checked"><input type="radio" value="女" name="sex"><br>        爱好:<input type="checkbox" value="打球" name="like">打球            <input type="checkbox" value="打代码" name="like">打代码            <input type="checkbox" value="打游戏" name="like">打游戏<br>        去过的城市:<select name="select">                        <option>请选择</option>                         <option value ="北京">北京</option>                         <option value ="上海">上海</option>                         <option value ="广州">广州</option>                </select><br>          <input type="submit" value="提交">    </form>  </body></html>

第一种接受数据方法

直接通过找名字来获取值

import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Demo1 extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        //接受到表单的数据, 先使用request设置服务器应该使用的字符编码,否则字符不统一会出现乱码        request.setCharacterEncoding("UTF-8");        //获取请求的数据        String user = request.getParameter("user");        String pass = request.getParameter("pass");        String sex = request.getParameter("sex");        String[] like = request.getParameterValues("like");        String to = request.getParameter("select");        System.out.println(user+pass+sex+to);        for (int i=0; like!=null && i<like.length; i++){            System.out.println(like[i]);        }    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doGet(request, response);    }}

第二种方法

上一种是通过请求对象一个一个的获取其值,而这种法子是先将名字全部获取到,在通过循环获取取出表单类型的值

        request.setCharacterEncoding("UTF-8");        Enumeration<String> names = request.getParameterNames();        while (names.hasMoreElements()){            String name = (String)names.nextElement(); // 得到名字            String[] values = request.getParameterValues(name);            for (int i=0; values!=null&&i<values.length; i++){                System.out.println(values[i]);            }        }

第三种方法

将数据封装到类中
创建用户类(字段要和表单名一致)

import java.util.Arrays;public class User {    private String user;    private String pass;    private String sex;    private String[] like;    private String select;    public String getUser() {        return user;    }    public void setUser(String user) {        this.user = user;    }    public String getPass() {        return pass;    }    public void setPass(String pass) {        this.pass = pass;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public String[] getLike() {        return like;    }    public void setLike(String[] like) {        this.like = like;    }    public String getSelect() {        return select;    }    public void setSelect(String select) {        this.select = select;    }    @Override    public String toString() {        return "User [userName=" + user + ", pass=" + pass + ", sex=" + sex                + ", like=" + Arrays.toString(like) + ", select=" + select                + "]";    }}

接受数据的servlet代码

    request.setCharacterEncoding("UTF-8");        User u = new User();        //获得所有名和值        Map<String, String[]> map = request.getParameterMap();        for (Map.Entry<String, String[]> m : map.entrySet()){            String name = m.getKey();            String[] value = m.getValue();            try {                //创建属性描述器                PropertyDescriptor pd = new PropertyDescriptor(name, User.class);                //得到属性                Method set = pd.getWriteMethod();                if(value.length == 1){                    set.invoke(u, value[0]);                }else{                    set.invoke(u, (Object)value);                }            } catch (Exception e) {                e.printStackTrace();            }        }        System.out.println(u.toString());

第四种方法

需要导入两个jar包

  • http://download.csdn.net/download/hw1287789687/3127361
  • http://download.csdn.net/download/badlucktang/1594563
  •         request.setCharacterEncoding("UTF-8");        User u = new User();        try {            BeanUtils.populate(u, request.getParameterMap());            System.out.println(u);        } catch (Exception e) {            e.printStackTrace();        } 

    积累

  • request请求有很多get方法可以获取客户端的信息,还可以获取来自表单的数据
    对表单数据类型的不同,获取的方法不同, 像文本框和密码框或者单选框直接用getParameter(名)方法获取数据, 像多选框使用getParameterValues(名)获取多组数据
  • request.setCharacterEncoding(编码格式);
    作用是在后来getParmeter()获取数据后不会出现乱码, 字符集统一的作用
  • 单选框按钮可以通过checked=”checked” 来设置默认选中
  • 原创粉丝点击