zoukankan      html  css  js  c++  java
  • struts2服务端与android交互

    本文主要包括以下内容

    1. android与struts2服务器实现登陆
    2. android从struts2服务器获取list数据
    3. android上传数据到struts2服务器

    服务器端代码

    package com.easyway.json.android;
    
    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 com.opensymphony.xwork2.ActionSupport;
    
    /**
     * 在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,
     * 那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有
     *一:基于Http协议获取数据方法。
     *二:基于SAOP协议获取数据方法,
     *那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据,
     *这里我们采取的服务器端技术为java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据。
     *那么,接下来我们便开始这一路程:
     *首先:编写服务器端方法,我这里采用的MVC框架是Struts2,目的很单纯,就是为了以后做个完整的商业项目,
     *技术配备为:android+SSH。当然,篇幅有限,我这里就直接用Strtus2而已。
     *服务器端:新建WebProject ,选择Java ee 5.0.
     *为了给项目添加Struts2的支持,我们必须导入Struts2的一些类库,如下即可(有些jar包是不必的,但是我们后来扩展可能是要使用到的,就先弄进去):
     *xwork-core-2.2.1.1.jar  struts2-core-2.2.1.1.jar commons-logging-1.0.4.jar  freemarker-2.3.16.jar
     *ognl-3.0.jar  javassist-3.7.ga.jar commons-ileupload.jar commons-io.jar json-lib-2.1-jdk15.jar  
     *处理JSON格式数据要使用到 struts2-json-plugin-2.2.1.1.jar   
     * 基于struts2的json插件.
     * 
     * 
     * 采用接口注入的方式注入HttpServletRequest,HttpServletResponse对象
     * 
     * @author longgangbai
     *
     */
    public class LoginAction extends ActionSupport implements ServletRequestAware,
            ServletResponseAware {
        /** * */
        private static final long serialVersionUID = 1L;
    
        HttpServletRequest request;
    
        HttpServletResponse response;
    
        private String userName;
        private String password;
    
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public void setServletRequest(HttpServletRequest request) {
            this.request = request;
        }
    
        public void setServletResponse(HttpServletResponse response) {
            this.response = response;
        }
    
        /**
         * 模拟用户登录的业务
         */
        public void login() {
            try {
                  //如果不采用接口注入的方式的获取HttpServletRequest,HttpServletResponse的方式
                  // HttpServletRequest request =ServletActionContext.getRequest();
                  // HttpServletResponse response=ServletActionContext.getResponse();
    
                   this.response.setContentType("text/json;charset=utf-8");
                   this.response.setCharacterEncoding("UTF-8");
                   //JSONObject json=new JSONObject(); 
                    Map<String,String> json=new HashMap<String,String>();
                    if ("admin".equals(userName)&&"123456".equals(password)) {
                         json.put("message", "欢迎管理员登陆");
                    } else if ((!"admin".equals(userName))&&"123456".equals(password)) {
                        json.put("message", "欢迎"+userName+"登陆!");
                    } else {
                        json.put("message", "非法登陆信息!");
                    }
                  byte[] jsonBytes = json.toString().getBytes("utf-8");
                  response.setContentLength(jsonBytes.length);
                  response.getOutputStream().write(jsonBytes);
                  response.getOutputStream().flush();
                  response.getOutputStream().close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    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 name="struts.enable.DynamicMethodInvocation"  value="true"/>
        <!-- add package here extends="struts-default"-->
        <package name="default" extends="json-default"><!--需要将struts-default改为-->
            <action name="login" class="com.easyway.json.android.LoginAction"
                method="login">
                <result type="json"/>
                <!--返回值类型设置为json,不设置返回页面-->
            </action>
        </package>
    </struts>

    ajax测试页面

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Ajax调用web服务</title>
    <script type="text/javascript">
    var xmlHttpReq;    //用于保存XMLHttpRequest对象的全局变量
    
    //用于创建XMLHttpRequest对象
    function createXmlHttp() {
        //根据window.XMLHttpRequest对象是否存在使用不同的创建方式
    //    if (window.XMLHttpRequest) {
    //       xmlHttp = new XMLHttpRequest();                  //FireFox、Opera等浏览器支持的创建方式
    //   } else {
    //      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器支持的创建方式
    //    }
        if (window.ActiveXObject) {
            xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
        } else if (window.XMLHttpRequest) {
            xmlHttpReq = new XMLHttpRequest();
        }
    }
    
    function loadAjax() {
    
        createXmlHttp();                        //创建XmlHttpRequest对象
    
    
    
        var url="http://localhost:8080/AndroidStruts2JSON/login.action?userName=admin&password=123456&date="+new Date();
        //xmlHttpReq.open("get", encodeURI(encodeURI(url+param,"UTF-8"),"UTF-8"), true);
        xmlHttpReq.open("get", encodeURI(encodeURI(url,"UTF-8"),"UTF-8"), true);//上传图片
        xmlHttpReq.setrequestheader("content-type","application/x-www-form-urlencoded");//post提交设置项
        xmlHttpReq.onreadystatechange = loadCallback;  //IE这里设置回调函数
        xmlHttpReq.send(null);
    
    }
    
    
    function loadCallback() {
    
        //alert(xmlHttpReq.readyState);
        if (xmlHttpReq.readyState == 4) {
           alert("aa");
            //if(xmlHttpReq.status==200){
            document.getElementById("contentDiv").innerHTML=xmlHttpReq.responseText;
            //}
        }
    }
    
    
    </script>
    
    <body>
    <div id="contentTypeDiv">
    </div>
    <br/><br/>
    <div id="contentDiv">
    </div>
    
    
    
    
    <input type="button" value="调用" onclick="loadAjax()">
    
    </body>
    </head>
    </html>

    手机代码

    package com.easyway.android.json;
    
    import java.io.IOException;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    /**
     * 在现在开发的项目中采用Android+REST WebService服务方式开发的手机平台很少采用
     *  soap协议这种方式,主要soap协议解析问题,增加了代码量。
     *  
     *  
     * 在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,
     * 那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有
     *  一:基于Http协议获取数据方法。
     *  二:基于SAOP协议获取数据方法
     *
     *备注:在网络有关的问题最好添加以下两项:
     *   1.线程和虚拟机策略
     *   ///在Android2.2以后必须添加以下代码
    *           //本应用采用的Android4.0
    *           //设置线程的策略
    *            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()   
    *            .detectDiskReads()   
    *            .detectDiskWrites()   
    *            .detectNetwork()   // or .detectAll() for all detectable problems   
    *            .penaltyLog()   
    *            .build());   
    *           //设置虚拟机的策略
    *         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()   
    *                    .detectLeakedSqlLiteObjects()   
    *                    //.detectLeakedClosableObjects()   
    *                    .penaltyLog()   
    *                    .penaltyDeath()   
    *                    .build());
    *      2.可以访问网络的权限:
    *       即AndroidManifest.xml中配置:
    *        <uses-permission android:name="android.permission.INTERNET"/>
     *
     * 
     * @author longgangbai
     * 
     *
     */
    public class AndroidHttpJSONActivity extends Activity {
         private static  String processURL="http://192.168.1.130:8080/AndroidStruts2JSON/login.action?";
    
          private EditText txUserName;
          private EditText txPassword;
          private Button btnLogin;
    
            /**
             *  Called when the activity is first created.
             */
            @Override
            public void onCreate(Bundle savedInstanceState) {
                ///在Android2.2以后必须添加以下代码
                //本应用采用的Android4.0
                //设置线程的策略
                 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()   
                 .detectDiskReads()   
                 .detectDiskWrites()   
                 .detectNetwork()   // or .detectAll() for all detectable problems   
                 .penaltyLog()   
                 .build());   
                //设置虚拟机的策略
                  StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()   
                         .detectLeakedSqlLiteObjects()   
                         //.detectLeakedClosableObjects()   
                         .penaltyLog()   
                         .penaltyDeath()   
                         .build());
                super.onCreate(savedInstanceState);
                //设置页面布局
                setContentView(R.layout.main);
                //设置初始化视图
                initView();
                //设置事件监听器方法
                setListener();
            }
            /**
             * 创建初始化视图的方法
             */
            private void initView() {
                btnLogin=(Button)findViewById(R.id.btnLogin);
                txPassword=(EditText)findViewById(R.id.txtPassword);
                txUserName=(EditText)findViewById(R.id.txtUserName);
            }
    
            /**
             * 设置事件的监听器的方法
             */
            private void setListener() {
                btnLogin.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String userName=txUserName.getText().toString();
                        String password=txPassword.getText().toString();
                        loginRemoteService(userName,password);
                    }
                });
            }
    
        /**
         * 获取Struts2 Http 登录的请求信息
         * @param  userName
         * @param  password
         */
        public void loginRemoteService(String userName,String password){
            String result=null;
            try {
    
                //创建一个HttpClient对象
                HttpClient httpclient = new DefaultHttpClient();
                //远程登录URL
                processURL=processURL+"userName="+userName+"&password="+password;
                Log.d("远程URL", processURL);
                //创建HttpGet对象
                HttpGet request=new HttpGet(processURL);
                //请求信息类型MIME每种响应类型的输出(普通文本、html 和 XML,json)。允许的响应类型应当匹配资源类中生成的 MIME 类型
                //资源类生成的 MIME 类型应当匹配一种可接受的 MIME 类型。如果生成的 MIME 类型和可接受的 MIME 类型不 匹配,那么将
                //生成 com.sun.jersey.api.client.UniformInterfaceException。例如,将可接受的 MIME 类型设置为 text/xml,而将
                //生成的 MIME 类型设置为 application/xml。将生成 UniformInterfaceException。
                request.addHeader("Accept","text/json");
                //获取响应的结果
                HttpResponse response =httpclient.execute(request);
                //获取HttpEntity
                HttpEntity entity=response.getEntity();
                //获取响应的结果信息
                String json =EntityUtils.toString(entity,"UTF-8");
                //JSON的解析过程
                if(json!=null){
                    JSONObject jsonObject=new JSONObject(json);
                    result=jsonObject.get("message").toString();
                }
               if(result==null){
                   json="登录失败请重新登录";
               }
                //创建提示框提醒是否登录成功
                 AlertDialog.Builder builder=new Builder(AndroidHttpJSONActivity.this);
                 builder.setTitle("提示")
                 .setMessage(result)
                 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                }).create().show();
    
             } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    参考链接

    Android+struts2+JSON方式的手机开发 - topMan’blog - ITeye技术网站

    效果如下

    struts

    android从struts2服务器获取list数据

    参考链接

    android–使用Struts2服务端与android交互 - android开发实例 - 博客园

    效果如下

    android从struts2服务器获取list数据

    android上传数据到struts2服务器

    android端代码

    package com.zj.wifitest;
    
    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 org.json.JSONObject;
    
    
    
    
    
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Message;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void click(View view)
        {
            run();
        }
    
    
        public void run() {
            new Thread() {
                @Override
                public void run() {
    
                    try {
    
    
                            HttpURLConnection conn = null;
                            String content = "";
                            try {// 为了测试取消连接
                                    // Thread.sleep(5000);
                                    // http联网可以用httpClient或java.net.url
                                    // URL url = new URL(
                                    //
                                    //
                                    // "http://115.28.34.52:8080/Car_Experiment/carInsert_insert_info.action");
                                    // carInsert_insert_info.action"
                                URL url = new URL("http://120.27.126.68:8080/CarServer/transAction");
                                conn = (HttpURLConnection) url.openConnection();
                                conn.setDoInput(true);
                                conn.setDoOutput(true);
                                conn.setConnectTimeout(1000 * 30);
                                conn.setReadTimeout(1000 * 30);
                                conn.setRequestMethod("GET");
                                conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
                                OutputStream output = conn.getOutputStream();
                                JSONObject jsonObject = new JSONObject();
                                jsonObject.put("0C", "0A0B");
                                jsonObject.put("0D", "0B");
                                jsonObject.put("10", "0A0B");
                                jsonObject.put("11", "0B");
                                //jsonObject.put("13", "0B");
    //                          jsonObject.put("14", "0A0B");
    //                          jsonObject.put("15", "0A0B");
    //                          jsonObject.put("16", "0A0B");
    //                          jsonObject.put("17", "0A0B");
    //                          jsonObject.put("18", "0A0B");
    //                          jsonObject.put("19", "0A0B");
    //                          jsonObject.put("1A", "0A0B");
    //                          jsonObject.put("1B", "0A0B");
                                jsonObject.put("2F", "0A0B");
    
                                jsonObject.put("02", "0A0B");
                                System.out.println(jsonObject.toString());
    
                                output.write(jsonObject.toString().getBytes());
    
                                output.flush();
                                output.close();
                                int responseCode = conn.getResponseCode();
                                Log.i("test", "responseCode"+responseCode);
                                InputStream in = conn.getInputStream();
    
    
                                System.out.println("responseCode=" + responseCode);
                                if (responseCode == HttpURLConnection.HTTP_OK) {
                                    System.out.println("responseCode=" + HttpURLConnection.HTTP_OK);
    
                                    Log.i("test", "successed");
                                    // InputStreamReader reader = new
                                    // InputStreamReader(in,charSet);
                                    BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                                    String line = null;
                                    while ((line = reader.readLine()) != null) {
                                        content += line;
                                    }
                                    System.out.println("result:" + content);
                                }
                                in.close();
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                conn.disconnect();
                                conn = null;
                            }
    
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }
    }

    服务器端代码

    package whu.zhengrenjie.Action;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    import net.sf.json.JSONObject;
    
    import org.apache.struts2.ServletActionContext;
    
    import whu.zhengrenjie.Model.SimpleService;
    import whu.zhengrenjie.Util.Util;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class TransDataAction extends ActionSupport {
    
        private SimpleService simpleService;
    
        private BufferedReader reader;
    
        public SimpleService getSimpleService() {
            return simpleService;
        }
    
        public void setSimpleService(SimpleService simpleService) {
            this.simpleService = simpleService;
        }
    
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            if (Util.TEST) {
                String test;
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("0C", "0000");
                jsonObject.put("0D", "00");
                jsonObject.put("10", "0000");
                jsonObject.put("11", "00");
                jsonObject.put("2F", "00");
                jsonObject.put("02", "12345678");
                test = jsonObject.toString();
                System.out.println("----------------------" + test);
                simpleService.insert(test);
            } else {
                try {
                    String request = "";
                    String temp = "";
                    System.out.println("herrrrrrrrrrrrre");
                    reader = new BufferedReader(new InputStreamReader(
                            ServletActionContext.getRequest().getInputStream(),
                            "UTF-8"));
                    while ((temp = reader.readLine()) != null) {
                        request += temp;
                    }
                    simpleService.insert(request);
                } catch (IOException e) {
                    // TODO Auto-generated catch blockc
                    e.printStackTrace();
                } finally {
                    reader.close();
                }
            }
            return super.execute();
        }
    }

    SimpleService

    package whu.zhengrenjie.Model;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import net.sf.json.JSONObject;
    import whu.zhengrenjie.DAO.SimpleDAO;
    import whu.zhengrenjie.PO.RunTimePO;
    import whu.zhengrenjie.Util.Util;
    
    public class SimpleService {
        private int count = 0;
    
        private SimpleDAO simpleDAO;
        private RunTimePO runTimePO;
        private JSONObject jsonObject;
    
        public SimpleDAO getSimpleDAO() {
            return simpleDAO;
        }
    
        public void setSimpleDAO(SimpleDAO simpleDAO) {
            this.simpleDAO = simpleDAO;
        }
    
        public RunTimePO getRunTimePO() {
            return runTimePO;
        }
    
        public void setRunTimePO(RunTimePO runTimePO) {
            this.runTimePO = runTimePO;
        }
    
        public void insert(String requestStr) {
            jsonObject = JSONObject.fromObject(requestStr);
    
            String rpmStr = (String) jsonObject.get("0C");
            if (!rpmStr.contains("0000")) {
                double rpm = Integer.parseInt(rpmStr, 16) / 4;  
                runTimePO.setRpm(rpm);
                if (Util.DEBUG) {
                    System.out.println(count++);
                }
            } else {
                runTimePO.setRpm(0);
            }
    
            String speedStr = (String) jsonObject.get("0D");
            if (!speedStr.contains("00")) {
                double speed = Integer.parseInt(speedStr, 16);
                runTimePO.setSpeed(speed);
                if (Util.DEBUG) {
                    System.out.println(count++);
                }
            } else {
                runTimePO.setSpeed(0);
            }
    
            String airSpeedStr = (String) jsonObject.get("10");
            if (!airSpeedStr.contains("0000")) {
                double airSpeed = Integer.parseInt(airSpeedStr, 16) / 100;
                runTimePO.setAirSpeed(airSpeed);
                if (Util.DEBUG) {
                    System.out.println(count++);
                }
            } else {
                runTimePO.setAirSpeed(0);
            }
    
            String throttleStr = (String) jsonObject.get("11");
            if (!throttleStr.contains("00")) {
                double throttle_1 = Integer.parseInt(throttleStr, 16) * 100 / 255;
                runTimePO.setThrottle(throttle_1);
                if (Util.DEBUG) {
                    System.out.println(count++);
                }
            } else {
                runTimePO.setThrottle(0);
            }
    
            String VIN=(String) jsonObject.get("02");
            runTimePO.setSIN(VIN);
    
    
            String oilLevelStr = (String) jsonObject.get("2F");
            if (!oilLevelStr.contains("00")) {
                double oilLevel = Integer.parseInt(oilLevelStr, 16) * 100 / 255;
                runTimePO.setOilLevel(oilLevel);
                if (Util.DEBUG) {
                    System.out.println(count++);
                }
            } else {
                runTimePO.setOilLevel(0);
            }
    
            try {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                Date date = new Date();
                String time = sdf.format(date);
                date = sdf.parse(time);
                runTimePO.setDate(date);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            simpleDAO.insert();
        }
    }

    完成

  • 相关阅读:
    韦德螺旋: 这真是一个螺旋吗?
    山上你能看到什么动物?
    你能够30秒内一字不差的念完它吗? 注意, 是读“颜色”, 不是让你识字.
    路透斯沃德的不可能的三角形
    换个角度, 青蛙也许就是白马王子
    这是一张很有趣的图片, 通常女性会先看到月亮, 男性会先看到人脸. 如果相反, 表示你体内的异性荷尔蒙偏高哦!
    亲吻的情侣幻觉: 这幅虚幻的亲吻由美国艺术家杰里•唐恩创作.
    PostgreSQL的 initdb 源代码分析之七
    PostgreSQL的initdb 源代码分析之六
    PostgreSQL的initdb 源代码分析之五
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223672.html
Copyright © 2011-2022 走看看