HttpServletResponse
作用:给客户端回送响应。
常见应用:
向浏览器发送数据
- 使用字节流向浏览器发送数据
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//向浏览器发送数据
//字节流
response.getOutputStream().write("aaa".getBytes());
}
- 使用字符流向浏览器发送数据
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用字符流
response.getWriter().println("xxgbl");
}
需要注意一个问题:同一个servlet里不能同时使用字节流和字符流。这个servle里向浏览器发送数据用的是字节流的话,就只能用字节流。比如你先用字节流向浏览器发送了一个数据,又用字符流向浏览器发送了一个数据,字符流发送的数据浏览器收不到,且当抓包的时候会出现500。
下载文件
public class ThirdServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//下载文件
/*
1.获取文件路径
2.获取文件的名字
3.让浏览器支持下载
4.将文件写出到浏览器
5.关闭流
*/
//1.获取文件的路径
String path ="D:\\idea\\workspace\\JavaWeb\\javaweb-02\\src\\main\\resources\\img\\1.jpg";
//2.获取文件的名字: 使用字符串分割的方式获取文件名
String filename = path.substring(path.lastIndexOf("\\") + 1);
System.out.println(filename);
// 3.让浏览器支持下载: 设置响应头
response.setHeader("content-disposition", "attachment;filename="+filename);
// 4.将文件写出到浏览器
BufferedInputStream in = new BufferedInputStream(new FileInputStream(path));
ServletOutputStream out = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while((len=in.read())!=-1){
out.write(buffer);
}
5.关闭流
out.close();
in.close();
}
实现重定向(重点)
public class FourthServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect(request.getContextPath()+"/FirstServlet");
}