HttpServletResponse概述:html
咱们在建立Servlet()方法,或doGet()/doPost(),这些方法都有两个参数,一个为表明的request和表明响应response。java
service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更增强大。浏览器
经过response设置响应行:oracle
设置响应行的状态码:编码
public class HeadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应行中的状态码 response.setStatus(404); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
运行结果:url
经过response设置响应头:spa
public class RefreshServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置定时刷新的头 response.setHeader("Refresh", "5;url=http://www.baidu.com"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
运行结果:.net
经过response设置响应体:3d
public class Body extends HttpServlet { 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("中国"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
文件下载:code
package com.oracle.demo02; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownLoadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取文件名 String filename=request.getParameter("file"); //解决文件名乱码问题 filename=new String(filename.getBytes("ISO-8859-1"), "UTF-8"); //获取User-Agent获取客户端浏览器究竟是哪一个浏览器 String agent=request.getHeader("User-Agent"); String filenameEncoder=""; if (agent.contains("MSIE")) { // IE浏览器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); filenameEncoder= filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder= "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); } //告知浏览器文件的类型 response.setContentType(getServletContext().getMimeType(filename)); //告知浏览器以附件的方式提供下载功能而不是解析 response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder); //获取字节输出流 ServletOutputStream sos=response.getOutputStream(); //获取数据源的绝对路径 String realpath=getServletContext().getRealPath("download/"+filename); //获取字节输入流 FileInputStream fis=new FileInputStream(realpath); //开始复制 byte[] bytes=new byte[1024]; int len=0; while((len=fis.read(bytes))!=-1){ sos.write(bytes,0,len); } //释放资源 fis.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }