现在的位置: 首页 > 综合 > 正文

23、JSON详解

2018年02月05日 ⁄ 综合 ⁄ 共 21311字 ⁄ 字号 评论关闭

JSON——JavaScript Object Notation Javascript的对象图,轻量级数据交换格式

Java的JSON解析库——org.json

1、xml与json的表示

xml:

<user>
 <username>aaa</username>
 <password>bbb</password>
 <addr>shganghai</addr>
</user>
<user>
 <username>ccc</username>
 <password>ddd</password>
 <addr>beijing</addr>
</user>

JSON:

[{username:"aaa",password:"bbb",addr:"shanghai"},{username:"ccc",password:"ddd",addr:"beijing"}]

2、JSON的MIME :application/json

3、使用google-json将对象转换为json数据:

import java.util.ArrayList;
import java.util.List;

public class Person
{
	private String username;
	private String password;
	private String addr;
	private Number age;	
	private List<String> list = new ArrayList<String>();
	
	public String getUsername()
	{
		return username;
	}
	public List<String> getList()
	{
		return list;
	}
	public void setList(List<String> list)
	{
		this.list = list;
	}
	public void setUsername(String username)
	{
		this.username = username;
	}
	public String getPassword()
	{
		return password;
	}
	public void setPassword(String password)
	{
		this.password = password;
	}
	public String getAddr()
	{
		return addr;
	}
	public void setAddr(String addr)
	{
		this.addr = addr;
	}
	public Number getAge()
	{
		return age;
	}
	public void setAge(Number age)
	{
		this.age = age;
	}
}

 

import com.google.gson.Gson;

public class Test
{
	public static void main(String[] args)
	{
		Person person = new Person();
		
		person.setUsername("zhangsan");
		person.setPassword("123456");
		person.setAddr("shanghai");
		person.setAge(30);
		person.getList().add("hello");
		person.getList().add("world");
		person.getList().add("welcom");
		
		Gson gson = new Gson();
		
		String result = gson.toJson(person);
		
		System.out.println(result);
	}
}

4、使用jQuery的ajax方法提交

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet
{
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		int param1 = Integer.parseInt(req.getParameter("param1"));
		int param2 = Integer.parseInt(req.getParameter("param2"));
		resp.setHeader("pragma", "no-cache");
		resp.setHeader("cache-control", "no-cache");
		PrintWriter out = resp.getWriter();
		out.println(String.valueOf(param1 + param2));
		out.flush();
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		this.doPost(req,resp);
	}
}

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'ajax.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<script type="text/javascript" src="scripts/jquery-1.9.1.js"></script>

<script type="text/javascript">
$(function()
{
	$("#button1").click(function()
	{
		$.ajax({

				type:"GET",
				url:"MyServlet",
				dateType:"html",
				data:{'param1':$("#param1").val(),'param2':$("#param2").val()},
				success:function(returnedData){
				$("#result").val(returnedData);
				}
			});
	});
});
</script>
  </head>
  
  <body>
  <input type="text" id="param1">+
  <input type="text" id="param2">=
  <input type="text" id="result"><input type="button" value="click" id="button1">
  </body>
</html>

5、jQuery的ajax与servlet混合使用传递xml

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import com.cdtax.model.Person;

public class XMLServlet extends HttpServlet
{
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		String name = req.getParameter("name");
		
		Person person = new Person();
		
		if("zhangsan".equals(name))
		{
			person.setId(1);
			person.setName("zhangsan");
			person.setAddr("beijing");
			person.setAge(30);
		}
		else
		{
			person.setId(2);
			person.setName("lisi");
			person.setAddr("shanghai");
			person.setAge(20);
		}
		
		Document document = DocumentHelper.createDocument();
	
		Element rootElement = document.addElement("users");
		
		rootElement.addComment("this is comment");
		
		Element userElement = rootElement.addElement("user");
		
		Element idElement = userElement.addElement("id");
		Element nameElement = userElement.addElement("name");
		Element ageElement = userElement.addElement("age");
		Element addrElement = userElement.addElement("addr");
		
		idElement.setText(person.getId() + "");
		nameElement.setText(person.getName());
		ageElement.setText(person.getAge() + "");
		addrElement.setText(person.getAddr());
		
		resp.setContentType("text/xml;charset=utf-8");
		resp.setHeader("pragma", "no-cache");
		resp.setHeader("cache-control", "no-cache");
		
		PrintWriter out = resp.getWriter();
		
		OutputFormat format = OutputFormat.createPrettyPrint();
		
		format.setEncoding("utf-8");
		
		XMLWriter xmlWriter = new XMLWriter(out,format);
		
		xmlWriter.write(document);
		out.flush();
	}
}

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'xml.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<script type="text/javascript" src="scripts/jquery-1.9.1.js"></script>
<script type="text/javascript">
$(function()
{
	$("#button1").click(function()
	{
		$.ajax({

			type:"POST",
			url:"XMLServlet",
			dateType:"xml",
			data:{'name': $("#name").val()},
			success:function(returnedData){
				var id = $(returnedData).find("id").text();
				var name = $(returnedData).find("name").text();
				var age = $(returnedData).find("age").text();
				var addr = $(returnedData).find("addr").text();

				var html = "<table width='60%' border='1' align='center'><tr><th>id</th><th>name</th><th>addr</th><th>age</th></tr><tr align='center'><td>" + id + "</td><td>" + name + "</td><td>" + addr + "</td><td>" + age + "</td></tr></table>"

				$("#theBody table:eq(0)").remove();
				$("#theBody").append(html);  
			}
		});
	});
});
</script>
  </head>
  
  <body id="theBody">
  <select id="name">
 	 <option value="zhangsan">zhangsan</option>
	 <option value="lisi">lisi</option>
  </select>
  <input type="button" id="button1" value="click me">
  </body>
</html>

使用post方法:

<script type="text/javascript">
$(function()
{
	$("#button1").click(function()
	{
		/*
		$.ajax({

			type:"POST",
			url:"XMLServlet",
			dateType:"xml",
			data:{'name': $("#name").val()},
			success:function(returnedData){
				var id = $(returnedData).find("id").text();
				var name = $(returnedData).find("name").text();
				var age = $(returnedData).find("age").text();
				var addr = $(returnedData).find("addr").text();

				var html = "<table width='60%' border='1' align='center'><tr><th>id</th><th>name</th><th>addr</th><th>age</th></tr><tr align='center'><td>" + id + "</td><td>" + name + "</td><td>" + addr + "</td><td>" + age + "</td></tr></table>"

				$("#theBody table:eq(0)").remove();
				$("#theBody").append(html);  
			}
		});
		*/

		$.post("XMLServlet",
				{
					name:$("#name").val()
				},function(returnedData,status)
				{
					var id = $(returnedData).find("id").text();
					var name = $(returnedData).find("name").text();
					var age = $(returnedData).find("age").text();
					var addr = $(returnedData).find("addr").text();

					var html = "<table width='60%' border='1' align='center'><tr><th>id</th><th>name</th><th>addr</th><th>age</th></tr><tr align='center'><td>" + id + "</td><td>" + name + "</td><td>" + addr + "</td><td>" + age + "</td></tr></table>"

					$("#theBody table:eq(0)").remove();
					$("#theBody").append(html); 
				});
	});
});
</script>

6、使用json传递数据:

import java.util.List;

public class People
{
	private int id;
	private String name;
	
	private Address addr;
	
	private List<People> friends;

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	
	public Address getAddr()
	{
		return addr;
	}

	public void setAddr(Address addr)
	{
		this.addr = addr;
	}

	public List<People> getFriends()
	{
		return friends;
	}

	public void setFriends(List<People> friends)
	{
		this.friends = friends;
	}
}

 

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cdtax.model.Address;
import com.cdtax.model.People;
import com.google.gson.Gson;

public class GsonServlet extends HttpServlet
{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		List<People> list = new ArrayList<People>();
		People people1 = new People();
		
		Address addr1 = new Address();
		addr1.setCompanyAddress("beijing");
		addr1.setHomeAddress("shangas");
		
		people1.setId(1);
		people1.setName("zhangsdasan");
		people1.setAddr(addr1);
		
		People people11 = new People();
		people11.setId(5);
		people11.setName("zhangsan11");
		
		People people12 = new People();
		people12.setId(6);
		people12.setName("zhangds1111");
		
		List<People> list1 = new ArrayList<People>();
		list1.add(people11);
		list1.add(people12);
		
		people1.setFriends(list1);
		
		System.out.println("---------");
		
		People people2 = new People();
		
		Address addr2 = new Address();
		addr2.setCompanyAddress("shangddd");
		addr2.setHomeAddress("befjdsk");
		
		people2.setId(2);
		people2.setName("lisi");
		people2.setAddr(addr2);
		
		List<People> list2 = new ArrayList<People>();
		
		People people21 = new People();
		people21.setId(7);
		people21.setName("lisi1111");
		
		People people22 = new People();
		people22.setId(8);
		people22.setName("lll1111");
		
		list2.add(people21);
		list2.add(people22);
		
		people2.setFriends(list2);
		
		list.add(people1);
		list.add(people2);
		
		Gson gson = new Gson();
		
		String result = gson.toJson(list);
		
		System.out.println(result);
		
		resp.setContentType("application/json;charset=utf-8");
		resp.setHeader("pragma", "no-cache");
		resp.setHeader("cache-control", "no-cache");
		
		PrintWriter out = resp.getWriter();
		out.println(result);
		out.flush();
	}
}

打印的json数据为:

[{"id":1,"name":"zhangsdasan","addr":{"homeAddress":"shangas","companyAddress":"beijing"},"friends":[{"id":5,"name":"zhangsan11"},{"id":6,"name":"zhangds1111"}]},{"id":2,"name":"lisi","addr":{"homeAddress":"befjdsk","companyAddress":"shangddd"},"friends":[{"id":7,"name":"lisi1111"},{"id":8,"name":"lll1111"}]}]

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'json.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<script type="text/javascript" src="scripts/jquery-1.9.1.js"></script>
<script type="text/javascript">
$(function()
{
	$("#button1").click(function()
	{
		$.get("GsonServlet",{},function(returnedData,status)
		{
			
			var html = "<table width='60%' border='1' align='center'><tr><th>id</th><th>name</th><th>homeaddr</th><th>compaddr</th></tr>";
			alert(returnedData.length);
			for(var i = 0; i < returnedData.length;i++)
			{
				var people = returnedData[i];
				var id = people.id;
				var name = people.name;
				var compAddr = people.addr.companyAddress;
				var homeAddr = people.addr.homeAddress;

				html += "<tr><td>"+id+"</td><td>" + name +"</td><td>"+ homeAddr + "</td><td>" + compAddr + "</td><tr>";
			
			}	
			html += "</table>";
			$("#theBody table:eq(0)").remove();
			$("#theBody").append(html);			
			
		});
	});
});

</script>
  </head>
  
  <body id="theBody">
    <input type="button" value="ddfds" id="button1">
  </body>
</html>

在firefox中测试通过,在IE中测试失败。在IE中,$.get("GsonServlet",{},function(returnedData,status)的returnedData长度一直是0,在firefox中是2,不知道什么原因

7、google images search APIs,返回的是一个json数据

要使用google的api,需要一个API key,免费获得

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class Test
{
	public static void main(String[] args) throws Exception
	{
		String str = "http://ajax.googleapis.com/ajax/services/search/images?q=macbook&rsz=large&start=0&v=1.0";
	
		URLConnection conn = new URL(str).openConnection();
		
		InputStream is = conn.getInputStream();
		InputStreamReader isr = new InputStreamReader(is);
		BufferedReader br = new BufferedReader(isr);
		
		StringBuffer buffer = new StringBuffer();
		
		String line = null;
		while(null != (line = br.readLine()))
		{
			buffer.append(line);
		}
		
		br.close();
		isr.close();
		is.close();
		
		System.out.println(buffer);
	}
	
}

flickr的图片搜索API

 

使用两种方式搜索保存图片

google和flickr搜索:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.json.JSONArray;
import org.json.JSONObject;

import com.cdtax.util.Constant;
import com.cdtax.util.NetworkUtil;
import com.google.gson.Gson;


public class GetImageServlet extends HttpServlet
{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		try
		{
			String categoryName = req.getParameter("categoryName");
			String picSource = req.getParameter("picSource");
			
			
			
			//存储向客户端发送的url
			List<String> returnedList = new ArrayList<String>();
			
			HttpSession session = req.getSession();
			session.setAttribute("categoryName", categoryName);
			session.setAttribute("picSource", picSource);
			session.setAttribute("images", returnedList);
			
			if("google".equals(picSource))
			{
				//存储每次从Google所获取的json数据
				List<String> list = new ArrayList<String>();
				
				
				for(int i = 0; i < 8; i++)
				{
					String queryString = new StringBuffer(Constant.GOOGLE_URL).append("q=")
											.append(categoryName).append("&start=").append(8 * i).toString();
					
					list.add(NetworkUtil.getStringContentFromURL(queryString));
				}
				
				for(String result : list)
				{
					
					JSONObject jsonContent = new JSONObject(result);
					JSONObject responseData = jsonContent.getJSONObject("responseData");
					JSONArray results = responseData.getJSONArray("results");
					for(int i = 0;i< results.length();i++)
					{
						JSONObject jsonObject = results.getJSONObject(i);
						
						String url = jsonObject.getString("url");
						
						returnedList.add(url);
					}
				}
				
				
			}
			//flickr
			else
			{
				String urlString = Constant.FLICKR_URL +"tags=" +categoryName;
				String jsonContent = NetworkUtil.getStringContentFromURL(urlString);
				//flickr返回的不是一个有效地json数据,需要剔除前面14个字符和最后一个字符,它的形式这样jsonFlickrApi(),括号里是json格式数据
				jsonContent = jsonContent.substring(14,jsonContent.length()-1);
				
				JSONObject jsonObject = new JSONObject(jsonContent);
				JSONArray jsonArray = jsonObject.getJSONObject("photos").getJSONArray("photo");
				
				for(int i = 0; i < jsonArray.length();i++)
				{
					JSONObject object = jsonArray.getJSONObject(i);
					String id = object.getString("id");
					int farmId = object.getInt("farm");
					String serverId = object.getString("server");
					String secretId = object.getString("secret");
					
					StringBuffer buffer = new StringBuffer();
					
					//http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}.jpg,这是flickr图片的最后地址形式
					buffer.append("http://farm").append(farmId).append(".static.flickr.com/")
							.append(serverId).append("/").append(id).append("_").append(secretId).append(".jpg");
					returnedList.add(buffer.toString());
				}
			}
			
			Gson gson = new Gson();
			String jsonResult = gson.toJson(returnedList);
			resp.setContentType("application/json;charset=utf-8");
			resp.setHeader("pragma", "no-cache");
			resp.setHeader("cache-control", "no-cache");
			
			PrintWriter out = resp.getWriter();
			out.println(jsonResult);
			out.flush();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  <script type="text/javascript" src="scripts/jquery-1.9.1.js"></script>
  <script type="text/javascript">
  $(function()
   {
		$("#button1").click(function()
		{
			$.get("GetImageServlet",
					{
						categoryName:$("#categoryName").val(),
						picSource:$("input[name=picSource]:checked").val()
				     },
				     function(returnedData,status)
				     {
						$("#div1").empty();
						var html = "";
						for(var i = 0; i < returnedData.length;i++)
						{
							html += "<img src='" + returnedData[i] + "' width='150' height='150'>"
						}	
						$("#div1").append(html);
					 });
			});
		$("#button2").click(function()
		{
			$.post("SaveImageServlet",{},function()
			{
				
				$("#div2").html("<font color='red'>processing</font>");
			});
			
		});
   });
  </script>
  </head>
  
  <body>
    <input type="text" id="categoryName">
    <input type="radio" name="picSource" value="google" checked>Google
    <input type="radio" name="picSource" value="flickr" checked>Flickr
    <input type="button" value="click" id="button1">
    <input type="button" value="save" id="button2" >
    <div id="div2"></div>
    <div id="div1"></div>
  </body>
</html>

保存:没有使用多线程:

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.cdtax.util.NetworkUtil;

public class SaveImageServlet extends HttpServlet
{
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		try
		{
			
		
		HttpSession session = req.getSession();
		
		String categoryName = (String)session.getAttribute("categoryName");
		String picSource = (String)session.getAttribute("picSource");
		List<String> list = (List<String>)session.getAttribute("images");
		
		String path = req.getSession().getServletContext().getRealPath("/storeImage");
		
		File directory = new File(path,picSource + "/" + categoryName);
		
		directory.mkdirs();
		
		long startTime = System.currentTimeMillis();
		for(String imageUrl : list)
		{
			int position = imageUrl.lastIndexOf("/");
			String imageName = imageUrl.substring(position +1);
			
			File file = new File(directory,imageName);
			
			NetworkUtil.Write2LocalFromInternet(imageUrl, file);
		}
		long endTime = System.currentTimeMillis();
		System.out.println("time elapsed:" + (endTime - startTime));
		resp.getWriter().print("sucess");
		resp.getWriter().flush();
	}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
	}
}

使用的辅助工具:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

public class NetworkUtil
{
	public static String getStringContentFromURL(String queryString) throws Exception
	{
		URL url = new URL(queryString);
		
		URLConnection conn = url.openConnection();
		
		InputStream is = conn.getInputStream();
		InputStreamReader isr = new InputStreamReader(is);
		BufferedReader br = new BufferedReader(isr);
		
		StringBuffer buffer = new StringBuffer();
		
		String line = null;
		while(null != (line = br.readLine()))
		{
			buffer.append(line);
		}
		
		br.close();
		isr.close();
		is.close();
		
		return buffer.toString();
	}
	
	public static void Write2LocalFromInternet(String imageUrl,File file) throws Exception
	{
		InputStream is = null;
		OutputStream os = null;
		
		try
		{
			URL url = new URL(imageUrl);
			is = url.openStream();
			os = new FileOutputStream(file);
			
			int length = -1;
			byte[] buffer = new byte[7092];
			
			while(-1 != (length = is.read(buffer,0,7092)))
			{
				os.write(buffer,0,length);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			if(null !=is)
			{
				is.close();
			}
			if(null !=os)
			{
				os.close();
			}
		}
	}
}

使用多线程的方式保存:

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.cdtax.util.NetworkUtil;
import com.cdtax.util.SaveImageThread;

public class SaveImageServlet extends HttpServlet
{
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException
	{
		try
		{
			
		
		HttpSession session = req.getSession();
		
		String categoryName = (String)session.getAttribute("categoryName");
		String picSource = (String)session.getAttribute("picSource");
		List<String> list = (List<String>)session.getAttribute("images");
		
		String path = req.getSession().getServletContext().getRealPath("/storeImage");
		
		File directory = new File(path,picSource + "/" + categoryName);
		
		directory.mkdirs();
		
		//long startTime = System.currentTimeMillis();
		String[] array = null;
		for(int i = 0; i < list.size(); i++)
		{
			String imageUrl = list.get(i);
			int position = imageUrl.lastIndexOf("/");
			String imageName = imageUrl.substring(position +1);
			File file = new File(directory,imageName);
			
			if(i % 4 ==0)
			{
				if(0 != i)
				{
					new SaveImageThread(directory,array).start();
				}
				
				array = new String[4];
			}
			array[i % 4] = imageUrl;
		}
		
			
			
			
			
		
		
		//long endTime = System.currentTimeMillis();
		//System.out.println("time elapsed:" + (endTime - startTime));
		resp.getWriter().print("sucess");
		resp.getWriter().flush();
	}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
	}
}

使用的线程辅助类:

import java.io.File;

public class SaveImageThread extends Thread
{
	private File directory;
	private String[] imageUrls;
	
	public SaveImageThread(File directory,String[] imageUrls)
	{
		this.directory = directory;
		this.imageUrls = imageUrls;
	}
	@Override
	public void run()
	{
		try
		{
		for(String imageUrl : imageUrls)
		{
			int position = imageUrl.lastIndexOf("/");
			String imageName = imageUrl.substring(position,+1);
			File file = new File(directory,imageName);
			
			NetworkUtil.Write2LocalFromInternet(imageUrl, file);
			
		}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

 

 

 

【上篇】
【下篇】

抱歉!评论已关闭.