精华内容
下载资源
问答
  • java编写CS模式的计算器 客户端雨服务端分离!
  • Java数据接口编写简单例子,Java Web Json解析,服务端接口输出Json数据,客户端通过HTTP获取接口Json数据。 目前主流的CS结构,数据都是通过RESTful风格接口形式呈现,不管是桌面级应用程序还是手机端,接口是我们...

    实现效果


    实现原因

    目前主流的CS结构,数据都是通过RESTful风格接口形式呈现,不管是桌面级应用程序还是手机端,接口是我们获取数据的大多数选择,主流数据接口呈现形式主要是Json和Xml,后者目前基本渐行渐远。Json的轻量级和可读型成为了大多数公司及个人开发者的第一选择。
    主流公司在编写数据接口时大多通过框架实现,如RESTEasy、Retrofit等,在这里通过简单的java web代码写一个简单的接口项目例子供大家参考,后附项目源代码。



    实现步骤

    在Eclipse中新建项目JsonTest项目,项目结构如下,

    此处主要用到的类只有几个,其他类为Json测试用类,此处可以忽略。


    在lib下导入或在maven中引用gson-2.6.2.jar包和servlet-api.jar包。

    gson此处用于将持久化对象解析为Json,或将Json序列化为对象。

    servlet-api用于servlet相关类创建及API运用。



    关于gson,是Google开源项目下的一个Java Json解析工具包,具体使用及详细信息可以看这篇文章:Gson简要使用




    步骤一:新建测试用Model类

    新建新闻测试类News,主要用于数据模型测试显示,Json转换测试等,代码如下:

    import java.util.Date;
    
    public class News {
    
    	private int nId; // 新闻ID
    	private String title; // 新闻标题
    	private String content; // 新闻内容
    	private String date; // 新闻发布日期
    	private String url; //新闻地址
    	private Date nDate; // 新闻日期,Date类型
    
    	public News(int nId, String title, String content, String date, String url) {
    		this.nId = nId;
    		this.title = title;
    		this.content = content;
    		this.date = date;
    		this.url = url;
    	}
    
    	public News() {
    	}
    
    	public News(int nId, String title, String content, Date nDate, String url) {
    		this.nId = nId;
    		this.title = title;
    		this.content = content;
    		this.nDate = nDate;
    		this.url = url;
    	}
    
    	
    	
    	public String getUrl() {
    		return url;
    	}
    
    	public void setUrl(String url) {
    		this.url = url;
    	}
    
    	public Date getnDate() {
    		return nDate;
    	}
    
    	public void setnDate(Date nDate) {
    		this.nDate = nDate;
    	}
    
    	public int getnId() {
    		return nId;
    	}
    
    	public void setnId(int nId) {
    		this.nId = nId;
    	}
    
    	public String getTitle() {
    		return title;
    	}
    
    	public void setTitle(String title) {
    		this.title = title;
    	}
    
    	public String getContent() {
    		return content;
    	}
    
    	public void setContent(String content) {
    		this.content = content;
    	}
    
    	public String getDate() {
    		return date;
    	}
    
    	public void setDate(String date) {
    		this.date = date;
    	}
    
    }
    新建分页测试类NewTotal,主要用于Json分页显示,代码如下:
    import java.util.List;
    
    public class NewTotal {
    	private int total; //新闻数量
    	private List<News> rows; //新闻列表
    	
    	
    	public NewTotal() {
    	}
    	public NewTotal(int total, List<News> rows) {
    		this.total = total;
    		this.rows = rows;
    	}
    	public int getTotal() {
    		return total;
    	}
    	public void setTotal(int total) {
    		this.total = total;
    	}
    	public List<News> getRows() {
    		return rows;
    	}
    	public void setRows(List<News> rows) {
    		this.rows = rows;
    	}
    	
    	
    }


    步骤二:添加测试用Action和JSP界面

    新建JsonServlet,继承自HttpServlet,具体代码详解已经在代码中注释:

    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.google.gson.Gson;
    import com.test.model.NewTotal;
    import com.test.model.News;
    
    public class JsonServlet extends HttpServlet {
    
    	private static final long serialVersionUID = 1L;
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		// 创建多个新闻类,模拟从数据库获取数据,可将此处改为用JDBC从数据库读取数据
    		News new1 = new News(110, "日本地震", "日本福田发生了7级地震", "2016-5-16 10:22:20",
    				"http://world.huanqiu.com/exclusive/2016-05/8974294.html");
    		News new2 = new News(111, "Apple库克第八次访华", "近日库克第八次访华,与滴滴高层会谈", "2016-5-16 10:22:20",
    				"http://mobile.163.com/16/0523/09/BNO7SG2B001168BQ.html");
    		News new3 = new News(113, "Google I/O大会开幕", "Google开发者大会即将举办,是否推出Android7.0?", "2016-5-16 10:22:20",
    				"http://www.ithome.com/html/android/227647.htm");
    		News new4 = new News(114, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20",
    				"http://news.mydrivers.com/1/484/484072.htm");
    		News new5 = new News(115, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new6 = new News(116, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new7 = new News(117, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new8 = new News(118, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new9 = new News(119, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new10 = new News(120, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new11 = new News(121, "获取新数据!!!!!!", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new12 = new News(122, "获取新数据!!!!!!", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new13 = new News(123, "获取新数据!!!!!!", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new14 = new News(124, "获取新数据!!!!!!", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new15 = new News(125, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new16 = new News(126, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new17 = new News(127, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new18 = new News(128, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new19 = new News(129, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    		News new20 = new News(130, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    
    		String page = req.getParameter("page");
    		// 将数据添加到数组
    		List<News> newslist = new ArrayList<News>();
    		if (page == null || page.equals("0")) {
    			newslist.add(new1);
    			newslist.add(new2);
    			newslist.add(new3);
    			newslist.add(new4);
    			newslist.add(new5);
    			newslist.add(new6);
    			newslist.add(new7);
    			newslist.add(new8);
    			newslist.add(new9);
    			newslist.add(new10);
    		}
    		else {
    			newslist.add(new11);
    			newslist.add(new12);
    			newslist.add(new13);
    			newslist.add(new14);
    			newslist.add(new15);
    			newslist.add(new16);
    			newslist.add(new17);
    			newslist.add(new18);
    			newslist.add(new19);
    			newslist.add(new20);
    		}
    
    		// 将数据封装到新闻总计类
    		NewTotal nt = new NewTotal(newslist.size(), newslist);
    
    		// 调用GSON jar工具包封装好的toJson方法,可直接生成JSON字符串
    		Gson gson = new Gson();
    		String json = gson.toJson(nt);
    
    		// 输出到界面
    		System.out.println(json);
    		resp.setContentType("text/plain");
    		resp.setCharacterEncoding("gb2312");
    		PrintWriter out = new PrintWriter(resp.getOutputStream());
    		out.print(json);
    		out.flush();
    		// 更多Json转换使用请看JsonTest类
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		this.doGet(req, resp);
    	}
    
    }

    修改项目index.jsp页面如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8" 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>Test Json</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8>
    	<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">
    	-->
      </head>
      
      <body>
         <form action="getJson" method="get">
         	<input type="submit" value="点击获取新闻JSON数据"/>
         </form>
      </body>
    </html>

    在项目中配置web.xml,注册JsonServlet映射,配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>JsonTest</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
      <servlet>
          <servlet-name>JsonServlet</servlet-name>
          <servlet-class>com.test.json.JsonServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>JsonServlet</servlet-name>
          <url-pattern>/getJson</url-pattern>
      </servlet-mapping>
    </web-app>


    步骤三:添加项目到Tomcat容器,运行服务器

    运行服务器,在地址栏输入地址:http://localhost:8080/JsonTest/getJson?page=0,效果如图:


    其他关于JSON解析的也可以看我发布的源代码中的JsonTest类,获取源代码:JavaJson解析



    声明

    欢迎转载,但请保留文章原始出处
    作者:Jaiky_杰哥 
    出处:http://blog.csdn.net/jaikydota163/article/details/51458880

    展开全文
  • Java实现CS框架的聊天程序,CS框架也就是Client客户端和Server服务端,客户端和服务端都可以看到消息,在客户端编写消息,通过建立好的服务端连接,可实现点对点式的简单消息发送,也就是聊天的功能,程序还是框架...
  • 版权声明:本文为Jaiky_杰哥原创实现效果实现原因目前主流的CS结构,数据都是通过RESTful风格接口形式呈现,不管是桌面级应用程序还是手机端,接口是我们获取数据的大多数选择,主流数据接口呈现形式主要是Json和Xml...
    版权声明:本文为Jaiky_杰哥原创
    

    实现效果


    实现原因

    目前主流的CS结构,数据都是通过RESTful风格接口形式呈现,不管是桌面级应用程序还是手机端,接口是我们获取数据的大多数选择,主流数据接口呈现形式主要是Json和Xml,后者目前基本渐行渐远。Json的轻量级和可读型成为了大多数公司及个人开发者的第一选择。
    主流公司在编写数据接口时大多通过框架实现,如RESTEasy、Retrofit等,在这里通过简单的java web代码写一个简单的接口项目例子供大家参考,后附项目源代码。



    实现步骤

    在Eclipse中新建项目JsonTest项目,项目结构如下,

    此处主要用到的类只有几个,其他类为Json测试用类,此处可以忽略。


    在lib下导入或在maven中引用gson-2.6.2.jar包和servlet-api.jar包。

    gson此处用于将持久化对象解析为Json,或将Json序列化为对象。

    servlet-api用于servlet相关类创建及API运用。



    关于gson,是Google开源项目下的一个Java Json解析工具包,具体使用及详细信息可以看这篇文章:Gson简要使用




    步骤一:新建测试用Model类

    新建新闻测试类News,主要用于数据模型测试显示,Json转换测试等,代码如下:

    1. import java.util.Date;  
    2.   
    3. public class News {  
    4.   
    5.     private int nId; // 新闻ID  
    6.     private String title; // 新闻标题  
    7.     private String content; // 新闻内容  
    8.     private String date; // 新闻发布日期  
    9.     private String url; //新闻地址  
    10.     private Date nDate; // 新闻日期,Date类型  
    11.   
    12.     public News(int nId, String title, String content, String date, String url) {  
    13.         this.nId = nId;  
    14.         this.title = title;  
    15.         this.content = content;  
    16.         this.date = date;  
    17.         this.url = url;  
    18.     }  
    19.   
    20.     public News() {  
    21.     }  
    22.   
    23.     public News(int nId, String title, String content, Date nDate, String url) {  
    24.         this.nId = nId;  
    25.         this.title = title;  
    26.         this.content = content;  
    27.         this.nDate = nDate;  
    28.         this.url = url;  
    29.     }  
    30.   
    31.       
    32.       
    33.     public String getUrl() {  
    34.         return url;  
    35.     }  
    36.   
    37.     public void setUrl(String url) {  
    38.         this.url = url;  
    39.     }  
    40.   
    41.     public Date getnDate() {  
    42.         return nDate;  
    43.     }  
    44.   
    45.     public void setnDate(Date nDate) {  
    46.         this.nDate = nDate;  
    47.     }  
    48.   
    49.     public int getnId() {  
    50.         return nId;  
    51.     }  
    52.   
    53.     public void setnId(int nId) {  
    54.         this.nId = nId;  
    55.     }  
    56.   
    57.     public String getTitle() {  
    58.         return title;  
    59.     }  
    60.   
    61.     public void setTitle(String title) {  
    62.         this.title = title;  
    63.     }  
    64.   
    65.     public String getContent() {  
    66.         return content;  
    67.     }  
    68.   
    69.     public void setContent(String content) {  
    70.         this.content = content;  
    71.     }  
    72.   
    73.     public String getDate() {  
    74.         return date;  
    75.     }  
    76.   
    77.     public void setDate(String date) {  
    78.         this.date = date;  
    79.     }  
    80.   
    81. }  
    import java.util.Date;
    
    public class News {
    
        private int nId; // 新闻ID
        private String title; // 新闻标题
        private String content; // 新闻内容
        private String date; // 新闻发布日期
        private String url; //新闻地址
        private Date nDate; // 新闻日期,Date类型
    
        public News(int nId, String title, String content, String date, String url) {
            this.nId = nId;
            this.title = title;
            this.content = content;
            this.date = date;
            this.url = url;
        }
    
        public News() {
        }
    
        public News(int nId, String title, String content, Date nDate, String url) {
            this.nId = nId;
            this.title = title;
            this.content = content;
            this.nDate = nDate;
            this.url = url;
        }
    
    
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public Date getnDate() {
            return nDate;
        }
    
        public void setnDate(Date nDate) {
            this.nDate = nDate;
        }
    
        public int getnId() {
            return nId;
        }
    
        public void setnId(int nId) {
            this.nId = nId;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public String getDate() {
            return date;
        }
    
        public void setDate(String date) {
            this.date = date;
        }
    
    }
    新建分页测试类NewTotal,主要用于Json分页显示,代码如下:
    1. import java.util.List;  
    2.   
    3. public class NewTotal {  
    4.     private int total; //新闻数量  
    5.     private List<News> rows; //新闻列表  
    6.       
    7.       
    8.     public NewTotal() {  
    9.     }  
    10.     public NewTotal(int total, List<News> rows) {  
    11.         this.total = total;  
    12.         this.rows = rows;  
    13.     }  
    14.     public int getTotal() {  
    15.         return total;  
    16.     }  
    17.     public void setTotal(int total) {  
    18.         this.total = total;  
    19.     }  
    20.     public List<News> getRows() {  
    21.         return rows;  
    22.     }  
    23.     public void setRows(List<News> rows) {  
    24.         this.rows = rows;  
    25.     }  
    26.       
    27.       
    28. }  
    import java.util.List;
    
    public class NewTotal {
        private int total; //新闻数量
        private List<News> rows; //新闻列表
    
    
        public NewTotal() {
        }
        public NewTotal(int total, List<News> rows) {
            this.total = total;
            this.rows = rows;
        }
        public int getTotal() {
            return total;
        }
        public void setTotal(int total) {
            this.total = total;
        }
        public List<News> getRows() {
            return rows;
        }
        public void setRows(List<News> rows) {
            this.rows = rows;
        }
    
    
    }


    步骤二:添加测试用Action和JSP界面

    新建JsonServlet,继承自HttpServlet,具体代码详解已经在代码中注释:

    1. import java.io.IOException;  
    2. import java.io.PrintWriter;  
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5.   
    6. import javax.servlet.ServletException;  
    7. import javax.servlet.http.HttpServlet;  
    8. import javax.servlet.http.HttpServletRequest;  
    9. import javax.servlet.http.HttpServletResponse;  
    10.   
    11. import com.google.gson.Gson;  
    12. import com.test.model.NewTotal;  
    13. import com.test.model.News;  
    14.   
    15. public class JsonServlet extends HttpServlet {  
    16.   
    17.     private static final long serialVersionUID = 1L;  
    18.   
    19.     @Override  
    20.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
    21.         // 创建多个新闻类,模拟从数据库获取数据,可将此处改为用JDBC从数据库读取数据  
    22.         News new1 = new News(110, ”日本地震”, ”日本福田发生了7级地震”, “2016-5-16 10:22:20”,  
    23.                 “http://world.huanqiu.com/exclusive/2016-05/8974294.html”);  
    24.         News new2 = new News(111, “Apple库克第八次访华”, ”近日库克第八次访华,与滴滴高层会谈”, “2016-5-16 10:22:20”,  
    25.                 “http://mobile.163.com/16/0523/09/BNO7SG2B001168BQ.html”);  
    26.         News new3 = new News(113, “Google I/O大会开幕”, “Google开发者大会即将举办,是否推出Android7.0?”, “2016-5-16 10:22:20”,  
    27.                 “http://www.ithome.com/html/android/227647.htm”);  
    28.         News new4 = new News(114, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”,  
    29.                 “http://news.mydrivers.com/1/484/484072.htm”);  
    30.         News new5 = new News(115, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    31.         News new6 = new News(116, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    32.         News new7 = new News(117, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    33.         News new8 = new News(118, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    34.         News new9 = new News(119, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    35.         News new10 = new News(120, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    36.         News new11 = new News(121, ”获取新数据!!!!!!”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    37.         News new12 = new News(122, ”获取新数据!!!!!!”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    38.         News new13 = new News(123, ”获取新数据!!!!!!”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    39.         News new14 = new News(124, ”获取新数据!!!!!!”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    40.         News new15 = new News(125, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    41.         News new16 = new News(126, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    42.         News new17 = new News(127, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    43.         News new18 = new News(128, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    44.         News new19 = new News(129, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    45.         News new20 = new News(130, ”格力营收下滑400亿”, ”格里营收下滑400亿,董明珠说我活得好的很”, “2016-5-16 10:22:20”, “www.baidu.com”);  
    46.   
    47.         String page = req.getParameter(“page”);  
    48.         // 将数据添加到数组  
    49.         List<News> newslist = new ArrayList<News>();  
    50.         if (page == null || page.equals(“0”)) {  
    51.             newslist.add(new1);  
    52.             newslist.add(new2);  
    53.             newslist.add(new3);  
    54.             newslist.add(new4);  
    55.             newslist.add(new5);  
    56.             newslist.add(new6);  
    57.             newslist.add(new7);  
    58.             newslist.add(new8);  
    59.             newslist.add(new9);  
    60.             newslist.add(new10);  
    61.         }  
    62.         else {  
    63.             newslist.add(new11);  
    64.             newslist.add(new12);  
    65.             newslist.add(new13);  
    66.             newslist.add(new14);  
    67.             newslist.add(new15);  
    68.             newslist.add(new16);  
    69.             newslist.add(new17);  
    70.             newslist.add(new18);  
    71.             newslist.add(new19);  
    72.             newslist.add(new20);  
    73.         }  
    74.   
    75.         // 将数据封装到新闻总计类  
    76.         NewTotal nt = new NewTotal(newslist.size(), newslist);  
    77.   
    78.         // 调用GSON jar工具包封装好的toJson方法,可直接生成JSON字符串  
    79.         Gson gson = new Gson();  
    80.         String json = gson.toJson(nt);  
    81.   
    82.         // 输出到界面  
    83.         System.out.println(json);  
    84.         resp.setContentType(“text/plain”);  
    85.         resp.setCharacterEncoding(“gb2312”);  
    86.         PrintWriter out = new PrintWriter(resp.getOutputStream());  
    87.         out.print(json);  
    88.         out.flush();  
    89.         // 更多Json转换使用请看JsonTest类  
    90.     }  
    91.   
    92.     @Override  
    93.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
    94.         this.doGet(req, resp);  
    95.     }  
    96.   
    97. }  
    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.google.gson.Gson;
    import com.test.model.NewTotal;
    import com.test.model.News;
    
    public class JsonServlet extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // 创建多个新闻类,模拟从数据库获取数据,可将此处改为用JDBC从数据库读取数据
            News new1 = new News(110, "日本地震", "日本福田发生了7级地震", "2016-5-16 10:22:20",
                    "http://world.huanqiu.com/exclusive/2016-05/8974294.html");
            News new2 = new News(111, "Apple库克第八次访华", "近日库克第八次访华,与滴滴高层会谈", "2016-5-16 10:22:20",
                    "http://mobile.163.com/16/0523/09/BNO7SG2B001168BQ.html");
            News new3 = new News(113, "Google I/O大会开幕", "Google开发者大会即将举办,是否推出Android7.0?", "2016-5-16 10:22:20",
                    "http://www.ithome.com/html/android/227647.htm");
            News new4 = new News(114, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20",
                    "http://news.mydrivers.com/1/484/484072.htm");
            News new5 = new News(115, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new6 = new News(116, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new7 = new News(117, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new8 = new News(118, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new9 = new News(119, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new10 = new News(120, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new11 = new News(121, "获取新数据!!!!!!", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new12 = new News(122, "获取新数据!!!!!!", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new13 = new News(123, "获取新数据!!!!!!", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new14 = new News(124, "获取新数据!!!!!!", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new15 = new News(125, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new16 = new News(126, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new17 = new News(127, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new18 = new News(128, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new19 = new News(129, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
            News new20 = new News(130, "格力营收下滑400亿", "格里营收下滑400亿,董明珠说我活得好的很", "2016-5-16 10:22:20", "www.baidu.com");
    
            String page = req.getParameter("page");
            // 将数据添加到数组
            List<News> newslist = new ArrayList<News>();
            if (page == null || page.equals("0")) {
                newslist.add(new1);
                newslist.add(new2);
                newslist.add(new3);
                newslist.add(new4);
                newslist.add(new5);
                newslist.add(new6);
                newslist.add(new7);
                newslist.add(new8);
                newslist.add(new9);
                newslist.add(new10);
            }
            else {
                newslist.add(new11);
                newslist.add(new12);
                newslist.add(new13);
                newslist.add(new14);
                newslist.add(new15);
                newslist.add(new16);
                newslist.add(new17);
                newslist.add(new18);
                newslist.add(new19);
                newslist.add(new20);
            }
    
            // 将数据封装到新闻总计类
            NewTotal nt = new NewTotal(newslist.size(), newslist);
    
            // 调用GSON jar工具包封装好的toJson方法,可直接生成JSON字符串
            Gson gson = new Gson();
            String json = gson.toJson(nt);
    
            // 输出到界面
            System.out.println(json);
            resp.setContentType("text/plain");
            resp.setCharacterEncoding("gb2312");
            PrintWriter out = new PrintWriter(resp.getOutputStream());
            out.print(json);
            out.flush();
            // 更多Json转换使用请看JsonTest类
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doGet(req, resp);
        }
    
    }

    修改项目index.jsp页面如下:

    1. <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;  
    5. %>  
    6.   
    7. <!DOCTYPE HTML PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN”>  
    8. <html>  
    9.   <head>  
    10.     <base href=“<%=basePath%>”>  
    11.       
    12.     <title>Test Json</title>  
    13.     <meta http-equiv=“Content-Type” content=”text/html; charset=UTF-8>  
    14.     <meta http-equiv=“pragma” content=“no-cache”>  
    15.     <meta http-equiv=“cache-control” content=“no-cache”>  
    16.     <meta http-equiv=“expires” content=“0”>      
    17.     <meta http-equiv=“keywords” content=“keyword1,keyword2,keyword3”>  
    18.     <meta http-equiv=“description” content=“This is my page”>  
    19.     <!– 
    20.     <link rel=”stylesheet” type=”text/css” href=”styles.css”> 
    21.     –>  
    22.   </head>  
    23.     
    24.   <body>  
    25.      <form action=“getJson” method=“get”>  
    26.         <input type=“submit” value=“点击获取新闻JSON数据”/>  
    27.      </form>  
    28.   </body>  
    29. </html>  
    <%@ page language="java" contentType="text/html; charset=UTF-8" 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>Test Json</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8>
        <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">
        -->
      </head>
    
      <body>
         <form action="getJson" method="get">
            <input type="submit" value="点击获取新闻JSON数据"/>
         </form>
      </body>
    </html>

    在项目中配置web.xml,注册JsonServlet映射,配置如下:

    1. <?xml version=“1.0” encoding=“UTF-8”?>  
    2. <web-app xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns=“http://java.sun.com/xml/ns/javaee” xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd” id=“WebApp_ID” version=“3.0”>  
    3.   <display-name>JsonTest</display-name>  
    4.   <welcome-file-list>  
    5.     <welcome-file>index.jsp</welcome-file>  
    6.   </welcome-file-list>  
    7.     
    8.   <servlet>  
    9.       <servlet-name>JsonServlet</servlet-name>  
    10.       <servlet-class>com.test.json.JsonServlet</servlet-class>  
    11.   </servlet>  
    12.   <servlet-mapping>  
    13.       <servlet-name>JsonServlet</servlet-name>  
    14.       <url-pattern>/getJson</url-pattern>  
    15.   </servlet-mapping>  
    16. </web-app>  
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>JsonTest</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
      <servlet>
          <servlet-name>JsonServlet</servlet-name>
          <servlet-class>com.test.json.JsonServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>JsonServlet</servlet-name>
          <url-pattern>/getJson</url-pattern>
      </servlet-mapping>
    </web-app>


    步骤三:添加项目到Tomcat容器,运行服务器

    运行服务器,在地址栏输入地址:http://localhost:8080/JsonTest/getJson?page=0,效果如图:


    其他关于JSON解析的也可以看我发布的源代码中的JsonTest类,获取源代码:JavaJson解析



    声明

    欢迎转载,但请保留文章原始出处
    作者:Jaiky_杰哥 
    出处:http://blog.csdn.net/jaikydota163/article/details/51458880

    展开全文
  • * 编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。 * 服务器程序启动后,监听端口5678的请求;客户端程序启动后,向服务器端口5678发送请求。 * 服务器不断接收客户机所写入的信息,并且...

    展开全文
  • 需要使用到两个类,来编写TCP协议的 CS程序 . 1.ServerSocket 搭建服务器 2.Socket 搭建客户端 两方使用socket(套接字 , 通信端点) 进行交流 ServerSocket 用于创建服务器 ,创建完毕后,,会绑定一个端口号。 然后此...

    TCP 协议 的 C/S程序

    需要使用到两个类,来编写TCP协议的 CS程序 .
    1.ServerSocket 搭建服务器
    2.Socket 搭建客户端
    两方使用socket(套接字 , 通信端点) 进行交流

    ServerSocket

    用于创建服务器 ,创建完毕后,,会绑定一个端口号。
    然后此服务器可以等待客户端连接 ,每连接一个客户端 , 服务器就会得到一个新的Socket对象, 用于跟客户端进行通信 .。

    常用构造方法:

    ServerSocket(int port);创建一个基于TCP/IP协议的服务器 , 并绑定指定的端口号.
    注意: 参数port的范围是: 0-65535 (建议1025-65535)

    常用方法:

    Socket accept();等待客户端连接 ,此方法会导致线程的阻塞,直到一个新的客户端连接成功, return Socket对象后, 线程在继续执行.
    void close(); 释放占用的端口号 , 关闭服务器.

    Socket

    是两台计算机之间通信的端点 , 是网络驱动提供给应用程序编程的一种接口 一套标准, 一种机制 .

    构造方法:

    Socket(String ip,int port)
    创建一个套接字, 并连接指定ip和端口号的 服务器.
    参数1. 服务器的ip地址
    参数2. 服务器软件的端口号…

    常用方法:

    - OutputStream getOutputStream();返回的是 , 指向通信的另一端点的输出流
    - InputStream getInputStream();返回的是 , 指向通信的另一端点的输入流
    - void close();关闭套接字
    注意:
    在网络编程时, 获取输入输出流的操作 ,对于客户端与服务器来说是相对的
    客户端的输入流, 输入的是服务器的输出流输出的内容.
    客户端的输出流, 输出到了服务器的输入流中.
    所以在使用时,需要注意以下一点规则:户端与服务器获取流的顺序必须是相反的:
    例如:客户端先得到了输入流 , 那服务器必须先获取输出流

    package com.test;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerDemo {
        public static void main(String[] args) throws IOException {
            //搭建服务器
            ServerSocket server = new ServerSocket(55565);
            System.out.println("服务器建立完毕,等待连接!");
            //等待客户端连接
            Socket socket =  server.accept();
            OutputStream os = socket.getOutputStream();
            PrintStream ps = new PrintStream(os);
            ps.println("欢迎连接服务器!");
    
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String text = br.readLine();
            System.out.println("收到了客户端的消息:"+text);
    
    
            System.out.println("服务器连接完毕!");
    
        }
    }
    服务器建立完毕,等待连接!
    收到了客户端的消息:你好,服务器
    服务器连接完毕!
    
    package com.test;
    
    import java.io.*;
    import java.net.Socket;
    
    public class ClientDemo {
        public static void main(String[] args) throws IOException {
            Socket socket = new Socket("127.0.0.1",55565);
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String text = br.readLine();
            System.out.println("收到消息:"+text);
    
            OutputStream os = socket.getOutputStream();
            PrintStream ps = new PrintStream(os);
            ps.println("你好,服务器");
        }
    }
    收到消息:欢迎连接服务器!
    
    展开全文
  • 实现原因 目前主流的CS结构,数据都是通过RESTful接口形式呈现了,不管是桌面级应用程序还是手机端,接口是我们...主流公司在编写数据接口时大多通过框架实现,如RESTEasy、Retrofit等,在这里通过简单的java
  • 指采用client/server即客户机、服务器结构 简称cs结构 。服务器端程序需要等待响应客户程序发来的请求,客户端需要安装专用的客户端程序 。如qq等应用程序 优点:客户端响应速度快 缺点:高昂的维护,升级成本且投资...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...
  • FTP客户端库(C#)

    2008-08-06 09:39:00
    FTP客户端库(C#)作者:Jaimon Mathew翻译:eastvc这是一个C#版本的FTP客户端库,原始版本采用Java编写。该库将被编译为DLL文件,也包含了一个测试程序以演示库的使用方法。你可以从rfc得到更多关于FTP的信息。在...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...
  • java源码包

    2015-12-01 16:29:37
     Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...
  • 上一篇博客:Java学习篇25_IO概述、字节流、字符流、IO流异常处理、属性集 目录 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocket 目标 能够辨别UDP和TCP协议特点 能够说出TCP协议下两个常用...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...
  • 这段小代码是因为担任Java助教给刚学习Java的本科大二的小学弟小学妹们指导,他们的实验作业就是编写一个Java聊天室客户端和服务器,为了避免出纰漏,自己事先写了一下。 客户端Ui代码: package com.CS; ...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构,  当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...
  • 最近做的项目有一个特殊的需求,由于系统是CS的,客户端需要自己编写JAVA类上传至服务器运行,整个流程如下: 1.客户端编写JAVA类,并实现特定接口 2.由客户端JAVA编译器将其编译成class 3.客户端通过socket将...
  • Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...
  • 主要内容软件架构CS/BS网络通信三要素TCP通信Socket套接字ServerSocket教学目标能够辨别UDP和TCP协议特点能够说出TCP协议下两个常用类名称能够编写TCP协议下字符串数据传输程序能够理解TCP协议下文件上传案例能够...
  • Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...
  • Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...
  • CS-Notes :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。 Waking-Up :计算机基础(计算机网络/操作系统/数据库/Git...)面试问题全面总结,包含详细...

空空如也

空空如也

1 2 3 4
收藏数 64
精华内容 25
关键字:

java编写cs客户端

java 订阅