2010-07-15 7 views
5

से कॉल जावा सर्वलेट मैं किसी Android फ़ोन पर एक सर्वलेट से उत्पादन प्राप्त करने के लिए कोशिश कर रहा हूँ।एंड्रॉयड

यह मेरा सर्वलेट है:

/* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */ 
    package main; 

    import java.io.IOException; 
    import java.io.PrintWriter; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    /** 
    * 
    * @author Bert Verhelst <[email protected]> 
    */ 
    public class servlet1 extends HttpServlet { 

     /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. 
     * @param request servlet request 
     * @param response servlet response 
     * @throws ServletException if a servlet-specific error occurs 
     * @throws IOException if an I/O error occurs 
     */ 
     protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      response.setContentType("text/html;charset=UTF-8"); 
      PrintWriter out = response.getWriter(); 
      out.println("<html>"); 
      out.println("<head>"); 
      out.println("<title>Servlet servlet1</title>"); 
      out.println("</head>"); 
      out.println("<body>"); 
      out.println("<h1>processing...</h1>"); 
      out.println("</body>"); 
      out.println("</html>"); 
     } 

     // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
     /** 
     * Handles the HTTP <code>GET</code> method. 
     * @param request servlet request 
     * @param response servlet response 
     * @throws ServletException if a servlet-specific error occurs 
     * @throws IOException if an I/O error occurs 
     */ 
     @Override 
     protected void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      processRequest(request, response); 
      PrintWriter out = response.getWriter(); 
      out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " 
        + "Transitional//EN\">\n" 
        + "<html>\n" 
        + "<head><title>Hello WWW</title></head>\n" 
        + "<body>\n" 
        + "<h1>doget...</h1>\n" 
        + "</body></html>"); 
     } 

     /** 
     * Handles the HTTP <code>POST</code> method. 
     * @param request servlet request 
     * @param response servlet response 
     * @throws ServletException if a servlet-specific error occurs 
     * @throws IOException if an I/O error occurs 
     */ 
     @Override 
     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      processRequest(request, response); 
      PrintWriter out = response.getWriter(); 
      out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " 
        + "Transitional//EN\">\n" 
        + "<html>\n" 
        + "<head><title>Hello WWW</title></head>\n" 
        + "<body>\n" 
        + "<h1>dopost...</h1>\n" 
        + "</body></html>"); 
     } 

     /** 
     * Returns a short description of the servlet. 
     * @return a String containing servlet description 
     */ 
     @Override 
     public String getServletInfo() { 
      return "Short description"; 
     }// </editor-fold> 
    } 

यह मेरा एंड्रॉयड मुख्य पृष्ठ है:

 package be.smarttelecom.MyTest; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.widget.TextView; 

    public class Main extends Activity { 
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      TextView output = (TextView) findViewById(R.id.output); 
      try { 
       output.append("starting\n"); 
       RestClient client = new RestClient("http://10.0.0.188:8084/Servlet_1/servlet1"); 

       try { 
        client.Execute(RequestMethod.GET); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       output.append("after execute\n"); 

       String response = client.getResponse(); 
       output.append("class - " + response + "\n"); 
       output.append(response); 
       output.append("done\n"); 
      } 
      catch (Exception ex) { 
       output.append("error: " + ex.getMessage() + "\n" + ex.toString() + "\n"); 
      } 
     } 
    } 

और अंत में हम RestClient है:

 package be.smarttelecom.MyTest; 

    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.io.InputStreamReader; 
    import java.util.ArrayList; 

    import org.apache.http.HttpEntity; 
    import org.apache.http.HttpResponse; 
    import org.apache.http.NameValuePair; 
    import org.apache.http.client.ClientProtocolException; 
    import org.apache.http.client.HttpClient; 
    import org.apache.http.client.entity.UrlEncodedFormEntity; 
    import org.apache.http.client.methods.HttpGet; 
    import org.apache.http.client.methods.HttpPost; 
    import org.apache.http.client.methods.HttpUriRequest; 
    import org.apache.http.impl.client.DefaultHttpClient; 
    import org.apache.http.message.BasicNameValuePair; 
    import org.apache.http.protocol.HTTP; 

    public class RestClient { 
     private ArrayList <NameValuePair> params; 
     private ArrayList <NameValuePair> headers; 

     private String url; 

     private int responseCode; 
     private String message; 

     private String response; 

     public String getResponse() { 
      return response; 
     } 

     public String getErrorMessage() { 
      return message; 
     } 

     public int getResponseCode() { 
      return responseCode; 
     } 

     public RestClient(String url) 
     { 
      this.url = url; 
      params = new ArrayList<NameValuePair>(); 
      headers = new ArrayList<NameValuePair>(); 
     } 

     public void AddParam(String name, String value) 
     { 
      params.add(new BasicNameValuePair(name, value)); 
     } 

     public void AddHeader(String name, String value) 
     { 
      headers.add(new BasicNameValuePair(name, value)); 
     } 

     public void Execute(RequestMethod method) throws Exception 
     { 
      switch(method) { 
       case GET: 
       { 
        //add parameters 
        String combinedParams = ""; 
        if(!params.isEmpty()){ 
         combinedParams += "?"; 
         for(NameValuePair p : params) 
         { 
          String paramString = p.getName() + "=" + p.getValue(); 
          if(combinedParams.length() > 1) 
          { 
           combinedParams += "&" + paramString; 
          } 
          else 
          { 
           combinedParams += paramString; 
          } 
         } 
        } 

        HttpGet request = new HttpGet(url + combinedParams); 

        //add headers 
        for(NameValuePair h : headers) 
        { 
         request.addHeader(h.getName(), h.getValue()); 
        } 
        executeRequest(request, url); 
        break; 
       } 

       case POST: 
       { 
        HttpPost request = new HttpPost(url); 

        //add headers 
        for(NameValuePair h : headers) 
        { 
         request.addHeader(h.getName(), h.getValue()); 
        } 

        if(!params.isEmpty()){ 
         request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
        } 

        executeRequest(request, url); 
        break; 
       } 
      } 
     } 

     private void executeRequest(HttpUriRequest request, String url) 
     { 
      HttpClient client = new DefaultHttpClient(); 

      HttpResponse httpResponse; 

      try { 
       httpResponse = client.execute(request); 
       responseCode = httpResponse.getStatusLine().getStatusCode(); 
       message = httpResponse.getStatusLine().getReasonPhrase(); 

       HttpEntity entity = httpResponse.getEntity(); 

       if (entity != null) { 
        InputStream instream = entity.getContent(); 
        response = convertStreamToString(instream); 

        // Closing the input stream will trigger connection release 
        instream.close(); 
       } 
      } 
      catch (ClientProtocolException e) { 
       client.getConnectionManager().shutdown(); 
       e.printStackTrace(); 
      } catch (IOException e) { 
       client.getConnectionManager().shutdown(); 
       e.printStackTrace(); 
      } 
     } 

     private static String convertStreamToString(InputStream is) { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
      StringBuilder sb = new StringBuilder(); 

      String line = null; 
      try { 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
      finally { 
       try { 
        is.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      return sb.toString(); 
     } 
    } 

दुर्भाग्य से यह काम नहीं करता । यहाँ मैं उत्पादन (शून्य) के लिए क्या मिलता है

Screenshot of

क्या मैं गलत कर रहा हूँ है?

मैं अपने सर्वलेट की doGet विधि का अनुरोध और एक स्ट्रिंग के लिए उत्पादन में परिवर्तित, लेकिन यह खाली दिखाई देता है।

मैं सिर्फ आवेदन के बंद कोष्ठक के बाद मैनिफ़ेस्ट फ़ाइल में इंटरनेट कनेक्शन की अनुमति दी,

<uses-permission android:name="android.permission.INTERNET" /> 
+0

आप क्या मिलता है आप यदि आप ब्राउज़र से सर्वलेट तक पहुंचते हैं तो उम्मीद करें? इसके अलावा, अपने doGet() कॉल ProcessRequest, जो out.close करता है(), doGet एक बंद धारा के बारे में अधिक HTML लिखने की कोशिश करता है, जबकि (एक सर्वलेट में उत्पादन धारा को बंद कभी नहीं)। – nos

+3

क्या कॉल कभी सर्वलेट में जाता है? सर्वर क्या देख रहा है भेजा जा रहा है? सर्वर वापस भेज रहा है क्या? –

उत्तर

3

Romain Hippeau एक टिप्पणी में लिखा है:

कॉल कभी सर्वलेट करने के लिए मिलता है? सर्वर क्या देख रहा है भेजा जा रहा है? सर्वर वापस भेज रहा है क्या?

यही समस्या थी! मैं अपने फ़ायरवॉल अक्षम है और अब यह काम करता है :)

0

कि आपको यह IP पोर्ट का उपयोग किया था

"http://10.0.0.188:8084" 

मुझे लगता है कि आप के बजाय एंड्रॉयड सिम्युलेटर के लिए इस का उपयोग करना चाहिए:

"http://10.0.2.2:8080"