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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js中的表单序列化不会序列化未选中的单选框

    js中的表单序列化不会序列化未选中的单选框

    2021年5月25日
    111
  • module numpy has no attribute random_python attribute

    module numpy has no attribute random_python attribute介绍Python报错”AttributeError:module’numpy’hasnoattribute’unit8′”的解决方案

    2025年12月15日
    3
  • 使用git的基本流程总结

    使用git的基本流程总结之前是写在debug记录里的,因为需要经常查阅所以放在这里方便参考。总结一下要用git的步骤:设置ssh设置gitglobalgitconfig–globaluser.name”ASxx”gitconfig–globaluser.email”123456789@qq.com”vscode打开终端的快捷键:control+shift+~clone创建分支gitcheckout-bmy-test//在当前分支下创建my-test的本地分支分支git

    2022年9月22日
    2
  • 谈谈阿里云服务器

    谈谈阿里云服务器原文发布于2012年09月29日  一年多之前,也就11年5月份的样子,阿里云云服务器产品线终于上线了。但那时候,国内完全没有能称得上云服务器的,很多小公司就是搞个VPS就叫云服务器了。以至于阿里云云服务器刚出来的时候,很多站长也是这么说的。那会儿我国外的虚拟主机也即将到期,而且国外访问速度确实要差不少。所以当时咬咬牙,狠下心来花了1999元买了一台(即现在的标准A,已经涨价了,呵呵,目前

    2022年10月9日
    4
  • 亿图图示2021用户名和密钥激活码 mac【2021.7最新】[通俗易懂]

    (亿图图示2021用户名和密钥激活码 mac)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSW…

    2022年3月21日
    5.5K
  • 开发手机游戏的一点心得(一)

    开发手机游戏的一点心得(一)作者:风过回廊文章来源:http://www.sf.org.cn2003年三月份,我刚开始接触了手机游戏的开发。开发手机上的游戏程序,最初仅仅只是出于兴趣爱好,利用业余时间自己陆陆续续的也写了一些Code,得到了一些经验,本来是想敝帚自珍的,但是朋友的鼓励,使我决定把自己的一点点心得体会写出来,藉以告慰我在学习中所阵亡的千千万万脑细胞,也为和我一样在黑暗的艰难摸索人们中提供一些微不足道的帮助吧

    2022年4月30日
    56

发表回复

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

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