您的位置:首页 > 理论基础 > 计算机网络

Java Web 回顾总结(五) - HttpServlet - Response - 5.1 发送数据

2018-03-20 16:46 501 查看
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
- 如果输入输出发生异常

示例:

[b]
getWriter()
getOutputStream()
这俩种方法不可以在同一返回 中都用来编写
body
[/b]





但是可以使用
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);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: