Android与服务器端数据交互(http协议整合struts2+android)

本文介绍如何使用Android通过HTTP协议从服务器获取数据。采用Struts2作为服务器端框架,详细展示了服务器端配置流程及代码实现,并提供了客户端代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在android中有时候我们不需要用到本机的SQLite数据库提供数据,更多的时候是从网络上获取数据,那么Android怎么从服务器端获取数据呢?有很多种,归纳起来有

一:基于Http协议获取数据方法。二:基于SAOP协议获取数据方法,三:忘了-------

那么我们的这篇文章主要是将关于使用Http协议获取服务器端数据,这里我们采取的服务器端技术java,框架为Struts2,或者可以有Servlet,又或者可直接从JSP页面中获取数据。

那么,接下来我们便开始这一路程:

首先:编写服务器端方法,我这里采用的MVC框架是Struts2,目的很单纯,就是为了以后做个完整的商业项目,技术配备为:android+SSH。当然,篇幅有限,我这里就直接用Strtus2而已。

服务器端:新建WebProject ,选择Java ee 5.0.

为了给项目添加Struts2的支持,我们必须导入Struts2的一些类库,如下即可(有些jar包是不必的,但是我们后来扩展可能是要使用到的,就先弄进去):

1: xwork-core-2.2.1.1.jar 

2: struts2-core-2.2.1.1.jar

3: commons-logging-1.0.4.jar

4: freemarker-2.3.16.jar

5: ognl-3.0.jar

6: javassist-3.7.ga.jar

7:commons-ileupload.jar 

8:commons-io.jar


9:json-lib-2.1-jdk15.jar  处理JSON格式数据要使用到 

10:struts2-json-plugin-2.2.1.1.jar    基于struts2的json插件

以上的jar包,需要放在WebRoot/WEB-INF/lib目录下

然后在web.xml文件中敲下:


View Code
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3.      xmlns="http://java.sun.com/xml/ns/javaee"
  4.      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6.      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7.             <!-- 定义Struts2的核心控制器:FilterDispatcher -->
  8.     <filter>
  9.        <!-- 定义核心Filter的名称 -->
  10.        <filter-name>struts2</filter-name>
  11.        <!-- 定义Filter的实现类 -->
  12.        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  13.     </filter>
  14.         <filter-mapping>
  15.        <filter-name>struts2</filter-name>
  16.        <url-pattern>/*</url-pattern>
  17.     </filter-mapping> 
  18.       <welcome-file-list>
  19.     <welcome-file>index.jsp</welcome-file>
  20.   </welcome-file-list>
  21.   </web-app>
复制代码
然后编写struts.xml文件,并放在WebRoot/WEB-INF/lib目录下:如下代码: 

View Code
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
  3. <struts>
  4.         <!-- setting encoding,DynamicMethod,language
  5.       <constant name="struts.custom.i18n.resources" value="messageResource"></constant> 
  6.    --> 
  7.    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
  8.     <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
  9.             <!-- add package here extends="struts-default"-->
  10.      <package name="dongzi" extends="json-default"> <!--需要将struts-default改为json-default-->
  11.       <!-- setting action -->
  12.          <action name="login" class="com.dongzi.action.loginAction" method="login">
  13.               <result type="json"></result>  <!--返回值类型设置为json,不设置返回页面-->
  14.                 </action>
  15.       </package>
  16.   </struts>
复制代码
配置好后,我们再根据<action>标签内容来编写action。方法为method对应的login,类名为loginAction,

注意:包继承为:json-default ,输出结果类型为json

如下: 
View Code
  1. public class loginAction extends ActionSupport implements
  2.                           ServletRequestAware,ServletResponseAware {
  3.     /**     *      */
  4.     private static final long serialVersionUID = 1L;
  5.          HttpServletRequest request;
  6.     HttpServletResponse response;
  7.     public void setServletRequest(HttpServletRequest request) {
  8.      this.request=request; 
  9.    }
  10.     public void setServletResponse(HttpServletResponse response) {
  11.         this.response=response;
  12.     }
  13.     public void  login(){
  14.           try {
  15.              //HttpServletRequest request =ServletActionContext.getRequest();
  16.              // HttpServletResponse response=ServletActionContext.getResponse();
  17.              this.response.setContentType("text/html;charset=utf-8");
  18.              this.response.setCharacterEncoding("UTF-8");
  19.                  if(this.request.getParameter("username").equals("123456")){
  20.                       this.response.getWriter().write("真的很奇怪,日本人!");
  21.                  }else if(this.request.getParameter("username").equals("zhd")){
  22.                      this.response.getWriter().write("没有错,我就是东子哥!");
  23.                  }else{
  24.                      this.response.getWriter().write("我就是东子哥!");
  25.                  }
  26.                              //将要返回的实体对象进行json处理
  27.                     //  JSONObject json=JSONObject.fromObject(this.getUsername());
  28.                   //输出格式如:{"id":1, "username":"zhangsan", "pwd":"123"}
  29.                    //   System.out.println(json);
  30.                                  //   this.response.getWriter().write(json.toString());
  31.             /**
  32.                JSONObject json=new JSONObject();
  33.                 json.put("login", "login");
  34.                 response.setContentType("text/html;charset=utf-8");
  35.                System.out.println(json);
  36.                byte[] jsonBytes = json.toString().getBytes("utf-8");
  37.                response.setContentLength(jsonBytes.length);
  38.                response.getOutputStream().write(jsonBytes);
  39.                **/
  40.             /**  
  41.             JSONObject json=new JSONObject();
  42.                 json.put("login", "login");
  43.                byte[] jsonBytes = json.toString().getBytes("utf-8");
  44.                response.setContentType("text/html;charset=utf-8");
  45.                response.setContentLength(jsonBytes.length);
  46.                response.getOutputStream().write(jsonBytes);
  47.                response.getOutputStream().flush();
  48.                response.getOutputStream().close();
  49.                  **/
  50.                        } catch (Exception e) {
  51.              e.printStackTrace();
  52.         }
  53.         // return null;
  54.     }}
复制代码
运行查看下:http://localhost:8080/PDAServer/login.action?username=123456  当然你可以输入其他参数的URL

1.jpg 

运行成功。

客户端:

这里需要注意的是模拟器把自己当成了localhost,以及127.0.0.1了,因此如果基于本地的web项目测试的话,必须修改IP为:10.0.2.2
  1. public class MainActivity extends Activity {
  2.     /** Called when the activity is first created. */
  3. //模拟器自己把自己当成localhost了,服务器应该为10.0.2.2 
  4. private static  String url="http://10.0.2.2:8080/PDAServer/login.action";
  5.     @Override
  6.     public void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.         setContentView(R.layout.main);
  9.         getPDAServerData(url);
  10.      }
  11.         /**     
  12. * 请求服务     
  13. * @param url     
  14. */    private void getPDAServerData(String url){
  15.      url+="?username=123456";
  16.      HttpClient client=new DefaultHttpClient();
  17.      HttpPost request;
  18.       try {
  19.       request = new HttpPost(new URI(url));
  20.    HttpResponse response=client.execute(request);
  21.    //判断请求是否成功
  22.       if(response.getStatusLine().getStatusCode()==200){
  23.        HttpEntity  entity=response.getEntity();
  24.     if(entity!=null){
  25.     String out=EntityUtils.toString(entity);
  26.      new AlertDialog.Builder(this).setMessage(out).create().show();
  27.     }      }     }
  28. catch (URISyntaxException e) {
  29.    e.printStackTrace();  } 
  30.     catch (ClientProtocolException e) {
  31.    e.printStackTrace();  }
  32. catch (IOException e) { 
  33.   e.printStackTrace();  }
  34.     } }
复制代码
运行结果如下:

2.jpg 

成功了吧:当然读者可以根据这个思路扩展下应用,比如:struts2+hibernate+spring+json。数据方面可以用json,也可以使用xml。android已经提供了JSON的API,struts2中也可以使用JSON插件.自己扩展吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值