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); } }