request

一、概念

1. 定义: 代表http请求 的对象 

二、Request继承关系

ServletRequest接口

    |--- HttpServletRequest接口

三、Request对象提供的功能

1.获取客户端的基本信息

  getRemoteAddr() – 获取客户机的IP地址  addr:0:0:0:0:0:0:0:1

2.获取请求头信息

getRequestURL – 获取发送请求的完整url   url: http://localhost/day14/RequestDemo1

getRequestURI – 获取请求行中的请求资源路径    uri: /day14/RequestDemo1

getMethod – 获取请求方式   method: GET

getHeader(String name) – 根据请求头的名称获取对应的值 

3.获取请求参数

getParameter(String name) – 根据请求参数的名称获取参数值

getParameterValues(String name) -- 根据请求参数的名称获取所有参数值组成的数组

getParameterMap() – 获取所有请求参数组成的map集合

4.实现请求转发(A向我借钱,我叫班长借钱给A,但A仍然以为是我借钱给他的

1)请求转发的过程

2)特点:

  转发是一次请求对应一次响应 (客户端发送一次请求,服务器发送一次响应); 

  地址栏不会发生变化 (浏览器不知情);

   转发只能在同一个WEB应用内部的资源之间进行跳转

3)方法

   request.getRequestDispatcher("/RequestDemo5"). forward(request, response);

	protected void doGet(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException {
		
		//将请求转发给RequestDemo5
		request.getRequestDispatcher("/RequestDemo5").forward(request, response);	
	}

4)注意1:如果转发过程中,如果向response缓冲器写入数据并且强制发送给浏览器且强制发送给浏览器,转发将失败

5)注意2:同一个servlet不能被转发多次(A不能同时转发给B和C),但可以多重转发(A转发给B,B转发给C)

5.作为域对象

1)域对象:如果一个对象具有一个可以被看见的范围,那么可以在整个范围内实现资源的共享 ;

2)相关方法:

request.setAttribute(String name, Object value);   -- 往request域中(map)添加一个域属性

 

request.getAttribute(String name);    -- 根据属性名获取request域中的属性值

 

request.removeAttribute(String name);   -- 根据属性名删除request域中的属性

 

request.getAttributeNames();   -- 获取request域中所有的属性名称组成的枚举.

6.实现请求包含

1)注意:只能包含同一个 dynamic web project

2) 如果浏览器访问服务器中的某一个ServletA, ServletA在处理请求时不能够独立的处理这次请求, 需要ServletB帮忙一同处理这次请求, 这时可以在ServletA将ServletB包含进来, 结果是由ServletA和ServletBy共同来处理该请求, 处理的结果也会合并在一起, 响应给浏览器

	protected void doGet(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException {
		//demo7处理的结果
		response.getWriter().write("demo7...before..");
		response.getWriter().println();
		
		//将demo8包含进来和demo7共同来处理这次请求
		request.getRequestDispatcher("/RequestDemo8").include(request, response);
		
		response.getWriter().write("demo7...after..");
		response.getWriter().println();
	}

四、Request生命周期

生命周期: 一次请求开始创建request,一次请求结束(服务器响应该请求)销毁request对象

作用范围: 整个请求链

主要功能: 在整个请求链中实现数据的共享

五、请求参数乱码问题

例如: ....?name=牛逼   

在向服务器提交请求参数是,如果参数中含有中文参数,就会出现乱码问题。

原因:

1.浏览器在发送数据时使用utf-8码表---如果浏览器在打开网页时使用的是utf-8,浏览器就会使用相同的编码来发送请求参数;

2.服务器在接受数据时使用的是iso8859-1码表 :如果没有通知浏览器使用哪一个编码,服务器默认使用iso8859-1来接受参数;

解决方法:

方法1:通过手动编码器来解决

            String username = request.getParameter("username");
		System.out.println("username"+username);
		byte[] bytes = username.getBytes("iso8859-1"); //编码
		username = new String(bytes,"utf-8");   //解码
		System.out.println("username:"+username);

方法2:

1.如果是POST提交 

  request.setCharacterEncoding(“utf-8”); //通知服务器使用utf-8码表来接收请求实体内容中的数据

2.如果是GET提交,采用上述手动解编码  或者  修改服务器核心配置文件server.xml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值