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输出流写出数据并没有直接发送给客户端:

 

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

 

posted @ 2017-02-01 04:32  假程序猿  阅读(250)  评论(0)    收藏  举报