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
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.
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 :
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 funcionamiento de una aplicacion web JEE es algo parecido a esto:
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.
<?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
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
// 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.
cp hola.war /usr/local/tomcat/webapps/ # o la ruta que tengas tu el directorio webapps de tomcat
y aqui tienes el resultado: hola mundo espero que a ti tambien te haya salido