request详解

这两个对象可以模拟成袋子和手机:

服务器每次收到请求,都会给这个请求开辟一个新的线程

 服务器会把客户端的请求数据封装到request对象中,request就是请求数据的载体!(袋子)
 服务器还会创建response对象,这个对象与客户端连接在一起,它可以用来向客户端发送响应。(手机) 

********************************************************************************************************************

request:

request是jsp中 重要的对象,每个request对象封装这一次用户请求,并且所有的请求参数都被封装在request对象中,因此request对象是获取请求参数的重要途径。

除此之外,request可代表本次请求范围,所以还可用于操作request范围内的属性。

request的方法大家可以查看HttpServletRequest的API下面对其中的几个常用的方法做详细的解释

* 获取常用信息
    > 获取客户端IP,案例:封IP。request.getRemoteAddr()
    > 请求方式,request.getMethod(),可能是POST也可能是GET(HttpServlet中的service方法有判断是get和post请求的语句,好让子类通过该方法根据需要执行get或者post)
* 获取HTTP请求头(****标记的是最重要的方法)
    > *****String getHeader(String name),适用于单值头
    > int getIntHeader(String name),适用于单值int类型的请求头
    > long getDateHeader(String name),适用于单值毫秒类型的请求头
    > Enumeration<String> getHeaders(String name),适用于多值请求头

<span style="font-size:18px;">/**
 * 演示:获取客户端IP地址,获取请求方式,获取user-Agent,得到客户端的信息(操作系统浏览器)。
 * @author PC
 */
public class ASerlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
        String addr = request.getRemoteAddr();//获取客户端的IP地址
        System.out.println("IP:"+addr);
        System.out.println("请求方式:"+request.getMethod());//获取请求方式
        String userAgent = request.getHeader("User-Agent");
        System.out.println(userAgent);
	}
}</span>

* 获取请求URL

假设一路径为:
http://localhost:8080/day10_2/AServlet?username=xxx&password=yyy

则执行下列方法分别取值为
    > String getScheme():获取协议,http
    > String getServerName():获取服务器名,localhost
    > String getServerPort():获取服务器端口,8080
    > *****String getContextPath():获取项目名,/day10_2
    > String getServletPath():获取Servlet路径,/AServlet
    > String getQueryString():获取参数部分,即问号后面的部分。username=xxx&password=yyy
    > String getRequestURI():获取请求URI,等于项目名+Servlet路径。/day10_2/AServlet
    > String getRequestURL():获取请求URL,等于不包含参数的整个请求路径。http://localhost:8080/day10_2/AServlet



* 获取请求参数:请求参数是由客户端发送给服务器的!有可能是在请求体(POST),也可能是在URL之后(GET)
请求参数:有一个参数一个值的,还有一个参数多个值!
    > *****String getParameter(String name):获取指定名称的请求参数值,适用于单值请求参数
    > String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数
    > Enumeration<String> getParameterNames():获取所有请求参数名称
    > *****Map<String,String[]> getParameterMap():获取所有请求参数,其中key为参数名,value为参数值。

* 请求转发和请求包含
    RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");  使用request获取RequestDispatcher对象,方法的参数是被转发或包含的Servlet的Servlet路径
    请求转发:*****rd.forward(request,response);
    请求包含:rd.include(request,response);


    有时一个请求需要多个Servlet协作才能完成,所以需要在一个Servlet跳到另一个Servlet!
    > 一个请求跨多个Servlet,需要使用转发和包含。
    > 请求转发:由下一个Servlet完成响应体!当前Servlet可以设置响应头!(留头不留体)
    > 请求包含:由两个Servlet共同未完成响应体!(都留)
    > 无论是请求转发还是请求包含,都在一个请求范围内!使用同一个request和response!

* 请求转发和重定向的区别
    > 请求转发是一个请求一次响应,而重定向是两次请求两次响应
    > 请求转发地址栏不变化,而重定向会显示后一个请求的地址
    > 请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其他Servlet,还能定向到其他项目
    > 请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名!
    > 请求转发和重定向效率是转发高!因为是一个请求!
      <> 需要地址栏发生变化,那么必须使用重定向!
      <> 需要在下一个Servlet中获取request域中的数据,必须要使用转发

* request域
    Servlet中三大域对象:request、session、application,都有如下三个方法:
    > void setAttribute(String name, Object value)
    > Object getAttribute(String name)
> void removeAttribute(String name);
    > 同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。

getAttribute和getParameter的区别:

getParameter是获取参数的方法,参数是客户端给服务器传的值,而getAttribute是servlet转发之间为了共享某些数据的方法,这是两者间的本质差别。

注意:请求参数的相关方法全是get方法,不允许设置,相当于用户传递什么你就得用什么,而request域中有设置属性的方法,因为转发的双方都是服务器,所以可以一个服务器使用setAttribute设置属性,一个服务器getAttribute使用属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值