转发和重定向的区别
区别 | 转发 forword() | 重定向 sendredirect() |
---|---|---|
定义 | 由服务器端进行跳转 | 客户端进行跳转 |
请求数 | 一次 | 两次 |
格式 | req.getRequestDispatcher(“responseDemo3”).forward(req, resp); | resp.sendRedirect(“/HomeWork/responseDemo2”); |
地址栏 | 不变 | 改变,可以跳转到服务器外的网站 |
数据 | 请求域中数据不会丢失 | 请求域中数据丢失 |
doPost & doGet 请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Demo3...");
// 默认 ISO-8859 TomCat
resp.setCharacterEncoding("utf8");
//告诉浏览器编码 包含设置 TomCat
resp.setHeader("Content-type", "text/html;charset=utf-8");
//简单方式
resp.setContentType("text/html;charset=utf-8");
//字节输出流
PrintWriter writer = resp.getWriter();
writer.write("Hello Response");
//window JBK, JB132
writer.write("你好!!");
// 字节输出流
ServletOutputStream outputStream = resp.getOutputStream();
resp.setContentType("text/html;charset=utf-8");
outputStream.write("hello".getBytes(StandardCharsets.UTF_8));
outputStream.write("你好".getBytes("utf-8"));
}
文件上传下载
设置response 请求头,content-disposition:attachment;filename=file “ 设置
MIME 类型:多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
- 通过浏览器发送的请求获取需要的内容
- 使用字节输入流加载进内存
- 设置相应头信息
- 将数据传送到网络
// Download?filename=images_1.png
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取请求参数
String filename = request.getParameter("filename");
//2.使用字节输入流加载进内存
//2.1 找到真实路径
ServletContext servletContext = this.getServletContext();
String path = servletContext.getRealPath("/img/" + filename);
//2.2 关联字节流
FileInputStream fileInputStream = new FileInputStream(path);
// -------------
//3. 设置response的响应头
//MIME 类型
String mimeType = servletContext.getMimeType(path);
response.setHeader("content-type", mimeType);
//设置打开方式 打开方式
response.setHeader("content-disposition", "attachment;filename=" + filename);
// -------------
// 4. 输出到网络
ServletOutputStream outputStream = response.getOutputStream();
byte[]buff = new byte[1024 * 8];
int len = 0;
while((len = fileInputStream.read(buff)) != -1){
outputStream.write(buff, 0, len);
}
outputStream.shu
fileInputStream.close();
}