关于HttpServletResponse在前端的缓存及细节

问题1?:有时候编程人员在做web后端数据处理的时候要求数据在浏览器在缓存方面只需要存在预定的时间,然 后就自动消除。

问题2?:response的重定向设置

问题3?:HttpServletResponse的一些细节问题

我们就来解决这些问题:

1.控制在浏览器的缓存时间。

   举个例子:只缓存一个小时,然后自动消除

   

package com.dp.java.such;

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 such1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//缓存一个小时
		response.setDateHeader("Expires", System.currentTimeMillis()+60*60*1000);
		//单位是毫秒,当前加上缓存的算出来是1个小时
		response.getWriter().write("sdsdsdsd");
		
	}

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

		doGet(request, response);
	}

}
   结果显示:

     


2.请求重定向

    也举一个例子:

   

package com.dp.java.such;

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 such2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//两种方式
//		response.setStatus(302);
//		response.setHeader("location", "/java_Code/MyJsp1.jsp");
		response.sendRedirect("/java_Code/MyJsp1.jsp");//作用跟以上一样
//             这就好像我没钱,你去找它吧,它有钱。就跳转到另外一个对象了(这里的对象是一个jsp页面,也可以是一个servlet)

	}

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

		doGet(request, response);
	}

}

结果:我们先从地址栏进入<url-pattern>进入servlet方法:

   关于HttpServletResponse在前端的缓存及细节_第1张图片

3.HttpServletResponse的一些细节问题
   (1)二进制输出流,和文本输出流同时用是互斥的。

   (2)字节流和字符流不能同时使用,互斥的。

   (3)通过字符流或字节流输出的数据并不是直接打给浏览器的。而是把数据写到response对象的缓存中的。服务器从缓存 中取出数据,按照HTTP协议的响应格式输出给浏览器。

   (4)如果你调用的response的输出流没有主动关闭,服务器会替你关的。(比如servlet中的默认代码out.close()方法)

举一个例子:

package com.dp.java.such;

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 such3 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String a="s";
		String b="s";
		response.getOutputStream().write(a.getBytes());//字节输出流
		response.getWriter().write(b);//字符输出流
	}

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

		doGet(request, response);
	}

}

结果显示:

关于HttpServletResponse在前端的缓存及细节_第2张图片


细节:      

你可能感兴趣的:(缓存,java的servlet重定向)