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

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

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值