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的代码解析的主要内容,如果未能解决你的问题,请参考以下文章

response的代码解析

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

pyspider示例代码:解析JSON数据

片段(Java) | 机试题+算法思路+考点+代码解析 2023

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

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段