2017-08-04 41 views
0

我不是java专家。java,如何在applet中使用HttpURLConnection的性能增加方法

我有一个用于请求本地Web服务器响应的代码。 我已经在java应用程序/ jar。 这工作得很好,至少在我的机器上 :)从本地服务器回复0错误。

但我的客户端使用我的代码在Applet:重新编译,签名并部署在Java Tomcat上。

从客户端每10个电话就有1个错误。

任何提高Applet内部性能的建议?

/* 
    "ruta" opcion a pedirle al servidor python para que ejecute. 
    jTextArea_respuesta: El Objeto Swing de la ventana donde escribir la respuesta 
    enDebug: muestra informes en consola de java, true o false. 
*/ 
public boolean enviaPeticion(javax.swing.JTextArea Jtextarea_respuesta, boolean enDebug, String mi_opcion) { 

    long startTime=0; 
    long endTime=0; 

    if(enDebug==true) 
    { 
     startTime = System.currentTimeMillis(); 
    } 

    boolean todo_funciono = false; 

    //la direccion local del servidor python 
    String url = "http://localhost:8080/?opcion=" + mi_opcion; 

    //codigo de respuesta http 
    int responseCode = 0; 

    URL obj; 
    try { 

     //crea objeto de url    
     obj = new URL(url); 

     HttpURLConnection con; 
     try { 

      //abre conexion     
      con = (HttpURLConnection) obj.openConnection(); 

      // solo interesa el metodo GET 
      con.setRequestMethod("GET"); 

      //no es necesario indicar el agente 
      //con.setRequestProperty("User-Agent", USER_AGENT); 
      responseCode = -1; 

      try { 

       //se obtiene el código de respuesta http 
       responseCode = con.getResponseCode(); 

      } catch (java.net.ConnectException ex) { 

       if (enDebug) { 
        Logger.getLogger(Frame.class.getName()).log(Level.WARNING, null, ex); 
       } 

       //si esto falla lo más problable es que no este activo el programa servidor 
       if (Jtextarea_respuesta != null) { 
        Jtextarea_respuesta.setText("servidor caido"); 
       } 

       return false; 
      } 

      //se procesa la respuesta del servidor web 
      BufferedReader in = null; 
      try { 
       in = new BufferedReader(
         new InputStreamReader(con.getInputStream())); 
      } catch (IOException ex) { 
       if (enDebug) { 
        Logger.getLogger(Frame.class.getName()).log(Level.WARNING, null, ex); 
       } 

       return false; 
      } 

      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while ((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 

      in.close(); 

      // System.out.println(response.toString()); 
      //System.out.println("Response Code : " + responseCode); 
      // si el código de respuesta del servidor es 200 
      // es porque el servidor esta activo y la opción ingresada es válida 
      if (responseCode == 200) { 

       //se procesara un par opcion-valor con los datos xml recibidos 
       HashMap<String, String> values = new HashMap<String, String>(); 
       String xmlString = response.toString(); 
       Document xml = convertStringToDocument(xmlString); 
       Node user = xml.getFirstChild(); 
       NodeList childs = user.getChildNodes(); 
       Node child; 
       for (int i = 0; i < childs.getLength(); i++) { 
        child = childs.item(i); 
        //System.out.println(child.getNodeName()+" "+child.getTextContent()); 

        //obtiene un par llave-valor 
        values.put(child.getNodeName(), child.getTextContent()); 
       } 

         if(enDebug==true) 
         { 
          endTime = System.currentTimeMillis(); 
         } 


       if (mi_opcion.equals("entrada")) { 
        //System.out.println(values.get("positivo")); 

        // esta es la respuesta positiva esperada 
        try { 
         if (values.get("positivo").equals("True")) { 
          //  
          // **** fue procesada la entrada en el hardware 
          //  
          if (Jtextarea_respuesta != null) { 

           String duracion=""; 


          if(enDebug==true) 
          { 
           // calcula cuanto se tardó en responder el servidor python 
           duracion = "\n"+"peticion tardó "+ Long.toString(endTime - startTime) + " milisegundos"; 
          } 

           Jtextarea_respuesta.setText("enviada entrada "+ duracion); 
          } 

          //podemos reportar que funciono la operacion 
          todo_funciono = true; 
         } 
        } catch (Exception e) { 
         if (enDebug) { 
          //la respuesta xml no contiene <positivo> 
          Logger.getLogger(Frame.class.getName()).log(Level.FINE, null, e); 
         } 
        } 

        try { 

         // en esta situacion hay un error como el dispositivo desconectado 
         String error = values.get("error"); 

         if (!error.isEmpty()) { 
          //  
          // **** ocurrio algun error al solicitar la entrada 
          // 
          if (Jtextarea_respuesta != null) { 
           Jtextarea_respuesta.setText(error); 
          } 

          return false; 
         } 
        } catch (Exception e) { 
         if (enDebug) { 
          // la respuesta xml no contiene <error> 
          Logger.getLogger(Frame.class.getName()).log(Level.FINE, null, e); 
         } 

        } 
       } 

      } else { 
       if (Jtextarea_respuesta != null) { 

        // alguna otra situación por la cual falle el proceso 
        // mi_opcion no es válida 
        Jtextarea_respuesta.setText("opcion invalida o error interno"); 
        return false; 
       } 
      } 

     } catch (IOException ex) { 

      //no se pudo abrir la conexion por permisos de Java o el applet. 
      if (enDebug) { 
       Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex); 
      } 

     } 

    } catch (MalformedURLException ex) { 

     // en caso que la url haya sido mal escrita. 
     // caso improblable. 
     if (enDebug) { 
      Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    //Jtextarea_respuesta.setText("Enviando peticion a " + url); 
    return todo_funciono; 

} 
+2

你为什么要编写一个小程序?他们不再受到任何人的支持。 –

+0

添加finally块并使用con.disconnect()关闭打开的连接。顺便说一句你的连接设置超时 – Arung

+0

谢谢。乔。 // Applet只是一个请求。 – Ando

回答

0

您可以增加性能通过移除StringBuilder和解析XML直出连接的输入流。这将节省时间和空间。

您无法通过客户端中的代码更改来减少服务器故障的发生率。

你应该使用一些XPath。

相关问题