1 request和response简介

1.1 request和response介绍

服务器接收到来自浏览器的请求后,会调用Servlet的service方法处理请求,在调用service之前,会创建request对象(用于封装Http请求信息)和response对象(用于封装最后将要发送给浏览器的响应信息)

在执行service处理请求的过程中, 如果要获取任何请求相关的信息, 可以通过request(调用方法)来获取;

如果有任何数据要发送给浏览器, 可以通过response对象进行发送。

responseWrapper获取响应内容 获取response返回数据_请求参数


2 request对象

2.1 request对象的方法

responseWrapper获取响应内容 获取response返回数据_请求转发_02


另,请求参数也属于请求信息,request也提供了方法获取。

2.2获取请求参数

1、request获取请求参数的方法: request.getParameter(String name) – 根据请求参数的名称获取参数值。返回String类型的参数值。 例如,获取用户名:String username =
 request.getParameter(“username”);
request.getParameterValues(String name) – 根据请求参数的名称获取多个值组成的数组。返回String类型的数组。 例如获取爱好:String[] likes =
 request.getParameterValues(“like”);

2、在获取中文请求参数时,请求参数可能会有乱码问题,关于请求参数的乱码问题:
(1)如果请求方式为POST提交,必然会出现乱码,解决方式是在任何获取参数的代码之前,添加如下代码:

request.setCharacterEncoding(“utf-8”);

(2)如果请求方式为GET提交,tomcat8及之后的版本已经解决了中文参数乱码的问题,不需要处理,tomcat7及之前的版本只需要在 [tomcat]/conf/server.xml中添加如下配置也可以解决乱码问题。

responseWrapper获取响应内容 获取response返回数据_请求参数_03


2.3请求转发、域对象

1、请求转发:是指定服务器中的某一个资源(Servlet或JSP)在处理请求的过程中,将请求转发给一个其他的资源,让其他资源来处理请求。

实现代码:

request.getRequestDispatcher("转发到资源的路径").forward(req, res)

2、域对象:能够在指定的范围内, 利用自身的map实现数据的共享
在request对象内部保存了一个map,专门用于存取数据。这个map我们可以称之为是request域

request.setAttribute(String attrName, Object attrValue) –
往request域中添加一个域属性。属性名只能是字符串,属性值可以是任意类型。 request.getAttribute(String
attrName) – 通过属性名获取存放在request域中的属性值。

3、请求转发和域对象经常配合着使用,实现从Servlet中带数据到JSP进行显示!!

提示:(1)请求转发是一次请求,一次响应
(2)转发前后地址栏地址不会发生变化

4、实例:利用请求转发、域对象实现(模拟)查询个人信息功能
UserServlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 //1.查询个人信息(模拟)
 String name = “王海涛”;
 String age = “18”;
 //2.将数据存入request对象的map中
 request.setAttribute(“name”, name);
 request.setAttribute(“age”, age);
 //3.通过转发讲request对象(及其中的数据)带到JSP进行显示
 request.getRequestDispatcher("/show.jsp").forward(request, response);
 }

show.jsp:

姓名:<%= request.getAttribute("name") %>

年龄:<%= request.getAttribute("age") %>

3response对象 3.1response对象的方法

3.2向客户端发送数据
向浏览器客户端发送响应数据, 可以通过两个流进行:
response.getOutputStream() – 字节流
response.getWriter() – 字符流

在通过字符流发送文本数据时可能会有乱码问题

/* 0.通知服务器使用utf-8发送数据给浏览器
• 同时通知浏览器也使用utf-8接收服务器发送过来的数据 */
 response.setContentType(“text/html;charset=utf-8”);//1.获取字符流
 PrintWriter pw = response.getWriter();
 pw.write(“哈喽”);

3.3实现重定向
转发只能在同一个Web应用内部的两个资源之间进行跳转, 不可以是不同的Web应用或者不同的服务器中进行跳转。而重定向则没有此限制
1、重定向:是指当用户浏览某个网址时,将其导向到另一个网址的技术。
http://localhost/day03/ResponseDemo2 http://localhost/day03/index.html

例如,在注册或登录成功后,浏览器地址栏地址将会跳转到首页。
实现重定向:(模拟登录成功后跳转到首页)
response.sendRedirect("/LoginServlet/index.html");