Entradas

Mostrando las entradas de abril, 2007

Descargar XLS y PDF sin abrirlos en el navegador

Más de uno ha querido solucionar este problema: un link en un archivo para descargar un XLS o PDF (o DOC) sin que se abra en el navegador. Pues aquí tengo la solución (con PHP) Primero, los enlaces deberían como estos: <a href="download.php?link=Plantilla.xlt">XLT</a> <a href="download.php?link=Libro.pdf">PDF</a> Y el archivo download.php es el siguiente: <?php $doc=$_GET[ "link" ]; header ( 'Content-Type:application/octet-stream' ); header ( 'Content-Disposition:attachment; filename="' .$doc. '"' ); readfile ($doc); ?>

Realm con ActiveDirectory

Después de revisar varios ejemplos, probar y probar, logré encontrar una configuración para usar Realm con el ActiveDirectory de Windows. Esta es la configuración que usé: <Context path="/ldap" > <Realm className="org.apache.catalina.realm.JNDIRealm" connectionURL="ldap://med_spdom01" debug="99" userPattern="{0}@meduca.gob.pe" roleBase="OU=Politicas,DC=meduca,DC=gob,DC=pe" roleName="cn"/> </Context> Como se ve en userPattern, le estoy poniendo el dominio del usuario. Primero había probado logearme con ese formato en la ventana de inicio de sesión del windows. Al momento de escribir el árroba (@) en el nombre de usuario, la lista de dominios se me desactiva. Ya no hacía falta especificar el dominio. Con esa premisa fue que intenté utilizar el mismo formato para el Realm en el Tomcat

Anular caché de los navegadores

Los navegadores guardan todos los archivos que se han accedido. En internet explorer se llama "archivos temporales de internet"... lo cuál se refiere al caché de internet. (tanto nombre!) Pero si estamos en una página que requiere autenticarse, y al deslogear regresa a la página autenticada, pues el navegador mostrará la página por más que el usuario haya cerrado la sesión. Lo mejor es que cada página que el navegador no se guarde en el caché. Para ello colocaremos las siguientes sentencias (ya sea en jsp o en un servlet): response.setHeader("Cache-control","no-cache"); response.setHeader("Pragma","no-cache"); response.setDateHeader ("Expires", 0); Y Listo

Generar XLS

Para generar XLS generalmente se usa el Jakarta POI (en java), pero para web es mejor engañar al navegador. El navegador recibe como cabecera el tipo del archivo (mime-type) que está recibiendo y sabrá qué programa abrir. Si es de tipo text/html, abrirá el mismo navegador, pero si es un video tendrá otro tipo y le pedirá al sistema operativo abrir el reproductor de vídeo correspondiente. Para el caso de XLS es lo mismo, y como el Excel puede abrir hasta html, entonces lo engañaremos con más facilidad: Al inicio del JSP colocaremos esta línea: <%@page contentType="application/vnd.ms-excel"%> Con esto, cuando se acceda al .jsp abrirá el contenido con el excel. Pero si se estuviese usando el Internet Explorer, el xls saldrá incrustado en el navegador. Esto puede ser molestoso. Lo que podemos hacer es que se le pregunte al navegador si desea abrirlo o descargarlo. Colocaremos las siguientes líneas: <%@page contentType="application/vnd.ms-excel"%> <%respon

Configuración de Tomcat (conectando al Apache utilizando AJP)

Imagen
El Tomcat utiliza - por omisión - el puerto 8080 para mostrar los contenidos web. Se puede cambiar el puerto de salida en el archivo $CATALINA_HOME/conf/server.xml de 8080 a 80, para que el acceso sea más simple y evitar escribir un "apellido" como http://midominio :8080 /sistemaweb/. Pero quizás en nuestro host también estemos utilizando el apache para publicar otras aplicaciones que no son necesariamente jsp/servlet. Es posible hacer que todas las peticiones que reciba el apache a un determinado "directorio" sea redireccionado al tomcat, para que este lo atienda y envie su respueta al cliente através del Apache. Hay dos maneras para lograr esto: con el ProxyHTTP y con el conector AJP. En este mensaje mostraré cómo se utiliza el AJP. En este diagrama se muestra como funciona el AJP. Por omisión utiliza el puerto 8009 localmente. Paso 0: descargar el conector: El conector se puede encontrar en el sitio web de Tomcat . Debemos escoger el jk1.2( el jk2 es obsoleto). S

Configuración de Tomcat (módulos web)

"Normalmente", cuando un newbie en desarrollo hace su aplicación web y lo quiere publicar, suele colocarlo junto con los documentos del servidor web. Por ejemplo, si se tratase de PHP en Apache, lo coloca dentro de DocumentRoot; y si es Tomcat, en $CATALINA_HOME/webapps. Esto es normal, pero es algo desordenado tener la aplicación dentro del sistema que lo ejecuta. (Recuerdo que los perfiles de usuario en Windows NT estaban dentro del directorio Windows, si se instalaba nuevamente el sistema operativo, todos los perfiles se borraba. A partir del Windows 2K, los perfiles se guardan en un directorio a parte llamado "c:\Document and Settings"). Esto se puede hacer en Tomcat. Si deseamos cambiar de contenedor web (a una versión superior, o cambiar de propietario), los módulos web seguirán en el mismo sitio. Lo principal es tener todos los módulos web en un directorio aparte, que lo podamos identificar tan fácilmente como el "Document and Settings" del Windows.

Tiles en Struts 1.3

Comencé a migrar una aplicación hecha con Struts 1.2 para que utilizará Struts 1.3 Simplemente (pensé) sería copiar el contenido del struts-config.xls (manteniendo el DTD), obviamente usar los .jar respectivos, utilizar el mismo tiles-defs.xml, pero... no funcionó. Respondía el error 404 (no encuentra página). Después de un día perdido,revisé la documentación http://struts.apache.org/1.3.8/struts-tiles/installation.html y pues la solución era sencilla (algo nuevo con respecto al struts 1.2): Agregar el siguiente parámetro de inicialización del Action Servlet. <init-param> <param-name>chainConfig</param-name> <param-value>org/apache/struts/tiles/chain-config.xml</param-value> </init-param> hora, todo funciona como debería ser. ... no olvidar, siempre leer la documentación.