小白自学Android路之 response的学习

1. Response控制字符的输出,尤其是中文

第一种,直接设置输出字符集。

String data = "中国";
		//response.setHeader("content-type", "text/html;charset=utf-8");
		response.setContentType("text/html;charset=utf-8");
		OutputStream os = response.getOutputStream();
		os.write(data.getBytes("utf-8"));

第二种,仿HTML语言设置字符编码集

String data = "中国你好!";
		OutputStream os = response.getOutputStream();
		os.write("<meta http-equiv='content-type' content-type='text/html;charset=utf-8'>".getBytes());
		os.write(data.getBytes("utf-8"));

第三种,采用字符流的方式

String data = "中国你好,北京";
		response.setHeader("content-type", "text/html;charset=utf-8");
		response.setCharacterEncoding("utf-8");
		response.getWriter().write(data);
在各种设置的方法中,设置字符集必须在获得输出流之前,因为在获取输出流的时候,就已经在查码表了。

2.文件的下载(尤其是中文名称的资源),中文文件名要经过URL的编码指定

注意:字节流可以处理任何的数据类型,而字符流只能处理字符类型,如果用字符流去处理图片或者音频,会造成只下载了部分,会有数据的丢失。

String realPath = this.getServletContext().getRealPath("/download/车子.jpg");
		String filname = realPath.substring(realPath.lastIndexOf("\\")+1);
		
		response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filname,"utf-8"));
		
		FileInputStream  fin = new FileInputStream(realPath);
		OutputStream out = response.getOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while((len=fin.read(buffer))>0){
			out.write(buffer, 0, len);
		}
		fin.close();

3.输出随机图片

//保证每次刷新,都能得到新的图片,因此要设置不缓存头
private static final int HEIGHT = 25;
private static final int WIDTH = 120;
		response.setHeader("Expires", "-1");
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Pragma", "no-cache");
		//BufferedImage:代表内存图片
		BufferedImage image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
		//Graphics:代表画笔
		Graphics g = image.getGraphics();
			//画边框
			g.setColor(Color.RED);
			g.drawRect(0, 0, WIDTH, HEIGHT);//选中的单词,ctrl+shift+x-->变大写  ctrl+shift+y-->变小写
			//填充背景色
			g.setColor(Color.YELLOW);
			g.fillRect(1, 1, WIDTH-2, HEIGHT-2);
		 	//画干扰线:9条
			g.setColor(Color.BLUE);
			Random r = new Random();
			for(int i=0;i<9;i++)
				g.drawLine(r.nextInt(WIDTH), r.nextInt(HEIGHT), r.nextInt(WIDTH), r.nextInt(HEIGHT));
			
			//画随机的数字:4个
			g.setColor(Color.GRAY);
			g.setFont(new Font("宋体", Font.BOLD|Font.ITALIC, 20));
			int x = 20;
			for(int i=0;i<4;i++){
				String num = r.nextInt(10)+"";
				g.drawString(num, x, 20);
				x+=18;
			}
		//ImageIo:输出
		ImageIO.write(image, "jpg", response.getOutputStream());
在HTML页面上显示验证的图片
<body>
  用户名 :<input type="text" name="username"> <br>
  密码 :<input type="password" name="passwor"> <br>
  登陆 :<input type="text" name="checkcode"><img src="/day06/servlet/ResponseDemo2">
  <input type="submit" value="注册">
  </body>

4. response设置页面的定时刷新和跳转,设置刷新的头,以及刷新的时间为2秒,url对应跳转页面

response.setHeader("Refresh", "2;url=/day06/index.html");
response.getOutputStream().write("欢迎来刷新".getBytes());

5. 请求重定向

response.setStatus(302);
response.setHeader("Location", "/day06/servlet/ResponseDemo1");

response.sendRedirect("/day06/servlet/ResponseDemo1");






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值