JAVA获取表单参数的几种方式

来源:互联网 发布:初中数学网络研讨 编辑:程序博客网 时间:2024/06/06 02:41

好记性不如赖笔头…………

java代码

@Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        req.setCharacterEncoding("UTF-8");//针对的post方式提交的乱码问题        getParamter4(req);        getParamter3(req);        getParamter2(req);        getParamter1(req);    }    /**     * @描述:通过流的方式获取表单参数     * @时间:2017年6月22日03:59:51     * @注意:     * @作者:Ckinghan     * @param req     * @throws IOException     * @throws UnsupportedEncodingException     */    private void getParamterInputStream(HttpServletRequest req) throws IOException, UnsupportedEncodingException {        ServletInputStream inputStream = req.getInputStream();        int i = 1;         byte[] bs = new byte[1024];        while((i = inputStream.read(bs)) != -1){            System.out.println(new String(new String(bs, 0, i).getBytes(),"UTF-8"));        }    }    /**     * @描述:获取参数的方法三四:使用的方法与方法三是相同的,只是这里是别人封装好的,只须要几句代码就可以完成     * @时间:2017年6月22日02:59:48     * @注意:需要导入如下两个JAR包:commons-beanutils-1.8.3、commons-logging-1.1.1     * @作者:Ckinghan     * @param req     */    private void getParamter4(HttpServletRequest req) {        //创建实体对象        User user = new User();        try {            //通过封装好的工具类将表单中的数据写入到实体对象对应的属性中            BeanUtils.populate(user, req.getParameterMap());        } catch (Exception e) {            e.printStackTrace();        }        //输出实体对象        System.out.println("新的方法"+user);    }    /**     * @描述:获取参数的方法三:通过getParameterMap()返回参数的名称及对应的值,并保存在Map中     *              遍历Map,通过属性描述器获取对应 的set方法,并利用反射将数据写入对应实体的属性中,框架中常用     * @时间:2017年6月22日02:50:54     * @注意:     * @作者:Ckinghan     * @param req     */    private void getParamter3(HttpServletRequest req) {        //获取所有的参数名及参数值,以Map接收        Map<String, String[]> parameterMap = req.getParameterMap();        //创建User实例对象,用以保存表单提交的数据        User user = new User();        //遍历Map的数据        for (Map.Entry<String, String[]> paramter : parameterMap.entrySet()) {            //获取参数名            String name = paramter.getKey();            //获取参数值,因为有可能参数是checkbox类型的,所以统一使用数组接收            String[] value = paramter.getValue();            try {                //创建一个属性描述器,用以通过参数名获取对应的set 、 get方法                PropertyDescriptor propertyDescriptor = new PropertyDescriptor(name,user.getClass());                //获取与name对应的set方法                Method setMethod = propertyDescriptor.getWriteMethod();                //判断接收的值是否为null或值的个数是大于0                if(value != null && value.length > 0){                    //如果长度为1,说明只有一个参数                    if(value.length == 1){                        //利用反射,调用set方法将对应的值写入到实体类中                        setMethod.invoke(user, value[0]);                    }else{                        //利用反射将值写入实体中。注意:在JDK1.5之前,数组在传值时是被拆分开的,                        //这是会报错的,为了防止这种情况,使用强转为Object来避免                        setMethod.invoke(user, (Object)value);                    }                }            } catch (Exception e) {                e.printStackTrace();            }        }        //输出实体值         System.out.println(user);    }    /**     * @描述:获取参数的方法二     * @时间:2017年6月22日02:06:46     * @注意:     * @作者:Ckinghan     * @param req     */    private void getParamter2(HttpServletRequest req) {        //通过.getParameterNames()获取所有的参数名称         Enumeration<String> parameterNames = req.getParameterNames();        //遍历参数名称        while(parameterNames.hasMoreElements()){            //获取当前循环的参数名称             String nextElement = parameterNames.nextElement();            //根据当前的参数名称获取对应的值,因考虑到会接收checkbox类型的,所以使用了getParameterValues()方法返回数组            String[] parameterValues = req.getParameterValues(nextElement);            //将对应的参数值遍历输出            for (int i = 0;parameterValues != null && i < parameterValues.length; i++) {                System.out.println(nextElement+"\t"+parameterValues[i]);            }        }    }    /**     * @描述:获取参数的方法一     * @时间:2017年6月22日02:00:40     * @注意:     * @作者:Ckinghan     * @param req     */    private void getParamter1(HttpServletRequest req) {        //获取参数        String name = req.getParameter("userName");        String pwd = req.getParameter("pwd");        String sex = req.getParameter("sex");        String[] hobby = req.getParameterValues("hobby");        String city = req.getParameter("city");        System.out.println(name);        System.out.println(pwd);        System.out.println(sex);        System.out.println(city);        for (int i = 0;hobby != null &&  i < hobby.length; i++) {            System.out.print(hobby[i]+",");        }    }

html代码:

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>注册</title></head><body>    <form action="/httpServletRequest/index2" method="post" enctype="application/x-www-form-urlencoded">        用户名:<input name="userName" type="text"/><br/>        密码:<input name="pwd" type="password"/><br/>        性别:            <input name="sex" type="radio" value="男" checked="true"><input name="sex" type="radio" value="女"><br/>        爱好:            <input name="hobby" type="checkbox" value="羽毛球"/>羽毛球            <input name="hobby" type="checkbox" value="蓝球"/>蓝球            <input name="hobby" type="checkbox" value="钓鱼"/>钓鱼            <input name="hobby" type="checkbox" value="看书"/>看书<br/>        城市:            <select name="city">                <option value="">---请选择---</option>                <option value="郑州">郑州</option>                <option value="周口">周口</option>                <option value="漯河">漯河</option>                <option value="许昌">许昌</option>            </select><br/>        <input type="submit" value="提交"/>    </form></body></html>