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

发布于 2022-10-15 09:11:36 字数 14698 浏览 19 评论 0

转:东子哥

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


在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 (36.68 KB, 下载次数: 6)

下载附件

2011-04-19 12:47 上传



运行成功。

客户端:

这里需要注意的是模拟器把自己当成了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 (14.5 KB, 下载次数: 5)

下载附件

2011-04-19 12:47 上传



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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

二货你真萌 2022-10-22 09:11:36

顶,很详细

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文