# J2EE
## Què és Java ?

Java és un llenguatge de programació multiplataforma i orientat a objectes.

## Construcció d'aplicacions web amb Java

Sun ofereix diverses plataformes per construir aplicacions amb Java:
* Java2 Standard Edition (J2SE): Per a desenvolupar aplicacions d'escriptori, incloent interfícies gràfiques avançades, accés a bases de dades, seguretat ...
* Java2 Enterprise Editon (J2EE): Per a desenvolupar aplicacions d'escriptori o web amb tecnologies avançades com els web services, components distribuïts, transaccions, correu electrònic, XML ...
* Java2 Micro Edition (J2ME): Per a desenvolupar aplicacions per a dispositius mòbils
Les tres plataformes tenen dos components bàsics:
* El Java Runtime Environment o JRE: És el que s'anomena màquina virtual de java. Permet executar les aplicacions escrites i compilades amb Java
* El Java Development Kit o JDK: Permet escriure i compilar aplicacions amb Java, a banda de facilitar classes amb serveis bàsics com la gestió de dispositius, l'entrada/sortida, la seguretat ...
Com indica el nom del curs, nosaltres treballarem amb Java2 Enterprise Editon (J2EE), concretament amb la tecnologia Web application, que inclou les especificacions Java Servlet i Java Server Pages (JSP).
Per a treballar amb aquesta tecnologia, utilitzarem el JDK i un servidor d'aplicacions web que implementi les especificacions Servlet i JSP. En el nostre cas, utilitzarem Tomcat.

### Aplicacions web

Una aplicació web és una aplicació a la que s'accedeix mitjançant un navegador web a través d'una xarxa de comunicacions. Aquest model té molts avantatges:
* No cal distribuir les aplicacions als clients, donat que hi accedeixen mitjançant la xarxa
* Hi ha navegadors web disponibles per a totes les plataformes, i tots parlen un idioma comú, l'HTTP
* Com que tot el codi es troba al servidor, els canvis en l'aplicació no requereixen redistribució
* Es poden controlar els accessos a les aplicacions, així com el seu ús
L'especificació oficial de les aplicacions web amb Java es donen a la Java Specification Request JSR-154 feta pel Java Comunity Process.
Els punts interessants d'aquesta especificació són:
* Components d'una aplicació web:
** Servlets
** Planes JSP
** Continguts estàtics: HTML, imatges, sò i fitxers en qualsevol altre format
** Classes d'utilitat per a la resta de components de l'aplicació
** Classes d'utilitat per al client: Applets, JavaBeans i classes en general
** Metainformació descriptiva del conjunt d'elements anteriors
* Una aplicació web té una estructura jeràrquica de directoris. El directori arrel serveix com a DocumentRoot dels fitxers que formen part de l'aplicació web
* Existeix un directori especial anomenat WEB-INF que conté fitxers relatius a l'aplicació web que no han de formar part del seu DocumentRoot, però si han de ser accesibles per als components de l'aplicació. Els continguts obligatoris d'aquest directori son:
** web.xml : És el fitxer de descripció de desplegament de l'aplicació
** classes/ : És el directori on s'ha de situar les classes d'utilitat per als components de l'aplicació
** lib/*.jar : És el directori on se situen els fitxers comprimits amb classes d'utilitat per als components de l'aplicació
Exemple:
Tota aquesta estructura de directoris es pot facilitar directament o mitjançant un fitxer WAR (Web ARchive). Aquest fitxer és el resultat de comprimir tota l'estructura de directoris amb l'algorisme ZIP.

## Instal·lació del JDK

Per a descarregar-se i instalar el JDK, caldrà anar a la plana http://java.sun.com/javase/index.jsp, entrar a l'apartat Download, descarregar la darrera versió del JDK per al nostre sistema operatiu i consultar les instruccions d'instal·lació.
Un cop instal·lat el JDK, haurem d'afegir el directori on es troben els binaris al nostre PATH:
Exemple: Si hem descomprimit el JDK al directori /usr/local/java haurem de fer

## Funcionament

Per comprovar que funciona correctament, podem executar la comanda:
i comprovar que la versió de java és la que nosaltres hem instal·lat.

# Ant
## Què és ?

Ant permet automatitzar el procés de creació de programari. Aquest procés inclou, habitualment, diverses fases:
* Creació del codi font
* Compilació
* Prova
* Desplegament
* Execució
Ant és una utilitat que ens ajuda a automatitzar tots els passos, exeptuant el primer, de forma que es puguin executar repetidament de forma predible i sense intervenció humana.

## Funcionament

Ant utilitza un fitxer de configuració per a cada projecte, és a dir, per a cada aplicació que vulguem construir.
Al fitxer de configuració es descriu l'aplicació, es defineixen una sèrie de paràmetres globals i s'especifiquen accions a realitzar sobre els fitxers que la componen. Les accions es decriuen com un conjunt de targets (objectius), cadascun dels quals està format al seu torn per un conjunt de tasques.
Exemple:

## Instal·lació

Eclipse integra per defecte una extensió per a treballar amb Ant. Si el vulguessim instalar per a provar el seu funcionament des de fòra de l'Eclipse, únicament hauriem de visitar la plana web i descarregar la última versió binària del programa, tenint en compte que és necessari disposar del JDK i olé.

## Exercici: Creació d'un fitxer Ant bàsic

Per a utilitzar un programa d'automatització del procés de construcció d'una aplicació, és convenient decidir com organitzarem el codi en directoris. En aquest exercici suposarem que volem construir una aplicació Java sencilla consistent en una classe anomenada HolaMon. L'estructura de directoris serà la següent:
* src/: Ubicació del codi font
* build/: Ubicació de l'aplicació en el seu format final, per lliurar-lo públicament. Aquest directori contindrà:
** Un subdirectori anomenat classes/ on situarem totes les classes compilades
** Un subdirectori anomenat jar/ on situarem un fitxer jar amb totes les classes comprimides
* Creeu el directori build/, els seus subdirectoris classes/ i jar/ i el directori src/ i entreu en aquest últim.
* Obriu un editor de text i creeu un fitxer anomenat HolaMon.java
* Fiqueu contingut que podeu trobar més avall
* Proveu de compilar-lo amb la comanda javac, ubicant el fitxer .class resultant al directori build/classes: javac -d ../build/classes/ HolaMon.java
* Aneu al directori build/classes/ i proveu d'executar-lo amb la comanda java: java HolaMon
Codi de la classe HolaMon:
Ara anem a construir el fitxer de configuració d'Ant per automatitzar aquest procés.
Fitxer de configuració d'Ant del projecte HolaMon:
* Creeu un fitxer anomenat build.xml a l'arrel del projecte
* Copieu el contingut presentat
* Executeu la comanda ant

# CVS
## Què és

El control de versions és una eina imprescindible per a crear aplicacions, encara més si la creació es fa de forma col·laborativa.
Una eina de control de versions guarda un registre històric de tots els canvis fets en un fitxer i permet recuperar-ne versions antigues per tal de poder desfer aquests canvis.

## Funcionament

El funcionament es basa en la creació d'un repositori centralitzat de codi font on es van afegint fitxers i enviant els canvis.
Diversos programadors es poden descarregar el codi font del repositori i treballar localment, enviant els canvis fets un cop acaben de treballar amb el codi. Si es produeixen canvis en el mateix fitxer de forma simultània, l'últim a enviar els canvis rebrà un avís del conflicte, per tal que el pugui solucionar.
En aquest curs utilitzarem CVS des de l'Eclipse, que incorpora per defecte una extensió per a treballar-hi de forma molt intuïtiva.
Si vulguéssim utilitzar CVS per línia de comanda, hauriem de seguir diversos passos:
* Crear un repositori: Utilitzant la comanda cvs init cvs -d /tmp/cvsroot init
* Afegir nous fitxers al repositori: Situant-se al directori on es troben els fitxers que volem afegir, s'utilitza la comanda cvs import cvs -d /tmp/cvsroot import -m"Fitxers inicials" ProjecteHolaMon david inicial D'aquesta forma hem creat un projecte anomenat ProjecteHolaMon
* Treballar amb el projecte: Per començar a treballar al projecte situat al repositori, ens situem en un directori adequat per a descarregar els fitxers i utilitzem la comanda cvs co cvs -d /tmp/cvsroot co ProjecteHolaMon
* Enviar canvis: Un cop hem treballat amb el codi, enviem els canvis al repositori amb la comanda cvs cicvs -d /tmp/cvsroot/ ci -m"Primer enviament"

## Instal·lació

Per instalar CVS, podem trobar binaris precompilats a la seva plana, el codi font per a compilar o paquets per a diferents versions de linux.

## Més informació

Podeu trobar un llibre lliure molt complert sobre CVS a la web http://cvsbook.red-bean.com/

# Mysql

Mysql és un gestor de bases de dades relacionals lliure. Ens permet crear bases de dades i facilitar-hi l'accés per xarxa.

## Instal·lació

Per instalar Mysql haurem de visitar la seva web i anar a l'apartat Downloads, on podrem descarregar la versió més indicada per al nostre sistema operatiu.

## Arrancada i parada del servidor

El servidor de bases de dades de mysql s'anomena mysqld. En les màquines utilitzades pel curs (RedHat 9), podeu arrencar-lo entrant com a usuari root i executant la següent comanda:
Per aturar-lo, haurem d'executar:

## Creació d'una base de dades

Per crear una base de dades, utilitzarem la comanda mysqladmin. Si volem crear la base de dades prova executarem la següent comanda:
Si obtenim l'error
vol dir que l'usuari root ha de facilitar un password per a connectar al servidor, de forma que haurem d'utilitzar l'opció -p

## Gestió d'usuaris

Un cop creada la base de dades, hi tindrem accés com a root, però també podem concedir l'accés a un altre usuari. Aquesta opció està indicada per a no deixar accedir lliurement a la base de dades com a root sense password o per no haver de ficar el password de root a les aplicacions que connecten a la base de dades.
Per donar permisos a usuaris haurem d'accedir a la base de dades del sistema , anomenada mysql com a root:
Un cop a dins, si volem donar tots els permisos sobre la base de dades prova a l'usuari pepe amb la contrasenya lomeupass haurem d'executar la comanda:

# Apache
## Què és ?

Apache és un servidor de planes web. Per a ser més estrictes, és una aplicació que actua com a servidor del protocol HTTP, rebent peticions i retornant les planes HTML o fitxers resultants o informant de possibles errors.

## HTTP, HTML, formularis i CGI's

HTTP és un protocol de comunicacions basat en TCP. Dit d'una altra manera, és llenguatge que utilitzen per a comunicar-se els navegadors web amb els servidors web per a obtenir recursos. Aquests recursos poden ser qualsevol tipus de fitxer, tot i que en general s'utilitzen fitxers HTML.
HTTP és un protocol sense estat, de forma que per a cada petició que un navegador vulgui enviar al servidor, haurà d'establir una nova connexió, i el servidor no guarda cap informació dels clients entre connexió i connexió.
Els fitxers HTML són fitxers de text amb un format de marques que permeten inserir i fer enllaços a altres fitxers. Quan un navegador web mostra un fitxer HTML, el que fa realment és:
* Pintar el contingut textual del fitxer HTML
* Sol·licitar al servidor cadascun dels fitxers inserits dins de l'HTML, el reb, el processa i el pinta
* Pintar els enllaços a altres documents de forma que es reconeguin i es pugi premer sobre ells per a saltar al document enllaçat
Una funcionalitat molt interessant dels fitxers HTML i el protocol HTTP son els formularis, que permeten enviar dades del client al servidor. Els formularis estan composts d'una sèrie de camps d'entrada de dades i d'uns botons d'acció (enviar, esborrar ...).
A l'altra banda d'un formulari ha d'haver una aplicació de tipus Common Gateway Interface o CGI, que reculli les dades, les processi i generi una resposta.

## Instal·lació

Les màquines que utilitzarem al curs tenen Apache instal·lat. En cas de no disposar d'ell, únicament hauriem de visitar la seva plana web i baixar la darrera versió disponible per al nostre sistema operatiu, seguint les instruccions d'instal·lació.

## Configuració

Apache té un fitxer de configuració principal i un lloc per a poder ubicar fitxers de configuració que s'afegeixen al principal. El fitxer principal s'anomena httpd.conf es troba al directori conf, mentre que la resta reben qualsevol nom amb l'extensió .conf i se situen dins del directori conf.d.
Hi ha moltes opcions de configuració, però les més importants són:
* Listen: Indica el port TCP en el que el servidor reb peticions, habitualment el 80. Exemple: Listen 80
* ServerName: Dona un nom al servidor. Exemple: ServerName www.example.com
* DocumentRoot: Indica quin és el directori on se situen els fitxers a servir. Exemple: DocumentRoot "/var/www/html"
* Alias: Permet donar un nom alternatiu a un directori. Exemple: Alias /user "/home/user/"
Una característica molt interessant és la possibilitat de fer virtual hosts o servidors virtuals. D'aquesta forma, un mateix servidor pot respondre a peticions que es facin a diferents noms de màquina.
Exemple: Un mateix servidor que respon a www.udl.cat i a cv.udl.cat
Una altra característica interessant és la redirecció de peticions, que permet redireccionar les peticions a una o més planes cap a altres palnes o servidors. El resultat d'aquesta redirecció és que el servidor informa al client de que la plana es troba en un altre lloc i el client sol·licita la plana a aquest nou lloc.
Exemple: Les peticions a /usuaris es redireccionen a http://usuaris.udl.cat/
Finalment, destacarem la possibilitat de fer de Proxy o servidor intermediari. És un cas similar a la redirecció, la diferència és que en aquest cas és el mateix servidor qui sol·licita el recurs a la seva ubicació real i el retorna al client, que no detecta que el recurs estava realment en un altre lloc.
Exemple: Les peticions a /administracio es redireccionen a http://cv.udl.cat:8080

# Tomcat
## Què és

Tomcat és un servidor d'aplicacions web.

## Instal·lació

La instal·lació de Tomcat és sencilla. Únicament cal descarregar la darrera versió de la seva web i descomprimir-la al directori on vulguem ubicar-lo. Un cop fet, ja podrem treballar amb ell. Quan fem la descompressió en un sistema Linux hem de tenir en compte que els fitxers del directori bin, que són els executables, no estan en format executable, de forma que hem d'executar les següents comandes:
Si hem descomprimit tomcat a /usr/local/tomcat

## Funcionament

Un cop instal·lat, el podem engegar i parar a través dels fitxers startup.sh i shutdown.sh situats al directori bin. Per defecte, el servidor funcionarà al port 8080. Es poden modificar les opcions de configuració al fitxer server.xml situat al directori conf/.
Per a afegir aplicacions web, únicament haurem de copiar tota l'estructura de directoris o el fitxer WAR al directori webapps i engegar-lo. Veurem que es pot accedir a l'aplicació a la URL configurada.

# Eclipse
## Què és ?

Eclipse és un entorn integrat de desenvolupament, és a dir, un conjunt d'utilitats per a crear programari (editor de codi font, compilador, depurador) agrupades en un mateix entorn. Eclipse està fet en Java i pensat principalment per a crear aplicacions en Java, tot i que també es pot utilitzar per a crear aplicacions en altres llenguatges.
A banda de les utilitats típiques de qualsevol IDE, Eclipse té funcionalitats molt interessants com:
* Integració amb Ant
* Integració amb CVS
* Entensions de creació de aplicacions J2EE
* Extensió d'integració amb servidors d'aplicacions (Tomcat, BEA ...)
* Extensions de treball amb bases de dades

## Instal·lació

Instalar Eclipse és tant sencill com:
* Descarregar la versió més adequada al sistema operatiu sobre el qual volem treballar
* Descomprimir sobre el directori on vulguem que resideixi
* Executar: Utilitzant la comanda eclipse que es troba a l'arrel del directori que conté els fitxers d'eclipse

## Funcionament

Quan executem Eclipse, aquest demana que seleccionem quin Workspace (Espai de treball) volem utilitzar. Un Workspace no és més que un directori del sistema de fitxers on es guardaran tots els arxius de tots els projectes que es vagin creant dins d'aquest Workspace.
Un cop s'obre definitivament, ens mostra el que s'anomena una Perspective (Perspectiva). Una Perspective és una forma per defecte de presentar diverses Views (Vistes). Les Views són els elements gràfics en forma de finestra que ens permeten dur a terme accions.
A banda de les Perspectives i Views per defecte d'Eclipse, podem instalar plugins (connectors) que n'afegeixen de noves. En el nostre cas, utilitzarem un Eclipse amb el plugin Web Tools Platform, que afegeix perspectives per crear aplicacions Web i aplicacions J2EE i vistes per a crear Servlets i JSP, sincronitzar amb servidors d'aplicacions, connectar i gestionar bases de dades ...
Per tal de poder treballar en una aplicació, hem de crear un Project (Projecte). Un Project agrupa tots els recursos d'una aplicació i té associada una configuració concreta sobre els elements que s'utilitzen per a crear-la (compilador, variables d'entorn, formatadors de codi ...).

### Exercici: Creació d'un projecte Java

Per a crear un projecte Java, entrarem al menú File, seleccionarem l'opció New i seguidament Project. Al despeglable que ens apareix escollirem l'opció Java Project. Un cop seleccionada aquesta opció, ens demana anomenar el projecte i seleccionar quina JRE utilitzar.
Un cop creat el projecte, Eclipse ens mostra la perspectiva de projecte Java. Aquesta perspectiva inclou les vistes Package explorer a l'esquerra, Outline a la dreta, diverses vistes informatives a la part inferior i una vista central amb un editor de fitxers.

### Exercici: Creació del projecte HolaMon amb Eclipse

* Crear un projecte Java
* Prèmer el botò dret del ratolí sobre el nom del projecte i seleccionar Properties
* Ficar a Default output folder el directori build/classes
* Un cop creat el projecte, prèmer el botò dret del ratolí sobre el nom del projecte i seleccionar Import
* Seleccionar File System
* Escollir el directori on es troben els fitxers del projecte HolaMon creat amb anterioritat
* Seleccionar únicament el fitxer build.xml i el directori src/
* Executar el fitxer build.xml com a Ant buildfile

### Exercici: Ús de CVS des d'Eclipse

Eclipse disposa per defecte d'una perspectiva anomenada CVS Repository Exploring que permet afegir i explorar nous repositoris CVS. D'altra banda, des de qualsevol projecte creat amb Eclipse es pot accedir a l'opció Team, per tal de afegir el projecte a un repositori CVS i fer-hi enviaments, actualitzacions i altres operacions.
Per explorar el repositori CVS que hem creat amb anterioritat:
* Anar a la perspectiva CVS Repository exploring
* Amb el botò dret seleccionar l'opció New i Repository location
* Ficar les dades del repositori creat
* Utilitzar el nom d'usuari i contrasenya facilitats al curs
* A connection type ficar extssh
* Prèmer Finish
Per afegir un projecte a un repositori:
* Prèmer el botò dret del ratolí sobre el nom del projecte
* Seleccionar l'opció Team i Share project
* Si hem creat algun repositori des de la perspectiva CVS Repository exploring ens apareixerà per poder ser seleccionat. En cas contrari únicament tindrem l'opció de crear un nou repositori
* Haurem de seleccionar els fitxers que volem incloure al repositori

### Exercici: Ús de MySql des d'Eclipse

Per utlitzar MySql des d'Eclipse, farem ús de la vista de Data anomenada Database explorer. Primer haurem de copiar el driver JDBC de mysql facilitat amb el CD del curs a un directori del nostre sistema de fitxers.
Els passos a seguir seran:
* Crear un nou projecte
* Premem el botò dret del ratolí sobre el nom del projecte i seleccionem New i Other
* Anem a la carpeta Data i seleccionem SQL Scrapbook Page
* L'anomenem i premem Finish
* A la part inferior de la pantalla s'obre la vista Database exlporer, amb una carpeta anomenada Connections
* Premem el botò dret sobre aquesta carpeta i seleccionem New Connection
* A Select a database manager seleccionem Mysql i 4.1
* A database fiquem el nom de la base de dades que vam crear amb anterioritat
* A JDBC driver class fiquem com.mysql.jdbc.Driver
* A class location ficarem el lloc on hem copiat el driver de JDBC de mysql
* A connection URL ficarem jdbc:mysql://localhost/nomBD on nomBD serà el nom de la base de dades
* A userid i password ficarem les dades de l'usuari facilitat al curs
* Un cop creada la connexió, veurem que podem consultar la informació de la base de dades a la vista Database explorer
* Ara escriurem alguna consulta SQL a la part central de la pantalla i amb el botò dret seleccionarem Run SQL
* Seleccionarem la connexió creada

### Exercici: Integració de Tomcat amb Eclipse

Per a veure com integrem Tomcat amb Eclipse, únicament cal visitar la perspectiva J2EE i utilitzar la vista Servers que apareix a la part inferior de la pantalla.
* Amb el botò dret del ratolí seleccionem l'opció New i Server
* Despleguem l'entrada Apache i allí seleccionem Tomcat v5.5 Server
* Premem Next
* Escollim el directori on està instal·lat Tomcat
* Ja tenim el servidor integrat amb Eclipse