Struts2+JSON+Android简单实现

来源:互联网 发布:港澳游哪个软件好 编辑:程序博客网 时间:2024/04/28 07:30

首先是相关jar包。

struts2.3.1的一些必要jar包

struts2-json-plugin-2.3.1.2.jar

gson-2.2.4.jar

第一步:实现服务端

(1)、打开MyEclipse,新建Web Project,取名StrutsJson

(2)、将上面的jar包下载好之后导入WebRoot/WEB-INF/lib中

(3)、打开WebRoot/WEB-INF/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"><display-name></display-name><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>
(4)、在src下新建包com.tcc.strutsjson,新建类JSONAction

package com.tcc.strutsjson;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import com.google.gson.Gson;import com.opensymphony.xwork2.ActionSupport;public class JSONAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {private static final long serialVersionUID = 1L;private HttpServletRequest request;private HttpServletResponse response;public void setServletResponse(HttpServletResponse arg0) {// TODO Auto-generated method stubthis.response = arg0;}public void setServletRequest(HttpServletRequest arg0) {// TODO Auto-generated method stubthis.request = arg0;}public void getJson() {try {this.response.setContentType("text/html;charset=utf-8");this.response.setCharacterEncoding("utf-8");String name = this.request.getParameter("username");List<TestUser> list = new ArrayList<TestUser>();TestUser user = new TestUser();user.setName(name);user.setAge(18);user.setSex("男");TestUser user1 = new TestUser();user1.setName(name);user1.setAge(16);user1.setSex("女");user1.setCode("99");list.add(user);list.add(user1);Gson gson = new Gson();String res = gson.toJson(list);this.response.getWriter().write(res);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
新建TestUser

package com.tcc.strutsjson;public class TestUser {private String name;private int age;private String sex;private String code;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}}
(5)、在src目录下新建struts.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><!-- setting encoding,DynamicMethod,language <constant name="struts.custom.i18n.resources" value="messageResource"></constant> --><constant name="struts.i18n.encoding" value="UTF-8"></constant><constant name="struts.enable.DynamicMethodInvocation" value="true"></constant><!-- add package here extends="struts-default" --><package name="tcc" extends="json-default"> <!--需要将struts-default改为json-default --><!-- setting action --><action name="jsonaction" class="com.tcc.strutsjson.JSONAction" method="getJson"><result type="json"></result>  <!--返回值类型设置为json,不设置返回页面 --></action></package></struts>

(6)启动logcat,在浏览器输入

http://localhost:8080/StrutsJson/jsonaction.action?username=zhangsan
如果
正确的话就会看到浏览器中出现以下结果

[{"name":"zhangsan","age":18,"sex":"男"},{"name":"zhangsan","age":16,"sex":"女","code":"99"}]

第二步:实现Android客户端请求数据

打开ADT,新建android项目JSONDemo。

打开res/layout/activity_main.xml,添加一个按钮用于请求数据。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center"    android:orientation="vertical" >    <Button        android:id="@+id/resuestBtn"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="请求数据" /></LinearLayout>

打开MainActivity添加以下代码

package com.example.jsondemo;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Dialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button requestBtn = (Button) findViewById(R.id.resuestBtn);requestBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew JSONThread().start();}});dialog = new AlertDialog.Builder(this).create();}Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);switch (msg.what) {case 0:JSONArray array = null;String title = "";try {array = new JSONArray(msg.obj.toString());} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}for (int i = 0; i < array.length(); i++) {try {JSONObject object = array.getJSONObject(i);title += object.getString("name");title += object.getString("age");title += object.getString("sex");title += object.getString("code");} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}dialog.setTitle(title);dialog.show();break;case 1:dialog.setTitle(msg.obj.toString());dialog.show();break;}}};class JSONThread extends Thread {String url = "http://192.168.123.17:8080/StrutsJson/jsonaction.action";@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();Map<String, String> params = new HashMap<String, String>();params.put("username", "zhangsan");try {String result = sendHttpURLConnectionPost(url, params);handler.obtainMessage(0, result).sendToTarget();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();handler.obtainMessage(1, "请求失败").sendToTarget();}}}public String sendHttpURLConnectionPost(String path,Map<String, String> params) throws Exception {StringBuilder sb = new StringBuilder();if (params != null && !params.isEmpty()) {for (Map.Entry<String, String> entry : params.entrySet())sb.append(entry.getKey()).append('=').append(URLEncoder.encode(new String(entry.getValue().getBytes(), "utf-8"), "utf-8")).append('&');sb.deleteCharAt(sb.length() - 1);}System.out.println(path + "?" + sb.toString());byte[] entitydata = sb.toString().getBytes();URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("POST");conn.setReadTimeout(5 * 1000);conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded; charset=utf-8"); //conn.setRequestProperty("Content-Length",String.valueOf(entitydata.length));conn.connect();String line, lines = "";try {OutputStream outPutStream = conn.getOutputStream();outPutStream.write(entitydata);outPutStream.flush();outPutStream.close();InputStream in = conn.getInputStream();if (in != null) {// 取得输入流,并使用Reader读取BufferedReader reader = new BufferedReader(new InputStreamReader(in));while ((line = reader.readLine()) != null) {lines += line;System.out.println(line);}reader.close();// 断开连接conn.disconnect();}} catch (Exception e) {System.out.println(e);}return lines;}}

运行点击按钮,正确的话,会出现类似下图的弹窗。(提示:请求连接换成自己的IP)



源码下载

0 0
原创粉丝点击