android 访问web应用

 

这里我们写一个用手机访问web应用的demo,整体思路是:

 

1、通过手机访问web应用,并向服务器发送信息。

2、服务器接收客户端信息。

3、服务器处理数据(解析xml文件)。

4、重组信息,返回给客户端。

 

 

一、服务器代码

首先,建立一个web工程:Test1

 

然后新建一个servlet,用于手机客户端调用。

 

  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.io.OutputStreamWriter;  
  7. import java.io.PrintWriter;  
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.ServletInputStream;  
  12. import javax.servlet.ServletOutputStream;  
  13. import javax.servlet.http.HttpServlet;  
  14. import javax.servlet.http.HttpServletRequest;  
  15. import javax.servlet.http.HttpServletResponse;  
  16. import javax.xml.parsers.DocumentBuilder;  
  17. import javax.xml.parsers.DocumentBuilderFactory;  
  18. import javax.xml.parsers.ParserConfigurationException;  
  19.   
  20. import org.w3c.dom.Document;  
  21. import org.w3c.dom.Node;  
  22. import org.w3c.dom.NodeList;  
  23. import org.xml.sax.SAXException;  
  24.   
  25.   
  26. public class ServletDemo extends HttpServlet {  
  27.   
  28.     /** 
  29.      * Constructor of the object. 
  30.      */  
  31.     public ServletDemo() {  
  32.         super();  
  33.     }  
  34.   
  35.     /** 
  36.      * Destruction of the servlet. <br> 
  37.      */  
  38.     public void destroy() {  
  39.         super.destroy();   
  40.     }  
  41.   
  42.     /** 
  43.      * The doGet method of the servlet. <br> 
  44.      * 
  45.      * This method is called when a form has its tag value method equals to get. 
  46.      *  
  47.      * @param request the request send by the client to the server 
  48.      * @param response the response send by the server to the client 
  49.      * @throws ServletException if an error occurred 
  50.      * @throws IOException if an error occurred 
  51.      */  
  52.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  53.             throws ServletException, IOException {  
  54.   
  55.         response.setContentType("text/html");  
  56.         this.doPost(request, response);  
  57.     }  
  58.   
  59.     /** 
  60.      * The doPost method of the servlet. <br> 
  61.      * 
  62.      * This method is called when a form has its tag value method equals to post. 
  63.      *  
  64.      * @param request the request send by the client to the server 
  65.      * @param response the response send by the server to the client 
  66.      * @throws ServletException if an error occurred 
  67.      * @throws IOException if an error occurred 
  68.      */  
  69.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  70.             throws ServletException, IOException {  
  71.   
  72.         response.setContentType("text/html");  
  73.           
  74.         //获得客户端发送的数据  
  75.         ServletInputStream is = request.getInputStream();  
  76.         BufferedReader reader = new BufferedReader(new InputStreamReader(is));  
  77.         String requestString = reader.readLine();  
  78.         //向客户端返回数据  
  79.         String responseString = processStringRequest(requestString,request);  
  80.         ServletOutputStream os = response.getOutputStream();  
  81.         BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));  
  82.         writer.write(responseString);  
  83.         //关闭资源  
  84.         writer.flush();  
  85.         writer.close();  
  86.         reader.close();  
  87.         os.close();  
  88.   
  89.     }  
  90.   
  91.     /** 
  92.      * Initialization of the servlet. <br> 
  93.      * 
  94.      * @throws ServletException if an error occure 
  95.      */  
  96.     public void init() throws ServletException {  
  97.           
  98.     }  
  99.       
  100.     private String processStringRequest(String requestString,HttpServletRequest request){  
  101.           
  102.   
  103.         List list = this.toRead(request.getRealPath("/")+"user.xml");  
  104.         String response = "";  
  105.         if(null != list && list.size() > 0){  
  106.             for(int i = 0 ; i < list.size(); i++){  
  107.                 JavaBean a = (JavaBean)list.get(i);  
  108.                 response += "client say:"+requestString+"server say: this is your info:"+a.getName()+"@"+a.getSex()+"@"+a.getAge();  
  109.                 System.out.println(a.getName());  
  110.             }  
  111.         }else{  
  112.             response = "is wrong!";  
  113.         }  
  114.   
  115.         return response;  
  116.     }  
  117.       
  118.     public List toRead(String filename) {  
  119.   
  120.         List alist = new ArrayList();  
  121.           
  122.         try {  
  123.               
  124.             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  125.             DocumentBuilder db = dbf.newDocumentBuilder();  
  126.             Document document = db.parse(filename);  
  127.             NodeList employees = document.getChildNodes();  
  128.             for (int i = 0; i < employees.getLength(); i++) {  
  129.                   
  130.                 Node employee = employees.item(i);  
  131.                 NodeList employeeInfo = employee.getChildNodes();  
  132.                 for (int j = 0; j < employeeInfo.getLength(); j++) {  
  133.                     Node node = employeeInfo.item(j);  
  134.                     NodeList employeeMeta = node.getChildNodes();  
  135.                     JavaBean bean = new JavaBean();  
  136.                     boolean status = false;  
  137.                     for (int k = 0; k < employeeMeta.getLength(); k++) {  
  138.                         if(employeeMeta.item(k).getNodeName().equals("name")){  
  139.                             bean.setName(employeeMeta.item(k).getTextContent());  
  140.                         }  
  141.                         if(employeeMeta.item(k).getNodeName().equals("age")){  
  142.                             bean.setAge(employeeMeta.item(k).getTextContent());  
  143.                         }  
  144.                         if(employeeMeta.item(k).getNodeName().equals("sex")){  
  145.                             bean.setSex(employeeMeta.item(k).getTextContent());  
  146.                         }  
  147.                         status = true;  
  148.                     }  
  149.                     if(status){  
  150.                         alist.add(bean);  
  151.                     }  
  152.                 }  
  153.             }  
  154.         } catch (FileNotFoundException e) {  
  155.             System.out.println(e.getMessage());  
  156.         } catch (ParserConfigurationException e) {  
  157.             System.out.println(e.getMessage());  
  158.         } catch (SAXException e) {  
  159.             System.out.println(e.getMessage());  
  160.         } catch (IOException e) {  
  161.             System.out.println(e.getMessage());  
  162.         }  
  163.         return alist;  
  164.           
  165.     }  
  166.   
  167. }  

 

web工程的web.xml

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.   <servlet>  
  8.     <description>This is the description of my J2EE component</description>  
  9.     <display-name>This is the display name of my J2EE component</display-name>  
  10.     <servlet-name>ServletDemo</servlet-name>  
  11.     <servlet-class>ServletDemo</servlet-class>  
  12.   </servlet>  
  13.   
  14.   <servlet-mapping>  
  15.     <servlet-name>ServletDemo</servlet-name>  
  16.     <url-pattern>/servlet/ServletDemo</url-pattern>  
  17.   </servlet-mapping>  
  18.   <welcome-file-list>  
  19.     <welcome-file>index.jsp</welcome-file>  
  20.   </welcome-file-list>  
  21. </web-app>  

 

 

xml文件格式

 

  1. <?xml version="1.0" encoding="GB2312" standalone="no"?>  
  2. <employees>  
  3.     <employee>  
  4.         <name>user0</name>  
  5.         <sex>m</sex>  
  6.         <age>30</age>  
  7.     </employee>  
  8. </employees>  

 

 

解析xml文件用到的javabean:

 

  1. public class JavaBean {  
  2.       
  3.     private String name;  
  4.     private String sex;  
  5.     private String age;  
  6.     public String getAge() {  
  7.         return age;  
  8.     }  
  9.     public void setAge(String age) {  
  10.         this.age = age;  
  11.     }  
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.     public String getSex() {  
  19.         return sex;  
  20.     }  
  21.     public void setSex(String sex) {  
  22.         this.sex = sex;  
  23.     }  
  24. }  

 

 

这样  服务器端的工作就准备好了,启动、等待客户端连接。

 

二,客户端代码

 

1、新建Android工程

 

2、修改main。xml文件

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <EditText   
  8.     android:layout_height="wrap_content"  
  9.     android:id="@+id/address"  
  10.     android:layout_width="fill_parent"  
  11.     android:text="http://192.168.1.111:8089/Test1/servlet/ServletDemo"  
  12. >  
  13. </EditText>  
  14. <Button  
  15.      android:id="@+id/ButtonGo"   
  16.      android:layout_width="wrap_content"   
  17.      android:layout_height="wrap_content"  
  18.      android:text="go!"  
  19.  >  
  20. </Button>  
  21. <TextView    
  22.     android:layout_width="fill_parent"   
  23.     android:layout_height="fill_parent"   
  24.     android:background="#ffffff"  
  25.     android:textColor="#000000"  
  26.     android:id="@+id/pagetext"  
  27.     />  
  28. </LinearLayout>  

 

 

3、添加关键代码

 

  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.widget.Button;  
  4. import android.widget.TextView;  
  5. import android.util.Log;  
  6. import android.view.View;  
  7. import java.io.BufferedReader;  
  8. import java.io.BufferedWriter;  
  9. import java.io.InputStreamReader;  
  10. import java.io.OutputStreamWriter;  
  11. import java.net.URL;  
  12. import java.net.URLConnection;  
  13.   
  14.   
  15. public class ClientDemo extends Activity {  
  16.     /** Called when the activity is first created. */  
  17.   
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.main);  
  22.           
  23.   
  24.         final TextView tView = (TextView) findViewById(R.id.pagetext);  
  25.           
  26.          
  27.         final Button button = (Button) findViewById(R.id.ButtonGo);  
  28.         button.setOnClickListener(new Button.OnClickListener() {  
  29.             public void onClick(View v) {  
  30.                   
  31.                   
  32.                 String response_string = "";  
  33.                 boolean out = true;  
  34.                 boolean in = true;  
  35.                 try {  
  36.                     System.out.println("ty"+tView.getText().toString());  
  37.                     URL url = new URL("http://192.168.1.111:8089/Test1/servlet/ServletDemo");  
  38.                     URLConnection connection = url.openConnection();  
  39.                       
  40.                     connection.setDoInput(in);  
  41.                     connection.setDoOutput(out);  
  42.                       
  43.                     BufferedWriter writer = null;  
  44.                     //向服务器发送数据  
  45.                     if(out){  
  46.                         writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));  
  47.                         writer.write("I am clent request!!");  
  48.                         writer.flush();  
  49.                     }  
  50.                     //接受服务器返回的数据  
  51.                     BufferedReader reader = null;  
  52.                     if(in){  
  53.                         reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));  
  54.                         response_string = reader.readLine();  
  55.                         System.out.println("response: "+response_string);  
  56.                         Log.v("test", response_string);  
  57.                         tView.setText(response_string);  
  58.                     }  
  59.                       
  60.                     if(writer != null){  
  61.                         writer.close();  
  62.                     }  
  63.                       
  64.                     if(reader != null){  
  65.                         reader.close();  
  66.                     }  
  67.                 } catch (Exception e) {  
  68.                     // TODO: handle exception  
  69.                     System.out.println(e.getMessage());  
  70.                 }  
  71.             }  
  72.         });          
  73.     }  
  74. }  

 

这样,整个demo就完成了

运行结果如下

1、程序启动 

2、发送请求后

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值