这篇开始,我们来具体学习HttpServletRequest和HttpServletResponse两个对象以及相关方法操作。我们来回顾一下前面tomcat系列中讲到的http协议。由于HttpServletResponse更简单一些,我们先来学习HttpServletResponse对象和方法。
1.HttpServletResponse基本概念
前面http简单了解,我们知道响应对象包含三部分,响应消息行,响应消息头,响应正文(主体),所以,我们就分别围绕这三大块来介绍HttpServletResponse中相关方法。
2.响应消息行
一般来说,响应消息行都是 HTTP/1.1 200 OK这样的内容,在响应消息行中,我们只有一个方法来设置状态码,其他HTTP/1.1和OK都是没法改变的。给一个响应设置状态码,很好理解,例如我们开发一个接口,需要给反馈对应的状态码,这个状态码可以是自己公司定义,也可以是常见的HTTP响应状态码。
方法setStatus(int sc),设置响应消息状态码有两个方法,还有一个多了一个参数,msg,带上一句消息。
代码示例
package com.anthony.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setStatus(response.SC_BAD_REQUEST); //设置HTTP 400的状态码
System.out.println(response.getStatus());
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
请求http://localhost:8080/Servlet01/demo2
在Eclipse日志控制台可以打印出 400 这个状态码,接口文档中显示还有第二个方法setStatus(int sc, java.lang.String sm) 但是这个方法不提倡使用,这里就不演示。
3.响应消息头
来看看和响应消息头相关的方法,在API文档中找到Head相关有两组方法。
左边是一组add方法,右边是一组set方法,看起来方法名称都差不多,主要区别是,add是只管添加头信息,而set是不允许有重复的key出现,add可以有重复。
下面我用setHeader()方法来给响应消息头添加一些键值对内容,例如字符编码。
package com.anthony.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//告知浏览器使用什么编码
response.setHeader("content-type", "text/html;charset=UTF-8");
//告知客户端不缓存
response.setHeader("pragma","no-cache");
response.setHeader("cache-control","no-cache");
response.setDateHeader("expires",0);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
部署到tomcat,浏览器访问http://localhost:8080/Servlet01/demo2
然后在火狐浏览器上按下F12,观察响应消息头
关于接口HttpServletResponse的介绍就到这,至于响应正文操作的方法介绍,后面我们慢慢会学习到。