response的代码解析

Posted 离落想AC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了response的代码解析相关的知识,希望对你有一定的参考价值。


老师的代码Response1.java 和Response2.java 文件

1.Response1主要内容:通过response设置相应消息头,重点Refresh的设置。例如,三秒后跳转到其他页面。

2.Response1主要内容:response实现文件下载,实现输出验证码图片。


除了代码还有一张放在服务器上的图片。

接下来学习代码:

1.Response1主要内容:通过response设置相应消息头,重点Refresh的设置。例如,三秒后跳转到其他页面。

首先是test1 此代码实现的是一个页面时间,每一秒刷新一次;

主要代码及注释如下所示:

public void test1(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 

		response.setContentType("text/html;charset=UTF-8");
        //使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
		//此处是html类数据
		PrintWriter out = response.getWriter();
		//限制输出数据类型
		//write():仅支持输出字符类型数据,字符、字符数组、字符串等
		//print():可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出
				
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		//将日期格式化成  yyyy-MM-dd HH:mm:ss 
		long time = System.currentTimeMillis();
		//获取当前时间
		Date dt =  new Date(time);
		//取时间
		out.write(df.format(dt));
		//输出时间
		//out.write(dt.toLocaleString());
		response.setHeader("Refresh", "1");//间隔1秒刷新到自己
	
	

其次是test2 这是一个Refresh的设置 主要功能是设置3秒后载入其他网页。

主要代码及解析如下所示:

public void test2(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 

		response.setContentType("text/html;charset=UTF-8");
		   //使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
				//此处是html类数据
		PrintWriter out = response.getWriter();
		//限制输出数据类型
				//write():仅支持输出字符类型数据,字符、字符数组、字符串等
				//print():可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出
						

		out.write("登录成功,3秒后跳转到");
		//response.setHeader("Refresh", "3;URL=/ServletDemo/register.html");
		response.setHeader("Refresh", "3;URL=/MyJspProject/111.html");//3妙后刷新到其他资源

	

接下来是test3,是一个response.sendRedirect的用法

主要代码及注释如下所示:

public void test3(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 

		//response.sendRedirect("/ServletDemo/register.html");
		response.sendRedirect("/MyJspProject/111.html");
		//用于生成302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的URL

	


接下来是test4,是一个设置响应头

public void test4(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 

		response.setStatus(302);//设置响应码
		//response.setHeader("Location", "/ServletDemo/register.html");//设置响应消息头
		response.setHeader("Location", "/MyJspProject/111.html");
	

2.Response1主要内容:response实现文件下载,实现输出验证码图片。

首先是获取验证码图片的代码;

主要代码及注释如下所示:

private void test3(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
	
		//通知浏览器不要缓存
		response.setHeader("Expires", "-1");
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Pragma", "no-cache");
				
				int width = 120;
				int height = 25;
				//创建一副内存图像:BufferedImage
				BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
				//得到属于该图片的画笔:Graphics
				Graphics g = image.getGraphics();
					//画边框
				g.setColor(Color.BLUE);
				g.drawRect(0, 0, width, height);
					//填充背景色
				g.setColor(Color.YELLOW);
				g.fillRect(1, 1, width-2, height-2);
					//画干扰线
				g.setColor(Color.GRAY);
				
				Random r = new Random();
				for(int i=0;i<10;i++)
					g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
				
					//随机数字
				g.setColor(Color.RED);
				g.setFont(new Font("宋体", Font.BOLD|Font.ITALIC, 20));
				int x = 23;
				for(int i=0;i<4;i++)
					g.drawString(r.nextInt(10)+"", x, 20);
					x+=20;
				
				//输出到浏览器的页面上:ImageIO
				ImageIO.write(image, "jpg", response.getOutputStream());
		
		
		
	

其次是response实现文件下载的代码
Tips:此代码是可以修改文件名的;

主要代码及注释如下所示:

private void test2(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
		String filePath = getServletContext().getRealPath("/1.jpg");
		
		//通知客户端以下载的方式打开
		String filename = "郁金香.jpg";
		
		
		
		response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));//中文文件名此处要进行URL编码
		
		response.setHeader("Content-Type", "application/octet-stream");//通知客户端正文的类型
		InputStream in = new FileInputStream(filePath);
		OutputStream out = response.getOutputStream();
		int len = -1;
		byte b[] = new byte[1024];
		while((len=in.read(b))!=-1)
			out.write(b, 0, len);
		
		in.close();
		out.close();
	

tips:此代码不能修改文件名

主要代码及注释如下所示:

private void test1(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
		String filePath = getServletContext().getRealPath("/1.jpg");
		
		//通知客户端以下载的方式打开
		response.setHeader("Content-Disposition", "attachment;filename=1.jpg");
		response.setHeader("Content-Type", "application/octet-stream");//通知客户端正文的类型
		InputStream in = new FileInputStream(filePath);
		OutputStream out = response.getOutputStream();
		int len = -1;
		byte b[] = new byte[1024];
		while((len=in.read(b))!=-1)
			out.write(b, 0, len);
		
		in.close();
		out.close();
	

以上是关于response的代码解析的主要内容,如果未能解决你的问题,请参考以下文章

你知道比特币,但听说过郁金香吗?

pyspider示例代码:解析JSON数据

郁金香搜索引擎方案

python 概念证明龙卷风/郁金香一体化

郁金香搜索引擎的方案

pyspider示例代码二:解析JSON数据