Web服务器收到客户端的http
请求,会针对每一次请求,分别创建一个用于请求的request
对象、和 用于响应的response
对象。
接下来我们就将回顾 ,HttpServletResponse
响应接口
HttpServletResponse
HttpServletResponse 接口来 表示服务器的响应。
-
该 对象中封装的方法有:
-
将要向客户端发送的
数据
响应头
响应状态码
可以得知 的是该接口 实现了更底层的 ServletResponse
发送数据的方法
基本都来自于 ServletResponse
方法
1. 设置 和 得到 数据编码
方法 | 作用 |
---|---|
void setCharacterEncoding(java.lang.String charset) | 设置发送给客户端的响应的字符编码(MIME字符集 |
如果字符编码已经在 setContentType(java.lang.String)
或者 setLocale(java.util.Locale)
中设置 , 该方法会覆盖以上设置 .
调用
setContentType(text/html)
和 用 UTF-8 字符串传参
等价于setContentType(text/html; charset=UTF-8)
可重复调用 ,但如果在调用getWriter
之后或在提交响应之后 调用此方法,则此方法不起作用。
如果协议为此提供了方法,那么容器必须将 servlet
的字符编码传达给客户端。
在 HTTP 中, 这个编码set
用于 设置Content-Type
返回头中的文本类型
但是这个方法使用 之前应该先设置servlet
的编码
方法 | 作用 | 返回 |
---|---|---|
java.lang.String getCharacterEncoding() | 返回用于在此响应中发送的正文的字符编码 (MIME 字符集) 的名称。 | 返回文本的编码 |
字符编码可能已使用
setCharacterEncoding (java.lang.String)
或setContentType (java.lang.String)
方法显式指定, 或者隐式使用setLocale (java.util.locale)
方法。
显式规范优先于隐式规范
调用 getWriter 后对这些方法所做的调用或在响应已提交后对字符编码没有影响。如果未指定字符编码, 则返回 ISO-8859-1
2. 返回数据
方法 | 作用 |
---|---|
java.io.PrintWriter getWriter() | 返回 一个java.io.PrintWriter 对象,该对象可以储存发送给客户端的文本。 |
PrintWriter
中文本编码 将使用 getCharacterEncoding()
返回的编码
如果没有如
getCharacterEncoding()
中返回 的 响应的字符编码(即该方法仅返回默认值ISO-8859-1),getWriter()
编码更新为ISO-8859-1
.
在 PrintWriter
中 调用flush()
提交 返回
throw java.io.IOException
Throws:
UnsupportedEncodingException
- 如果由getCharacterEncoding
返回的字符编码不能使用
IllegalStateException
- 如果已经为此响应对象调用了getOutputStream
方法
java.io.IOException
- 如果发生输入或输出异常
方法 | 作用 |
---|---|
ServletOutputStream getOutputStream() | 返回 ServletOutputStream 对象 ,该对象能写二进制数据流 |
servlet
容器 不支持二进制编码
在ServletOutputStream
中 调用flush()
来提交 返回
throws java.io.IOException
Throws:
IllegalStateException
- 如果在此响应中调用了getWriter
方法
java.io.IOException
- 如果输入输出发生异常
示例:
getWriter()
和getOutputStream()
这俩种方法不可以在同一返回 中都用来编写body
但是可以使用flush()
来同时使用
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setCharacterEncoding("UTF-8");
PrintWriter pw = response.getWriter();
pw.append("Servlet at " + request.getContextPath() + "<hr/> charset : " + response.getCharacterEncoding());
// ServletOutputStream outstream = response.getOutputStream();
// byte b = 0;
// outstream.write(b);
}