HttpServletResponse类
HttpServletResponse类:
service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大。
response设置响应行:
设置响应行的状态码:setStatus()。
public class LineServlet 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); } }
response设置响应头:
addHeader(String name, String value)
addIntHeader(String name, int value)
addDateHeader(String name, long date)
setHeader(String name, String value)
setDateHeader(String name, long date)
setIntHeader(String name, int value)
其中,add表示添加,而set表示设置。 重定向需要:1.状态码:302 2.响应头:location 代表重定向地址
响应头跳转:
public class Servlet001 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //跳转到Servlet002 //设置状态码302 //response.setStatus(302); //设置响应头Location //response.setHeader("Location","/Web03/Servlet002"); //重定向方法 response.sendRedirect("/Web03/Servlet002"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
public class Servlet002 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("hello dandan..."); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
定制时间跳转:
public class HeadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置定时刷新头 response.setHeader("Refresh", "5;url=https://www.baidu.com"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
定时器跳转:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <script type="text/javascript"> window.onload=function(){ //获取span元素 var second=document.getElementById("second"); var time=5; //设置定时器 var timer=setInterval(function(){ second.innerHTML=time; time--; if(time==0){ //取消定时器 clearInterval(timer); location.href="https://www.baidu.com"; } },1000); } </script> <body> <span id="second">5</span> 秒后跳转,如不跳转请点击 <a href="https://www.baidu.com"> 这里</a> </body> </html>
解决中文乱码问题:
public class BodyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置response缓冲区的编码表 //response.setCharacterEncoding("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); } }
写一张图片给客户端:
public class ImageServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //写一张图片给客户端 //获取图片在服务器上的绝对路径 String path=getServletContext().getRealPath("download/a.zip"); //明确数据源 FileInputStream fis=new FileInputStream(path); //明确目的地,获取目的地是客户端的字节输出流 ServletOutputStream out=response.getOutputStream(); //开始复制 byte bytes[]=new byte[1024]; int len=0; while((len=fis.read(bytes))!=-1){ out.write(bytes,0,len); } //释放资源 fis.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
文件下载功能:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/Web03/DownServlet?filename=蜡笔.jpg">蜡笔.jpg</a>
<a href="/Web03/DownServlet?filename=a.wmv">a.wmv</a>
<a href="/Web03/DownServlet?filename=a.zip">a.zip</a>
<a href="/Web03/DownServlet?filename=a.txt">a.txt</a>
</body>
</html>
public class DownServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取用户要下载的文件名 String filename=request.getParameter("filename"); //解决get请求代码 filename=new String(filename.getBytes("ISO8859-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); //获取文件绝对路径 String path=getServletContext().getRealPath("download/"+filename); //明确数据源 FileInputStream fis=new FileInputStream(path); //明确目的地 ServletOutputStream out=response.getOutputStream(); //开始复制 byte bytes[]=new byte[1024]; int len=0; while((len=fis.read(bytes))!=-1){ out.write(bytes,0,len); } //释放资源 fis.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
浙公网安备 33010602011771号