由于之前一直都是做客户端,通信方式用的是JSON,而从未自己搭建过服务器,今天趁着中午有点时间就搭建一个简单的服务器

我所用是struts2和JSON搭建的简单服务器

服务器:

1.New一个新的Web Project

2.导入struts2和JSON所需要的包,

3.编写实体类Userinfo:

package bean;

import java.io.Serializable;

public class Userinfo implements Serializable {

	/**
	 * @author ZJG
	 */
	private static final long serialVersionUID = 1L;

	private int userId;
	private String userName;
	private String password;

	public int getUserId() {
		return userId;
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

4.编写Action:

package test;

import java.util.ArrayList;
import java.util.List;
import bean.Userinfo;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

	/**
	 * @author ZJG
	 */
	private static final long serialVersionUID = 1L;
	
	private String message;//使用json返回单个值
	private Userinfo userinfo;//使用json返回对象
	private List userInfoList;//使用json返回list对象
	

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Userinfo getUserinfo() {
		return userinfo;
	}

	public void setUserinfo(Userinfo userinfo) {
		this.userinfo = userinfo;
	}

	public List getUserInfoList() {
		return userInfoList;
	}

	public void setUserInfoList(List userInfoList) {
		this.userInfoList = userInfoList;
	}

	//返回单个值
	public String returnMag(){
		this.message = "成功返回单个值";
		return SUCCESS;
	}
	
	//返回对象
	public String returnUser(){
		userinfo = new Userinfo();
		userinfo.setUserId(10000);
		userinfo.setUserName("张三");
		userinfo.setPassword("123456");
		return SUCCESS;
	}
	
	//返回list对象
	public String returnList(){
		userInfoList = new ArrayList<Userinfo>();
		Userinfo ui = new Userinfo();
		ui.setUserId(10000);
		ui.setUserName("张三1");
		ui.setPassword("111111");
		Userinfo u1 = new Userinfo();
		u1.setUserId(10000);
		u1.setUserName("张三2");
		u1.setPassword("222222");
		userInfoList.add(ui);
		userInfoList.add(u1);
		return SUCCESS;
	}
	public String returnObject(){
		userInfoList = new ArrayList<Userinfo>();
		Userinfo ui = new Userinfo();
		ui.setUserId(10000);
		ui.setUserName("object张三1");
		ui.setPassword("object111111");
		Userinfo u1 = new Userinfo();
		u1.setUserId(10000);
		u1.setUserName("object张三2");
		u1.setPassword("object222222");
		userInfoList.add(ui);
		userInfoList.add(u1);
		userinfo = new Userinfo();
		userinfo.setUserId(3333);
		userinfo.setUserName("object李四");
		userinfo.setPassword("object0000099");
		this.message = "object成功返回单个值";
		return SUCCESS;
	}
	
	
}

5.配置struts.xml:

<package name="default"  extends="json-default" >
	<action name="returnMag" class="test.LoginAction" method="returnMag" >
		<result name="success" type="json">
			<param name="includeProperties">message</param>
		</result>
	</action>
	<action name="returnUser" class="test.LoginAction" method="returnUser">
		<result name="success" type="json">
			<param name="includeProperties">
				userinfo\.userId,userinfo\.userName,userinfo\.password
			</param>
		</result>
	</action>
	<action name="returnList" class="test.LoginAction" method="returnList">
		<result name="success" type="json">
			<param name="includeProperties">
				userInfoList\[\d+\]\.userName,userInfoList\[\d+\]\.password,
				userinfo\.userId,userinfo\.userName,userinfo\.password
			</param>
		</result>
	</action>
	<action name="returnObject" class="test.LoginAction" method="returnObject">
		<result name="success" type="json">
			<param name="includeProperties">
				userInfoList\[\d+\]\.userName,userInfoList\[\d+\]\.password,
				userinfo\.userId,userinfo\.userName,userinfo\.password,
				message
			</param>
		</result>
	</action>
</package>


6.配置web.xml

  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>
  		org.apache.struts2.dispatcher.FilterDispatcher  
  	</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>*.action</url-pattern>
  </filter-mapping>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

7.创建login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"  %>
<%
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>
	<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>
     <s:form name="form1" action="returnMag" namespace="/json" >
       <s:submit label="submit"></s:submit>
   </s:form>
  </body>
</html>

其实第7步可以省略.

服务器完成.

 

android客户端:

同样还是新建个android项目:

1.修改main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    android:id="@+id/tvid"
    />
    
    <Button  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="String对象"
    android:id="@+id/buttonid"
    />
     <Button  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="bean对象"
    android:id="@+id/buttonid1"
    />
     <Button  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="List对象"
    android:id="@+id/buttonid2"
    />
     <Button  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Object对象"
    android:id="@+id/buttonid3"
    />
    
</LinearLayout>


2.修改Activity

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final TextView tv = (TextView) findViewById(R.id.tvid);
        Button button = (Button) findViewById(R.id.buttonid);
        button.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				String result = new Communication().communication("returnMag.action");
				tv.setText(result);
			}
		});
        Button button1 = (Button) findViewById(R.id.buttonid1);
        button1.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				String result = new Communication().communication("returnUser.action");
				tv.setText(result);
			}
		});
        Button button2 = (Button) findViewById(R.id.buttonid2);
        button2.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				String result = new Communication().communication("returnList.action");
				tv.setText(result);
			}
		});
        Button button3 = (Button) findViewById(R.id.buttonid3);
        button3.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				String result = new Communication().communication("returnObject.action");
				tv.setText(result);
			}
		});


3.新建一个与服务器通信的类Communication.java

public class Communication {
	
	
	/**
	 * @param 只发送普通数据,调用此方法
	 * @param urlString 对应的 页面
	 * @param params 需要发送的相关数据 包括调用的方法
	 * @return
	 */
	public String communication(String urlString){
		
		HttpClient client = new DefaultHttpClient();
		
		
		
		client.getConnectionManager().closeIdleConnections(20, TimeUnit.SECONDS);//20秒
		
		String result="";
		
		String uploadUrl="http://192.168.1.101:8080/SSH"+"/";///http://192.168.10.9/bingo/Server/code
		String MULTIPART_FORM_DATA = "multipart/form-data"; 
		String BOUNDARY = "---------7d4a6d158c9"; //数据分隔线
		
		if (!urlString.equals("")) {
			uploadUrl = uploadUrl+urlString;
		
		
		try {
			URL url = new URL(uploadUrl);  
	        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
	        conn.setDoInput(true);//允许输入  
	        conn.setDoOutput(true);//允许输出  
	        conn.setUseCaches(false);//不使用Cache  
	        conn.setConnectTimeout(6000);// 6秒钟连接超时
	        conn.setReadTimeout(25000);// 25秒钟读数据超时
	        conn.setRequestMethod("POST");            
	        conn.setRequestProperty("Connection", "Keep-Alive");  
	        conn.setRequestProperty("Charset", "UTF-8");  
	        conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);
	        
	      
	        StringBuilder sb = new StringBuilder();  
	          
	        //上传的表单参数部分,格式请参考文章  
//	        for (Map.Entry<String, String> entry : params.entrySet()) {//构建表单字段内容  
//	            sb.append("--");  
//	            sb.append(BOUNDARY);  
//	            sb.append("\r\n");  
//	            sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");  
//	            sb.append(entry.getValue());  
//	            sb.append("\r\n");  
//	        }  

	        
	        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
	        dos.write(sb.toString().getBytes());
	        dos.writeBytes("--" + BOUNDARY + "--\r\n");
		      dos.flush();

		      InputStream is = conn.getInputStream();
		      InputStreamReader isr = new InputStreamReader(is, "utf-8");
		      BufferedReader br = new BufferedReader(isr);
		      result = br.readLine();
	       
		      
		}catch (Exception e) {
			result = "{\"ret\":\"898\"}";
		}
	}
		return result;
		
	}
}


到此客户端搭建完成:

 

好了现在可以体验哈自己的服务器和android客服端的 json通信了

 

 

转载说明:http://blog.csdn.net/z104207/article/details/6672109


 

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐