`
阅读更多

 

     json和xml 两者流程相似,只不过数据格式不同

    web端

   Servlet

package com.lin.servlet;

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 com.lin.pojo.News;
import com.lin.service.impl.VideoNewsService;
import com.lin.service.impl.VideoNewsServiceBean;

 
public class ListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
	private VideoNewsService service=new VideoNewsServiceBean();
	
    public ListServlet() {
        // TODO Auto-generated constructor stub
    }
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 List<News> videos=service.getLastNews();
		 String format=request.getParameter("format");
		 
		 if("json".equals(format)){
			 System.out.println("dadawdfafghrh   "+format);

 			 StringBuilder builder=new StringBuilder();
			 builder.append('[');
			 for(News news:videos){
				 builder.append('{');
				 builder.append("id:").append(news.getId()).append(',');
				 builder.append("title:\"").append(news.getTitle()).append("\",");
				 builder.append("timelength:\"").append(news.getTimelength()).append("\"");
				 
				 builder.append("},");
			 }
			 builder.deleteCharAt(builder.length()-1);
			 builder.append(']');
			 request.setAttribute("json", builder.toString());
		     request.getRequestDispatcher("/WEB-INF/page/jsonvideoNews.jsp").forward(request, response);
}
		 		 }
	    
	}

}

 

jsp

<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${json}
 

 可以发现,在服务器端json格式的构建更多的是在Servlet里实现的,因为涉及了很多字符串的操作。而xml格式的构建可以在jsp里轻松的完成。

 

 

android端

 

 

public static List<News> getJSONLastNews() {
		
		String path="http://192.168.189.1:8080/videonews/ListServlet?format=json";
		try{
			URL url=new URL(path);
			HttpURLConnection conn=(HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");
			if(conn.getResponseCode()==200){
				InputStream inStream=conn.getInputStream();
				return parseJSON(inStream);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;
	}
/*
 * json的解析有java自带的解析器
 */
     public static List<News> parseJSON(InputStream inStream) throws Exception{
  		List<News> newses=new ArrayList<News>();

    	 byte[] data=StreamTools.read(inStream);
    	String json=new String(data);//chi构造器默认为utf
         JSONArray array=new JSONArray(json);//json数组
         for(int i=0;i<array.length();i++){
        	JSONObject object= array.getJSONObject(i);
        	News news=new News(object.getInt("id"),
                	object.getString("title"),
                	object.getString("timelength"));
        	newses.add(news);
         }
        return newses;
     }

 

      可以看到json解析时,在构造器里传入了一个字符串。

引入了工具包的一个方法,把流以字节的方式存到数组里。得到字符串。然后在对JSONArray解析。这是和xml解析的不同。

而xml解析是直接对流进行处理的

 

 

package com.lin.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class StreamTools {
/*
 * 读取流中的数据
 * 
 * */
	public static byte[] read(InputStream inStream) throws Exception{
		
		byte[] buffer=new byte[1024];
		
		ByteArrayOutputStream stream=new ByteArrayOutputStream();
		
		int len=0;
		while((len=inStream.read(buffer))!=-1){
			stream.write(buffer,0,len);
		}
		inStream.close();
		return stream.toByteArray();
	}
	
}

 

 

 

  • 大小: 11.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics