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

Request对象的用法「建议收藏」request对象,是浏览器访问服务器的一次请求对象,封装了http协议请求头和请求正文数据                         是一次请求,数据于多次请求是不共享的,但是请求的对象是同一个System.out.println(request); if(request.getAttribute(“name”)==null){ request.setAttribute

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

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

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

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方法的结果完全一样

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

<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>


后台接受:

<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.net/133379.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • centos7 top命令_linux安装top

    centos7 top命令_linux安装toptop命令Linuxtop命令用于实时显示process的动态。top参数详解第一行,任务队列信息**系统当前时间:**13:52:56**系统开机后到现在的总运行时间:**up66

    2022年7月28日
    3
  • 常用数据库排名及分类介绍[通俗易懂]

    常用数据库排名及分类介绍[通俗易懂]DB-Engines:2019年6月全球数据库排行DB-Engines数据库流行度排行榜6月更新已发布,排名前二十如下:总体排名和上个月相比基本一致,其中排名前三的Oracle、MySQL和MicrosoftSQLServer也是分数增加最多的三个数据库,增加的分数分别为13.67、4.67和15.57,三者的总分也均已超过一千。一、数据库的分类…

    2022年5月7日
    48
  • python format()函数的用法

    python format()函数的用法Pythonformat()函数的用法复制自博主 chunlaipiupiupiu 的博客,如有侵权,请联系删除python中format函数用于字符串的格式化通过关键字

    2022年7月6日
    18
  • mysql磁盘阵列部署_部署磁盘阵列

    mysql磁盘阵列部署_部署磁盘阵列1、mdadm命令用于管理Linux系统中的软件RAID硬盘阵列,格式为mdadm[模式][选项][成员设备名称]常用命令:mdadm-D/dev/md0#md0为自定义设备名,查看详细信息2、mdadm命令的常用参数和作用-a  检测设备名称-n  指定设备数量-l  指定RAID级别-C  创建(阵列卡)-v  显示过程-f   模拟设备损坏-r   …

    2022年6月12日
    40
  • 海思Hi3798硬件设计,Hi3798 datasheet(2)参考资料

    海思Hi3798硬件设计,Hi3798 datasheet(2)参考资料本文主要介绍Hi3798CV200芯片的硬件封装、管脚描述、管脚复用寄存器的配置方法、电气特性参数、原理图设计建议、PCB设计建议、热设计建议等内容。本文主要为硬件工程师提供硬件设计的参考。2.1封装Hi3798CV200芯片TFBGA(ThinFineBGApackage)封装,封装尺寸为19mm×19mm,管脚间距为0.8mm,管脚总数为433个,详细封装…

    2022年6月17日
    109
  • java接口和抽象类区别面试题_接口是一个特殊抽象类

    java接口和抽象类区别面试题_接口是一个特殊抽象类原文:http://blog.csdn.net/sunboard/article/details/38318231.概述一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可

    2025年6月11日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号