jsp(8)(response,下载文件,和生产验证码,expirse缓存,重定向
1.下载文件的实例:
1.获得文件绝对路径 2.获得文件名字 3.设置下载响应头,并且对中文名字要进行URL编码 4.用字节读取文件,同时response获得输出流写出。

2.web验证码:
(补充:JAVA 验证码生成 Java之BufferedImage简谈 BufferedImage操作图片笔记 漂亮的自制java验证码)
html:
<img alt="验证码" src="/test_web/TestServlet">
java:
int WIDTH = 120, HEIGHT = 25;
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// 设置背景颜色(即填充一个长方形)
g.setColor(Color.WHITE);//
g.fillRect(0, 0, WIDTH, HEIGHT);
// 设置边框(即画一个长方形)
g.setColor(Color.BLUE);
g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1);
// 设置干扰线
g.setColor(Color.GREEN);
for (int i = 6; i > 0; i--) {
int x = new Random().nextInt(WIDTH);
int y = new Random().nextInt(HEIGHT);
int endx = new Random().nextInt(WIDTH);
int endy = new Random().nextInt(HEIGHT);
g.drawLine(x, y, endx, endy);
}
// 设置随机字
int x = 10;
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD, 20));
String s = "\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec";
for (int i = 0; i < 4; i++) {
String str = s.charAt(new Random().nextInt(s.length())) + "";
// 生成正负30的数来做角度
int degree = new Random().nextInt() % 30;
//该对象才有旋转方法
Graphics2D grap = (Graphics2D) g;
grap.rotate(degree * Math.PI / 180, x, 20);// 第一个参数弧度,后面是旋转参考点
grap.drawString(str, x, 20);
grap.rotate(-degree * Math.PI / 180, x, 20);// 将画图的角度调整回来
x += 30;
}
// 设置浏览器不缓存,以确保按回车能刷新验证码
response.setHeader("Expires", "-1");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
// 设置打开方式,发送给浏览器
response.setContentType("image/jpeg");
ImageIO.write(image, "jpg", response.getOutputStream());
js点击刷新图片:


3.response重定向:refresh
可以设置响应头让页面重定向,当请求一个servlet时候

但实际中请求servlet做了验证后会交给jsp页面来做显示,需要在jsp页面中做输出设置重定向。
可以通过模拟响应标签<meta>给jsp页面让其进行自动跳转

jsp:

4.response的响应头:expires的使用在ie中服务器会返回304
(http1.0,expires属性可以让缓存的网页不再请求服务器)
html:
<a href="/test_web/TestServlet">查看图书</a>
servlet:
// 设置编码类型(包括了服务端和浏览器) response.setContentType("text/html;charset=utf-8"); // 设置数据过去时间 response.setDateHeader("expires", System.currentTimeMillis() + 1000 * 3600 * 24); response.getWriter().write("http1.0版本话我是电子书的内容,我要被缓存,下次不要请求,首先查看浏览器是否有缓存");
浏览器缓存文件

(补充:浏览器缓存详解:expires,cache-control,last-modified,etag详细说明)
5.重定向(浏览器两次请求;浏览器请求,服务端要浏览器去访问另一个页面),
应用于:
注册,购买商品,以及一些根据参数会生成一些重要数据的情况,
目的是:
1.为了防止用户重复刷新,产生重复数据 2.地址栏链接变化,跳转效果比较明显。
重定向的两种写法,一种是利用响应头,另一种是利用封装好的方法:

response的一些细节补充:
字节和字符流不能同时使用:

易错的情况:

response输出流写出数据并没有直接发送给客户端:

输出流,服务器会自动检查是否关闭:


浙公网安备 33010602011771号