HttpServletResponse response实现文件上传、下载

本文详细解析了HTTP响应头中的关键字段,如Server、Content-Type、Content-Length等,并介绍了如何通过HttpServletResponse设置响应行、响应头和响应体。重点讲解了状态码设置、重定向、自动刷新跳转及解决响应中文乱码问题的方法。同时,提供了使用JS实现页面自动跳转的示例。
摘要由CSDN通过智能技术生成

四、http响应头信息详解


1、server

该响应头是服务器告诉浏览器,当前响应的服务类型和版本。

2、Content-Type响应头

服务器告诉浏览器响应内容是什么类型,以及采用的是什么字符编码。该响应头的值现在为text/html;charset=utf-8。说明响应信息的类型是文本类型中的html,使用的字符编码是utf-8。

3、Content-Length响应头

服务器告诉浏览器,Content-Length响应头表明了响应实体的大小,该响应内容的长度现在是312字节。

4、Data响应头

表示是服务器是在什么时候响应回浏览器,注意这里的时间是按照美国时间来计算。

5、 Accept-Ranges: bytes

该响应头表明服务器支持Range请求,以及服务器所支持的单位是字节(这也是唯一可用的单位).我们还能知道:服务器支持断点续传,以及支持同时下载文件的多个部分,也就是说下载工具可以利用范围请求加速下载该文件.Accept-Ranges: none 响应头表示服务器不支持范围请求。

6、Last-Modified

服务器上文件的最后修改时间

五、设置response内容


response 代表响应, 可以通过该对象分别设置Http响应: 响应行  响应头  响应体

1、设置响应行的状态码

setStatus(int value)


response.setStatus(302);

2、设置响应头

addHeader(String name,String value)

addIntHeader(String name,int value)

addDateHeader(String name,long value)


public class HeaderServlet extends HttpServlet {



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

		 Date date = new Date();

		 response.addHeader("name", "xiaodingdang");

		 response.addHeader("name", "daxiong");

		 response.addIntHeader("age", 15);

		 response.addDateHeader("birthday", date.getTime());

		

	}



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

		doGet(request, response);

	}

} 

注意了 要注意setHeader和addHeader的不同 一个是设置 一个是添加 设置只能是设置最后一个 但是添加可以添加很多个。

3、response实现重定向

方法一:


response.setStatus(302); //设置响应行的状态码为302 重定向

response.setHeader("Location", "/Servlet/servlet2"); //设置响应头的属性 跳转到Servlet2 

方法二:


response.sendRedirect("/Servlet/servlet2"); //利用response中的sendRedirect属性完成重定向 

4、response实现自动刷新跳转


public class RefreshServlet extends HttpServlet {



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

		response.setHeader("refresh", "5;url=http://www.baidu.com"); //设置头 参数 数值5为

		//秒 中间用分号间隔 url为要跳转的网址

	}



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

		doGet(request, response);

	}

} 

使用JS来完成自动跳转


<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script type="text/javascript">

	window.onload= function(){

		var time = 3;

		var second = document.getElementById("second");

		timer = setInterval(function(){

			second.innerHTML = time;

			time--;

			if(time==0){

				location.href = "http://www.baidu.com";

				clearInterval(timer);

			}

		},1000);

	}

</script>

</head>

<body>

	恭喜你,登录成功,<span id="second" style="color: red">3</span>秒后将跳转,若不跳转 请点击<a href="http://www.baidu.com">这里</a>

</body>

</html> 

5、解决response中文乱码问题


//方法一:

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

		response.setCharacterEncoding("UTF-8");

		response.setHeader("content-Type", "text/html;charset=utf-8");

		response.getWriter().write("小叮当");

		

	}

//方法二:

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

//		response.setCharacterEncoding("UTF-8");

//		response.setHeader("content-Type", "text/html;charset=utf-8");

		response.setContentType("text/html;charset=utf-8");

		response.getWriter().write("中国");

		

	}

//通常使用第二种方法解决乱码问题 

6、上传图片资源


public class TestServlet extends HttpServlet {



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

		ServletOutputStream outputStream = response.getOutputStream(); //获得字节输出流

		String realPath = this.getServletContext().getRealPath("1.jpg"); //获得图片的真实路径

		InputStream in = new FileInputStream(realPath); //获得服务器上的图片

		

		//使用高效的方法写入客户端图片

		int len = 0;

		byte[] buffer = new byte[1024];

		while((len=in.read(buffer))>0) {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值