java,如何在applet

时间:2017-08-04 21:46:49

标签: java httpurlconnection bufferedreader

我不是 java 专家。

我有一个代码,用于请求本地Web服务器的响应。 我已经在java app / 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;

}

1 个答案:

答案 0 :(得分:0)

您可以通过删除StringBuilder并直接从连接的输入流解析XML来提高性能。这将节省时间和空间。

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

你应该使用XPath。