Xml格式数据通过http协议传入,这边接收请求、解析、调用、传出。
在一个Servlet中来对传入的xml流进行操作:
我们根据请求中携带的xml输入流来获取xml数据的一个Document(即头结点),再解析xml来获取每个节点的值,然后把值放入相应的实体类(即Student类)中。
下面是我们对此操作所需要的一些类和方法。
学生信息的实体类:
学生信息的xml文件:
通过输入源构造一个Document:
上述方法是根据传入的xml输入流来构造出一个Document,以备解析之用。
那该如何来构造一个请求,其中携带着xml数据呢?
我们可以用Perl语言来写一个脚本,来模拟这个请求。如附件
在一个Servlet中来对传入的xml流进行操作:
- /**
- *重载方法
- *@paramrequestrequest
- *@paramresponseresponse
- */
- publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsServletException,IOException
- {
- Documentdoc=buildDucument(request.getInputStream());
- Stringname=doc.getRootElement().getChildText("name");
- Stringage=doc.getRootElement().getChildText("age");
- Stringcountry=doc.getRootElement().getChildText("country");
- Studentstudent=newStudent();
- student.setName();
- student.setAge();
- student.setCountry();
- }
/** * 重载方法 * @param request request * @param response response */ public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { Document doc = buildDucument(request.getInputStream()); String name = doc.getRootElement().getChildText("name"); String age = doc.getRootElement().getChildText("age"); String country = doc.getRootElement().getChildText("country"); Student student = new Student(); student.setName(); student.setAge(); student.setCountry(); }
我们根据请求中携带的xml输入流来获取xml数据的一个Document(即头结点),再解析xml来获取每个节点的值,然后把值放入相应的实体类(即Student类)中。
下面是我们对此操作所需要的一些类和方法。
学生信息的实体类:
- publicclassStudent
- {
- privateStringname;
- privateintage;
- privateStringcountry;
- publicStringgetName()
- {
- returnname;
- }
- publicvoidsetName(Stringname)
- {
- this.name=name;
- }
- publicintgetAge()
- {
- returnage;
- }
- publicvoidsetAge(intage)
- {
- this.age=age;
- }
- publicStringgetCountry()
- {
- returncountry;
- }
- publicvoidsetCountry(Stringcountry)
- {
- this.country=country;
- }
- }
public class Student { private String name; private int age; private String country; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
学生信息的xml文件:
- <?xmlversion="1.0"encoding="utf-8"?>
- <student>
- <name>Tom</name>
- <age>25</age>
- <country>China</country>
- </student>
<?xml version="1.0" encoding="utf-8"?> <student> <name>Tom</name> <age>25</age> <country>China</country> </student>
通过输入源构造一个Document:
- publicstaticDocumentbuildDucument(InputStreaminputStream)
- {
- InputSourcesource;
- //创建一个新的SAXBuilder
- SAXBuilderbuilder=newSAXBuilder();
- try
- {
- source=newInputSource(inputStream);
- //通过输入源构造一个Document
- returnbuilder.build(source);
- }
- catch(Exceptione)
- {
- e.getMessage();
- }
- returnnull;
- }
public static Document buildDucument(InputStream inputStream) { InputSource source; // 创建一个新的SAXBuilder SAXBuilder builder = new SAXBuilder(); try { source = new InputSource(inputStream); // 通过输入源构造一个Document return builder.build(source); } catch (Exception e) { e.getMessage(); } return null; }
上述方法是根据传入的xml输入流来构造出一个Document,以备解析之用。
那该如何来构造一个请求,其中携带着xml数据呢?
我们可以用Perl语言来写一个脚本,来模拟这个请求。如附件