第九天
Response
获取客户端请求的参数:HttpServletRequest
给客户端响应:HttpServletResponse
- 向浏览器发送数据
ServletOutputStream getOutputStream()
PrintWriter getWriter()
- 常见应用方式
- 向浏览器输出消息
- 下载文件
下载文件的过程
- 获取下载文件的路径
- 下载的文件名
- 设置浏览器支持下载
- 获取下载文件的输入流
- 创建缓冲区
- 获取OutputStream对象
- 将FileOutputStream流写入到buffer缓冲区
- 使用OutputStream将缓冲区中的数据输出到客户端
package com.ztl.response;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
public class FileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 获取下载文件的路径
String path = "F:\\JavaWeb\\javaweb-maven-02\\javaweb-maven\\target\\classes\\3.jpg";
System.out.println("Path is "+path);
//2. 下载的文件名
String fileName = path.substring(path.lastIndexOf("\\")+1);
//3. 设置浏览器支持下载
resp.setHeader("Content-Disposition","attachment;filename"+fileName);
//4. 获取下载文件的输入流
FileInputStream in = new FileInputStream(path);
//5. 创建缓冲区
int len = 0;
byte[] buffer = new byte[1024];
//6. 获取OutputStream对象
ServletOutputStream out = resp.getOutputStream();
//7. 将FileOutputStream流写入到buffer缓冲区
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
in.close();
out.close();
//8. 使用OutputStream将缓冲区中的数据输出到客户端
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
下载成功
验证码功能实现
- 过程
- 浏览器自动刷新
- 创建一个内存图片
- 得到图片
- 给图片上色并写入验证码
- 选择浏览器上图片打开方式
- 浏览器进行缓存
- 给浏览器发送图片
package com.ztl.response;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
public class ImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//浏览器3秒自动刷新
resp.setHeader("refresh","3");
//创建一个图片
BufferedImage image = new BufferedImage(50,20,BufferedImage.TYPE_INT_RGB);
//得到图片
Graphics2D g = (Graphics2D) image.createGraphics();
//设置背景色
g.setColor(Color.WHITE);
g.fillRect(0,0,50,20);
//写入验证码数据
g.setColor(Color.BLUE);
g.setFont(new Font(null,Font.BOLD,20));
g.drawString(getNumber(),0,20);
//浏览器上图片打开方式
resp.setContentType("image/jpeg");
//浏览器进行缓存
resp.setDateHeader("expires",-1);
resp.setHeader("Cache-Control","no-cache");
resp.setHeader("Pragma","no-cache");
//将图片发给浏览器
ImageIO.write(image,"jpg",resp.getOutputStream());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
protected String getNumber()
{
String num = new String();
Random random = new Random();
//若位数不够,在数字前补零
num = String.format("%04d",random.nextInt(9999));
return num;
}
}