Memórias de un aprendiz de Java EE

Java EE no es más que Java normalito y corriente. Entonces… ¿Que es eso de Enterprise Edition? Java EE es java orientado a las aplicaciones web. Hombre, es algo pesado y complicado como todo en java, pero parece ser que están bastante bien pensado.

Estas memorias hacen referencia a un curso de Kernel Panik. Del cual la primera sesión es esta Enlace 1 y tambien en esta replica

Introducción y primeros pasos

Si te has leido el pdf de arriba ( cosa que te recomiendo ) habrás llegado a crear una aplicación web básica.

Una aplicación JEE está definida en 4 capas.

  • Cliente : Navegador
  • Web : Es la capa que se encarga de gestionar las peticiones del cliente
  • Lógica : Todas las operaciones, procesos y cosas que se hacen para obtener una respuesta.
  • Persistencia : Todo lo relacionado con el almacenamiento de los datos ( Bases de datos, XML, etc)

Empaquetamiento y componentes

Una aplicación JEE se empaqueta en un archivo .ear que no es nada mas que un jar normal y corriente.

Ha de contener obligatoriamente una carpeta META-INF y un fichero application.xml donde estará toda la meta-información, como su própio nombre indica.

Puede contener :

  • Módules web: ficheros .war que contienen la capa web
  • Módulos EJB: que contiene ficheros .jar.
  • Módulos de adaptadores de recursos

A la práctica casi todo se reduce a un módulo war y poca cosa mas. Y como que vamos a empezar por ahi vamos a ver la estructura formal de un módulo web (.war)

/Raiz
/Raiz/WEB-INF
/Raiz/WEB-INF
/Raiz/WEB-INF/lib
/Raiz/WEB-INF/classes
/Raiz/WEB-INF/tags
  • El directorio Raiz contiene todos los archivos estaticos (html, gráficos, jsp, y lo que te de la gana)
  • El directorio WEB-INF DEBE contener un archivo web.xml que es el que contendrá la meta-información de el archivo war.
  • El directorio WEB-INF/lib contiene las librerias de código .jar
  • El directorio WEB-INF/classes contendrá las clases compiladas
  • El directorio WEB-INF/lib y las etiquetas personalizadas

Funcionamiento básico y web.xml

El funcionamiento de una aplicacion web JEE es algo parecido a esto:

  1. El cliente hace una petición al servidor
  2. El servidor recive una petición en forma de una url entonces mira en el archivo web.xml y decide que hacer. Si sirve una página web estática, (un html, jsp, un grafico o lo que sea) o bien si ha de pasar esa petición a un servlet
  3. El servlet recive una petición, la procesa, hace los calculos que deba hacer y devuelve una respuesta en forma de texto plano que el servidor enviará al cliente.

Todo esto se puede complicar tanto como se quiera, pero de momento eso ya es suficiente. Imagina al servidor como un bibliotecario tonto que cuando llega un cliente con una petición mira en la guia web.xml que es lo que tiene que hacer, si pedirle el carnet de la biblioteca, si ir a por el libro / revista directamente, etc. Del mismo modo antes de entregarle el resultado de la petición vuelve a mirar en la guia la forma en la que tiene que entregar esa petición.

Ejemplo de web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <!-- le decimos al contenedor de aplicaciones que hay un servlet -->
	<servlet>
		<description>Este es un Servlet muy bonito</description>
		<servlet-name>NombreDelServlet</servlet-name>
		<servlet-class>paquete.del.servlet.NombreDelServlet</servlet-class>
	</servlet>
      <!-- y que cuando le llegue una petición con una url como /MiServlet que la rediriga al servlet  -->
	<servlet-mapping>
		<servlet-name>MiServlet</servlet-name>
		<url-pattern>/MiServlet</url-pattern>
	</servlet-mapping>
      <!-- yeppa que le podemos definir también filtros --> 
	<filter>
              <!-- que no son otra cosa que clases -->
		<filter-name>filtro</filter-name>
		<filter-class>filtro</filter-class>
	</filter>
	<!-- y decirle cuando deben aplicarse,  -->
	<filter-mapping>
		<filter-name>filtro</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
      <!-- incluso se le puede decir que la página de bienvenida es una en concreto -->
      <!-- a efectos prácticso el tradicional index.html -->
	<welcome-file-list>
              <!-- ¡pero se le puede dar una lista! si no encuentra la primera busca la segunda -->
      	<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

Y si quieres mas pues miras en el xsd para que veas todo lo que puedes poner en el web-xml

MI PRIMER SERVLET

Lo primero es lo primero.

1. Crear la estructura de directorios.

mkdir holaMundo
mkdir aplicacion
mkdir codigo
mkdir holaMundo
mkdir holaMundo/aplicacion/WEB-INF
mkdir holaMundo/aplicacion/WEB-INF/lib
mkdir holaMundo/aplicacion/WEB-INF/classes
mkdir holaMundo/aplicacion/WEB-INF/tags

Vamos a crear una clase que se va a llamar org.kp.HolaMundo.java

  1. Por limpieza de no tener el codigo y las clases compiladas todo junto vamos a crear todas las clases dentro del directorio codigo creado a tal efecto.
// HolaMundo.java
package org.kp;  // el paquete al que va a pertenecer
import java.io.IOException;  
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;  // hay que importar los sevletes para poder heredar de ellos

public class HolaMundo extends HttpServlet {
      protected void doGet(HttpServletRequest req, HttpServletResponse resp)
              throws ServletException, IOException {
       resp.getOutputStream().println("<h1>Hola kernel</h1>");
      }
}

Y como que esta clase forma parte del paquete org.kp pues la guardaremos en: /codigo/org/kp/HolaMundo.java

2. Ahora ya podemos compilarla. Ten en cuenta poner el cp (CLASSPATH) de donde están los imports de servlet. Otra vez a lo bruto.. (como root find / -name servlet-api-2.4.jar )

javac -cp /usr/lib/jvm/lib/servlet-api-2.4.jar  -d holaMundo/aplicacion/WEB-INF/classes codigo/org/kp/HolaMundo.java

3. Hagamos el plano de la aplicación…

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"  version="2.5"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<servlet>
		<servlet-name>HolaMundo</servlet-name>
		<servlet-class>org.kp.HolaMundo</servlet-class>	
	</servlet>
	<servlet-mapping>
 		<servlet-name>HolaMundo</servlet-name>
 		<url-pattern>/hola</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>hola</welcome-file>
	</welcome-file-list>
</web-app>

4. Ahora tenemos que empaquetar la cosa.

Desde dentro del directorio aplicacion :

jar cvf hola.war .  # fijate que hay un punto para indicar "todo"

Y se ha creado un archivo .war con todo lo que había en el directorio holaMundo llamado hola.war.

Ya lo tenemos casi todo. Ahora sólo hay que “desplegarlo” en el servidor de aplicaciones. Para nosotros el tomcat. Y para ello hay varias alternativas.

  • Si estas trabajando en la misma máquina donde tienes el tomcat entonces simplemente lo deberás colocar el el directorio webapps del tomcat

cp hola.war /usr/local/tomcat/webapps/ # o la ruta que tengas tu el directorio webapps de tomcat

  • Si estas trabajando en una máquina y el tomcat está en otra entonces:

  • Una vez en la pantalla de administracion pones el war a subir.

  • Una vez subido te aparecerá en la lista de aplicaciones tan sólo tienes que picar sobre el y listo.

y aqui tienes el resultado: hola mundo espero que a ti tambien te haya salido

 
jee/1.txt · Última modificación: 2008/05/13 10:00 (editor externo)
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki