Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Escapar caracter "\" de una ruta recuperada de BBDD

Estas en el tema de Escapar caracter "\" de una ruta recuperada de BBDD en el foro de Java en Foros del Web. Buenos días, Estoy teniendo el siguiente problema, a ver si podéis echarme una mano. Me han pedido pintar un menú recuperando los links de las ...
  #1 (permalink)  
Antiguo 14/01/2015, 02:51
 
Fecha de Ingreso: enero-2015
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Escapar caracter "\" de una ruta recuperada de BBDD

Buenos días,

Estoy teniendo el siguiente problema, a ver si podéis echarme una mano.
Me han pedido pintar un menú recuperando los links de las opciones de una tabla de BBDD. Es una aplicación que ya estaba hecha y aunque no es lo más apropiado, todo el código java incluso para acceder a los datos está dentro de la misma jsp, pero bueno, este no es el problema, porque esa parte la está haciendo bien. Estoy trayendo con una select los enlaces de la tabla y se utilizan correctamente para pintar las opciones. El problema viene de un enlace concreto que hay en la tabla para una de las opciones. Todos son enlaces, bien externos, del tipo http://www.google.es, bien internos a alguna página de la propia aplicación. Pero este enlace concreto que me está dando problemas, es a una aplicación o un portal al que acceden de la siguiente manera "\\portal\EstadisticasSAD\IndiceEstadisticas\index .jsp". Lo que está haciendo el código, en primer lugar es eliminar el carácter "\" de manera que toma "portalEstadisticasSADIndiceEstadisticasindex. jsp" y luego intentar cargarlo dentro del entorno y estructura de la propia web, lo cual tampoco es correcto, porque es algo externo. Os pongo sólo la parte del código de la jsp que está haciendo mal.

En el código java hago esta query, que está trayendo bien los datos y guardo el dato recuperado para el enlace en una variable
<%
sql="SELECT a.id_tab AS id, a.name AS nametab, is_visible AS visible, file_name AS filename, is_only_icon AS onlyicon, node_order AS node, link AS link, int_link AS intlink FROM nptab a, nptablink b WHERE a.id_tab = b.id_tab order by node ";

String link = rs.getString("link") != null ? (String) rs.getString("link") : "";
%>

Luego en javascript asigno esta variable java a una variable javasccript

var link = '<%=link%>';

y la utilizo para construir dinámicamente el código html que luego pinto

var strHTMLderecha += "onClick='window.open(\"" + link + "\")'>";

Esto lo está haciendo bien para cualquier enlace excepto para este concreto que utiliza barras invertidas "\". Entiendo que lo que hay que hacer es alguna secuencia de escape para que tome bien las barras, pero no doy con la tecla.

¿Podéis echarme una mano?, por favor.

Muchas gracias y un saludo.
  #2 (permalink)  
Antiguo 14/01/2015, 03:06
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Buenas,

Como te queda esta linea una vez generado el HTML y con la variable link reemplazada?
Código JavaScript:
Ver original
  1. var strHTMLderecha += "onClick='window.open(\"" + link + "\")'>";

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 14/01/2015, 04:15
 
Fecha de Ingreso: enero-2015
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Hola, muchas gracias por responder tan rápidamente.

La variable strHTMLderecha lleva lo siguiente:

onClick='window.open("\portalEstadisticasSADIndice Estadisticasindex. jsp")'

Cuando debería llevar:
onClick='window.open("\\portal\EstadisticasSAD\Ind iceEstadisticas\index. jsp")'

La variable java "link", que almacena lo recuperado en la query para este campo, tiene el dato correctamente \\portal\EstadisticasSAD\IndiceEstadisticas\index. jsp, pero cuando hago la asignación a la variable javascript:
var link = '<%=link%>';
la cadena se transforma en \portalEstadisticasSADIndiceEstadisticasindex. jsp


Muchas gracias!!!

Saludos.
  #4 (permalink)  
Antiguo 14/01/2015, 04:44
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Buenas,

Visto que utilizas backslashes (/) y no / (que es el separador standar de URL en Http) entiendo que el popup va a abrir un recurso que esta compartido en una maquina windows accesible desde local y que la aplicacion web la utilizaras siempre en local. Es asi?

Si es correcto, prueba a hacer esto:

Código Javascript:
Ver original
  1. var link = '<%=link.replace("\\", "\\\\")%>';

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 14/01/2015, 04:57
 
Fecha de Ingreso: enero-2015
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Hola de nuevo,

Eso es, como comentas el enlace tiene backslashes en lugar de la barra normal porque se trata de un recurso compartido, (en este caso una aplicación web) accesible desde la máquina desde la que se desea acceder.

Lo he probado, pero no me funciona. Da este error:

Código:
GRAVE: Error compiling file: /C:/Tomcat5.0.28/work/Catalina/localhost/esportal//org/apache/jsp/apps/netportal/default_/shared/skin/page/labo\pageheader_jsp.java     [javac] Compiling 1 source file

C:\Tomcat5.0.28\work\Catalina\localhost\esportal\org\apache\jsp\apps\netportal\default_\shared\skin\page\labo\pageheader_jsp.java:2045: replace(char,char) in java.lang.String cannot be applied to (java.lang.String,java.lang.String)
      out.print(link.replace("\\", "\\\\"));
He probado también metiendo comillas simples en el replace, pero también da error:

Código:
GRAVE: Error compiling file: /C:/Tomcat5.0.28/work/Catalina/localhost/esportal//org/apache/jsp/apps/netportal/default_/shared/skin/page/labo\pageheader_jsp.java     [javac] Compiling 1 source file

C:\Tomcat5.0.28\work\Catalina\localhost\esportal\org\apache\jsp\apps\netportal\default_\shared\skin\page\labo\pageheader_jsp.java:2045: unclosed character literal
      out.print(link.replace('\\', '\\\\'));
                                   ^
C:\Tomcat5.0.28\work\Catalina\localhost\esportal\org\apache\jsp\apps\netportal\default_\shared\skin\page\labo\pageheader_jsp.java:2045: illegal character: \92
      out.print(link.replace('\\', '\\\\'));
                                      ^
C:\Tomcat5.0.28\work\Catalina\localhost\esportal\org\apache\jsp\apps\netportal\default_\shared\skin\page\labo\pageheader_jsp.java:2045: illegal character: \92
      out.print(link.replace('\\', '\\\\'));
                                       ^
C:\Tomcat5.0.28\work\Catalina\localhost\esportal\org\apache\jsp\apps\netportal\default_\shared\skin\page\labo\pageheader_jsp.java:2045: unclosed character literal
      out.print(link.replace('\\', '\\\\'));
                                        ^
C:\Tomcat5.0.28\work\Catalina\localhost\esportal\org\apache\jsp\apps\netportal\default_\shared\skin\page\labo\pageheader_jsp.java:2045: ')' expected
      out.print(link.replace('\\', '\\\\'));
También he probado con replaceAll
var link = '<%=link.replaceAll("\\", "\\\\")%>';
Y en este caso el error es de javascript, aunque es poco aclarativo, dice que se esperaba un objeto.


Muchas gracias!!

Última edición por daviffg; 14/01/2015 a las 05:05 Razón: Más datos
  #6 (permalink)  
Antiguo 14/01/2015, 06:18
 
Fecha de Ingreso: enero-2015
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Buenas de nuevo,

He escapado las barras directamente en BBDD, de manera que el window.open lo está poniendo correctamente, con la ruta que tiene que ser:

onclick="window.open("\\portal\EstadisticasSAD\Ind iceEstadisticas\index. jsp")"

Pero no es capaz de abrir el recurso.

Si meto esta ruta directamente en el navegador, efectivamente intenta acceder al recurso, pero al hacerlo desde el enlace me pone el protocolo http delante y lo monta dentro del contexto de la aplicación.

¿Alguna idea?

Muchísimas gracias!!

Saludos,
  #7 (permalink)  
Antiguo 14/01/2015, 06:37
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

No puedes poner que desde el navegador abra una jsp como si fuera un recurso, la jsp tiene que abrirla el servidor, y para eso tienes que usar una URL absoluta/relativa a tu aplicación, sin la extensión jsp.

Si es de una aplicación distinta, la URL absoluta.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #8 (permalink)  
Antiguo 14/01/2015, 06:50
 
Fecha de Ingreso: enero-2015
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Hola,

Pero si meto directamente la ruta en el navegador tal cual "\\portal\EstadisticasSAD\IndiceEstadisticas\index . jsp" si que es capaz de acceder a la aplicación.

He reducido mis pruebas a algo mucho más simple. Un html básico con:

<a href="\\portal\EstadisticasSAD\IndiceEstadisticas\ index. jsp">Enlace</a>

Ésto, al hacer click, no abre la aplicación, no encuentra la página. Sin embargo al meter la misma ruta directamente en el navegador sí que es capaz de acceder.

¿Cual podría ser el motivo?, si está intentando abrir exactamente la misma ruta el navegador.

Gracias!!

Saludos.
  #9 (permalink)  
Antiguo 14/01/2015, 06:53
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Buenas,

Dos cosas.

Para evitar problemas con los escapes es mejor que utilices la barra / aun cuando sea un recurso windows.

Para que no te busque el fichero en el contexto del servidor deberas indicarlo al navegador asi:

Código Javascript:
Ver original
  1. onclick="window.open("file://///portal/EstadisticasSAD/IndiceEstadisticas/index.jsp")"

Si, son cinco barras (/////)

Por otro lado, como ya te apuna Xerelo, estas abriendo un recurso fuera del servidor. Eso significa que lo que se va a mostrar es el codigo fuente de index.jsp y no se va a interpretar.
Si eso es lo que buscas, adelante.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #10 (permalink)  
Antiguo 14/01/2015, 07:42
 
Fecha de Ingreso: enero-2015
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Hola,

No no, realmente no es eso lo que busco. A ver, me han pasado este enlace:

\\portal\EstadisticasSAD\IndiceEstadisticas\index. jsp

que si lo pongo directamente en el navegador, me abre la aplicación web, supongo que porque la tendrán desplegada en un servidor y se está abriendo dentro del servidor, interpretada perfectamente por el navegador. Está desplegada en una máquina que se llama portal y metiendo esa ruta directamente en el navegador, tal cual, como indico, se puede acceder a ella.

Yo lo que quiero es que metiendo esa ruta en un window.open o un window.href, sea capaz de dirigir a esa aplicación web del mismo modo que se carga si meto la ruta directamente en el navegador.

Es lo que estoy intentando y que independientemente de las barras invertidas y de escaparlas, que ahora veo que era el menor de mis problemas, porque ya está cogiendo bien la ruta, no consigo hacer funcionar.

Muchas gracias!!

Saludos.
  #11 (permalink)  
Antiguo 14/01/2015, 08:43
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Buenas,

Cuando utilizas \\ estas accediendo a un recurso compartido en otra maquina windows mediante protocolos SMB o CIFS. Si dices que el navegador te renderiza el fichero sera seguramente porque su contenido sea html puro o bien porque tu navegador intenta usar el protocolo http acceder a la maquina y mostrar el fichero.

Para acceder a un servidor web hay que utilizar el protocolo http indicando maquina y puerto, que por defecto sera el 80. En ese caso la ruta seria http://portal/EstadisticasSAD/Indice...icas/index.jsp

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #12 (permalink)  
Antiguo 15/01/2015, 03:06
 
Fecha de Ingreso: enero-2015
Mensajes: 7
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Escapar caracter "\" de una ruta recuperada de BBDD

Hola!! Tienes razón, al final no era una aplicación desplegada en un servidor, sino un recurso compartido. Me pasaron de nuevo la ruta, que es
\\portal\EstadisticasSAD\IndiceEstadisticas\index. htm

El .jsp del fichero index de la primera ruta me hizo pensar que se trataba de una aplicación web desplegada en algún sitio.

Con el código que me pusiste un par de cometarios antes:
onclick="window.open("file://///portal/EstadisticasSAD/IndiceEstadisticas/index.jsp")"
finalmente he podido solucionarlo.

Muchísimas gracias por vuestra ayuda!!

Saludos.

Etiquetas: bbdd, escapar, ruta, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:22.