HttpServletResponse
ServletResponse
辅助Servlet将响应发送到客户端的对象。由servlet容器创建ServletResponse对象,并将它作为参数传递给servlet的service方法。
常用方法:
void serCharacterEncoding(String s):设置将发送到客户端的响应的字符编码。
void setContentType(String s):设置将发送到客户端的响应的内容类型。给定内容类型可能包含字符编码,例如:”text/html;charset=UTF-8”。
void setContentLength(int len):设置响应内容的正文的长度。
ServletOutputStream getOutputStream():返回适用于二进制数据的响应流。
PrintWriter getWriter():返回适用于文本数据的响应流。
HttpServletResponse
常用常量:
SC_CONTINUE 状态码(100):指示客户端可以继续
SC_OK 状态码(200):指示请求正常成功
SC_SEE_OTHER 状态码(303):指示可在另一个URI之下找到该请求的响应
SC_NOT_FOUND 状态码(404):请求的资源不可用
SC_INTERNAL_SERVER_ERROR 状态码(500):指示HTTP服务器内存在错误使服务器无法完成请求。
新增常用方法介绍:
void addCookie(Cookie cooike):将指定的cookie添加到响应(可加多个)。
void addHeader(String name, String value):用给定名称和值添加响应头。此方法允许响应头有多个值。
String encodeURL(String URL):通过将回话ID包含在指定的URL中并对该URL进行编码。如果不需要编码,则返回原来的URL。
String encodeRedirectURL(String URL):对指定URL进行编码,以便在sendRedirect方法中使用它。如果不需要编码,则返回原来的URL(可判断是否需要将ID加入URL)。
void sendError(int i, String s):使用指定状态将错误响应发送到客户端。
void sendError(int i):使用指定状态代码并清除缓冲区将错误响应发送到客户端。
void setStatus(int i):设置此响应的状态码。用于设置没有错误时的返回状态码(例如状态代码SC_OK或者SC_MOVED_TEMPORARILY)
void sendRedirect(String s):使用指定重定向位置URL将临时重定向响应发送到客户端。(例如:client向Servlet1发送一个请求,Servlet1并不能完成请求,但是把能处理请求的Servlet2的URL发送个client,则客户端向Servlet2发送请求,Servlet2处理请求)。
代码示例
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="servlet1">sendRedirect()(重定向)测试</a><br/>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>ResponseDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>s1</servlet-name>
<servlet-class>com.li.servlet.response.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>s1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>s2</servlet-name>
<servlet-class>com.li.servlet.response.Servlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>s2</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
</web-app>
Servlet1.java
package com.li.servlet.response;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet1 doGet");
/*重定向给服务s2*/
resp.sendRedirect("servlet2");
}
}
Servlet2.java
package com.li.servlet.response;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("Servlet2");
System.out.println("Servlet2 doGet");
}
}