我不是 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;
}
答案 0 :(得分:0)
您可以通过删除StringBuilder
并直接从连接的输入流解析XML来提高性能。这将节省时间和空间。
您无法通过客户端中的代码更改来降低服务器故障的发生率。
你应该使用XPath。