android 访问web应用

前面已经了解过了Android标签的使用,

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

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

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

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

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

一、服务器代码


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

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

view plaincopy to clipboardprint?
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.io.PrintWriter;  
import java.util.ArrayList;  
import java.util.List;  
import javax.servlet.ServletException;  
import javax.servlet.ServletInputStream;  
import javax.servlet.ServletOutputStream;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
import javax.xml.parsers.ParserConfigurationException;  
 
import org.w3c.dom.Document;  
import org.w3c.dom.Node;  
import org.w3c.dom.NodeList;  
import org.xml.sax.SAXException;  
 
 
public class ServletDemo extends HttpServlet {  
 
    /** 
     * Constructor of the object. 
     */ 
    public ServletDemo() {  
        super();  
    }  
 
    /** 
     * Destruction of the servlet. <br> 
     */ 
    public void destroy() {  
        super.destroy();   
    }  
 
    /** 
     * The doGet method of the servlet. <br> 
     * 
     * This method is called when a form has its tag value method equals to get. 
     *  
     * @param request the request send by the client to the server 
     * @param response the response send by the server to the client 
     * @throws ServletException if an error occurred 
     * @throws IOException if an error occurred 
     */ 
    public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
 
        response.setContentType("text/html");  
        this.doPost(request, response);  
    }  
 
    /** 
     * The doPost method of the servlet. <br> 
     * 
     * This method is called when a form has its tag value method equals to post. 
     *  
     * @param request the request send by the client to the server 
     * @param response the response send by the server to the client 
     * @throws ServletException if an error occurred 
     * @throws IOException if an error occurred 
     */ 
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
 
        response.setContentType("text/html");  
          
        //获得客户端发送的数据  
        ServletInputStream is = request.getInputStream();  
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));  
        String requestString = reader.readLine();  
        //向客户端返回数据  
        String responseString = processStringRequest(requestString,request);  
        ServletOutputStream os = response.getOutputStream();  
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));  
        writer.write(responseString);  
        //关闭资源  
        writer.flush();  
        writer.close();  
        reader.close();  
        os.close();  
 
    }  
 
    /** 
     * Initialization of the servlet. <br> 
     * 
     * @throws ServletException if an error occure 
     */ 
    public void init() throws ServletException {  
          
    }  
      
    private String processStringRequest(String requestString,HttpServletRequest request){  
          
 
        List list = this.toRead(request.getRealPath("/")+"user.xml");  
        String response = "";  
        if(null != list && list.size() > 0){  
            for(int i = 0 ; i < list.size(); i++){  
                JavaBean a = (JavaBean)list.get(i);  
                response += "client say:"+requestString+"server say: this is your info:"+a.getName()+"@"+a.getSex()+"@"+a.getAge();  
                System.out.println(a.getName());  
            }  
        }else{  
            response = "is wrong!";  
        }  
 
        return response;  
    }  
      
    public List toRead(String filename) {  
 
        List alist = new ArrayList();  
          
        try {  
              
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
            DocumentBuilder db = dbf.newDocumentBuilder();  
            Document document = db.parse(filename);  
            NodeList employees = document.getChildNodes();  
            for (int i = 0; i < employees.getLength(); i++) {  
                  
                Node employee = employees.item(i);  
                NodeList employeeInfo = employee.getChildNodes();  
                for (int j = 0; j < employeeInfo.getLength(); j++) {  
                    Node node = employeeInfo.item(j);  
                    NodeList employeeMeta = node.getChildNodes();  
                    JavaBean bean = new JavaBean();  
                    boolean status = false;  
                    for (int k = 0; k < employeeMeta.getLength(); k++) {  
                        if(employeeMeta.item(k).getNodeName().equals("name")){  
                            bean.setName(employeeMeta.item(k).getTextContent());  
                        }  
                        if(employeeMeta.item(k).getNodeName().equals("age")){  
                            bean.setAge(employeeMeta.item(k).getTextContent());  
                        }  
                        if(employeeMeta.item(k).getNodeName().equals("sex")){  
                            bean.setSex(employeeMeta.item(k).getTextContent());  
                        }  
                        status = true;  
                    }  
                    if(status){  
                        alist.add(bean);  
                    }  
                }  
            }  
        } catch (FileNotFoundException e) {  
            System.out.println(e.getMessage());  
        } catch (ParserConfigurationException e) {  
            System.out.println(e.getMessage());  
        } catch (SAXException e) {  
            System.out.println(e.getMessage());  
        } catch (IOException e) {  
            System.out.println(e.getMessage());  
        }  
        return alist;  
          
    }  
 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class ServletDemo extends HttpServlet {

 /**
  * Constructor of the object.
  */
 public ServletDemo() {
  super();
 }

 /**
  * Destruction of the servlet. <br>
  */
 public void destroy() {
  super.destroy();
 }

 /**
  * The doGet method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to get.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/html");
  this.doPost(request, response);
 }

 /**
  * The doPost method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to post.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  response.setContentType("text/html");
  
  //获得客户端发送的数据
  ServletInputStream is = request.getInputStream();
  BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  String requestString = reader.readLine();
  //向客户端返回数据
  String responseString = processStringRequest(requestString,request);
  ServletOutputStream os = response.getOutputStream();
  BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
  writer.write(responseString);
  //关闭资源
  writer.flush();
  writer.close();
  reader.close();
  os.close();

 }

 /**
  * Initialization of the servlet. <br>
  *
  * @throws ServletException if an error occure
  */
 public void init() throws ServletException {
  
 }
 
 private String processStringRequest(String requestString,HttpServletRequest request){
  

  List list = this.toRead(request.getRealPath("/")+"user.xml");
  String response = "";
  if(null != list && list.size() > 0){
   for(int i = 0 ; i < list.size(); i++){
    JavaBean a = (JavaBean)list.get(i);
    response += "client say:"+requestString+"server say: this is your info:"+a.getName()+"@"+a.getSex()+"@"+a.getAge();
    System.out.println(a.getName());
   }
  }else{
   response = "is wrong!";
  }

  return response;
 }
 
 public List toRead(String filename) {

  List alist = new ArrayList();
  
  try {
   
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   DocumentBuilder db = dbf.newDocumentBuilder();
   Document document = db.parse(filename);
   NodeList employees = document.getChildNodes();
   for (int i = 0; i < employees.getLength(); i++) {
    
    Node employee = employees.item(i);
    NodeList employeeInfo = employee.getChildNodes();
    for (int j = 0; j < employeeInfo.getLength(); j++) {
     Node node = employeeInfo.item(j);
     NodeList employeeMeta = node.getChildNodes();
     JavaBean bean = new JavaBean();
     boolean status = false;
     for (int k = 0; k < employeeMeta.getLength(); k++) {
      if(employeeMeta.item(k).getNodeName().equals("name")){
       bean.setName(employeeMeta.item(k).getTextContent());
      }
      if(employeeMeta.item(k).getNodeName().equals("age")){
       bean.setAge(employeeMeta.item(k).getTextContent());
      }
      if(employeeMeta.item(k).getNodeName().equals("sex")){
       bean.setSex(employeeMeta.item(k).getTextContent());
      }
      status = true;
     }
     if(status){
      alist.add(bean);
     }
    }
   }
  } catch (FileNotFoundException e) {
   System.out.println(e.getMessage());
  } catch (ParserConfigurationException e) {
   System.out.println(e.getMessage());
  } catch (SAXException e) {
   System.out.println(e.getMessage());
  } catch (IOException e) {
   System.out.println(e.getMessage());
  }
  return alist;
  
 }

}
 

web工程的web.xml

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.4"   
    xmlns="http://java.sun.com/xml/ns/j2ee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  <servlet>  
    <description>This is the description of my J2EE component</description>  
    <display-name>This is the display name of my J2EE component</display-name>  
    <servlet-name>ServletDemo</servlet-name>  
    <servlet-class>ServletDemo</servlet-class>  
  </servlet>  
 
  <servlet-mapping>  
    <servlet-name>ServletDemo</servlet-name>  
    <url-pattern>/servlet/ServletDemo</url-pattern>  
  </servlet-mapping>  
  <welcome-file-list>  
    <welcome-file>index.jsp</welcome-file>  
  </welcome-file-list>  
</web-app> 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ServletDemo</servlet-name>
    <servlet-class>ServletDemo</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ServletDemo</servlet-name>
    <url-pattern>/servlet/ServletDemo</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

xml文件格式

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="GB2312" standalone="no"?>  
<employees>  
    <employee>  
        <name>user0</name>  
        <sex>m</sex>  
        <age>30</age>  
    </employee>  
</employees> 
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<employees>
 <employee>
  <name>user0</name>
  <sex>m</sex>
  <age>30</age>
 </employee>
</employees>

解析xml文件用到的javabean:

view plaincopy to clipboardprint?
public class JavaBean {  
      
    private String name;  
    private String sex;  
    private String age;  
    public String getAge() {  
        return age;  
    }  
    public void setAge(String age) {  
        this.age = age;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public String getSex() {  
        return sex;  
    }  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  

public class JavaBean {
 
 private String name;
 private String sex;
 private String age;
 public String getAge() {
  return age;
 }
 public void setAge(String age) {
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
}

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

二,客户端代码


1、新建Android工程

2、修改main。xml文件

view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    >  
<EditText   
    android:layout_height="wrap_content" 
    android:id="@+id/address" 
    android:layout_width="fill_parent" 
    android:text="http://192.168.1.111:8089/Test1/servlet/ServletDemo
>  
</EditText>  
<Button  
     android:id="@+id/ButtonGo"   
     android:layout_width="wrap_content"   
     android:layout_height="wrap_content" 
     android:text="go!" 
 >  
</Button>  
<TextView    
    android:layout_width="fill_parent"   
    android:layout_height="fill_parent"   
    android:background="#ffffff" 
    android:textColor="#000000" 
    android:id="@+id/pagetext" 
    />  
</LinearLayout> 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<EditText
 android:layout_height="wrap_content"
 android:id="@+id/address"
 android:layout_width="fill_parent"
 android:text="http://192.168.1.111:8089/Test1/servlet/ServletDemo"
>
</EditText>
<Button
  android:id="@+id/ButtonGo"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="go!"
 >
</Button>
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:textColor="#000000"
 android:id="@+id/pagetext"
    />
</LinearLayout>

3、添加关键代码

view plaincopy to clipboardprint?
import android.app.Activity;  
import android.os.Bundle;  
import android.widget.Button;  
import android.widget.TextView;  
import android.util.Log;  
import android.view.View;  
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.net.URL;  
import java.net.URLConnection;  
 
 
public class ClientDemo extends Activity {  
    /** Called when the activity is first created. */ 
 
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
 
        final TextView tView = (TextView) findViewById(R.id.pagetext);  
          
         
        final Button button = (Button) findViewById(R.id.ButtonGo);  
        button.setOnClickListener(new Button.OnClickListener() {  
            public void onClick(View v) {  
                  
                  
                String response_string = "";  
                boolean out = true;  
                boolean in = true;  
                try {  
                    System.out.println("ty"+tView.getText().toString());  
                    URL url = new URL("http://192.168.1.111:8089/Test1/servlet/ServletDemo");  
                    URLConnection connection = url.openConnection();  
                      
                    connection.setDoInput(in);  
                    connection.setDoOutput(out);  
                      
                    BufferedWriter writer = null;  
                    //向服务器发送数据  
                    if(out){  
                        writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));  
                        writer.write("I am clent request!!");  
                        writer.flush();  
                    }  
                    //接受服务器返回的数据  
                    BufferedReader reader = null;  
                    if(in){  
                        reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));  
                        response_string = reader.readLine();  
                        System.out.println("response: "+response_string);  
                        Log.v("test", response_string);  
                        tView.setText(response_string);  
                    }  
                      
                    if(writer != null){  
                        writer.close();  
                    }  
                      
                    if(reader != null){  
                        reader.close();  
                    }  
                } catch (Exception e) {  
                    // TODO: handle exception  
                    System.out.println(e.getMessage());  
                }  
            }  
        });          
    }  

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.util.Log;
import android.view.View;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;


public class ClientDemo extends Activity {
    /** Called when the activity is first created. */

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       

        final TextView tView = (TextView) findViewById(R.id.pagetext);
       
      
        final Button button = (Button) findViewById(R.id.ButtonGo);
        button.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
             
          
          String response_string = "";
          boolean out = true;
          boolean in = true;
          try {
           System.out.println("ty"+tView.getText().toString());
           URL url = new URL("http://192.168.1.111:8089/Test1/servlet/ServletDemo");
           URLConnection connection = url.openConnection();
           
           connection.setDoInput(in);
           connection.setDoOutput(out);
           
           BufferedWriter writer = null;
           //向服务器发送数据
           if(out){
            writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
            writer.write("I am clent request!!");
            writer.flush();
           }
           //接受服务器返回的数据
           BufferedReader reader = null;
           if(in){
            reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            response_string = reader.readLine();
            System.out.println("response: "+response_string);
            Log.v("test", response_string);
            tView.setText(response_string);
           }
           
           if(writer != null){
            writer.close();
           }
           
           if(reader != null){
            reader.close();
           }
          } catch (Exception e) {
           // TODO: handle exception
           System.out.println(e.getMessage());
          }
            }
        });       
    }
}
 

这样,整个demo就完成了

运行结果如下

1、程序启动

 

2、发送请求后

 

小结。


1、整个demo比较简单,但我们又接触到了新知识,这里面需要注意的是,服务器的ip地址要用实际地址 上篇已经说明了原因。

2、整个步骤比较简单,首先客户端创建连接,然后发送消息,最后接收消息,服务器同理。

3、对个人来说 我更喜欢做跟服务器交互的程序,觉得折腾起来好玩儿。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/applezhengxd/archive/2010/05/12/5578712.aspx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值