HttpServletResponse

(1)HttpServletResponse简介

                    Web服务器收到客户端的HTTP请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象。

                    request和response对象既然代表请求和响应,那么我们要获取客户端提交过来的数据,只要查找request对象就行了。要向客户端输出数据,只需要找response对象就可以了


(2)HttpServletResponse对象介绍

                HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头、发送响应状态码的方法

                1.向客户端发送数据的方法


                2.向客户端发送响应头的方法


                3.向客户端发送响应状态码的方法

               

(3)HttpServletResponse对象应用

                1.输出中文

                   不出现乱码的原则就是用什么编码就用什么解码

                   因为数据需要以二进制字节码形式传输,所以Servlet中的数据必然需要先转换为字节码,这就需要设置编码。编码之后要通知浏览器使用相同的字符集,所以需要通过响应头设置

package com.learn.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Properties;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		OutputStream out = response.getOutputStream();
		out.write("测试".getBytes("UTF-8"));
		response.setHeader("content-type", "text/html;charset=UTF-8");
                out.flush();
                out.close();
	}
}
                   结果为:

                     

                2.下载文件

                   因为文件名可能出现乱码,所以需要对文件名进行编码

package com.learn.servlet;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;

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

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

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

	private void downloadChineseFileByOutputStream(HttpServletResponse response)
			throws FileNotFoundException, IOException {
		//获取要下载的文件的绝对路径
		String realPath = this.getServletContext().getRealPath(
				"/WEB-INF/测试图片.jpg");
		// 获取要下载的文件名
		String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
		// 设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码
		response.setHeader("content-disposition", "attachment;filename="
				+ URLEncoder.encode(fileName, "UTF-8"));
		
		InputStream in = new FileInputStream(realPath);// 获取文件输入流
		int len = 0;
		byte[] buffer = new byte[1024];
		OutputStream out = response.getOutputStream();
		while ((len = in.read(buffer)) > 0) {
			out.write(buffer, 0, len);// 将缓冲区的数据输出到客户端浏览器
		}
		in.close();
	}
}


                3.定时刷新网页

                   1)普通定时刷新

package com.learn.servlet;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Random;

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

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

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setHeader("refresh", "5");
		OutputStream out = response.getOutputStream();
		out.write((""+new Random().nextInt(10)).getBytes()); 
		out.flush(); 
		out.close();
	}
}
 
                   2)定时刷新后跳转到指定页面

response.setHeader("refresh", "5;url=/LearnServlet/index.html");

                4.请求重定向

                    请求重定向:一个web资源受到客户端请求后,通知客户端去访问另一个web资源

                    应用场景:用户登录。即用户首先访问登录页面,登录成功后,就会跳转到某个页面。这个过程就是一个请求重定向的过程

                    实现方式:response.sendRedirect(String location),即调用Response对象的sendRedirect方法实现请求重定向

            原理:实际上就是对Response设置302状态码,并设置location响应头实现

package com.learn.servlet;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Random;

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

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


	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		/*方法一:使用response.sendRedirect*/
//		response.sendRedirect("index.html");
		
		/*方法二:设置响应头和重定向地址*/
		response.setHeader("Location", "/LearnServlet/index.html");
		response.setStatus(HttpServletResponse.SC_FOUND);//设置302状态码,等同于response.setStatus(302);		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值