在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
                  <?          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"
>


<!-- 定义Struts2的核心控制器:FilterDispatcher -->
< filter >
<!-- 定义核心Filter的名称 -->
< filter-name > struts2 </ filter-name >
<!-- 定义Filter的实现类 -->
< filter-class > org.apache.struts2.dispatcher.FilterDispatcher </ filter-class >
</ filter >

< filter-mapping >
< filter-name > struts2 </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >

< welcome-file-list >
< welcome-file > index.jsp </ welcome-file >
</ welcome-file-list >

</ web-app >

然后编写struts.xml文件,并放在WebRoot/WEB-INF/lib目录下:如下代码:

View Code
                  <?          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 ="dongzi" extends ="json-default" > <!-- 需要将struts-default改为json-default -->
<!-- setting action -->
< action name ="login" class ="com.dongzi.action.loginAction" method ="login" >
< result type ="json" ></ result > <!-- 返回值类型设置为json,不设置返回页面 -->
</ action >
</ package >
</ struts >

配置好后,我们再根据<action>标签内容来编写action。方法为method对应的login,类名为loginAction,

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

如下: View Code
                          public                             class               loginAction               extends               ActionSupport               implements               
ServletRequestAware,ServletResponseAware {
/**
*
*/
private static final long serialVersionUID = 1L ;

HttpServletRequest request;
HttpServletResponse response;

public void setServletRequest(HttpServletRequest request) {
this .request = request;
}

public void setServletResponse(HttpServletResponse response) {
this .response = response;
}

public void login(){
try {
// HttpServletRequest request =ServletActionContext.getRequest();
// HttpServletResponse response=ServletActionContext.getResponse();
this .response.setContentType( " text/html;charset=utf-8 " );
this .response.setCharacterEncoding( " UTF-8 " );
if ( this .request.getParameter( " username " ).equals( " 123456 " )){
this .response.getWriter().write( " 真的很奇怪,日本人! " );
}
else if ( this .request.getParameter( " username " ).equals( " zhd " )){
this .response.getWriter().write( " 没有错,我就是东子哥! " );
}
else {
this .response.getWriter().write( " 我就是东子哥! " );
}

// 将要返回的实体对象进行json处理
// JSONObject json=JSONObject.fromObject(this.getUsername());
// 输出格式如:{"id":1, "username":"zhangsan", "pwd":"123"}
// System.out.println(json);

// this.response.getWriter().write(json.toString());
/**
JSONObject json=new JSONObject();
json.put("login", "login");
response.setContentType("text/html;charset=utf-8");
System.out.println(json);
byte[] jsonBytes = json.toString().getBytes("utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
*
*/
/**
JSONObject json=new JSONObject();
json.put("login", "login");
byte[] jsonBytes = json.toString().getBytes("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
response.getOutputStream().flush();
response.getOutputStream().close();
*
*/

}
catch (Exception e) {
e.printStackTrace();
}
// return null;
}
}

运行查看下:http://localhost:8080/PDAServer/login.action?username=123456 当然你可以输入其他参数的URL

运行成功。

客户端:

这里需要注意的是模拟器把自己当成了localhost,以及127.0.0.1了,因此如果基于本地的web项目测试的话,必须修改IP为:10.0.2.2

          public             class       MainActivity       extends       Activity {
/** Called when the activity is first created. */
// 模拟器自己把自己当成localhost了,服务器应该为10.0.2.2
private static String url = " http://10.0.2.2:8080/PDAServer/login.action " ;
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
getPDAServerData(url);
}

/**
* 请求服务
*
@param url
*/
private void getPDAServerData(String url){
url
+= " ?username=123456 " ;
HttpClient client
= new DefaultHttpClient();
HttpPost request;
try {
request
= new HttpPost( new URI(url));
HttpResponse response
= client.execute(request);
// 判断请求是否成功
if (response.getStatusLine().getStatusCode() == 200 ){
HttpEntity entity
= response.getEntity();
if (entity != null ){
String out
= EntityUtils.toString(entity);
new AlertDialog.Builder( this ).setMessage(out).create().show();
}
}

}
catch (URISyntaxException e) {
e.printStackTrace();
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}

运行结果如下:

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

更多相关文章

  1. Android的两种数据存储方式分析(二)
  2. Android实现录屏直播+远程控制之MediaCodec编码篇
  3. android sqlite用管理工具查看
  4. ANDROID音频系统散记之二:resample-1
  5. android sqlite用管理工具查看
  6. Android(安卓)数据库批量查询数据的操作
  7. Android之——清理手机SD卡缓存
  8. mybatisplus的坑 insert标签insert into select无参数问题的解决
  9. python起点网月票榜字体反爬案例

随机推荐

  1. java 8中构建无限的stream
  2. 在java中使用JMH(Java Microbenchmark Har
  3. java.util.concurrent简介
  4. java中Comparable和Comparator的区别
  5. 怎么break java8 stream的foreach
  6. java并发中的Synchronized关键词
  7. java中wait和sleep的区别
  8. 一文读懂java中的Reference和引用类型
  9. 在nodejs中创建child process
  10. java中的内部类内部接口详解