HttpServletRequest获取请求参数

本文详细解析了如何通过HTTP请求获取参数,并将其封装到JavaBean中,包括流形式获取请求正文、参数映射到JavaBean、以及处理多值参数的方法。通过实例演示了多种参数获取技巧及注意事项,旨在提升开发者对于HTTP请求处理的理解。
摘要由CSDN通过智能技术生成
------------------------------------------------RequestDemo2.java
<pre name="code" class="java">package cn.ITHong.Request;

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

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

import org.apache.commons.beanutils.BeanUtils;

import cn.ITHong.domain.User;

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

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

	}
	/**
	 * 以流的形式获取请求正文,<span style="color:#ff0000;">最基础的。。。。。。。</span>*/
	private void test7(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ServletInputStream in = request.getInputStream();
		int len = -1 ;
		byte[] b  = new byte[1024];
		while((len = in.read(b))!=-1)
			System.out.println(new String(b,0,len));
		in.close();
	}
	/**
	 * 获取所有参数和取值:实际开发中,<span style="color:#ff0000;">把数据封装到JavaBean中,非常简单,借助BeanUtils框架</span>。
	 * 直接把logging和
	 * Beanutil导入WebRoot->WEB-INF->lib就可以,他会自动生成到Web App Libraries
	 */
	private void test6(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		User user = new User();
		System.out.println("封装前:"+user);
		try {
			/**
			 * 实现原理就是test5(),编写代码时,请保持
			 * 表单输出与JavaBean的属性一致即可。*/
			BeanUtils.populate(user, request.getParameterMap());
		}  catch (Exception e) {
			e.printStackTrace();
		} 
		System.out.println("封装后:"+user);
	}
	/**
	 * 获取所有参数和取值:实际开发中,把数据封装到JavaBean中,SUN推荐做法,但是<span style="color:#ff0000;">不精简</span>
	 */
	private void test5(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		User user = new User();
		System.out.println("封装前:"+user);
		Map<String, String[]> map = request.getParameterMap();
		for(Map.Entry<String, String[]> me:map.entrySet())
		{
			String paramName = me.getKey();
			String[] values = me.getValue();
			try {
				/**直接传进去paramName很好,因为我压根就不知道是先传username
				 * 还是password,程序自己判断.同时方便在User类中添加新的"字段",
				 * 也就是添加新的"字段"随便加,压根就不用修改下列的编程
				*/
				PropertyDescriptor pd = new PropertyDescriptor(paramName,
						User.class);
				//依照前面传进来的paramName自己寻找setter方法
				Method m = pd.getWriteMethod();
				if(!(values.length>1))
				m.invoke(user, values);
				else {
					m.invoke(user, (Object)values);
				}
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
			
		}
		
		
		
		System.out.println("封装后:"+user);
	}
	/**
	 * 获取所有参数和取值:实际开发中,把数据封装到JavaBean中
	 */
	private void test4(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Enumeration<String> e = request.getParameterNames();// 所有的请求参数名
		User user = new User();
		System.out.println("封装前。。。"+user);
		//表单输入域的名称与JavaBean中的属性名称一致:使用内省,方便扩张。
		while (e.hasMoreElements()) {
			String paramName = (String) e.nextElement();
			String[] values = request.getParameterValues(paramName);
			try {
				/**直接传进去paramName很好,因为我压根就不知道是先传username
				 * 还是password,程序自己判断.同时方便在User类中添加新的"字段",
				 * 也就是添加新的"字段"随便加,压根就不用修改下列的编程
				*/
				PropertyDescriptor pd = new PropertyDescriptor(paramName,
						User.class);
				//依照前面传进来的paramName自己寻找setter方法
				Method m = pd.getWriteMethod();
				if(!(values.length>1))
				m.invoke(user, values);
				else {
					m.invoke(user, (Object)values);
				}
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
		System.out.println("封装后。。。"+user);
	}

	/**
	 * 获取所有参数和取值:实际开发中,把数据封装到JavaBean中
	 */
	private void test3(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Enumeration<String> e = request.getParameterNames();// 所有的请求参数名
		while (e.hasMoreElements()) {
			String paramName = (String) 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[] usernames = request.getParameterValues("username");
		String[] passwords = request.getParameterValues("password");
		System.out.println("用户名:");
		for (String es : usernames)
			System.out.println(es);
		System.out.println("密码:");
		for (String es : passwords)
			System.out.println(es);
	}

	/**
	 * 获取指定单一参数的值
	 */
	private void test1(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/**
		 * html可以重复定义同名字不同内容的变量,但是以下方法却只能接受第一个传过来的值
		 */
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println("用户名:" + username + "密码:" + password);
	}

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

}


 
 

-----------------------------------------------------------------------------------------------------User.java(JavaBean方法)

package cn.ITHong.domain;

import java.util.Arrays;

public class User {
	private String username;
	private String[] password;
	private String gender;
	
	
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String[] getPassword() {
		return password;
	}
	public void setPassword(String[] password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password="
				+ Arrays.toString(password) + ", gender=" + gender + "]";
	}
	
	
}
-------------------------------------------------------------------------------------------------------------regist.html
<!DOCTYPE html>
<html>
  <head>
    <title>regist.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="/Web07/servlet/RequestDemo2" method="post">
    	用户名:<input type="text" name="username"/><br/>
    	密码:<input type="password" name="password"/><br/>
    	请重新输入密码:<input type="password" name="password"/><br/>
    	请选择性别:<input type="text" name="gender"/><br/>
    	<input type="submit" value="注册"/>
    </form>
  </body>
</html>


### 回答1: HttpServletRequestJava Servlet API中的一个接口,用于获取HTTP请求的信息。可以通过HttpServletRequest对象获取请求参数获取请求参数的方法: 1. getParameter(String name):获取单个请求参数的值。 2. getParameterValues(String name):获取多个请求参数的值,返回一个字符串数组。 3. getParameterMap():获取所有请求参数的键值对,返回一个Map对象。 4. getQueryString():获取请求参数的原始字符串。 例如,以下代码可以获取名为“username”的请求参数的值: String username = request.getParameter("username"); 如果有多个名为“hobby”的请求参数,可以使用以下代码获取它们的值: String[] hobbies = request.getParameterValues("hobby"); 如果要获取所有请求参数的键值对,可以使用以下代码: Map<String, String[]> paramMap = request.getParameterMap(); 如果要获取请求参数的原始字符串,可以使用以下代码: String queryString = request.getQueryString(); ### 回答2: HTTP协议中,客户端(浏览器)发送请求时,会携带请求参数,用于向服务端(Web应用)传递数据。而在Java Web开发中,我们可以使用HttpServletRequest对象获取请求参数HttpServletRequest接口是Java Servlet规范中的一个接口,它代表了客户端发送的HTTP请求。该接口中提供了获取请求参数的方法,主要有以下几种方式: 1.通过getParameter方法获取请求参数。该方法的参数是一个String类型的key,用于指定需要获取参数名,该方法返回一个String类型的值,代表该参数名所对应的值。 例如,在如下的HTTP请求中,如果需要获取参数名为“username”的值,可通过如下方式进行: GET /test.jsp?username=zhangsan HTTP/1.1 Host: localhost:8080 //Java代码 String username = request.getParameter("username"); 2.通过getParameterValues方法获取请求参数。该方法用于获取一个参数名对应的多个值,返回值类型是一个String类型的数组。 例如,在如下的HTTP请求中,如果需要获取参数名为“hobby”的多个值,可通过如下方式进行: GET /test.jsp?hobby=sports&hobby=music HTTP/1.1 Host: localhost:8080 //Java代码 String[] hobbies = request.getParameterValues("hobby"); 3.通过getParameterMap方法获取所有请求参数。该方法返回一个Map对象,其中key为参数名,value为该参数名对应的值(数组类型)。 例如,在如下的HTTP请求中,如果需要获取所有参数,可通过如下方式进行: GET /test.jsp?username=zhangsan&age=20&hobby=sports&hobby=music HTTP/1.1 Host: localhost:8080 //Java代码 Map<String, String[]> parameterMap = request.getParameterMap(); 需要注意的是,在获取请求参数时,需要注意编码问题。因为HTTP请求中的参数值都是以URL编码(URL Encode)后的形式传递的,所以需要通过request.setCharacterEncoding方法进行解码,以避免出现中文乱码等问题。例如: //设置请求参数编码格式,一般为"UTF-8"或"GBK" request.setCharacterEncoding("UTF-8"); 综上所述,获取请求参数Java Web开发中非常常见的一个需求,我们可以通过HttpServletRequest接口提供的一系列方法来实现。在实际开发中,需根据具体情况选择合适的方法进行使用。 ### 回答3: 在Web开发中,HttpServletRequest是一个很重要的接口,它是代表客户端发出的HTTP请求的接口,其中我们可以通过HttpServletRequest获取请求参数。 我们一般在Java Servlet开发中使用HttpServletRequest对象得到HTTP请求的方法参数,其中包括GET、POST方式的请求数据。HttpServletRequest对象内部有一个Map对象,它是由请求参数(request parameter)所组成,我们可以通过调用request.getParameter(name)方法得到请求参数的值。 获取请求参数的第一步,我们需要先获取HttpServletRequest对象。在Java Servlet中,我们可以使用request对象来获取HttpServletRequest对象,代码如下: HttpServletRequest request = (HttpServletRequest) req; 获取请求参数的第二步,我们需要获取请求参数的名称和值,代码如下: String name = request.getParameter("name"); String age = request.getParameter("age"); 在获取参数时,需要根据具体的参数类型进行转换,例如将字符串类型的参数转换成数字等。 HttpServletRequest也提供了许多其他的方法,可以更方便地进行参数获取、属性的设置等操作。例如,我们还可以用代码request.getAttribute("name")获取请求属性的值。 总之,通过HttpServletRequest对象获取请求参数Java Servlet开发中的一个重要环节,它可以为我们更方便地处理用户请求提供帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值