学习总结之 Servlet入门知识 处理Response

本文介绍了一个Servlet实现类TestResponse的具体操作方法,包括设置响应头、请求重定向与转发、定时刷新页面、设置输出内容类型及以下载方式提供文件。同时展示了另一个Servlet类TestCache如何通过重写getLastModified方法实现资源缓存控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package cn.itcast.response;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TestResponse
 */
public class TestResponse extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		/*
		 * response.setHeader(name, value); response.setDateHeader(name, date);
		 * response.setIntHeader(name, value);
		 */

		/************************ 【请求重定向】 *******************************/

		// 第一种
		response.setHeader("location", "/day05/location.html");// 设置响应头
		response.setStatus(302);// 设置状态码
		// 第二种
		response.sendRedirect("/day05/location.html");
		// 这个方法和上面两个步骤是等价的!通常我们直接使用这个方法来做请求重定向

		/************************ 【请求转发】 *******************************/

		RequestDispatcher dispatcher = request
				.getRequestDispatcher("/testForward2.do");
		dispatcher.forward(request, response);
		/*
		 * 请求转发的相对URL,以/开头,这个/是相对于当前web应用的根目录;
		 * 请求重定向的相对URL,以/开头,这个/是相对于tomcat的web站点的根目录。
		 */

		/*********************** 【定时刷新页面】 *********************************/
		response.setHeader("refresh", "3;url=/day05/refresh.html");// 以s为单位

		/********************* 【设置输出的内容类型】 *****************************/

		// 设置服务器输出的内容类型以及编码格式
		response.setHeader("content-Type", "text/html;charset=utf-8");

		// 等价于上面的写法,通常会用这个方法
		response.setContentType("text/html;charset=utf-8");

		/*
		 * 内容类型: text/html text/css, image/jpeg , image/gif , image/png
		 */

		/**************** 【案例: 以下载的方式下载图片】 ***********************/

		File file = new File("e:/b1234.jpg");

		response.setContentType("image/jpeg");

		// 1设置这个响应头来告诉浏览器以下载的方式打开文件
		response.setHeader("Content-Disposition",
				"attachment;filename=" + file.getName());
		InputStream is = new FileInputStream(file);

		// 2、将图片输出到浏览器端
		OutputStream out = response.getOutputStream();
		for (int b = -1; (b = is.read()) != -1;) {
			out.write(b);
		}

	}
}

package cn.itcast.request;
//重写getLastModified
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestCache extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		// 把当前系统的日期按照这个格式(yyyy-MM-dd hh:mm:ss)转成字符串格式
		String dateStr = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
				.format(new Date());

		response.getWriter().write(
				"<html><h2 style='color:red'>" + dateStr + "</h2></html>");
	}

	// 服务器资源的最后修改时间
	long lastModified = System.currentTimeMillis();

	@Override
	protected long getLastModified(HttpServletRequest req) {
		// 需求:服务器每10秒钟发送新内容给浏览器

		// 当前时间
		long current = System.currentTimeMillis();

		// 如果当前时间 比 服务器资源的的最后修改时间 晚10秒
		if (((current - lastModified) / 1000) >= 10) {
			lastModified = current;
		}

		return lastModified;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值