首页 > 代码库 > JavaWeb学习总结(六)—HttpServletResponse

JavaWeb学习总结(六)—HttpServletResponse

Response概述:

  response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使response对象可以完成对客户端的响应工作。

response对象的功能分为以下四种:

  1. 设置响应头信息;
  2. 发送状态码;
  3. 设置响应正文;
  4. 重定向;

具体应用:

1.设置location响应头 ,实现请求重定向

package zy.servlet;

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;
/*
 * 设置location响应头 ,实现请求重定向
 */
public class Aservlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //设置响应头,服务器通过 Location这个头,来告诉浏览器跳到哪里,这就是所谓的请求重定向
        response.setHeader("Location","/JavaWeb/Bservlet");
        //设置服务器的响应状态码
        response.setStatus(302);
    }

}

抓包可以看见:

技术分享

  服务器返回一个302状态码告诉浏览器,你要的资源我没有,但是我通过Location响应头告诉你哪里有,而浏览器解析响应头Location后知道要跳转到/JavaWeb/Bservlet页面,所以就会自动跳转到Bservlet。

2.设置refresh响应头,让浏览器定时刷新

package zy.servlet;

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;
/*
 * 设置location响应头 ,实现请求重定向
 */
public class Cservlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print("5s中后将跳转到百度主页");
        /*
         * 设置refresh响应头,让浏览器每隔3秒定时刷新
         * response.setHeader("refresh", "3");
         */
        
        //设置refresh响应头,让浏览器3秒后跳转到http://www.baidu.com
        response.setHeader("Refresh","5;URL=http://www.baidu.com");    
        /*
         * 5秒跳转到Csevlet
        response.setHeader("Refresh","5;URL=/JavaWeb/Cservlet");
        */
    }
}

访问Cservlet,5秒将会跳转

技术分享

 

3.禁用浏览器缓存

   开发项目的时候浏览器的缓存会很讨厌,这时我们可以禁用它,可以参考indexjsp.

package zy.servlet;

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;
/*
 * 禁用浏览器缓存
 */
public class Dservlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /*
         * 这三个响应头的设置可以禁用所有浏览器的缓存
         */
        response.setHeader("cache-control","no-cache");
        response.setHeader("pragma","no-cache");
        response.setDateHeader("expires",-1);
        
        response.getWriter().print("hello world");

    }
}

访问:

技术分享

4.设置页面缓存

 对于不经常变化的数据,在servlet中可以为其设置合理的缓存时间值,以避免浏览器频繁向服务器发送请求,提升服务器的性能。例如:

package zy.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 Eservlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String data = "helloworld";
        /**
         * 设置数据合理的缓存时间值,以避免浏览器频繁向服务器发送请求,提升服务器的性能
         * 这里是将数据的缓存时间设置为1天
         */
        response.setDateHeader("expires",System.currentTimeMillis() + 24 * 3600 * 1000);
        response.getOutputStream().write(data.getBytes());
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        this.doGet(request, response);
    }

}

访问页面,并查看响应头:

技术分享

有8个小时的时差。

另外也可以在“C:\Users\zydev\AppData\Local\Microsoft\Windows\Temporary Internet Files”找到该文件,注意要打开隐藏文件夹选项才看得见。

技术分享

 

5.设置content-disposition响应头,让浏览器下载文件

 

JavaWeb学习总结(六)—HttpServletResponse