欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

request

程序员文章站 2022-03-04 22:56:34
...

一、概念

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)请求转发的过程

request

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缓冲器写入数据并且强制发送给浏览器且强制发送给浏览器,转发将失败

request

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:通过手动编码器来解决

request

            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

request

相关标签: web