环境
JDK 8
Spring Tool Suite 4.6.1
Servlet 3.1
Tomcat 8.5
Maven 3.6.3
ServletResponse 说明
ServletResponse 可以让 Servlet 向客户端发送响应。
ServletResponse 由 Servlet 容器创建,并将其传递给 Servlet 的 service 方法。
为了向客户端发送二进制的数据,可以使用 getOutputStream 方法返回的 ServletOutputStream 输出流。
为了发送字符数据,可以使用 getWriter 返回的 PrintWriter 对象。
想要同时发送两种数据,需要使用 ServletOutputStream ,并且手动处理字符数据。
可以使用 setCharacterEncoding(java.lang.String) 和 setContentType(java.lang.String) 方法
显式指定响应的编码,或者使用 setLocale(java.util.Locale)方法隐式指定,显式指定优先于隐式指定。
如果未指定编码,则将使用 ISO-8859-1 。必须在 getWriter 之前调用 setCharacterEncoding ,setContentType 或 setLocale 方法。
编码系列方法
可以通过 下面的方法获得和设置响应的编码,优先级分别为:setCharacterEncoding、setContentType、setLocale,
并且设置编码应该在 getWriter 方法调用之前。
public String getCharacterEncoding();
public String getContentType();
public void setCharacterEncoding(String charset);
public void setContentType(String type);
public void setLocale(Locale loc);
public Locale getLocale();
流系列方法
分别获得字节和字符输出流,不能同时使用。
public ServletOutputStream getOutputStream() throws IOException;
public PrintWriter getWriter() throws IOException;
缓冲系列方法
和输出流的缓冲相关的方法。
public void setBufferSize(int size);
public int getBufferSize();
public void flushBuffer() throws IOException;
public void resetBuffer();
setContentLength
设置响应头中的 ContentLength 。
public void setContentLength(int len);
reset
清空返回的数据,同时也重置输出流。
public void reset();
isCommitted
判断响应是否提交。
public boolean isCommitted();
ServletResponse 示例
pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jiangbo.javaweb
12java-web-servlet-response
1.0.0
war
Servlet Response 的示例
1.8
1.8
UTF-8
javax.servlet
javax.servlet-api
3.1.0
provided
方法示例
package jiangbo.javaweb;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class Servlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service...");
System.out.println("---------------------------");
System.out.println(resp.getCharacterEncoding());
System.out.println(resp.getContentType());
resp.setCharacterEncoding("UTF-8");
System.out.println(resp.getCharacterEncoding());
System.out.println(resp.getContentType());
System.out.println(resp.getLocale());
resp.setContentLength(44);
System.out.println("---------------------------");
resp.getOutputStream();
resp.reset();
System.out.println(resp.getCharacterEncoding());
resp.setContentType("text/html;charset=UTF-8");
System.out.println(resp.getCharacterEncoding());
PrintWriter writer = resp.getWriter();
System.out.println("---------------------------");
System.out.println(resp.getBufferSize());
writer.println("没有了的内容");
resp.resetBuffer();
writer.print("存在的内容");
writer.flush();
System.out.println("---------------------------");
System.out.println(resp.isCommitted());
}
}
配置 web.xml
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
servlet01
jiangbo.javaweb.Servlet01
servlet01
/servlet01
浏览器访问
控制台输出
service...
---------------------------
ISO-8859-1
null
UTF-8
null
zh_CN
---------------------------
ISO-8859-1
UTF-8
---------------------------
8192
---------------------------
true
浏览器显示
存在的内容