由于javaweb开发需要详细了解http协议中http响应的相关知识,所以,通过以下实例,对http://blog.csdn.net/java4found/article/details/8752130所描述的http响应头的作用进行深入学习。
1、用location响应头进行浏览器重定向。
新建web工程httptest,并新建一个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 HttpTestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 302状态码与location合用,实现重定向功能 response.setStatus(302); response.setHeader("location", "http://www.baidu.com"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }将工程部署到tomcat服务器中,访问:打开浏览器访问http://localhost:8080/httptest/Servlet/HttpTestServlet
重定向的过程:浏览器向服务器请求资源,服务器反馈数据告诉浏览器要重定向至另一个地址,浏览器向新地址发起新的请求,所在资源服务器反回用户所请求的数据。
2、用content-type响应头告诉浏览器以图片的形式打开接收到的数据。
在项目的WebRoot新建images目录并放入一张图片。
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HttpTestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("content-type", "image/jpeg"); // 获取向浏览器输出数据的输出流 OutputStream out = response.getOutputStream(); // 读取图片文件,写入到out中 InputStream inStream = this.getServletContext().getResourceAsStream("/images/java.jpg"); byte[] buf = new byte[1024]; int len = 0; while ((len = inStream.read(buf)) != -1) { out.write(buf, 0, len); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }将工程部署到tomcat服务器中,访问:打开浏览器访问http://localhost:8080/httptest/Servlet/HttpTestServlet
可以看到浏览器将以图片的形式显示图片数据。
3、refresh响应头实现浏览器定时刷新。
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 HttpTestServlet extends HttpServlet { int i= 0 ; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Content-type", "text/html;charset=utf-8"); //使用refresh响应头实现自动刷新 response.setHeader("refresh", "3"); //response.setHeader("refresh", "3;url=http://www.baidu.com"); //3s后刷新到百度 i++; response.getOutputStream().write(("您第"+i+"次访问").getBytes("utf-8")); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
以第2个实例的图片为例,用content-disposition响应头告诉浏览器以下载的方式下载这张图片。
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HttpTestServlet extends HttpServlet { int i = 0; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("content-disposition", "attachment;filename=java.jpg"); InputStream inStream = this.getServletContext().getResourceAsStream( "/images/java.jpg"); OutputStream out = response.getOutputStream(); byte[] buf = new byte[1024]; int len = 0; while ((len = inStream.read(buf)) != -1) { out.write(buf, 0, len); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }