使用json数据交互信息
首先搭配SSH服务端,目前只用了Struts2,首先导入包,下面是需要的包
web.xml的代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="as" extends="json-default">
<action name="login" class="as.action.LoginAction" method="login">
<result type="json" ></result>
</action>
</package>
</struts>
项目的结构
LoginAction.java代码
package as.action;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import net.sf.json.JSONObject;
import as.model.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class LoginAction extends ActionSupport implements ServletResponseAware ,ServletRequestAware,ModelDriven<User>{
private User user;
private HttpServletResponse response;
private HttpServletRequest request;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setServletResponse(HttpServletResponse arg0) {
// TODO Auto-generated method stub
this.response = arg0;
}
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
this.request=arg0;
}
public void login() {
try {
// TODO Auto-generated method stub
this.response.setContentType("text/html;charset=utf-8");
this.response.setCharacterEncoding("UTF-8");
JSONObject json=new JSONObject();
Map map=new HashMap<Object, String>();
map.put("name", user.getName());
map.put("pwd", user.getPwd());
json.put("LoginInfo", map);
response.getWriter().write(json.toString());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public User getModel() {
// TODO Auto-generated method stub
if (user==null) {
return user=new User();
}
return user;
}
}
User.java
package as.model;
public class User {
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
view层 index.jsp 代码
<%@ 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">
-->
</head>
<body>
<center>
<form action="login" method="post">
用户名: <input type="text" name="name"><br>
密 码: <input type="password" name="pwd"><br>
<input type="submit" value="登陆" name="submit"> <input type="reset" value="取消" name="reset">
</form>
</center>
</body>
</html>
测试 用户名:2222 密码:1111
现在在android上面测试,Android 项目构架
由于是post 请求,这里就给出Android post 请求的代码
UrlServiceImpl.java
111.122.31.54 是本机的IP地址
package dlnu.message.serviceimpl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import dlnu.message.service.UrlService;
public class UrlServiceImpl implements UrlService{
@Override
public String Login(String name, String pwd) {
// TODO Auto-generated method stub
String uriAPI = "http://111.122.31.54:8080/AndroidService/login.action";
/*建立HTTPost对象*/
HttpPost httpRequest = new HttpPost(uriAPI);
HttpClient client=new DefaultHttpClient();
/*
* NameValuePair实现请求参数的封装
*/
//System.out.println("--------"+name+"-----------"+pwd);
List <NameValuePair> params = new ArrayList <NameValuePair>(2);
params.add(new BasicNameValuePair("name", name));//返回JSon数据 如果是xml 返回的就是XML数据
params.add(new BasicNameValuePair("pwd", pwd));
String strResult=null;
try
{
/* 添加请求参数到请求对象*/
httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
/* 处理超时*/
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
/*发送请求并等待响应*/
HttpResponse httpResponse = client.execute(httpRequest);
/*若状态码为200 ok*/
if(httpResponse.getStatusLine().getStatusCode() == 200)
{
/*读返回数据 去掉两头不要的参数*/
strResult= EntityUtils.toString(httpResponse.getEntity());
}
else
{
System.err.println("Error Response: "+httpResponse.getStatusLine().toString());
strResult=null;
}
}
catch (ClientProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
return strResult;
}
}
Activity ShowMessageMainActivity.java
package dlnu.message.activity;
import dlnu.message.model.User;
import dlnu.message.service.UserService;
import dlnu.message.serviceimpl.JsonServiceImpl;
import dlnu.message.serviceimpl.UserServiceImpl;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class ShowMessageMainActivity extends Activity {
/** Called when the activity is first created. */
private EditText namEditText;
private EditText pwdEditText;
private Button submitButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.showmessageactivity);
namEditText=(EditText) findViewById(R.id.nameditText1);
pwdEditText=(EditText) findViewById(R.id.pwdseditText2);
submitButton=(Button) findViewById(R.id.submitbutton1);
submitButton.setOnClickListener(new ButtonListener());
}
class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String name=namEditText.getText().toString().trim();
String pwd=pwdEditText.getText().toString().trim();
UserService userService=new UserServiceImpl();
JsonServiceImpl service=new JsonServiceImpl();
String string=userService.UserLogin(name, pwd);
User user=new User();
user=service.UserLoginJsonAnalysis(string);
Toast.makeText(ShowMessageMainActivity.this, user.getName()+" "+user.getPwd(), 8000).show();
}
}
}
效果