第一步
新建Dynamic Web Project,名称为ServerForXML(该勾选的勾上)。
第二步:服务器端
1.建立并实现服务端的业务类
Java Resources–>src–>新建serverlet
Java Package选择“com.example.server.xml”
Class Name选择“ServletForXML”
然后一路next。最后会自动打开ServerForXML.java文件
2.在web.xml文件中配置新建的ServerForXML
目录文件结构如下
打开web.xml。在
<display-name>ServerForXML</display-name>
<welcome-file-list>
这两行之间插入
<servlet>
<servlet-name>ServletForXML</servlet-name>
<servlet-class>com.example.server.xml.ServletForXML</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletForXML</servlet-name>
<url-pattern>/ServletForXML</url-pattern>
</servlet-mapping>
3.建立业务Bean,实现业务方法
(1)先在src文件夹下新建一个包(service)。然后新建News.java
package service;
public class News {
private Integer id;
//java支持自动包箱解箱。定义为int也可以
private String title;
private Integer timelength;
public News(Integer id, String title, Integer timelength) {
super();
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;
}
}
(2)然后新建接口XMLService.java
package service;
import java.util.List;
public interface XMLService {
public List<News> getLastNews();
}
(3)建立实体类XMLServiceBean继承接口
package service;
import java.util.ArrayList;
import java.util.List;
public class XMLServiceBean implements XMLService {
@Override
public List<News> getLastNews() {
List<News> list = new ArrayList<News>();
list.add(new News(10, "lxj", 20));
list.add(new News(20, "lxj", 100));
list.add(new News(30, "lxj", 50));
return list;
}
}
(4)最后完成ServletForXML.java的编写
package com.example.server.xml;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.News;
import service.XMLServiceBean;
/**
* Servlet implementation class ServletForXML
*/
@WebServlet("/ServletForXML")//注意,如果在web.xml里面注册过servlet,请一定要注释掉,否则报错
public class ServletForXML extends HttpServlet {
private static final long serialVersionUID = 1L;
private XMLServiceBean service = new XMLServiceBean();// ****************
/**
* @see HttpServlet#HttpServlet()
*/
public ServletForXML() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);// *************************
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
List<News> news = service.getLastNews();
request.setAttribute("news", news);
request.getRequestDispatcher("/WEB-INF/page/NewFile.xml").forward(request,
response);
//转向某个界面
}
}
教程上给出的jsp文件运行不了,不过在这里我还是给出
news.jsp
<%@ page language="java" contentType="text/xml; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<?xml version="1.0" encoding="UTF-8"?>
<videonews>
<c:forEach items="${news}" var="list">
<news id="${list.id}">
<title>${list.title}</title>
<timelength>${list.timelength}</timelength>
</news>
</c:forEach>
</videonews>
我用的是自己写的NewFile.xml.当然,之前写的很多文件(从3建立业务开始)都没用了
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>NEwii</name>
<age>21</age>
</person>
<person id="20">
<name>wiiWill</name>
<age>25</age>
</person>
</persons>
4.run on server开始测试
成功
第三步:编写客户端
1.创建android工程GetXMLFromInternet
2.添加网络权限
3.main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.getxmlfrominternet.MainActivity" >
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
4.MainActivity.java
package com.example.getxmlfrominternet;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView listview;
private ArrayAdapter<String> adapter;
private List<Person> personList;
private Handler myHandler = new Handler(){
public void handleMessage(Message msg) {
if(msg.what == 1){
for (int i = 0; i < personList.size(); i++) {
adapter.add(personList.get(i).toString());
}
listview.setAdapter(adapter);
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listview = (ListView) findViewById(R.id.listview);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1);
new Thread(new Runnable() {
@Override
public void run() {
try {
personList = PullPersonService.getPersons();
myHandler.sendEmptyMessage(1);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
5.工具类
Person.java
package com.example.getxmlfrominternet;
public class Person {
private int id;
private String name;
private Short age;
public Person() {
}
public Person(int id, String name, Short age) {
this.id = id;
this.name = name;
this.age = age;
}
public Person(String name, Short age) {
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}
@Override
public String toString() {
return "id=" + id + ",name=" + name + ",age=" + age;
}
}
PullPersonService.java
package com.example.getxmlfrominternet;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Log;
import android.util.Xml;
public class PullPersonService {
public static List<Person> getPersons() throws Exception{
String path = "http://10.107.56.64:8080/ServerForXML/ServletForXML";
HttpURLConnection connection = (HttpURLConnection) new URL(path)
.openConnection();
connection.setConnectTimeout(5000);
connection.setRequestMethod("GET");
if(connection.getResponseCode() == 200){
InputStream inputStream = connection.getInputStream();
return XMLParse(inputStream);
}
return null;
}
//如何解析请看
//http://blog.csdn.net/lxj1137800599/article/details/50774788
//http://blog.csdn.net/lxj1137800599/article/details/50777322
private static List<Person> XMLParse(InputStream inputStream) throws Exception {
Person person = null;
List<Person> list = null;
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(inputStream, "UTF-8");
int event = pullParser.getEventType();// 触发第一个事件
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(pullParser.getName())) {
int id = Integer.valueOf(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if (person != null) {
if ("name".equals(pullParser.getName())) {
person.setName(pullParser.nextText());
}
if ("age".equals(pullParser.getName())) {
person.setAge(new Short(pullParser.nextText()));
Log.i("TAG", person.toString());
}
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName())) {
list.add(person);
person = null;
}
break;
}
event = pullParser.next();
}
return list;
}
}
6.效果展示