A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 八戒 中级黑马   /  2015-6-8 11:51  /  630 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以下是前一段时间看的request的一些总结,和大家分享分享
请求响应对象
request和response
  * 当服务器接收到请求后,服务器会创建request和response对象,把请求数据封装到request对象中;
  * 然后调用Servlet的service()方法时把这两个对象传递给service()方法;
  * 在service()方法中可以通过request对象获取请求数据,可以使用response对象向客户端完成响应;
  * 每次请求服务器都会创建新的request和response对象,即每个请求有自己独自的request和response对象
response对象

1. response简介
  response是响应对象,用来在Servlet的service()方法中向客户端响应数据。
  response的功能如下:
  * 设置响应头
  * 发送状态码
  * 设置响应正文
  * 重定向

2. response响应正文
  * ServletOutputStream getOutputStream():用来向客户端响应字节数据;
  * PrintWriter getWriter():用来向客户端响应字符数据;

  response.getWriter().print("你好");//向客户端响应字符数据
  byte[] bytes = ...;
  response.getOutputStream().write(bytes);//向客户端响应字节数据

3. response字符编码
  * Tomcat响应数据默认使用ISO-8859-1
  * 通常浏览器默认使用GBK编码
  * response.setCharacterEncoding("utf-8");//设置response.getWriter()的字符编码

  1)
  response.getWriter().print("大家好");
  因为Tomcat默认使用的是ISO-8859-1编码,不支持中文。所以一定编码!

  2)
  response.setCharacterEncoding("utf-8");
  response.getWriter().print("大家好");
  因为已经设置了字符流编码为utf-8,所以响应给客户端的数据为utf-8编码!
  但因为浏览器默认使用的是gbk来解析响应数据,所以乱码!如果浏览器使用utf-8编码,那么就不会乱码了。

  3)
  response.setCharacterEncoding("gbk");
  response.getWriter().print("大家好");
  因为设置了字符流编码为gbk,所以响应给客户端的数据为gbk编码!
  因为浏览器默认使用gbk来解析数据,所以不会出现乱码!如果浏览器使用utf-8编码,那么就会出现乱码!

  4)
  response.setContentType("text/html;charset=utf-8");
  response.getWriter().print("大家好");
  setContentType()方法有两个作用:
  * 设置字符流编码。等同与调用了response.setCharacterEncoding("utf-8");
  * 设置Content-type响应头,即通知浏览器响应数据的编码为utf-8。
  因为设置字符流的编码为utf-8,所以响应给客户端数据为utf-8编码
  因为设置了Content-type头为utf-8,所以浏览器会使用utf-8来解析响应数据
  没有乱码!

  5)
  response.setContentType("text/html;charset=gbk");
  response.getWriter().print("大家好");
  * 设置了字符流为gbk,所以响应给客户端的数据为gbk
  * 设置了Content-type头为gbk,所以通知浏览器响应数据为gbk编码
  没有乱码!

  6)
  response.setHeader("Content-type", "text/html;charset=utf-8")
  等同于
  repsonse.setContentType("text/html;charset=utf-8")

  7)
  response.getOutputStream().write("大家好".getBytes("gbk"));
  响应的数据是gbk编码
  客户端浏览器默认使用gbk编码
  所以没有乱码

======================

4. response字符流缓冲区
  response字符流缓冲区大小为8KB,当向字符流中写入数据后,数据可能只在缓冲区中,而没有发送到浏览器。
  可以调用response.flushBuffer()或response.getWriter().flush()方法刷新缓冲区,把数据发送到浏览器。

======================

5. 设置响应头

  response.setHeader("Content-type", "text/html;charset=utf-8");
  等同与
  response.setContentType("text/html;charset=utf-8");

  response.setHeader("Refresh", "5; URL=http://www.itcast.cn");

======================

6. 指定状态码

response.setStatus(200):设置状态码为200
response.sendError(404, “您要查找的资源不存在”):设置状态码为404
repsonse.sendError(500, “服务器出氏了”):设置状态码为500

在调用sendError()方法时,不只是设置了状态码,而且还会给浏览器一个显示错误的页面。

======================

7. 重定向

response.sendStatus(302);
repsonse.setHeader("Location", "http://www.baidu.com");

快捷的方法重定向:

response.sendRedirect("http://www.baidu.com");

* 重定向是两次请求
* 重定向不局限与当前应用,也可以是其他应用,例如重定向到百度
* 重定向响应码为302,而且必须有Location响应头
* 重定向与response响应流同时使用。
request

1. request功能介绍
* 获取请求头
* 获取请求参数
* Servlet三大域对象之一
* 请求包含和请求转发

2. request域方法
* void setAttribute(String name, Object value):添加或替换request域属性
* Object getAttribute(String name):获取request域指定名称的域属性
* void removeAttribute(String name):移除request域指定名称的域属性
* Enumeration getAttributeNames():获取所有request域的属性名称

3. request获取请求头
* String getHeader(String name):获取指定名称的请求头
* int getIntHeader(String name):获取指定名称的请求头,把值转换成int类型。
* Enumeration getHeaderNames():获取所有请求头名称

4. request请求数据相关其他方法
重点:
* String getMethod():获取请求方式
* String getContextPath():获取上下文路径,即“/” + 应用名称,例如:/day05_1
* void setCharacterEncoding(String):设置请求体的编码
* String getRemoteAddr():获取客户端IP地址

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马