response:响应
作用:往浏览器写东西
组成部分:响应行 响应头 响应体
操作响应行
格式:
协议/版本 状态码 状态码说明
状态码:
1xx:已发送请求
2xx:已完成响应
200:正常响应
3xx:还需浏览器进一步操作
302:重定向 配合响应头:location
304:读缓存
4xx:用户操作错误
404:用户操作错误.
405:访问的方法不存在
5xx:服务器错误
500:内部异常
常用方法:
setStatus(int 状态码):针对于 1 2 3
sendError(int 状态码):针对于 4xx和5xx
操作响应头
格式:key/value(value可以是多个值)
常用的方法:
setHeader(String key,String value):设置字符串形式的响应头
了解:setIntHeader(String key,int value):设值整形的响应头
了解:setDateHeader(String key,long value):设值时间的响应头
addHeader(String key,String value):添加置字符串形式的响应头 之前设置过则追加,若没有设置过则设置
了解:addIntHeader(String key,int value):添加整形的响应头
了解:addDateHeader(String key,long value):添加时间的响应头
常用的响应头:
location:重定向
refresh:定时刷新
content-type:设置文件的mime类型,设置响应流的编码及告诉浏览器用什么编码打开
content-disposition:文件下载
重定向:
方式1:
★response.sendRedirect("/day10/loc2");
方式2:
response.setStatus(302);
respooen.setHeader("location","/day10/loc2");
实验:
LocationServlet用于首先访问,在这个servlet中定向到Location2Servlet2
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//用于测试重定向
public class LocationServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("请重定向到Location2");
//方式一
//1.设置状态码
response.setStatus(302);
//2.设置响应头
response.setHeader("Location","/FileDownload/Location2");
//方式2
response.sendRedirect("/FileDownload/Location2");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
Location2Servlet代码:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Location2Servlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("重定向成功");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
定时刷新:
方法一:在上一篇小servlet中已经使用过直接在响应中添加响应头resp.setHeader("refresh", "3;url=/pro3/1.html");即可
方法二:在html页面head中加入标签
利用js实现数据的变化:
在导入commons-io-1.4.jar包之后可以通过IOUtils.copy(in, os);直接复制io流
servlet在实现中文文件名的文件下载时,中文字符会消失,查阅资料说,浏览器接收的文件头信息若有中文必须为utf-8编码的
response.setHeader("content-disposition", "attchment;filename="+URLEncoder.encode(filename,"UTF-8"));
火狐浏览器编码为base64