tracomalo
v1.0.1
Published
Java y otros temas de desarrollo
Downloads
2
Readme
Consejos de HttpServlets
Desde el comienzo del desarrollo web, los atributos de sesión se han utilizado para retener información importante sobre la sesión de un usuario. Este concepto también es válido cuando se desarrolla utilizando servlets Java, y los servlets facilitan la configuración y obtención de los valores de los atributos. Todas las clases HttpServlet deben implementar métodos doGet o doPost para procesar eventos de aplicaciones web. Al hacerlo, estos métodos tienen acceso al objeto HttpServletRequest cuando se les pasa como argumento. Un objeto HttpSession se puede obtener de HttpServletRequest y, por lo tanto, se puede usar para recuperar y establecer atributos según sea necesario. En la solución a esta receta, se utiliza un atributo de sesión HTTP para almacenar una dirección de correo electrónico. Luego, esa dirección se usa en toda la aplicación dentro de diferentes clases de servlets obteniendo el objeto de sesión y luego recuperando el valor del atributo.
La descarga de archivos es una tarea esencial para casi cualquier aplicación web. Realizar los pasos que se proporcionan en esta receta facilitará la realización de esta tarea. El ejemplo de esta receta demuestra un caso sencillo en el que los usuarios pueden visitar una página web, hacer clic en un archivo para descargar y recuperar el archivo del servidor y copiarlo en su máquina.
El HTML es muy simplista en este ejemplo y enumera un enlace URL que invoca el servlet y pasa el nombre del archivo que se va a descargar. Cuando el usuario hace clic en el enlace, el nombre del archivo se pasa a / DownloadServlet como parámetro con el nombre del archivo. Cuando se hace clic en el enlace, se invoca el método doGet del servlet. La primera tarea que se realiza en el método doGet es leer el parámetro de nombre de archivo de la página web que invoca. Luego, esa información se pasa al método doDownload junto con los objetos HttpServletRequest y HttpServletResponse.
En el método doDownload, el ServletOutputStream se obtiene del objeto HttpServletResponse y el ServletContext se obtiene para su uso posterior. Para descargar un archivo, el servlet debe proporcionar una respuesta del mismo tipo que coincida con la del archivo que se va a descargar. También debe indicar en el encabezado de la respuesta que se incluirá un archivo adjunto. Por lo tanto, las primeras tareas que debe realizar el método doDownload implican configurar HttpServletResponse de manera adecuada. response.setContentType ((context.getMimeType (originalFile)! = null)? context.getMimeType (originalFile): "texto / plano"); response.setHeader ("Content-Disposition", "adjunto; nombre de archivo = " "+ originalFile +" \ "");
El nombre del archivo, en este caso originalFile, se utiliza para obtener el tipo MIME del archivo. Si el tipo MIME del archivo es nulo, se devolverá texto sin formato. El archivo adjunto también se configura en el encabezado de la respuesta, agregando el nombre del archivo como un archivo adjunto a la disposición del contenido. A continuación, el método doDownload obtiene una referencia al archivo que se descargará llamando al método getResourceAsStream de ServletContext y pasando el nombre del archivo. Esto devolverá un objeto InputStream que se puede usar para leer el contenido del archivo indicado. A continuación, se crea un búfer de bytes, que se utilizará para obtener fragmentos de datos del archivo cuando se esté leyendo. La tarea real final es leer el contenido del archivo y copiarlo en el flujo de salida. Esto se hace usando un bucle while, que continuará leyendo desde InputStream hasta que todo haya sido procesado. Los fragmentos de datos se leen y se escriben en el flujo de salida mediante el bucle.
Por último, se llama al método flush del objeto ServletOutputStream para borrar el contenido y luego se cierra para liberar recursos. Sin embargo, la magia de descargar archivos utilizando un servlet Java puede quedar un poco confusa en este ejemplo, porque en este ejemplo se está utilizando un archivo estático como fuente de descarga. En la vida real, la página HTML probablemente contendría una lista de archivos que están contenidos dentro de una base de datos, y luego, cuando el usuario selecciona un archivo para descargar, el servlet procesará ese archivo en consecuencia, incluso extrayéndolo de la base de datos si es necesario.