在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文件中敲下:
01 | <? xml version = "1.0" encoding = "UTF-8" ?> |
02 | < web-app version = "2.5" |
03 | xmlns = "http://java.sun.com/xml/ns/javaee" |
04 | xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" |
05 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee |
06 | http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> |
12 | < filter-name >struts2</ filter-name > |
14 | < filter-class >org.apache.struts2.dispatcher.FilterDispatcher</ filter-class > |
18 | < filter-name >struts2</ filter-name > |
19 | < url-pattern >/*</ url-pattern > |
23 | < welcome-file >index.jsp</ welcome-file > |
然后编写struts.xml文件,并放在WebRoot/WEB-INF/lib目录下:如下代码:
01 | <? xml version = "1.0" encoding = "UTF-8" ?> |
02 | <!DOCTYPE struts PUBLIC |
03 | "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" |
04 | "http://struts.apache.org/dtds/struts-2.0.dtd"> |
10 | < constant name = "struts.i18n.encoding" value = "UTF-8" ></ constant > |
11 | < constant name = "struts.enable.DynamicMethodInvocation" value = "true" ></ constant > |
15 | < package name = "dongzi" extends = "json-default" > |
17 | < action name = "login" class = "com.dongzi.action.loginAction" method = "login" > |
18 | < result type = "json" ></ result > |
配置好后,我们再根据<action>标签内容来编写action。方法为method对应的login,类名为loginAction,
注意:包继承为:json-default ,输出结果类型为json
如下:
01 | public class loginAction extends ActionSupport implements |
02 | ServletRequestAware,ServletResponseAware { |
06 | private static final long serialVersionUID = 1L; |
08 | HttpServletRequest request; |
09 | HttpServletResponse response; |
11 | public void setServletRequest(HttpServletRequest request) { |
15 | public void setServletResponse(HttpServletResponse response) { |
16 | this .response=response; |
23 | this .response.setContentType( "text/html;charset=utf-8" ); |
24 | this .response.setCharacterEncoding( "UTF-8" ); |
25 | if ( this .request.getParameter( "username" ).equals( "123456" )){ |
26 | this .response.getWriter().write( "真的很奇怪,日本人!" ); |
27 | } else if ( this .request.getParameter( "username" ).equals( "zhd" )){ |
28 | this .response.getWriter().write( "没有错,我就是东子哥!" ); |
30 | this .response.getWriter().write( "我就是东子哥!" ); |
40 | JSONObject json=new JSONObject(); |
41 | json.put("login", "login"); |
42 | response.setContentType("text/html;charset=utf-8"); |
43 | System.out.println(json); |
44 | byte[] jsonBytes = json.toString().getBytes("utf-8"); |
45 | response.setContentLength(jsonBytes.length); |
46 | response.getOutputStream().write(jsonBytes); |
49 | JSONObject json=new JSONObject(); |
50 | json.put("login", "login"); |
51 | byte[] jsonBytes = json.toString().getBytes("utf-8"); |
52 | response.setContentType("text/html;charset=utf-8"); |
53 | response.setContentLength(jsonBytes.length); |
54 | response.getOutputStream().write(jsonBytes); |
55 | response.getOutputStream().flush(); |
56 | response.getOutputStream().close(); |
59 | } catch (Exception e) { |