web服务器收到客户端http请求,会针对每一次请求,分别创建一个代表请求的request对象,和代表响应的
response对象。
Request对象:获取客户端哪边传送过来的的数据
Response对象:向客户端输出数据.
一、HttpServletResponse对象的介绍
Interface HttpServletResponse
public interface HttpServletResponse
extends ServletResponse(子接口)
HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,
发送响应状态码的方法。查看HttpServletResponse的API,可以看到这些相关的方法。
二、HttpServletResponse常用的方法
1、负责向客户端发送响应的方法(父接口的方法)
response.getWriter();向客户端写入数据(文本输入)
PrintWriter out=response.getWriter();
out.write("哈哈哈");
response.getOutputStream();先客户端写入数据(字节输入 写二进制的文件)
OutputStream out=response.getOutputStream();
out.write("哈哈".getBytes());
2、负责向客户端(浏览器)发送响应头的方法
--void addDateHeader(java.lang.String name, long date)
Adds a response header with the given name and date-value.
--void addHeader(java.lang.String name, java.lang.String value)
Adds a response header with the given name and value.
--void addIntHeader(java.lang.String name, int value)
Adds a response header with the given name and integer value.
--boolean containsHeader(java.lang.String name)
Returns a boolean indicating whether the named response header has already been set.
3、负责向浏览器发送响应状态的相关方法:
--void setStatus(int sc)
Sets the status code for this response.
4、响应状态码的常量:
--static int SC_NOT_FOUND
Status code (404) indicating that the requested resource is not available.
--static int SC_OK
Status code (200) indicating the request succeeded normally.
--static int SC_INTERNAL_SERVER_ERROR
Status code (500) indicating an error inside the HTTP server which prevented it from fulfilling the request.
三、HttpServletResponse对象的常见应用:
1、使用OutputStream流向客户端输出中文数据
使用OutPutStraeam流输出中文的编码问题:
在服务器端,数据是通过哪个码表输出的,那么要控制客户端使用哪种码表解读:
outputStream.write("哈哈".getBytes("K"),);K 码表
服务端是以K码表输出的所以客户端必须使用K码表来解读:
--客户端自己选择码表解读的方式
--服务端通过设置响应头的方式来控制码表解读
response.setHeader("contene-type","text/html;charset=K");
package com.luther.servlet;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class response extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
OutputStream outputStream=resp.getOutputStream();
//getBytes()方法如果不带参数,那么就会根据操作系统的语言环境来选择转换码表,如果是中文操作系统,那么就使用GB2312的码表
byte[] data="哈哈".getBytes("GBK");
resp.setHeader("content-type", "text/html;charset=GBK");
outputStream.write(data);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
2、使用PrintWriter来输出中文的编码问题:
PrintWriter out=response.getWriter