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();
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用OkHttp发送网络请求后,我们可以通过Response对象来获取服务器返回的响应结果。解析响应结果的方式取决于服务器返回的数据格式。下面是几种常见的数据格式及其解析方式: 1. JSON格式数据的解析:可以使用第三方库比如Gson、FastJson等,将JSON字符串转为Java对象或者JSON数组。 示例代码: ```java Response response = client.newCall(request).execute(); if (response.isSuccessful()) { Gson gson = new Gson(); String responseStr = response.body().string(); YourObject yourObject = gson.fromJson(responseStr, YourObject.class); } ``` 2. XML格式数据的解析:可以使用第三方库比如SAX、Dom4j等,将XML字符串解析Java对象。 示例代码: ```java Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String responseStr = response.body().string(); SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(new ByteArrayInputStream(responseStr.getBytes("utf-8"))); Element rootElement = doc.getRootElement(); //解析XML } ``` 3. 图片、音频等二进制数据:可以直接将Response对象中的ResponseBody转为byte[]数组,然后再进行处理。 示例代码: ```java Response response = client.newCall(request).execute(); if (response.isSuccessful()) { byte[] bytes = response.body().bytes(); //处理byte[]数组 } ``` 注意:在使用OkHttp解析响应结果时,需要在子线程中进行,避免阻塞主线程。同时也需要注意在请求结束后,需要释放Response对象所持有的资源,否则可能会导致内存泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值