RSS
people

Depurando tomcat como servicio

Ya hace tiempo un amigo me enseñó como podía depurar mis aplicaciones web desplegadas en el servidor Apache Tomcat, este método me había venido funcionando perfectamente cuando usaba el tomcat iniciado con el script startup.bat o startup.sh, la cosa se complicó hace aproximadamente un mes cuando tuve que depurar un tomcat como servicio, en ese entonces tuve que buscar mucho sobre el tema, afortunadamente lo encontré, el día de hoy una compañera lo necesitó así que decidí colocarlo aquí en el blog por si alguién más lo llegase a necesitar.

La solución es bastente sencilla y basta con seguir los siguientes pasos:

  • Abre una consola de MS-DOS y navega hasta la barpeta bin del tomcat, generalmente es C:\Archivos de programa\Apache Software Foundation\Tomcat6.0\bin.
  • Estando ahí, ejecuta el siguiente comando: tomcat6w.exe //ES//tomcat6. Esto es equivalente a iniciar el monitor del tomcat, y presionar en la opción Configurar.
  • Pásate a la pestaña de Java, y en la sección de Opciones de la máquina virtual (Java Options) escribe las siguientes 2 líneas:
    -Xdebug
    -Xrunjdwp:transport=dt_socket,address=127.0.0.1:1044,server=y,suspend=n

    Es muy importante que estás líneas queden en la primera posición, antes de las opciones que ya están ahí, como se puede ver en la imagen.
    el parámetro address, te dice la dirección y el puerto desde el que se conectará el eclipse, en este caso será un debug local y usaremos el puerto 1044.
  • Presiona el botón aceptar y reinicia el servicio tomcat, con esto el tomcat iniciará en modo depuración.
  • Ahora desde eclipse puedes configurar un perfil de depuración, solo tienes que dar click en el menú Run y luego en Debug Configurations.
  • Agrega una nueva configuración de aplicación remota, seleccionando la opción Remote Java Application. Asigna un nombre para tu configuración y coloca la dirección IP de la máquina en la que se ejecuta el tomcat en el campo Host de la sección Connection Properties, tambien asígna el puerto que configuraste en las opciones de inicio del tomcat, en nuestro caso era el 1044 en el campo Port de la misma sección.
  • En la pestaña Source selecciona tus proyectos mediante el botón Add, luego Java Project y selecciona los proyectos que quiera vigilar con el depurador.
  • Ahora sólo nos hace falta colocar los puntos de depuración e iniciar el depurado mediante el botón Debug.

Eso es todo por ahora, espero que les sea de mucha utilidad.

No Comments | Tags: , , , ,

Objetos implicitos de una página JSP

No se puede negar que muchos de los que día a día trabajamos con Java Enterprise Edition usamos las páginas JSP como el objeto más sencillo para manejar presentación, pero muchas veces por puro desconocimiento terminamos haciendo cosas realmente complejas para solucionar problemas que podrían haber sido más sencillos.

Algo que muchos creemos conocer pero que en la práctica casi desconocemos son los objetos implicitos que podemos usar dentro de las página JSP, más especifícamente en las expresiones, así que he decidido realizar un pequeño resumen de los objetos implicitos de las JSP y su pricipal uso:

  • pageContext: Como su nombre lo dice es el contexto de una página JSP, y es el medio por el cual podremos acceder a otros objetos como: servletContext, session, resquest y response.
  • servletContext: Representa el contexto del servlet que se generará a partir de la página JSP, este provee el acceso para los parametros de inicialización, recursos asociados con el contexto web, los llamados parametros de alcance de aplicación y algunas características de loggin.
  • session: Es el objeto que nos permite almacenar datos relacionados con el estado del usuario, comunmente conocido como sesión. basicamente nos permite accesar y asignar los parámetros relacionados a la misma.
  • request: Contiene toda la información transferida desde el cliente hasta el servidor com son: parámetros, información sobre el protocolo usado para la comunicación y información relevante a la localización o datos especificos del cliente, lenguaje usado, dirección ip de acceso, etc.
  • response: nos provee el acceso al objeto por el cual se envía la respuesta al cliente, esto nos permite por ejemplo modificar el tipo de contenido a entregar, por ejemplo si quisieramos generar un documento pdf o un comprimido de manera que el navegador pueda interpretar el tipo de respuesta. Personalmente recomiendo no tocar este objeto desde una JSP a menos que sea estrictamente necesario.
  • param: Es un conjuto de objetos del tipo clave=valor, útiles para accesar datos correspondientes a la solicitud, por ejemplo al usar param['user'], estariamos accediendo a un parámetro llamado “user” del objeto request.
  • paramValues: Igual que el anterior pero el tipo de retorno no es un objeto simple sino un array de objetos.
  • header: Permite obtener el valor de un encabezado indicando su nombre, ejemplo: header['content-type'] nos retorna el tipo de contenido que genera la página.
  • headerValues: Igual que el anterior pero su tipo de retorno es un array de objetos.
  • cookie: Nos permite obtener on objeto cookie a partir de su nombre.
  • initParam: Permite acceder a los parámetros de inicialización de los servlets, si esos que se indican en el descriptor de despliegue más conocido como web.xml.
  • pageScope: Permite acceder a una variable cuyo alcance es la página, a partir de su nombre.
  • requestScope: Permite acceder a una variable cuyo alcance es la petición, a partir de su nombre.
  • sessionScope: Permite acceder a una variable cuyo alcance es la sesión del usuario, a partir de su nombre.
  • applicationScope: Permite acceder a una variable cuyo alcance es a aplicación o contexto web, a partir de su nombre.
1 Comment | Tags: , ,

JSP Documents – JSP en formato XML

JSP Documents o documentos JSP, son páginas JSP escritas con sintaxis XML, esto nos brinda algunas ventajas sobre la forma estándar de escribir estos archivos:

  • Las páginas JSP pueden ser creadas usando cualquiera de las muchas herramientas de generación de XML, lo que además le garantizará que su documento estará bien formado.
  • Las páginas JSP pueden ser creadas usando cualquiera de las muchas herramientas de generación de XML, lo que además le garantizará que su documento estará bien formado.
  • Podría validar el contenido de la página JSP contra un descriptor DTD (definición de tipo de documento), obteniendo así los beneficios que esto nos puede traer.
  • Podría anidar y extender namespaces dentro de las páginas JSP.
    Las páginas JSP pueden ser usadas para intercambiar datos entre aplicaciones web.

Además de estos beneficios, el escribir documentos JSP reduce la complejidad mientras aumenta la flexibilidad, ya que podemos tener tanto páginas JSP como documentos JSP en nuestras aplicaciones, y por otra parte, los elementos en sintaxis XML puede ir sin ningún problema dentro de una página JSP con sintaxis estándar, lo que nos permite ir haciendo una migración gradual hacía documentos JSP.

Cómo crear un documento JSP?

Como ya dije anteriormente un documento JSP tiene que ceñirse a la sintaxis XML, y esto tiene sus restricciones, lo más básico es que cada elemento debe tener su elemento de cierre correspondiente y que sólo debemos tener un elemento raíz.  Pero esto no es algo que sea tan difícil como cualquiera pensaría, si nos ponemos a pensar, la gran mayoría de los elementos de una página JSP convencional ya cumplen con la sintaxis XML, aquellos que no cumplen, los he clasificado en la siguiente tabla, junto con su equivalencia:

Elemento

Sintaxis estándar

Sintaxis XML

Comentarios

<%– … –%>

<!– … –>

Declaraciones

<%! … %>

<jsp:declaration> … </jsp:declaratio>

Directivas

<%@ include … %>

<jsp:directive.include … />

<%@ page … %>

<jsp:directive.page … />

<%@ taglib … %>

xmlns:prefijo=”tag library URL”

Expresiones

<%= … %>

<jsp:expression> … </jsp:expression>

Scriptlets

<% … %>

<jsp:scriptlet> … </jsp:scriptlet>

Página JSP en format estándar

<%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix="c" %>
<%@ taglib uri=http://java.sun.com/jsp/jstl/functions prefix="fn" %>
  <html>
    <head><title>Hola</title></head>
    <body bgcolor="white">
      <img src="image.gif">
      <h2>Hola Documentos JSP</h2>
      <form method="get">
        <input type="text" name="username" size="25">
        <p></p>
        <input type="submit" value="Submit">
        <input type="reset" value="Reset">
      </form>
      <jsp:useBean id="userNameBean" class="hello.UserNameBean" scope="request"/>
      <jsp:setProperty name="userNameBean" property="name" value="${param.username}" />
      <c:if test="${fn:length(userNameBean.name) > 0}" >
        <%@include file="response.jsp" %>
      </c:if>
    </body>
  </html>

Documento JSP en formato XML

<html
  xmlns:c="http://java.sun.com/jsp/jstl/core"
  xmlns:fn="http://java.sun.com/jsp/jstl/functions" >
  <head><title>Hello</title></head>
  <body bgcolor="white" />
    <img src="duke.waving.gif" />
    <h2>My name is Duke. What is yours?</h2>
    <form method="get">
      <input type="text" name="username" size="25" />
      <p></p>
      <input type="submit" value="Submit" />
      <input type="reset" value="Reset" />
    </form>
    <jsp:useBean id="userNameBean" class="hello.UserNameBean" scope="request"/>
    <jsp:setProperty name="userNameBean" property="name" value="${param.username}" />
    <c:if test="${fn:length(userNameBean.name) gt 0}" >
      <jsp:directive.include="response.jsp" />
    </c:if>
  </body>
</html>
No Comments | Tags: , , ,