Servlets
Un Servlet és una llibreria per crear aplicacions Web amb llenguatge Java. Solen utilitzar Tomcat per desplegar el projecte.
Contingut
Intro
Referències:
- Primer exemple (i més): http://www.tutorialspoint.com/servlets/servlets-first-example.htm
- Tutorial Tomcat+Eclipse+Servlets: http://www.coreservlets.com/Apache-Tomcat-Tutorial/
Quick Reference per Ubuntu 14.04:
- URL = http://myhost:8080
- CATALINA_HOME = /usr/share/tomcat7
- CATALINA_BASE = /var/lib/tomcat7: aquí teniu la carpeta
webapps
amb les aplicacions per desplegar - /etc/default/tomcat7 : conf inicial JAVA_OPTS (memòria)
- /etc/tomcat7 : conf, users, etc.
- LOGS = /var/log/tomcat7
Setup
Els diferents components que necessitarem seran:
- JDK : Java Development Kit, inclou eines (compiladors, màquines virtuals java, etc.) i les llibreries per desenvolupar.
- Eclipse: IDE per a Java disponible en moltes plataformes.
- Tomcat: el servidor d'aplicacions per a Java.
De moment només compilarem des de la línia de comandes. "A pelo".
Ens caldrà ajustar algunes llibreries perquè estiguin disponibles per al compilador:
$ echo "export CLASSPATH=/usr/share/tomcat7/lib/*" >> ~/.profile
...i fem logout i login per activar aquests canvis. O, si no volem sortir, podem fer:
$ source ~/.bashrc
Compilant un Servlet
IMPORTANT: de moment NO cal fer res com a sudo. Tot això (desenvolupar, compilar) està disponible per a tots els usuaris.
Agafeu el primer exemple HelloWorld del tutorial i el poseu en un arxiu HelloWorld.java en la vostra carpeta de desenvolupament.
Compilem:
$ javac HelloWorld.java
...i es crearà l'arxiu .class , que és el que necessitem per fer el desplegament.
Desplegament d'un Servlet
Anem a posar la nostra app en producció al Tomcat.
- Crear carpeta d'aplicació a /var/lib/tomcat7/webapps, per exemple test1.
- Crear carpeta WEB-INF dins de test1
- Crear carpeta classes dins de WEB-INF
- Crear arxiu web.xml dins de WEB-INF amb els continguts de més avall.
- Copiar l'arxiu compliat HelloWorld.class al directori classes.
- Comprovem que ens apareix la nova app (test1) al panell de control http://localhost:8080/manager on podrem engegar-la i parar-la
- Ja podem visitar el nostre servlet a http://localhost:8080/test1/helloworld
L'estructura d'arxius ens ha de quedar així:
webapps ├── ROOT │ ├── index.html │ └── META-INF │ └── context.xml └── test1 └── WEB-INF ├── classes │ └── HelloWorld.class └── web.xml
És important saber que tenim disponible la carpeta test1 per posar-hi contingut estàtic (imatges, HTML) o JSPs si ho desitgem.
Arxiu web.xml
En aquest arxiu li passem la informació que necessita Tomcat per engegar el servlet amb la ruta adequada, pel nostre cas /test1/helloworld:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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"
version="2.4">
<display-name>Hello, World Application</display-name>
<description>
This is a simple web application with a source code organization
based on the recommendations of the Application Developer's Guide.
</description>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
</web-app>
Notes addicionals
Fully Qualified Class Names
Si fem desenvolupaments més complexes ens convé fer una estructura d'arxius més formal. Particularment, si volem fully qualified class names com per exemple com.mypackage.MyClass1 ens caldrà fer una estructura d'arxius així:
. ├── classes │ └── com │ └── mypackage │ └── MyClass1.class └── src └── com └── mypackage └── MyClass1.java
IDEs
Cal considerar la idoneïtat d'utilitzar els IDEs pel desenvolupament, ja que ens pot facilitar molt la feina d'organització del codi.
- Eclipse
- NetBeans
Arxius war
Podem fer deploys amb arxius WAR (Web server ARchive), a mode de ZIP que podem deixar a l'arrel del directori webapps i que Tomcat ens descomprimirà i desplegarà automàticament.
Un WAR file no deixa de ser un JAR file (un ZIP de Java o Java ARchive), només que pensat per deployment.