普歌—云言团队—Request对象简析

Request对象简析

Request定义:
request对象是Servlet中service的一个参数,当浏览器发出请求时,服务器会自动创建一个Reques对象,用来封装请求数据,然后在Servlet中调用service方法时,将Request对象依次传递到各个Servlet,请求数据进行处理。
Request的使用:
1,request:获取请求消息

*方法:
(1),获取请求行数据

		//1,获取请求方式:GET
		String getMethod()
		//2,(*) 获取虚拟目录:/day14
		String getContextPath
		//3,获取Servlet路径:/demo1  
		Striing getServletPath()
		//4,获取get方法请求参数:Username=zhangsan
		String getQuerySstring()
		//5,获取请求URI:/day14/demo1
		String getRequestURI()				
		String Buffer getRequestURL()  	
		//6,获取协议及版本:HTTP/1.1
		String getProtocol()
		//7,获取客户机的IP地址
		String getRemoteAddr()
		(2),获取请求头数据
					*两个方法
			//通过请求头的名称获取请求头的值
			String getHeader(String name)
			
			//获取所有的请求头名称
			Enumeration<Sstring> getHeaderNames()
	(3),获取请求体数据
				*请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
		//获取字节输入流,可以操作所有类型数据(文件类,类如文本,视频等)		
			ServletInputStream getInpuStream()

2,其他功能

	//1,获取请求参数通用的方法 :(不论是get还是post请求方式都可以使用下列方法来获取请求参数)
		//根据参数名称获取参数值
	String getParameter(String name):根据参数名称获取参数值
	
	//2,根据参数名称获取参数值的数组   hobby=xx&hobby=game
	String getParameterValues(String name):
	
	//3,获取所有请求的参数名称
	 Enumeration<String[]> getParameterMap()
	 
	//4,获取所有参数的map集合
	Map<String,String[]> getParameterMap()

请求转发:

一种在服务器内部的资源跳转方式
		(当浏览器发出请求,需要调用项目内的多个资源时,一个servlet文件无法完成请求,要调用多个servlet文件,需要从一个servlet文件跳转到另外一个servlet文件,请求转发相当于起了一个纽带作用,并联调动多个资源,可以有效的解决Servlet编辑代码冗余,职责不明确等问题)

1,实现步骤:

		if (u!=null){
                    resp.getWriter().write("登录成功");
                }else {
                //当满足条件时跳转需要调用的Servlet
			req.getRequestDispatcher("路径").forward(req,resp);
			//路径,即需要调用的Servlet的相对路径名,可直接书写Servlet的别名

2,特点:

		(1)浏览器地址栏将不发生任何变化(转发可能会调用多个资源,但地址栏内只会显示一个资源名称)
		
		(2)只能转发到当前服务器内部的资源中。(转发所调用的方法必须是自己的服务器内存在的,不能调用别的服务器的资源)
		
		(3)转发是一次请求。(转发整体上可能会调用多个资源,但网页只会发出一个请求)

Request对象作用域

		原因:浏览器发出一个请求时,要完成最终目的可能需要经过几个Servlet对象的调用,对请求数据进行增加,修改删除等一系列处理,而怎么做到同一个Request对象可以被多个Servlet调用,就用到了Request对象作用域思想。
		
		作用 :解决一次请求内,经过请求 转发后,的不同Servlet共同调用同一个Request对象
		
		运行步骤:调用方法将Servlet对Request的修改转载进Request对象中,在进行下一个Servlet对Request对象进行操作时,将上一个Servlet对象的处理结果流转给它【有点小绕,望谅解】 
		
		原理:通过Request中的setAttribute和getAttribute	两个方法对Request的请求数据进行添加和取出,从而实现依次请求多次调用	

前一个Servlet

	
			if (u!=null){
                    resp.getWriter().write("登录成功");
                }else {
         //当满足条件时跳转需要调用的Servlet
             //将前一个Servlet对Request的处理封装为键值对的形式装载到Request对象中去
               	req.setAttribute("str","用户名或密码错误"); 
			req.getRequestDispatcher("路径").forward(req,resp);
			//路径,即需要调用的Servlet的相对路径名,可直接书写Servlet的别名

下一个Servlet

//通过键名将键值提取出来,在Servlet需要时加以调用
		String str= (String) req.getAttribute("str");

通过Request中的setAttribute和getAttribute

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值