多写技术文档,多写技术文档,多写技术文档,重要的事情说三遍......

-------------------------------------------------------------------------------------------------------------------

功能需求:Android客户端解析和显示云服务器返回的xml文件。

思路:涉及到Android端应用和Java ee端web应用的编码实现。

示例:Android客户端获取腾讯云服务器上的视频资讯

步骤:

1、开发环境部署

Java ee部分:

java+apache-tomcat-8.5.9-windows-x64+Eclipse(for javaEE Developers版本)

android部分:

androidstudio集成开发工具

2、web应用部分开发

a、在Java ee下(安装在本地笔记本端)新建“Dynamic Web Project”;

b、然后新建一个servlet,同时注意web.xml中的相关配置情况,截图如下:

注:servlet是放在HTTP Web服务器上面运行的Java程序。当用户通过客户端和服务器交互时,请求(request)会送给web服务器。如果请求需要Java的servlet时,服务器会执行或调用已经执行的servlet程序代码。servlet只是在服务器上运行的程序代码,执行用户发出请求所要的结果。

c、其中servlet核心代码如下:

public class ListServelet extends HttpServlet {    private static final long serialVersionUID = 1L;       private VideoNewsService service=new VideoNewsServiceBean();     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doPost(request, response);        }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        List videos = service.getLastNews();                request.setAttribute("videos", videos);        request.getRequestDispatcher("/WEB-INF/page/videonews.jsp").forward(request, response);        }}
 当用户请求该路径 http://www.服务器公网IP:8080/web项目名称/ListServlet,其中ListServlet为创建的Servlet的名称,这个servlet就要从数据库中得到最新的视频资讯,并且把数据封装成一个xml数据返回给android客户端。  d、先写一个业务bean,这个业务bean用于从数据库中得到最新的视频资讯,在方法中不打算真正的访问数据库,这里模拟一些测试数据进行返回,

新建一个javabean,代码如下:资讯id+标题+时长

public class VideoNewsServiceBean implements VideoNewsService {    public List getLastNews(){        List newes = new ArrayList();        newes.add(new News(90, "喜羊羊与灰太狼全集", 78));        newes.add(new News(10, "实拍舰载直升东海救援演习", 28));        newes.add(new News(56, "喀麦隆VS荷兰", 70));        return newes;    }}

在业务bean中定义一个方法返回一个集合,例如:News,集合存放了数据库最新的视频资讯,集合里的元素类型采用一个javabean描述每一条视频资讯。

public class News {    private Integer id;    private String title;    private Integer timelength;        public News(Integer id, String title, Integer timelength) {        this.id = id;        this.title = title;        this.timelength = timelength;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public Integer getTimelength() {        return timelength;    }    public void setTimelength(Integer timelength) {        this.timelength = timelength;    }}

此外,Java ee是面向接口编程,将业务bean中的方法进行接口抽取,同时继承实现这个接口中的方法。接口代码如下:

public interface VideoNewsService {    /**     * 获取最新的视频资讯     * @return     */    public List getLastNews();}

e、 另外在表现层构造xml数据,在WebContent-WEB-INF下新建一个“page”文件夹,然后再新建一个jsp文件,名称“videonews”。contentType=“text/xml” ,代码如下:

1 <%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><?xml version="1.0" encoding="UTF-8"?>2 3     4         ${video.id}5         ${video.title}6         ${video.timelength}7     8 

其中xml数据的呈现形式可以在jsp文件中进行定义,同时需要在lib文件下添加第三方类库jstl,如下:

f、在servlet中需要引入新建的jsp文件,这样才能自定义xml格式文件,如下:

其中集合中的视频资讯对象传递给jsp文件,把对象放在request范围给定key,接着把请求内部转发给jsp。指定jsp文件路径。

g、在javaee下把应用部署到tomcat服务器之后,在浏览器中输入路径:http://localhost:8080/videonews/ListServlet出现xml数据格式,证明web应用没问题了,即从服务器端返回了xml格式的数据并且显示在屏幕上。

h、将web项目部署到腾讯云服务器上

第一步,在java ee中将web项目导出,导出为war格式;

第二步,将第一步导出的war文件放入腾讯云服务器Tomcat的webAPP目录下,然后从bin---startup.bat启动Tomcat,先在服务器试试http://localhost:8080/项目名称/ListServelet能否成功运行,可以的话,不要关闭服务器的Tomcat,回到自己笔记本,在浏览器输入http://服务器公网IP:8080/项目名称/ListServelet即可访问云服务器web项目.

 3、Android部分开发

a、引入OkHttp来发送HTTP请求方式,在build.gradle添加OkHttp依赖文件,如下: 

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.0.1'    testCompile 'junit:junit:4.12'    compile 'com.squareup.okhttp3:okhttp:3.4.1'}

 b、此外,android部分的核心是对xml数据进行解析,代码如下:

 1 class VideoNewsService { 2     /** 3      * 获取视频资讯 4      * 5      * @return 6      * @throws Exception 7      */ 8     static  List newses = new ArrayList<>(); 9     static List sendRequestWithOkHttp() {10         new Thread(new Runnable() {11             @Override12             public void run() {13                 try {14                     OkHttpClient client = new OkHttpClient();15                     Request request = new Request.Builder()16                             // 指定访问的服务器地址是电脑本机17                             .url("http://云服务器公网IP:8080/VideoNews/ListServelet")18                             .build();19                     Response response = client.newCall(request).execute();20                     String responseData = response.body().string();                   21                     parseXML(responseData);22                     23                 } catch (Exception e) {                  24                     e.printStackTrace();25                 }26             }27         }).start();28        return newses;29     }30 31     private static List parseXML(String xmlData) throws Exception {32         News news = null;33         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();34         XmlPullParser parser = factory.newPullParser();35         parser.setInput(new StringReader(xmlData));     36         int event = parser.getEventType();37         while (event != XmlPullParser.END_DOCUMENT) {          38             switch (event) {39                 case XmlPullParser.START_TAG:40                   41                     if ("id".equals(parser.getName())) {42                         int id = Integer.valueOf(parser.nextText());43                         news = new News();44                         news.setId(id);                       45                     } else if ("title".equals(parser.getName())) {46                         news.setTitle(parser.nextText());47                     } else if ("timelength".equals(parser.getName())) {48                         news.setTimelength(Integer.valueOf(parser.nextText()));49                     }50                     break;51 52                 case XmlPullParser.END_TAG: {53                     if ("news".equals(parser.getName())) {54                         newses.add(news);55                         news = null;56                     }57                     break;58                 }59                 default:60                     break;61             }62             event = parser.next();63         }       64         return newses;65     }66 }

News.java代码如下:

 1 public class News { 2     private Integer id; 3     private String title; 4     private Integer timelength; 5     public News(){} 6     public News(Integer id, String title, Integer timelength) { 7         this.id = id; 8         this.title = title; 9         this.timelength = timelength;10     }11     public Integer getId() {12         return id;13     }14     public void setId(Integer id) {15         this.id = id;16     }17     public String getTitle() {18         return title;19     }20     public void setTitle(String title) {21         this.title = title;22     }23     public Integer getTimelength() {24         return timelength;25     }26     public void setTimelength(Integer timelength) {27         this.timelength = timelength;28     }29     30 }

MainActivty.class的核心代码如下:

 1 public class MainActivity extends AppCompatActivity { 2     /** Called when the activity is first created. */ 3     @Override 4     public void onCreate(Bundle savedInstanceState) { 5         super.onCreate(savedInstanceState); 6         setContentView(R.layout.activity_main); 7         8         ListView listView = (ListView) this.findViewById(R.id.listView); 9        10         try {11             List videos = VideoNewsService.sendRequestWithOkHttp();//需修改成你本机的Http请求路径          12             List> data = new ArrayList>();13             for(News news : videos){14                 HashMap item = new HashMap();15                 item.put("id", news.getId());16                 item.put("title", news.getTitle());17                 item.put("timelength", getResources().getString(R.string.timelength)18                         + news.getTimelength()+ getResources().getString(R.string.min));19                 data.add(item);               20             }21             SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,22                     new String[]{"title", "timelength"}, new int[]{R.id.title, R.id.timelength});23             listView.setAdapter(adapter);24         } catch (Exception e) {25             e.printStackTrace();           26         }27     }28 }

c、最终运行成功的效果图,如下:

 

--------------------------------------------------------------------------------------------------------------------

参考资料:

http://www.cnblogs.com/diyunfei/p/6826557.html      //怎样将本地web项目部署到腾讯云服务器上?

https://jingyan.baidu.com/article/3a2f7c2e62d25e26afd611fa.html     //WIN7系统JavaEE(java+tomcat7+Eclipse)环境配置

更多相关文章

  1. Android多媒体开发(2)————使用Android(安卓)NKD编译原版FFmpeg
  2. Android之仿iphone抖动效果
  3. eclipse 启动 Android(安卓)SDK Content Loader 异常
  4. Android(安卓)手机存储文件各种路径
  5. Android环境变量作用--命令行操作
  6. android 重点
  7. CreateProcess error=2, 系统找不到指定的文件。
  8. android键盘事件
  9. Android中RadioGroup组与onCheckedChanged事件

随机推荐

  1. android模块&相关技术
  2. Android开发书籍和教程
  3. android抽屉效果
  4. 调试Android(安卓)WebView
  5. Android跨进程通信之AIDL
  6. android调用unity
  7. 写TextView的Selector了解到的android读
  8. Android的多媒体框架OpenCore(PacketVideo
  9. 基本组件之列表视图
  10. 牛人博客收集