httpServletRequest对象获取请求参数

本文介绍了一个JavaWeb用户注册的示例,展示了如何使用index.jsp页面进行用户输入,并通过RequestDemo4类处理这些输入,利用JavaBean(User)来封装用户数据。特别关注了如何使用Apache Commons BeanUtils库简化参数赋值过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

index.jsp文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
    <title>注册页面</title>
  </head>

 <body>
    <form action="/Request/servlet/RequestDemo4" method="post">
        用户名:<input type="text" name="username"/><br/>
        密码:<input type="password" name="password"/><br/>
        确认密码:<input type="password" name="password"/><br/>
        <input type="submit" value="注册"/>
    </form>
  </body>

</html>

User.java文件:

package com.neu.domain;

import java.util.Arrays;

public class User {
    private String username;
    private String password[];
    private String gender;
    public String getUsername() {//读属性,属性名称username
        return username;
    }
    public void setUsername(String username) {//写属性,属性名username
        this.username = username;
    }

    public String[] getPassword() {
        return password;
    }
    public void setPassword(String[] password) {
        this.password = password;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    @Override
    public String toString() {
        return "User [username=" + username + ", password="
                + Arrays.toString(password) + ", gender=" + gender + "]";
    }


}

RequestDemo4.java 文件:

package com.neu;

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

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

import org.apache.commons.beanutils.BeanUtils;

import com.neu.domain.User;

//获取请求参数
public class RequestDemo4 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        test8(request, response);
    }
    //终极解决方案:借助BeanUtil框架
    private void test8(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        User user = new User();
        System.out.println("封装前:"+user);
        try {
            BeanUtils.populate(user, request.getParameterMap());
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("封装后:"+user);
    }
    //getParameterMap获取参数:封装到JavaBean中
    private void test7(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //key:请求参数名 value:请求参数值数组
        Map<String,String[]> map = request.getParameterMap();
        User user = new User();
        System.out.println("封装前:"+user);
        for(Map.Entry<String, String[]> me:map.entrySet()){
            String paramName = me.getKey();//参数名称
            String paramValues[] = me.getValue();//参数值
            try {
                PropertyDescriptor pd = new PropertyDescriptor(paramName, User.class);
                Method m = pd.getWriteMethod();//setter方法
                if(paramValues.length>1){
                    m.invoke(user, (Object)paramValues);//参考补充视频:反射main方法
                }else{
                    m.invoke(user, paramValues);
                }
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        System.out.println("封装后:"+user);
    }
    //getParameterMap获取参数
    private void test6(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //key:请求参数名 value:请求参数值数组
        Map<String,String[]> map = request.getParameterMap();
        for(Map.Entry<String, String[]> me:map.entrySet()){
            System.out.println(me.getKey()+"="+Arrays.asList(me.getValue()));
        }
    }

    //把请求参数的值封装到JavaBean中
    //约定优于编码:表单的输入域的name取值和JavaBean中的属性(getter和setter方法)保持一致
    private void test5(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


        Enumeration<String> e = request.getParameterNames();//参数名
        User user = new User();
        System.out.println("封装前:"+user);
        while(e.hasMoreElements()){
            String paramName = e.nextElement();//即是JavaBean中的属性名称
            String paramValue = request.getParameter(paramName);
//          setUsername(paramValue); setPassword(paramValue);
            //JavaBean的内省
            try {
                PropertyDescriptor pd = new PropertyDescriptor(paramName, User.class);
                Method m = pd.getWriteMethod();//setter方法
                m.invoke(user, paramValue);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        System.out.println("封装后:"+user);
    }   
//  private void test4(HttpServletRequest request, HttpServletResponse response)
//          throws ServletException, IOException {
//      User user = new User();
//      System.out.println("封装前:"+user);
//      String username = request.getParameter("username");
//      String password = request.getParameter("password");
//      String gender = request.getParameter("gender");
//      user.setUsername(username);
//      user.setPassword(password);
//      user.setGender(gender);
//      System.out.println("封装后:"+user);
//  }   
    //以下内容只用简单的程序开发

    //获取所有的请求参数名和值
    private void test3(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Enumeration<String> e = request.getParameterNames();//参数名
        while(e.hasMoreElements()){
            String paramName = e.nextElement();
            String values [] = request.getParameterValues(paramName);
            System.out.println(paramName+"="+Arrays.asList(values));
        }
    }
    //获取重名请求参数的值
    private void test2(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");//不区分get还是post的
        String passwords[] = request.getParameterValues("password");//获取重名的请求参数值
        System.out.println(username+":"+Arrays.asList(passwords));
    }
    //获取单一的请求参数的值(用户所有的输入都是String)
    private void test1(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");//不区分get还是post的
        String password = request.getParameter("password");
        System.out.println(username+":"+password);
    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

需要的包:commons-beanutils-1.8.3.jar
commons-logging-1.1.1.jar
运行:http://localhost:8080/Request/
结果:
封装前:User [username=null, password=null, gender=null]
封装后:User [username=w’w’w, password=[111, 222], gender=null]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值