javaweb——HttpServletResponse对象学习
一、HttpServletResponse解释
Servlet是服务器端程序,主要用来交互式地浏览和修改数据,生成动态web内容。web服务器接收到客户端的Servlet请求后,如果检查到已经装载并创建了该Servlet的实例对象,则会创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表Http响应消息的HttpServletResponse对象,然后调用Servlet的service()方法,将请求和响应对象作为参数传递进去,这样客户端通过HttpServletRequest对象将请求发送给服务器,服务器通过HttpServletResponse对象将响应传递给客户端,达到通信的目的。
二、设置响应内容
通过response.getWriter(); 获取一个PrintWriter 对象。并使用println(),write()等等方法设置返回给浏览器的html内容。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
//开启tomcat时自启动
public void init(ServletConfig config) {
System.out.println("init of Hello Servlet");
}
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
//向客户端发送回应
PrintWriter pw = response.getWriter();
pw.println("<h1>Hello Servlet<h1>");
}catch(IOException e) {
e.printStackTrace();
}
}
}
三、设置响应编码(解决中文乱码问题)
设置响应编码有两种方式
- response.setContentType(“text/html; charset=UTF-8”);
- response.setCharacterEncoding(“UTF-8”);
这两种方式都需要在response.getWriter()调用之前执行才能生效。
他们的区别在于
- response.setContentType(“text/html; charset=UTF-8”);
不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文。
- response.setCharacterEncoding(“UTF-8”);
仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是UTF-8的时候,就会看到乱码,需要手动再进行一次设置。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
public void init(ServletConfig config) {
System.out.println("init of Hello Servlet");
}
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.println("<h1>第n次Hello Servlet<h1>");
}catch(IOException e) {
e.printStackTrace();
}
}
}
四、负责向客户端(浏览器)发送响应头的相关方法
void addDateHeader(String name, long date) 添加指定名称的响应头和日期值
void addHeader(String name, String value) 添加指定名称的响应头和值
void addIntHeader(String name, int value) 添加指定名称的响应头和int值
boolean containsHeader(String name) 返回指定的响应头是否存在
void setHeader(String name, String value) 使用指定名称和值设置响应头的名称和内容
void setIntHeader(String name, int value) 指定 int 类型的值到 name 标头
void setDateHeader(String name, long date) 使用指定名称和值设置响应头的名称和内容