Request对象的用法「建议收藏」

2022-06-27 10:07:18 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

request对象,是浏览器访问服务器的一次请求对象,封装了http协议请求头和请求正文数据

是一次请求,数据于多次请求是不共享的,但是请求的对象是同一个

代码语言:javascript复制
System.out.println(request);
		if(request.getAttribute("name")==null){
			request.setAttribute("name", "jack");
			System.out.println("no");
		}else{
			System.out.println(request.getAttribute("name"));
		}

结果:

org.apache.catalina.connector.RequestFacade@574a7ff6 no org.apache.catalina.connector.RequestFacade@574a7ff6 no org.apache.catalina.connector.RequestFacade@574a7ff6 no

发现请求对象虽是同一个,但是数据是不共享的,可以看做每次请求都是独立的request对象

note:在转发时。request对象是共享的,数据能共享

request中的函数:

定义

public interface ServletRequest

定义一个Servlet引擎产生的对象,通过这个对象,Servlet可以获得客户端请求的数据。这个对象通过读取请求体的数据提供包括参数的名称、值和属性以及输入流的所有数据。

方法

1、getAttribute

public Object getAttribute(String name);

返回请求中指定属性的值,如果这个属性不存在,就返回一个空值。这个方法允许访问一些不提供给这个接口中其他方法的请求信息以及其他Servlet放置在这个请求对象内的数据。

2、getAttributeNames

public Enumeration getAttributeNames();

返回包含在这个请求中的所有属性名的列表。

3、getCharacterEncoding

public String getCharacterEncoding();

返回请求中输入内容的字符编码类型,如果没有定义字符编码类型就返回空值。

4、getContentLength

public int getContentLength();

请求内容的长度,如果长度未知就返回-1。

5、getContentType

public String getContentType();

返回请求数据体的MIME类型,如果类型未知返回空值。get方式返回null,post方式返回application/…….请求协议头

6、getInputStream

public ServletInputStream getInputStream() throws IOException;

返回一个输入流用来从请求体读取二进制数据。如果在此之前已经通过getReader方法获得了要读取的结果,这个方法会抛出一个IllegalStateException。

7、getParameter

public String getParameter(String name);

以一个String返回指定的参数的值,如果这个参数不存在返回空值。例如,在一个HTTP Servlet中,这个方法会返回一个指定的查询语句产生的参数的值或一个被提交的表单中的参数值。如果一个参数名对应着几个参数值,这个方法只能返回通过getParameterValues方法返回的数组中的第一个值。因此,如果这个参数有(或者可能有)多个值,你只能使用getParameterValues方法。

8、getParameterNames

public Enumeration getParameterNames();

返回所有参数名的String对象列表,如果没有输入参数,该方法返回一个空值。

9、getParameterValues

public String[] getParameterValues(String name);

通过一个String对象的数组返回指定参数的值,如果这个参数不存在,该方法返回一个空值。

10、getProtocol

public String getProtocol();

返回这个请求所用的协议,其形式是协议/主版本号.次版本号。例如对于一个HTTP1.0的请求,该方法返回HTTP/1.0。

11、getReader

public BufferedReader getReader() throws IOException;

这个方法返回一个buffered reader用来读取请求体的实体,其编码方式依照请求数据的编码方式。如果这个请求的输入流已经被getInputStream调用获得,这个方法会抛出一个IllegalStateException。

12、getRemoteAddr

public String getRemoteAddr();

返回发送请求者的IP地址。

13、getRemoteHost

public String getRemoteHost();

返回发送请求者的主机名称。如果引擎不能或者选择不解析主机名(为了改善性能),这个方法会直接返回IP地址。

14、getScheme

public String getScheme();

返回请求所使用的URL的模式。例如,对于一个HTTP请求,这个模式就是http。

15、getServerName

public String getServerName();

返回接收请求的服务器的主机名。

16、getServerPort

public int getServerPort();

返回接收请求的端口号。

17、setAttribute

public void setAttribute(String name, Object object);

这个方法在请求中添加一个属性,这个属性可以被其他可以访问这个请求对象的对象(例如一个嵌套的Servlet)使用。

18丶getLocale();

获取客户端的国际化信息—浏览器Internet选项中设置的语言环境

Locale loc = request.getLocale();

注:以下方法将被取消

getRealPath

public String getRealPath(String path);

返回与虚拟路径相对应的真实路径,如果因为某种原因,这一过程不能进行,该方法将返回一个空值。

这个方法和ServletContext接口中的getRealPath方法重复。在2.1版中,ServletContext接口将阐明一个 Servlet所能用的所有的路径的映射。该方法执行的结果将会与ServletContext中getRealPath方法的结果完全一样

演示参数接受的多种方式:

代码语言:javascript复制
<span style="color:#000000;"><form action="RequestServlet" method="post">
      Name:<input type="text" name="name"/><br/>
      Age:<input type="text" name="age"/><br/>
            爱好:
       <input type="checkbox" name="hoby" value="MUSIC"/>音乐   
       <input type="checkbox" name="hoby" value="MTV"/>电视  
       <input type="checkbox" name="hoby" value="driver"/>开车<br/>
             性别:
       <input type="radio" name="sex" value="0" checked="checked"/>男 
       <input type="radio" name="sex" value="1"/>女
      <input type="submit" value="提交"/>
    </form></span>

后台接受:

代码语言:javascript复制
<span style="color:#000000;">public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setCharacterEncoding("utf-8");
		//明确知道单一值的参数名:(文本/密码框/单选按钮/选择下拉框)
		String name=request.getParameter("name");
		String age=request.getParameter("age");
		String radio=request.getParameter("sex");
		System.out.print(name "," age "," radio ",");
		//明确知道多值的参数名:(复选框)
		String[] hoby=request.getParameterValues("hoby");
		for(String value:hoby){
			System.out.print(value ",");
		}
		System.out.println("-------------------");
		//不明确单一值参数名和参数值Enumeration<String>遍历
		Enumeration<String> en=request.getParameterNames();
		while(en.hasMoreElements()){
			String paramName=en.nextElement();
			System.out.print(paramName ":");
			//单一值
			//String paramValue=request.getParameter(paramName);
			//多值
			//String paramValue=request.getParameterValues(paramName);
			//混合
			String[] paramValue=request.getParameterValues(paramName);
			for(String value:paramValue){
				System.out.print(value ",");
			}
			System.out.println();
		}
		System.out.println("------------------");
		//不明确参数名和参数值Map<String, String[]>,利用Iterator(迭代器)遍历
		Map<String, String[]> map=request.getParameterMap();
		Iterator<Entry<String, String[]>> it=map.entrySet().iterator();
		while(it.hasNext()){
			Entry<String, String[]> e=it.next();
			String paramName=e.getKey();
			System.out.print(paramName ":");
			String[] paramValue=e.getValue();
			for(String value:paramValue){
				System.out.print(value ",");
			}
			System.out.println();
		}
	}</span>

结果:

李四,12,1,MUSIC,driver,——————- sex:1, age:12, name:李四, hoby:MUSIC,driver, —————— sex:1, name:李四, age:12, hoby:MUSIC,driver,

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133379.html原文链接:https://javaforall.cn

0 人点赞