Está en la página 1de 61

!

dyb - Mayo 2011






L[emp|o de rogramac|n con Iava LL

Una 1|enda Cn||ne












!uan ulez-?anguas 8arber
rogramacln con !ava LL 6
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 2

Ind|ce
1.- kLM8ULC 3
2.- IN1kCDUCCICN 4
3.- DISLC DLL SIS1LMA 10
3.1.- nLkkAMILN1AS U1ILI2ADAS 10
3.2.- A1kCN DL DISLC MVC 11
3.3.- DISLC DL LA LkSIS1LNCIA. A1kCN DAC 12
3.4.- DISLC DL IIL1kCS 14
3.S.- ACCLSC A LCS MLCANISMCS DL LkSIS1LNCIA 14
2.6.- SLGUkIDAD DL LA ALICACICN 14
4.- MCDLLCS DL DA1CS USADCS 16
4.1.- MCDLLC DL DA1CS DL kCDUC1C 16
4.2.- MCDLLC DL DA1CS AkA LL USUAkIC 17
4.3.- MCDLLC DL DA1CS AkA LL LA CLS1A DL LA CCMkA 18
4.4.- MCDLLC DL DA1CS AkA LCS CCMLN1AkICS 19
S.- CCNIIGUkACICN DL LA ALICACICN 20
S.1.- CCNIIGUkACICN DL LkSIS1LNCIA LN MCDC IICnLkC 20
S.2.- CCNIIGUkACICN DL LkSIS1LNCIA LN MCDC DL 8ASLS DL DA1CS 22
S.3.- CCNIIGUkACICNLS MISCLLNLAS SC8kL LA ALICACICN 2S
S.4.- CCNIIGUkACICN DLL SLkVIDCk SM1 AkA LL LNVIC DL LMAILS 26
S.S.- CCNIIGUkACICN DL LAS LAN1ILLAS AkA LL LNVIC DL LMAILS 28
S.6.- LI8kLkIAS NLCLSAkIAS 29
6.- IUNCICNAMILN1C LN DL1ALLL DLL SIS1LMA 31
6.1.- LS1kUC1UkA DL LA ALICACICN 31
6.2.- DIAGkAMAS DL NAVLGACICN DL IIL1kCS 36
6.3.- DIAGkAMAS DL NAVLGACICN DL LIS1LNLkS 38
6.4.- ILUIC DL NAVLGACICN DL LAS CLkACICNLS 08LICAS 39
6.S.- ILUIC DL NAVLGACICN AkA CLkACICNLS DL USUAkIC kLGIS1kADC 46
6.6.- ILUIC DL NAVLGACICN DL LAS CLkACICNLS DLL ADMINIS1kADCk 49
6.7.- SC8kL LL IAVASCkI1 UL SL nA USADC SS
7.- SIS1LMA DL CCN1kCL DL VLkSICNLS S8
8.- ASLC1CS A MLICkAk 61

!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 3

1.- rembu|o
Pe sldo slempre un apaslonado de la lnformLlca, y desde que comence mls
esLudlos de lngenlerla lnformLlca esLa aflcln por la maLerla ha ldo creclendo
progreslvamenLe.
AcLualmenLe he flnallzado mls esLudlos de lngenlerla 1ecnlca en lnformLlca de
SlsLemas, los que conLlnuare el prxlmo ano para prosegulr con la lngenlerla Superlor.
Ll proyecLo que aqul les presenLo vlene a ser una aslgnaLura compleLa,
aslgnaLura dedlcada a la programacln de apllcaclones web, y esLa en concreLo fue
lmparLlda en !ava.
Cogl desde el prlnclplo con mucho nlmo esLa aslgnaLura y poco a poco me fue
gusLando ms. Le ful dedlcando muchas horas a esLe proyecLo hasLa llegar a consegulr
un e[emplo lo ms reallsLa poslble de lo que pudlera ser una Llenda onllne.
Pe dlsfruLado muchlslmo reallzando esLe proyecLo no solo porque se LraLaba de
algo nuevo slno porque he adqulrldo muchos e lnLeresanLes conoclmlenLos sobre el
lengua[e, sl blen es clerLo que me queda mucho por aprender de esLe lengua[e he de
reconocer que esLo me ha ayudado a dar un paso lmporLanLe en esLe conLlnuo
aprendlza[e.
una vez compleLado el curso pense que ya que habla dedlcado mucho Llempo a
esLe proyecLo podrla Lamblen llegar a ms personas y ser de ayuda, por lo que he
seguldo Lraba[ando en el mlsmo para publlcarlo con una documenLacln compleLa.
no puedo Lermlnar esLe LexLo sln agradecer a Abraham CLero CulnLana el
lnLeres que ha desperLado en ml con esLe proyecLo y los nlmos que me ha dado para
conLlnuar con ello hasLa obLener un proyecLo perfecclonado para su publlcacln.
1amblen le Lengo que agradecer la ayuda que me ha presLado de manera LoLalmenLe
deslnLeresada para la publlcacln del mlsmo.
Sln ms me despldo y espero que os sea de ayuda esLe documenLo asl como el
proyecLo en sl.
ueden ponerse en conLacLo conmlgo en esLa dlreccln de correo elecLrnlco
sln problema alguno: [dyb04[dyb[gmall.com

!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 4

2.- Introducc|n
Ln esLe proyecLo se ha LraLado de llevar a cabo el dlseno de una apllcacln web
que cumpla con las funclonabllldades de una Llenda onllne compleLa.
La apllcacln debe Lener una lnLerfaz de admlnlsLracln la cual nos permlLa una
admlnlsLracln compleLa de los producLos (anadlr, modlflcar, borrar y consulLar),
Lamblen es poslble la busqueda de producLos.

!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 3


ara acceder a la zona de admlnlsLracln es necesarlo esLar auLenLlflcado, la
auLenLlflcacln se reallza medlanLe un correo elecLrnlco y una conLrasena.

1amblen es poslble que los usuarlos se reglsLren en la apllcacln con la venLa[a
de que no Lendrn que lnLroduclr los daLos compleLos para reallzar la compra.
1amblen podrn consulLar su hlsLorlal de compras y por supuesLo modlflcar sus daLos.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 6


La parLe prlnclpal de la apllcacln es el llsLado de producLos donde el usuarlos
puede anadlrlos a la cesLa de la compra. Ll usuarlo podr consulLar el esLado de su
carrlLo en Lodo momenLo y podr edlLar la canLldad de cada producLo segun desee.

!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 7


Cuando el usuarlo qulera dar por Lermlnada su compra Lendr que rellenar el
formularlo con los daLos de la compra en el caso de no esLar reglsLrado. Ln caso
conLrarlo lo unlco que Lendr que hacer es selecclonar la forma de pago.

osLerlormenLe un correo elecLrnlco ser envlado al usuarlo con los deLalles
de la compra.
La apllcacln Llene oLras funclonabllldades exLra a parLe de las bslcas de una
Llenda onllne.
Ls poslble anadlr comenLarlos a los producLos slendo un usuarlo reglsLrado.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 8


Ls poslble Lamblen aslgnar lmgenes a los producLos, el slsLema esL capaclLado
para envlar emalls a los usuarlos cuando se reglsLran, cuando reallzan una compra, y
Lamblen Llenen la opcln de recuperar la conLrasena en caso de perdlda, el slsLema
genera una nueva conLrasena y es envlada por correo elecLrnlco al usuarlo.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 9

CuenLa con la opcln de usar perslsLencla conLra bases de daLos asl como
perslsLencla conLra flcheros en formaLo blnarlo de ob[eLos serlallzados.
Como ayuda a los admlnlsLradores cuenLa con un reglsLro de peLlclones
reallzadas al servldor que son guardados en una base de daLos o en flchero (segun sea
el meLodo de perslsLencla), esLe reglsLro ayudar a reallzar un segulmlenLo deLallado
para los admlnlsLradores.
Ls poslble la vlsuallzacln de esLadlsLlcas de venLas, esLa opcln esLar
dlsponlble para aquellos usuarlos que sean admlnlsLradores de la Llenda.

!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 10

3.- D|seo de| s|stema
3.1.- nerram|entas ut|||zadas
Como lengua[e de programacln para la apllcacln en el servldor se ha usado
!ava LL 6, el servldor de apllcaclones usado es Classllsh Server 3.1
Como enLorno de desarrollo se ha usado neL8eans 7.0.
ara la presenLacln de cara al usuarlo se han empleado pglnas !S para la
generacln del cdlgo P1ML que flnalmenLe ser mosLrado al usuarlo medlanLe el
navegador web que ser el que renderlce dlcho cdlgo.
Craclas a esLe dlseno se podrla declr que el Lraba[o que hemos Lenldo que
dedlcar a la apllcacln del cllenLe es lnslgnlflcanLe debldo a que no hemos Lenldo que
encargarnos nosoLros del desarrollo del navegador, unlcamenLe de generar el cdlgo
que esLe renderlzar.
LsLa es la prlnclpal venLa[a de usar esLe modelo de dlseno unldo a que se esLn
usando Lecnologlas esLandarlzadas.

!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 11

3.2.- atrn de d|seo MVC
ara el desarrollo del slsLema se ha usado un paLrn de dlseno en el cual hay
claramenLe dlferencladas Lres parLes. or una parLe nos podemos enconLrar con los
modelos de daLos que en nuesLro caso serlan los ob[eLos [ava que neceslLamos para
represenLar la lnformacln de nuesLra apllcacln, la cual esLarla almacenada en una
base de daLos, en flcheros o en cualquler oLro modo de perslsLencla.
or oLra parLe Lenemos las vlsLas que serlan las pglnas que se encargan de la
presenLacln al usuarlo. LsLas pglnas esLarlan formadas por las pglnas esLLlcas
P1ML y las pglnas dlnmlcas !S.
or ulLlmo Lendrlamos la parLe del conLrolador que serla la encargada de
reallzar las acclones necesarlas para nuesLro modelo de negoclo. LsLa parLe reallzar
unas acclones y de manera general posLerlormenLe decldlr la vlsLa que se desea
presenLar al usuarlo, como ya se ha dlcho esLa parLe se encarga de las operaclones
necesarlas por el modelo de negoclo y por lo LanLo ser esLa parLe la que reclba las
acclones por parLe del usuarlo.


Usuario
if(conn
SELEC
WHERE
print

Servlet Java
EE
VB
Java
HTML
VB
JSP
Modelos de vista
Base de datos
Objetos Java
Controlador
Acciones del
usuario
Actualizar
modelo
Seleccionar
vista
Consultas al
modelo
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 12

3.3.- D|seo de |a pers|stenc|a. atrn DAC
A conLlnuacln usaremos el paLrn de dlseno que se ha usado para el
mecanlsmo de perslsLencla de la apllcacln.
LsLe paLrn LraLa de lndependlzar el Llpo de perslsLencla del resLo de la
apllcacln, de esLa manera la apllcacln no Llene dependencla del Llpo de perslsLencla
que se esLe llevando a cabo.
or poner un e[emplo, podemos esLar desarrollando la apllcacln con
perslsLencla conLra flcheros y posLerlormenLe decldlr que lo queremos hacer conLra
base de daLos y no habrla que camblar nada de la lglca de negoclo de la apllcacln,
unlcamenLe habrla que lmplemenLar los meLodos necesarlos para perslsLlr conLra la
base de daLos.
Lxpllcamos a conLlnuacln en que conslsLe esLe paLrn de dlseno.
Ln prlmer lugar Lendrlamos una lnLerfaz que lndlcarla los meLodos que son
necesarlos en la perslsLencla (los meLodos a los que se llamarn despues para acceder
a la perslsLencla).
or cada meLodo de perslsLencla Lendrlamos una clase que lmplemenLa Lodos y
cada uno de los meLodos de la lnLerfaz. ara asegurarnos de que no se crea ms de
una de esLas clases duranLe el desarrollo de la apllcacln deberlamos hacer que esLas
clases slgan un paLrn de dlseno slngleLon (expllcado posLerlormenLe).
or ulLlmo Lendrlamos una facLorla que dependlendo de los argumenLos, en
nuesLro caso parmeLros del descrlpLor de despllegue, nos devolverla una lnsLancla de
la clase encargada de la perslsLencla (dependlendo de los argumenLos para el Llpo de
perslsLencla).
ara acceder a la perslsLencla no Lendrlamos mas que acceder medlanLe la
lnLerfaz a los meLodos y de esLa manera el modelo de negoclo de la apllcacln es
LoLalmenLe lndependlenLe del Llpo de perslsLencla.
Ll paLrn de dlseno slngleLon conslsLe en crear un consLrucLor para la clase que
solo permlLa que haya una unlca lnsLancla de la clase en la apllcacln. LsLo se harla
haclendo un consLrucLor que compruebe sl hay o no una lnsLancla de la clase en la
apllcacln, sl la hay devolverla es mlsma lnsLancla, en caso conLrarlo se crearla una
nueva lnsLancla.
La forma de conLrolar las lnsLanclas exlsLenLes es hacer que la propla clase
conLenga en sus aLrlbuLos una lnsLancla de ella mlsma.
MosLramos a conLlnuacln un dlagrama de clases en el que se muesLran las
dependenclas de cada una de esLas clases.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 13





StartListener
private boolean startValidate(ServletContext context)
public void contextDestroyed(ServletContextEvent sce)
private persistence: PersistenceInterface
public void contextInitialized(ServletContextEvent sce)
modelo.Producto
modelo.Usuario
modelo.Comentario
modelo.Carrito
Modelo de persistencia. Patrn DAO
persistencia.PersistenceInterface
public boolean delProduct(String codigo)
public boolean delUser(String mail)
public boolean addProduct (Producto prod)
public boolean addUser (Usuario user)
public boolean init (String locationUser, String
locationProduct);
public boolean exit ()
public Usuario getUser (String mail)
public int anyAdmin ()
public boolean updateProduct (String codigo,
Producto prod)
public boolean updateUser (String mail, Usuario
user)
public Producto getProduct (String codigo)
public boolean saveCart (Carrito cart, boolean
completado, String date, String formPago)
public boolean saveRequest (String fechaHora,
String requestedURL, String remoteAddr, String
remoteHost, String method, String param, String
userAgent)
public Map<String, Producto> searchProd(String
campo, String term)
public Map <String, Usuario> getUsers ()
public Map <String, Producto> getProducts()
public boolean newComment (Usuario user,
String codigoProducto, String codigoComentario,
String fechaHora, String comentario)
public ArrayList <Producto>
getDetailsCartRecord (String codigo)
public ArrayList <Carrito> requestSalesRecord
(String campo, String term)
public boolean deleteImcompleteCartsClient
(String mailClient)
public boolean saveCart (Carrito cart, boolean
completado, String date, String formPago)
public Carrito requestLastIncompleteCart (String
mail)
public boolean updateComment (String
codComentario, Comentario comentario)
public boolean deleteComment (String
codigoComentario)
public Comentario getComment (String
codComentario)
public LinkedList <Comentario> getComentarios
(String campo, String valor)
persistencia.PersistenceFactory
public static PersistenceInterface
getInstance (String type)
persistencia.PersistenceFile
lockProductos: Object
usuarios: Map<String, Usuario
productos: Map<String, Producto>
leNameProduct: String
persistence: PersistenceFile
leNameUser: String
lockUsuarios: Object
persistencia.PersistenceBD
instance: PersistenceBD
pool: DataSource
nameBD: String
logger: Logger
private ArrayList <String>
requestIncompleteCarts (String mail)
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 14

3.4.- D|seo de f||tros
Ln esLe aparLado veremos algunos aspecLos del dlseno de la apllcacln que
consldero de lnLeres aparLe de los ya expllcados en los aparLados anLerlores.
Pay un fllLro que recoge Lodas las peLlclones y se encarga de reglsLrar cada una
de las peLlclones, en esLe fllLro de seLean LanLo la respuesLa como la peLlcln con la
codlflcacln que usa Loda la apllcacln, de esLa manera nos aseguramos de que Loda la
apllcacln esLe funclonando en la mlsma codlflcacln para evlLar problemas. Ahora
blen, esLo no nos asegura de que el resLo de cosas exLernas slgan en la mlsma
codlflcacln (u1l-8), como pueden ser las bases de daLos u oLros recursos exLernos
que se usen en la apllcacln.
La auLenLlflcacln de la apllcacln esL basada en el uso de fllLros. Pay un fllLro
que nos permlLe acceder a la zona de usuarlos reglsLrados de la apllcacln
(dependlendo de los aLrlbuLos de la sesln) y un fllLro posLerlor que verlflca que
podamos acceder a la zona de admlnlsLracln, zona a la que solo deben acceder los
usuarlos con suflclenLes permlsos.

3.S.- Acceso a |os mecan|smos de pers|stenc|a
8especLo al modelo de perslsLencla que se ha comenLado se podrla anadlr que
para acceder a las funclones de la perslsLencla lo que se reallza es obLener slempre la
lnLerfaz que se guard en el conLexLo de la apllcacln al lnlclo de la mlsma con un
llsLener de lnlclo de conLexLo.

2.6.- Segur|dad de |a ap||cac|n
La apllcacln ha sldo dlsenada presLando mucha aLencln a los aspecLos de
segurldad de la mlsma, no se ha Lenldo absoluLamenLe nlnguna ldea preconceblda a la
hora del dlseno de la mlsma, se ha parLldo del pensamlenLo de que Lodo ha de ser
valldado.
Ln prlmer lugar se ha opLado por la opcln de ellmlnar las conLrasenas de las
bases de daLos, la apllcacln no conLlene nlnguna conLrasena, en nlngun momenLo son
guardadas. Lo que se almacena es una huella de la conLrasena mas una pequena
cadena fl[a para que sea reslsLenLe Lamblen a los aLaques por dlcclonarlo a la base de
daLos en busca de huellas conocldas. Cuando el usuarlo lnLroduce una conLrasena se
segulrla se obLendrla la huella de la mlsma y lo que se compara serlan las dos huellas.
Sln asegurarlo LoLalmenLe podrla aflrmar que la unlca forma de que un usuarlo se
hlclera con la conLrasena de oLro serla Lenlendo un snlffer en la red de la vlcLlma
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 13

(puesLo que la apllcacln no funclona sobre hLLps), oLra opcln serla lnLenLar robar la
sesln de alguna manera, pero asl no se consegulrla la conLrasena del usuarlo, slno
acceso a su sesln por un perlodo llmlLado de Llempo.
CLro aspecLo lmporLanLe en la segurldad son Lodas las enLradas de daLos que se
reclben del usuarlo LanLo de formularlos como de cualquler Llpo de peLlcln que Lenga
que aLender el servldor, no se debe dar por supuesLo nada.
Ln Lodos los formularlos que reclbe la apllcacln lo prlmero que se hace con
ellos es verlflcar que conLengan los parmeLros que deseamos (dependlendo del
formularlo concreLo), y posLerlormenLe Lodos los parmeLros reclbldos son valldados
con la llbrerla LSAl medlanLe expreslones regulares, evlLando de esLa manera
lnLenLos de Cross SlLe ScrlpLlng o de lnyeccln SCL. 1amblen son valldados Lodos
aquellos campos que deben permlLlr cualquler LexLo (como puede ser el caso de los
comenLarlos) en busca de cualquler eLlqueLa P1ML sospechosa y Lamblen se
conLemplan los aLaques usando codlflcaclones dlferenLes.
osLerlormenLe una vez valldados cada uno de los parmeLros se anallza cada
uno de ellos para verlflcar que Lengan senLldo, no se permlLen numeros negaLlvos, no
se permlLe ellmlnar al ulLlmo admlnlsLrador, no se permlLe sublr un archlvo que no sea
una lmagen y como Lamano mxlmo 8mb.
A la hora de consLrulr el slsLema se ha consLruldo con una ldea flnal en menLe
que es procurar en la medlda de lo poslble o en Lodos los casos sl es poslble que la
apllcacln fallase por el uso lncorrecLo de los usuarlos o el lnLenLo de lnLroduccln de
daLos errneos en formularlos o lnLenLo de [ugar" con las u8Ls de la apllcacln. Con
esLo qulero declr que para cada accln que reallza la apllcacln prlmero se comprueba
sl es poslble reallzarla. or e[emplo, no se puede borrar un admlnlsLrador sl es el unlco
que hay, no se pueden comprar mas unldades de las que Llene un producLo, no se
puede borrar o edlLar un producLo o usuarlo que no exlsLe.
1amblen se ha procurado que solo se pueda acceder a los ServleLs por
medlanLe el verbo hLLp (CL1 o CS1) para el que esLen pensados, de lnLenLarse un
acceso usando un verbo no permlLldo serla lanzado un error 404, se puede ver en
deLalle en los dlagramas de navegacln.
Ll numero de lnLenLos de lnlclo de sesln se ha resLrlngldo a 10 lnLenLos, una
vez sobrepasado ese llmlLe no se podrla volver a lnlclar sesln duranLe 10 mlnuLos.

!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 16

4.- Mode|os de datos usados
Ln esLe aparLado se expllcarn los modelos de daLos que han sldo usados para
represenLar Lodos los daLos con los que Lraba[a la apllcacln.

4.1.- Mode|o de datos de roducto
Con esLa clase se preLender represenLar un producLo de la Llenda con Lodos los
aLrlbuLos que conLlene, esLos aLrlbuLos sern los requerldos por el enunclado.
Cdlgo (Creado de manera auLomLlca usando uulus)
nombre
reclo
SLock
uescrlpcln corLa
ueLalles
Se presenLa a conLlnuacln un dlagrama uML represenLando la clase.


Producto
public String getCodigo()
public int getStock()
public double getPrecio()
public String getNombre()
public String getDetalles()
public String getDesc()
Producto
detalles:String
desc: String
stock: int
precio: double
codigo: String
nombre: String
public Producto(String
codigo, String nombre,
double precio, int stock,
String desc, String detalles)
public Producto(String
codigo, String nombre,
double precio, int stock)
public Producto ()
public String
getDisponibilidad ()
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 17

Como se puede observar en el dlagrama uML no hay nlngun meLodo en esLa
clase que permlLa modlflcar el producLo por lo que se puede declr que las lnsLanclas de
esLa clase sern lnmuLables, una vez creados los ob[eLos no ser poslble modlflcar los
mlsmos. Se ha hecho de esLa manera para evlLar problemas de concurrencla.
Sl los ob[eLos no son lnmuLables serla poslble por e[emplo que un usuarlo que
esLa comprando camblara las unldades de un producLo mlenLras que el admlnlsLrador
camble las unldades del mlsmo producLo.

4.2.- Mode|o de datos para e| usuar|o
Con esLa clase se preLende represenLar un usuarlo denLro de la Llenda onllne.
Cada ob[eLo de la clase Lendr los slgulenLes slgulenLes aLrlbuLos.
nombre
ulreccln
Lmall (ldenLlflcador unlco)
ConLrasena (Mu3 de la conLrasena)
ermlsos ('a' AdmlnlsLrador, 'c' CllenLe normal)
A conLlnuacln de puede observar un dlagrama uML represenLando la clase.


Usuario
Usuario
public Usuario ()
permisos: char
pass: String
mail: String
nombre: String
dir: String
public Usuario(String
nombre, String dir, String
mail, String pass, char
permisos)
public String getDir()
public String getMail()
public String getPass()
public String getNombre()
public char getPermisos()
public String
getPrintablePermissions ()
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 18

4.3.- Mode|o de datos para e| |a cesta de |a compra
Con esLa clase se preLende represenLar la cesLa de la compra de un usuarlo. Ll
carrlLo de la compra Llene los slgulenLes aLrlbuLos.
Cdlgo del carrlLo
Lmall del usuarlo
Mapa de producLos que conLlene los producLos anadldos al carro
reclo del carro compleLo
lecha de la compra
Pora de la compra
lorma de pago de la compra

Carrito
Carrito
hora: String
fecha: String
precio: double
articulos: Map <String,
Integer>
codigo: String
user: String
formPago: String
public Carrito ()
public Carrito(String codigo,
String user, double precio)
public Carrito(String codigo,
String user, double precio,
String fecha, String hora,
String formaPago)
public Carrito(String codigo,
String user)
public boolean editCant
(String prod, int cantidad,
double prodPrice)
public void delProduct
(String prod)
public int getLenght ()
public Map <String, Integer>
getArticulos ()
public String getCodigo()
public String getUser()
public double getPrecio ()
public void setArticulos
(Map<String, Integer>
articulos)
public String getFormaPago
()
public void setPrecio
(double price
public String getHora()
public String getFecha()
public void setUser(String
user)
public void addProduct
(String newProd, int
cantidad, double prodPrice)
public void removeProd
(String prod, double
prodPrice)
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 19

4.4.- Mode|o de datos para |os comentar|os
Con esLa clase se preLende represenLar un comenLarlo anadldo por un usuarlo a
un producLo del caLlogo de la Llenda. un comenLarlo se represenLa con los slgulenLes
aLrlbuLos.
Cdlgo del comenLarlo
lecha
Pora
Cdlgo del producLo
Lmall del usuarlo
nombre del usuarlo
1exLo del comenLarlo



Comentario
Comentario
nombre: String
Email: String
codigoProducto: String
hora: String
codigoComentario: String
fecha: String
comentario: String
public String getHora()
public String getFecha()
public String getComentario
()
public String
getCodigoProducto()
public Comentario(String
codigoComentario, String
fecha, String hora, String
codigoProducto, String
Email, String nombre, String
comentario)
public String
getCodigoComentario()
public String getEmail()
public String getFechaHora
()
public String getNombre()
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 20

S.- Conf|gurac|n de |a ap||cac|n
Ln esLe caplLulo se van a descrlblr dlferenLes aspecLos de conflguracln de la
apllcacln necesarlos para poder desplegar la apllcacln correcLamenLe.
S.1.- Conf|gurac|n de pers|stenc|a en modo f|chero
Ls poslble que la apllcacln funclone con perslsLencla conLra flcheros. ara que
funclone correcLamenLe es necesarlo conflgurar una serle de parmeLros en el
descrlpLor de despllegue de la apllcacln.
Lo prlmero que Lenemos que hacer es lndlcar que la perslsLencla de la
apllcacln va a funclonar conLra flcheros. ara ello Lenemos que conflgurar el
parmeLro de conLexLo !"#$%$&"'(")"&*+,. Ll valor que debe Lener esLe
parmeLro para que funclone con flcheros es -%.".

osLerlormenLe lo que Lendremos que hacer es conflgurar la ruLa de los
flcheros, sl unlcamenLe pone el nombre del flchero se guardaran en el dlrecLorlo del
domlnlo del servldor de apllcaclones. Los archlvos van a ser cargados usando
dlrecLorlos del slsLema, no se van a emplear meLodos de conLexLo o del classpaLh para
cargarlos.
La ruLa del flchero que conLlene los daLos de producLos y usuarlos vlene dado
por el parmeLro de conLexLo /#(*%0+1/&+$. Ls un flchero de Llpo blnarlo.

La ruLa del flchero que conLlene el hlsLorlal de carrlLos vlene dada por el
parmeLro de conLexLo /#(*%0+2%$&+#%/."$. Ls un flchero de Llpo blnarlo

La ruLa del flchero que conLlene carrlLos sln comprar que son guardados para
ser recuperados al lnlclo de la sesln de los usuarlos vlene dada por el parmeLro de
conLexLo /#(*%0+3"(4!"#/(%+'. Ls un flchero de Llpo blnarlo.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 21


La ruLa del flchero de reglsLro de acclones vlene dada por el parmeLro de
conLexLo /#(*%0+5+6. Ls un flchero de LexLo plano.



!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 22

S.2.- Conf|gurac|n de pers|stenc|a en modo de bases de datos
La apllcacln Lamblen esL preparada para que la perslsLencla funclone conLra
bases de daLos, para ello se emplea un pool de conexlones que es necesarlo conflgurar
en el servldor de apllcaclones, y en el descrlpLor de despllegue.
La apllcacln se ha desarrollado con una base de daLos MySCL, para preparar la
base de daLos para la apllcacln se lncluye [unLo con esLe documenLo un exporL de la
base de daLos compleLa.
A conLlnuacln se muesLran los daLos que son necesarlos para conflgurar el
pool de conexlones
nombre del recurso: el que se desee.
!nul: [dbc/CnllneShop (el nombre que ser usado en el descrlpLor de
despllegue)
MoLor de bases de daLos: MySCL
nlvel de alslamlenLo de las Lransacclones: 8LAu-CCMMl1Lu
uerLo: 3306 (puerLo por defecLo de mySCL)
nombre de la base de daLos
u8L: [dbc:mysql://PCS18ASLuA1CS
nombre del servldor
usuarlo
ConLrasena
ara que el pool de conexlones funclone es necesarlo lnclulr el conecLor de la
base de daLos en los dlrecLorlos del servldor de apllcaclones. Ll conecLor para MySCL
lo puede descargar desde la pglna web oflclal.
hLLp://www.mysql.com/downloads/connecLor/[/
una vez descargado debe lnclulr el archlvo [ar del conecLor en el dlrecLorlo del
servldor de apllcaclones. Ln el caso de Classllsh ser el slgulenLe.
glassflsh-3.1/glassflsh/llb
una vez se ha conflgurado el servldor de apllcaclones hay que pasar a
conflgurar la apllcacln.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 23

Ln prlmer lugar es necesarlo conflgurar el modo de perslsLencla en el descrlpLor
de despllegue.

Ln segundo lugar hemos de conflgurar el nombre del recurso !nul y
posLerlormenLe el nombre de la Labla. ara ello se usan parmeLros del conLexLo que
fueron usados para la perslsLencla en modo de flchero.

1amblen es necesarlo conflgurar el recurso en el descrlpLor de despllegue.

or ulLlmo se ha de conflgurar el recurso en el descrlpLor de despllegue
especlflco del servldor de apllcaclones. Ln el caso de Classllsh se harla como se puede
ver aqul.


A conLlnuacln se muesLran las senLenclas SCL necesarlas para crear las Lablas
necesarlas de la base de daLos.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 24


!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 23

S.3.- Conf|gurac|ones m|sce|neas sobre |a ap||cac|n
Sl la apllcacln no encuenLra un usuarlo admlnlsLrador auLomLlcamenLe lo
crear parLlendo de una serle de parmeLros del descrlpLor de despllegue. Ls necesarlo
Lener en cuenLa que debldo a que exlsLen valldaclones de daLos en la apllcacln los
daLos lnLroducldos Lendrn que ser daLos vlldos.


Ls poslble conflgurar la caducldad de la sesln de usuarlo en mlnuLos, esLo
lndlca el Llempo en el que sl la sesln esL lnacLlva se cerrar de manera auLomLlca.

Sobre el conLexLo de la apllcacln es necesarlo lndlcar que esL preparada para
funclonar sln conLexLo dlrecLamenLe sobre la ralz del servldor de apllcaclones debldo a
que Lodas las ruLas usadas en la apllcacln se dan a parLlr de la ralz del servldor. Sl se
conflgurara un conLexLo habrla que conflgurar de nuevo Lodas las ruLas de la
apllcacln. LsLe parmeLro de conflguracln lo enconLramos en el descrlpLor de
despllegue proplo del servldor de apllcaclones. MosLramos como se harla para
Classllsh.


1amblen es necesarlo que la carpeLa setop de la apllcacln esLe anadlda al
closspotb de e[ecucln de la mqulna vlrLual.
Ln esLa carpeLa se encuenLran flcheros de conflguracln de las llbrerlas de
valldacln y las planLlllas de los emalls que son envlados.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 26




S.4.- Conf|gurac|n de| serv|dor SM1 para e| env|o de ema||s
La apllcacln permlLe el envlo de emalls a los usuarlos cuando son reglsLrados
con sus daLos de reglsLro, Lamblen cuando una compra es reallzada deLallndose en el
mlsmo los deLalles de la compra y por ulLlmo Lamblen admlLe la poslbllldad de
recuperacln de la conLrasena de los usuarlos en caso de olvldo.
ara el envlo de los emalls es necesarlo conflgurar un servldor SM1 y ser
conflgurado desde el descrlpLor de despllegue de la apllcacln medlanLe los
parmeLros de conLexLo. Los parmeLros con los que vlene conflgurado son
plenamenLe funclonales.
hosLMall: PosL del servldor SM1
1SLMall: Sl el servldor permlLe o no clfrado 1SL
mallorL: uerLo del servldor SM1
malluser: usuarlo con el que es necesarlo lnlclar sesln para envlar los
correos
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 27

auLhMall: Sl es necesarla o no la auLenLlflcacln para el envlo de
mensa[es
malllrom: ulreccln de emall del remlLenLe que aparecer en los
correos envlados
mallass: ConLrasena del servldor SM1
A conLlnuacln se muesLra un e[emplo de conflguracln en el descrlpLor de
despllegue de la apllcacln.



!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 28

S.S.- Conf|gurac|n de |as p|ant|||as para e| env|o de ema||s
LxlsLen planLlllas personallzables para el envlo de emalls. Las podemos
enconLrar en la carpeLa setop que como hemos dlcho debe de esLar anadlda al
closspotb de la mqulna vlrLual de [ava.
Ln prlmer lugar enconLramos la planLllla con nombre plootlllocompto.btml. LsLa
planLllla ser usada para el envlo de emalls deLallando los deLalles de la compra.
usLed declde la lnformacln que desea lnclulr en la planLllla con las slgulenLes
claves, donde usLed ponga los slgulenLe cdlgos ser donde aparezca en el emall la
lnformacln correspondlenLe.
&LlS1A: Aqul aparecer una Labla deLallando la llsLa de producLos
slgulendo los esLllos css .beoJet1oble y .cooteot1oble que lndlcan el
esLllo de la cabecera y el conLenldo respecLlvamenLe
&1C1AL: Aqul aparecer el LoLal de la compra en euros y con dos
declmales.
&nAML: nombre del cllenLe
&LMAlL: Lmall del cllenLe
&ul8: ulreccln del cllenLe
&lC8MACC: lorma de pago escoglda por el cllenLe

La planLllla de envlo de recuperacln de conLrasena esL ba[o el nombre
plootlllokecopetotloss.btml. Se deLallan a conLlnuacln los cdlgos para la lnclusln de
daLos.
&nAML: nombre del cllenLe
&LMAlL: Lmall del cllenLe
&ASS: nueva conLrasena para el cllenLe

La planLllla de reglsLro para los usuarlos esLa ba[o el nombre
plootlllokeqlstto.btml. Se deLallan a conLlnuacln los cdlgos para la lnclusln de
daLos.
&nAML: nombre del cllenLe elegldo para el reglsLro
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 29

&LMAlL: Lmall del reglsLro
&ul8: ulreccln del cllenLe para el reglsLro

S.6.- L|brer|as necesar|as
Ln esLe caplLulo vamos a deLallar cuales son las llbrerlas que han sldo usadas en
el desarrollo de la apllcacln.
odemos enconLrar las llbrerlas necesarlas en la carpeLa llb.
LSAl 2.0CA Llbrerla usada para la valldacln de enLradas de usuarlo esL
slLuado denLro de la carpeLa llb y neceslLa las llbrerlas que esLn lncluldas en la carpeLa
esopl-tepolteJ.
Los flcheros de conflguracln necesarlos para esLa llbrerla se encuenLran en la
carpeLa setop que como hemos lndlcado hay que anadlrla al closspotb.
LSAl.properLles: llchero prlnclpal de conflguracln de LSAl
valldaLlon.properLles: llchero de conflguracln para las expreslones
usadas en la valldacln
anLlsamy-slashdoL-1.4.3.xml: llchero de valldacln de P1ML para P1ML
que pueda lnLroduclr el usuarlo
!lreeCharL 1.0.13 es la llbrerla que se ha usado para generar las grflcas de
esLadlsLlcas, slLuada en la carpeLa llb y requlere la llbrerla !common 1.0.16 Lamblen
slLuada en la carpeLa llb.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 30



!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 31

6.- Iunc|onam|ento en deta||e de| s|stema
Ln esLe aparLado se va a deLallar el flu[o de navegacln de cada una de las
operaclones que se pueden reallzar y de esLa manera comprender me[or su
funclonamlenLo.
6.1.- Lstructura de |a ap||cac|n
Ln el presenLe aparLado vamos a ver como se ha organlzado la apllcacln en
dlrecLorlos segun las funclones de cada ServleL, clase [ava o vlsLa !S.
MosLramos en prlmer lugar la organlzacln de ServleLs y clases en los dlferenLes
paqueLes.

MosLramos a conLlnuacln la organlzacln de vlsLas de la apllcacln.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 32


Ln prlmer lugar podemos observar como Lenemos un paqueLe coottol.oJmlo, al
lgual que en las vlsLas Lamblen lo hay, denLro de la carpeLa oJmlo podemos enconLrar
Lamblen una carpeLa oJmlolsttotloo. uenLro del paqueLe coottol.oJmlo de archlvos
[ava Lamblen se encuenLra un dlrecLorlo que no se ve Lamblen llamado oJmlolsttotloo,
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 33

podemos observar que exlsLe esLe dlrecLorlo en el descrlpLor de despllegue en la
conflguracln de los ServleLs.
La funcln que cumple el dlrecLorlo oJmlo es almacenar en el mlsmo las
acclones de admlnlsLracln, pero slo aquellas que se puedan llevar a cabo slendo
usuarlo reglsLrado pero sln permlsos de admlnlsLrador. La enLrada a esLe dlrecLorlo se
comprueba con el fllLro AJmlollltet deflnldo en el descrlpLor de despllegue de la
apllcacln.
Ln el dlrecLorlo oJmlolsttotloo es donde se encuenLran Lodas las acclones que
se pueden llevar a cabo slendo admlnlsLrador, que son Lodas aquellas que se refleren a
la admlnlsLracln de la Llenda. La enLrada en esLa zona es comprobada por el fllLro
AJmlolsttotloollltet, esLe fllLro solo comprueba sl el usuarlo es admlnlsLrador o no lo
es, no es necesarlo que compruebe la auLenLlflcacln del usuarlo debldo a que ya ha
sldo comprobada por el fllLro AJmlollltet el cual se encuenLra anLes que esLe.
1amblen podemos observar el paqueLe moJelo, en el cual se encuenLran los
beoos uLlllzados en la apllcacln. uenLro del mlsmo enconLramos las clases que
represenLan un carrlLo de la compra, un comenLarlo, un usuarlo o un producLo.
uenLro de paqueLe coottol enconLramos dlferenLes ServleLs y clases usados
para reallzar dlferenLes funclones de la apllcacln, ser expllcada cada uno de ellos en
deLalle posLerlormenLe.
odemos observar Lamblen el paqueLe petslsteoclo en el cual se encuenLran las
clases necesarlas que se descrlbleron anLerlormenLe, Lodas ellas [unLas forman el
paLrn uAC de la apllcacln.
or ulLlmo podemos observar el paqueLe coottol.ptoJoctos, Lodo lo que hay
denLro de esLe paqueLe es acceslble medlanLe la ruLa /sbop que sl observamos hay una
carpeLa que se llama asl en las vlsLas de la apllcacln. 1odo lo que se encuenLra denLro
de esLe dlrecLorlo hace las funclones necesarlas para la compra y Lodas aquellas
acclones a reallzar con los producLos, eso sl, unlcamenLe aquellas acclones publlcas.
asemos a ver ahora la esLrucLura organlzaLlva de las vlsLas de la apllcacln. Ln
prlmer lugar comenLar que Lodas las vlsLas son pglnas dlnmlcas !S, no hay
conLenldo esLLlco hLml.
Como ya hemos vlsLo anLerlormenLe Lenlamos las carpeLas oJmlo y
oJmlolsttotloo, que ya se ha comenLado que Llpo de funclones agrupaban.
osLerlormenLe observamos la carpeLa css, en la cual podemos enconLrar la
ho[a de esLllos de la apllcacln, Lodas las vlsLas de la apllcacln usan esLa ho[a de
esLllos. 1amblen podemos enconLrar denLro de esLa carpeLa la ho[a de esLllos que
apllcada sobre los formularlos a la hora de la valldacln medlanLe !avaScrlpL.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 34

Cbservamos una carpeLa llamada lmoqes, denLro de esLa carpeLa se guardarn
Lodas las lmgenes que use la apllcacln, denLro de la mlsma habr varlas carpeLas.
La carpeLa lcoos conLlene los lconos que se usan en la apllcacln, como por
e[emplo puede ser el carrlLo de la compra.
osLerlormenLe vemos la carpeLa ptoJocts que conLlene las lmgenes de los
producLos, cada una de ellas Llene como nombre el cdlgo del producLo al que
perLenece.
Cbservamos la carpeLa stots la cual conLlene Lodas las lmgenes referenLes a
las esLadlsLlcas grflcas de la apllcacln. Las esLadlsLlcas grflcas sern generadas y
almacenadas en esLa carpeLa y sern posLerlormenLe mosLradas al usuarlo.
or ulLlmo la carpeLa templote, la cual conLlene Lodas las lmgenes uLlllzadas
por la planLllla de la apllcacln.
osLerlormenLe vemos en la ralz de la apllcacln el home, la pglna de logln y la
pglna de acerca de.
uespues podemos enconLrar la carpeLa sctlpts, denLro de la cual podemos
enconLrar Lodos los documenLos [avascrlpL usados en la apllcacln.
uenLro de esLa carpeLa observamos el documenLo jpoety-1.6.1.js, que es la
llbrerla [query necesarla para usar oLros pluglns que se han usado que se vern a
conLlnuacln.
Ll documenLo sctlpts.js lncluye una serle de funclones creadas para no Lener
que escrlblrlas dlrecLamenLe en las pglnas [sp slno solo Lener que llamar a esLas
funclones. or e[emplo, podemos enconLrar denLro de esLe documenLo la funcln
necesarla para cargar el edlLor de LexLos tloy-mce.
osLerlormenLe enconLramos la carpeLa tloy_mce en la que se encuenLran
Lodos los elemenLos del plugln tlny-mce.
llnalmenLe observamos el documenLo voooJlom.js que es el la llbrerla usada
para las valldaclones de [avascrlpL. LsLe documenLo ha sldo modlflcado para dar los
mensa[es en espanol y Lamblen se han modlflcado algunas de las expreslones
regulares de valldacln y se han anadldo oLras.
Cbservamos la carpeLa sbop que conLlene las vlsLas de las acclones a reallzar
referenLes a las acclones con los producLos y con la compra, slempre y cuando sean
publlcas.
osLerlormenLe Lenemos la carpeLa w8-lNl, en la cual se encuenLran aquellas
pglnas a las que no deseamos que el usuarlo llegue dlrecLamenLe, Llene varlas
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 33

carpeLas denLro y en su ralz el descrlpLor de despllegue y el flchero de conflguracln
especlflco del servldor de apllcaclones usado (Clossllsb J.1).
LnconLramos en prlmer lugar la carpeLa oJmlo que conLlene la pglna de
loqoot, a la cual Llene lglca que no se llegue sln reallzar esa accln en concreLo,
Lamblen Llene la pglna de pre-vlsuallzacln de producLo que es usada al edlLar y
anadlr producLos y Llene lglca que solo se llegue a esLa pglna a Lraves de dlchas
acclones (la funcln de prevlsuallzacln ha sldo ellmlnada en la ulLlma versln).
LnconLramos la carpeLa locloJe que conLlene pglnas [sp que van a ser lncluldas
en las vlsLas de la apllcacln, a esLas pglnas no se debe llegar, solo deben ser lncluldas
en el cuerpo de oLras pglnas [sp.
uenLro de esLa carpeLa podemos enconLrar el beoJet de la apllcacln que
conLlene el menu superlor y la barra superlor, Lamblen enconLramos el footet o ple de
pglna de la mlsma, observamos Lamblen una pglna llamada tesoltoJos que es la
encargada de mosLrar los resulLados de las acclones reallzadas y esLa es lnclulda en
Lodas las pglnas [sp que esperan reclblr mensa[es de los resulLados de las acclones.
LnconLramos Lamblen en esLe dlrecLorlo el menu de la apllcacln LanLo para la seccln
de admlnlsLracln como para el resLo de las secclones (meoo, meooAJmlolsttocloo).
or ulLlmo enconLramos el mdulo de comeototlos de la apllcacln que ser el que es
lncluldo en la pglna de vlsuallzacln de producLo para que muesLre los comenLarlos
de los producLos.
llnalmenLe enconLramos un dlrecLorlo que conLlene las pglnas de error
(poqloosttot) de la apllcacln, a las cuales no se debe llegar salvo que haya ocurrldo el
error perLlnenLe.










!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 36

6.2.- D|agramas de navegac|n de f||tros
Ln esLe aparLado mosLraremos los dlagramas de navegacln referenLes a los
fllLros para evlLar mosLrarlos en los dlagramas de navegacln de Lodas las acclones por
clarldad.









Todas las peticiones
LogFilter.java Destino
VB
Java
Guarda
registro de
peticin
Peticiones dirigidas a /admin/*
LogFilter.java AdminFilter.java
Destino
restricted.jsp
Autentificado
VB
JSP
Sin
autentificar
VB
Java
VB
Java
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 37




Peticiones dirigidas a /admin/administration/*
LogFilter.java AdminFilter.java
AdministrationFilter.java
restricted.jsp
VB
JSP
Sin
autentificar
Autentificado
Destino
VB
Java
VB
Java
VB
Java
VB
JSP
/admin/index.jsp
Administrador
Usuario
registrado
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 38

6.3.- D|agramas de navegac|n de ||steners
Ln esLe aparLado deLallamos los dlagramas de navegacln para los llsLeners de
la apllcacln.



Listener de inicio de contexto
if(conn
SELEC
WHERE
print

StartListener.java
Despliegue de la
aplicacin
/index.jsp
VB
JSP
VB
Java
RuntimeException
Persistencia
cargada
Error
inicializando
persistencia
Listener de sesin
Sesin caducada o
cerrada
if(conn
SELEC
WHERE
print

SaveSession
Listener.java
Guarda
carrito que no
se ha
confirmado
Si es usuario autentificado
y tiene carro sin comprar
Destino
Continua el flujo normal de
navegacin
Si no es usuario
registrado; o si lo es pero
no tiene carro. Continua el
flujo normal
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 39

6.4.- I|u[o de navegac|n de |as operac|ones pb||cas
Ln esLe aparLado se ver el flu[o de navegacln de las operaclones que se
pueden reallzar en la Llenda de manera publlca.
Ln esLos dlagramas podremos ver cuadros en los que pone CL1 y CS1, esLo
lndlca las acclones que se reallzarn en caso de acceder a los servleLs medlanLe un
verbo u oLro de los meLodos hLLp.
ara esLe prlmer dlagrama vamos a mosLrar como se slgue el dlagrama con
capLuras de panLalla para que se Lome como e[emplo para enLender el resLo de los
dlagramas.


Aadir producto al carrito
Listado de productos
<script
var a=
var xl
if(xls
AddCarritoServlet
VB
Java
Aade el producto al
carro si corresponde
Caso de error aade
un mensaje a la
peticin
Error 404
Si el error es
formulario
incorrecto o
peticin
POST
/shop/products.jsp
VB
JSP
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 40




ara borrar un producLo de la cesLa se segulrla el mlsmo mecanlsmo con la
salvedad de que la canLldad que se pedlrla son cero unldades.
Actualizar unidades de un producto en el carrito
Listado de productos en
el carrito
/shop/
products.jsp
VB
JSP
Si la sesin no
contiene carrito
<script
var a=
var xl
if(xls
EditAmount
Servlet
VB
Java
Error 404
Formulario
incorrecto
Actualiza el carro si
las
comprobaciones
son positivas
Si hay error en las
comprobaciones se
aade mensaje
/shop/cart.jsp
VB
JSP
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 41







Borrar el carrito de la compra (vaciarlo)
Listado de productos en
el carrito
<script
var a=
var xl
if(xls
DeleteCart
Servlet
VB
Java
/shop/cart.jsp
VB
JSP
Validar carrito de la compra (paso previo a la compra)
Listado de productos en
el carrito
/shop/cart.jsp
VB
JSP
<script
var a=
var xl
if(xls
UpdateCart
Servlet
VB
Java
Listado de productos
VB
JSP
/shop/products.jsp
Si no hay carrito en
la sesin
Formulario de venta
Si se han hecho
cambios en el
carrito se avisa
/shop/buycart.jsp
VB
JSP
Si no es la
operacin de venta
definitiva
GET
POST
Error 404
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 42



Ls lmporLanLe desLacar de esLe dlagrama el paso prevlo anLes de la compra por
el ServleL updaLeCarLServleL, es poslble que el que lo vea se pregunLe porque pasa
anLes por aqul que por el ServleL que realmenLe reallza la compra. Se ha dlsenado asl
por cuesLlones de rendlmlenLo. Ll ServleL que reallza la compra comprueba sl las
unldades son correcLas o no y edlLa el caLlogo, pero esLas operaclones las reallza de
manera slncronlzada y pldlendo locks, por lo que el rendlmlenLo de la apllcacln
dlsmlnulrla slgnlflcaLlvamenLe en el caso de que hublera muchos hllos concurrenLes
e[ecuLando el ServleL de compra.
or ello se ha lmplemenLado el prlmer ServleL, en el que se reallzan esas
operaclones (sln edlLar producLos) pero no son slncronlzadas y de esLa manera
Realizar la compra
Formulario de venta
/shop/buycart.jsp
VB
JSP
<script
var a=
var xl
if(xls
UpdateCart
Servlet
VB
Java
Si se han hecho
cambios en el
carrito se avisa
Listado de productos
VB
JSP
/shop/products.jsp
Si no hay carrito en
la sesin
<script
var a=
var xl
if(xls
BuyServlet
VB
Java
Error 404
GET
POST
Fallos o cambios
en el carrito
Compra exitosa
Registro de la
compra
Enviar Email
Compra realizada
POST
/shop/buyinformation.jsp
VB
JSP
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 43

evlLamos que Lodas las peLlclones lleguen al servleL que reallza la compra. Se podrla
declr que de esLa manera reduclmos las peLlclones que llegan al servleL de compra y
las que llegan al mlsmo Llenen un porcenLa[e de aclerLo mayor a la hora de compleLar
la compra con exlLo.
1amblen es lmporLanLe esLe paso prevlo anLes de la compra porque ese servleL
Lamblen reallza una acLuallzacln del preclo del carrlLo por sl algun producLo cambl el
preclo en el perlodo de Llempo en el que ha esLado ese producLo en el carrlLo. ue esLa
manera aseguramos que el preclo que se paga por el carrLlLo es el acLual.



Busqueda de productos
Busqueda
VB
JSP
/shop/products.jsp
<script
var a=
var xl
if(xls
SearchProduct
Servlet
VB
Java
GET
Error 404
POST
Sin parmetros de
vuelta
Correcto
Buscar
productos
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 44





Registro de usuarios
Registro
/login.jsp
VB
JSP GET
Error 404
Ante errores hay
mensajes
Registro
correcto
Nuevo usuario
Enviar email
registro
POST
Inicio de sesin
Inicio de sesin
Login
VB
JSP GET
Error 404
POST
<script
var a=
var xl
if(xls
AuthServlet
Errores en la
autentificacin
Autentificacin
correcta
Inicio de sesin
manual
Inicio de sesin
despus de un error
Inicio
/index.jsp
VB
Java
VB
JSP
Pgina a la que se intent
acceder y dio error
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 43



Recuperacin de contrasea
Inicio de sesin
/login.jsp
VB
JSP
<script
var a=
var xl
if(xls
PassRecover
Servlet
GET
Error 404
VB
Java
POST
Error en el
proceso
Proceso
correcto
Envio email para
recuperar la contrasea
Actualizar
contrasea
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 46

6.S.- I|u[o de navegac|n para operac|ones de usuar|o reg|strado
Ln esLe aparLado se va a deLallar el flu[o de navegacln para las operaclones
que pueden reallzar los usuarlos reglsLrados (no admlnlsLradores).


Cambio de contrasea
Cambio de contrasea
/admin/
preferences.jsp
VB
JSP
<script
var a=
var xl
if(xls
ChangePass
Servlet
GET
Error 404
POST
Error en el
proceso
Proceso
completado
Actualizar
datos
<script
var a=
var xl
if(xls
LogOutServlet
No se encuentra el
usuario de la sesin
/WEB-INF/
admin/
logout.jsp
VB
JSP
VB
Java
VB
Java
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 47





Cambiar los datos personales
Cambio de datos personales
<script
var a=
var xl
if(xls
EditUserServlet
/admin/preferences.jsp
VB
JSP
VB
Java
GET
Error 404
POST
Error en el
proceso
Proceso
completado
Actualizar
datos
Aadir comentario al producto
Aadir comentario
<script
var a=
var xl
if(xls
AddComment
Servlet
VB
Java
VB
JSP
/shop/
viewprod.jsp?
prod=
GET
Error 404
POST
Error en el
proceso
Proceso
completado
Guardar
datos
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 48


Cerrar sesin
Cerrar sesin <script
var a=
var xl
if(xls
LogOutServlet
La sesin se cerro
por un error
Sesin no
iniciada
Cierre
normal
/WEB-INF/
admin/
logout.jsp
/logout
VB
JSP
VB
JSP
Login
Login
VB
JSP
/login.jsp
/index.jsp
VB
JSP
VB
Java
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 49

6.6.- I|u[o de navegac|n de |as operac|ones de| adm|n|strador
Ln esLe aparLado veremos en deLalle como es el flu[o de las operaclones que
puede reallzar un usuarlo de la Llenda con permlsos de admlnlsLrador.



Aadir producto al catlogo
1 -----
2 -----
3 -----
Aadir al catlogo
<script
var a=
var xl
if(xls
AddProduct
Servlet
VB
JSP
/admin/
administration/
addproduct.jsp
VB
Java
Guarda
producto
Error
guardando
Exito
guardando
Administracin de productos
/admin/administration/
products_administration.jsp
VB
JSP
POST
GET
Error 404
Image
Si hay imagen
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 30


Editar producto del catlogo
1 -----
2 -----
3 -----
Editar producto
VB
JSP
/admin/
administration/
modifyprod.jsp
<script
var a=
var xl
if(xls
EditProduct
Servlet
VB
Java
Administracin de productos
/admin/administration/
products_administration.jsp
VB
JSP
GET
POST
Error
guardando
Exito
guardando
Guarda
producto
Error 404
Image
Si cambia la imagen
Borrar
imagen
Si se cambia la imagen
o si no se conserva la anterior
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 31




Editar usuario
Editar usuario
<script
var a=
var xl
if(xls
EditUserComplete
Servlet
POST
GET
Error 404
VB
JSP
/admin/administration/
edituser.jsp?user=
VB
Java
Administracin de
usuarios
Errores
Operacin
completada
Actualizar
usuario
VB
JSP
/admin/administration/
user_administration.jsp
Borrar usuario
Lista de usuarios
VB
JSP
/admin/administration/
user_administration.jsp
<script
var a=
var xl
if(xls
DeleteUser
Servlet
Error en
peticion
Error 404
Borrado
correcto
Error en el
proceso
Borrar
usuario
VB
Java
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 32



Borrar producto
Listado productos
VB
JSP
/admin/administration/
products_administration.jsp
Borrar producto
VB
JSP
/admin/administration/
delprod.jsp?prod=
Cancelar Confirmar
<script
var a=
var xl
if(xls
DeleteProduct
Servlet
POST
Error 404
GET
Error Exito
Borrar
producto
VB
Java
Borrar
imagen
Si el producto
tiene imagen
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 33


Editar comentario
Producto
VB
JSP
/shop/viewprod.jsp?
prod=
Editar comentario
VB
JSP
Parmetros
incorrectos
Parmetros
correctos
Error 404
/admin/administration/
editcomment?cod=
<script
var a=
var xl
if(xls
EditComment
Servlet
Error
validacin
Correcto
Actualizar
comentario
Errores
VB
Java
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 34




Borrar comentario
Producto
VB
JSP
/shop/viewprod.jsp?
prod=
<script
var a=
var xl
if(xls
DeleteComment
Servlet
Error
parmetros
o POST
Error 404
Borrado
correcto
Borrado
fallido
VB
Java
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 33

6.7.- Sobre e| IavaScr|pt que se ha usado
1odo el !avaScrlpL usado en el slsLema usan la llbrerla !Cuery, cuya prlnclpal
funcln conslsLe en faclllLar el acceso al documenLo P1ML, faclllLar el mane[o de
evenLos asl como en el uso de A[ax.
Ln prlmer lugar podemos desLacar la llbrerla vanadlum!S que nos ayuda a la
valldacln de formularlos medlanLe !avaScrlpL. LsLa llbrerla es capaz de valldar campos
de los formularlos slmplemenLe ponlendo la clave correspondlenLe en el aLrlbuLo class
del campo del formularlo y nos da el mensa[e de error slgulendo la ho[a de esLllos que
esL denLro de la carpeLa css.
MosLremos un e[emplo para el formularlo de logln.


MosLramos a conLlnuacln la web de la llbrerla usada, aunque el documenLo de
la llbrerla que se usa en esLa apllcacln ha sldo modlflcado para dar los mensa[es en
espanol y Lamblen se han modlflcado algunas de las expreslones regulares y se han
anadldo oLras expreslones regulares como por e[emplo para valldar las dlrecclones.
hLLp://www.vanadlum[s.com/

CLra de las llbrerlas usadas es 1lny-MCL el cual slrve para que los cuadros de
LexLo de los LexLarea sean cuadros de LexLo W?SlW?C. ara ello hay que lnlclallzar las
pglnas que conLengan los LexLarea con una funcln que especlflca las opclones de
plugln. LsLa funcln la podemos ver en el documenLo $(#%!&$78$.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 36




ue[o a conLlnuacln la web del plugln en donde se puede obLener ms
lnformacln acerca de las opclones.
hLLp://Llnymce.moxlecode.com/
Algo que hay que Lener muy en cuenLa a la hora de usar esLe plugln es que se
ha de[ado muy corLo de opclones debldo a que se vallda el hLml de enLrada en el
servldor por cuesLlones de segurldad, por lo que hay clerLas eLlqueLas de hLml o css
que no esLn permlLldas, por ello el flchero xML de conflguracln de anLlsamy esL
adapLado especlalmenLe a esLe plugln.
CLro aspecLo muy lmporLanLe a Lener en cuenLa es que la comblnacln de esLos
dos pluglns puede Lener problemas, a conLlnuacln expllco las causas.
Ll cuadro de LexLo W?SlW?C que se genera no es el mlsmo LexLarea que hay en
nuesLro hLml, se podrla declr que es uno vlrLual, por lo que nosoLros escrlblmos en el
vlrLual, por lo LanLo nuesLro LexLarea esL vaclo y por esLa causa la valldacln por la
llbrerla vanadlum fallarla.
or ello lo que hay que hacer es volcar el conLenldo del cuadro de LexLo
W?SlW?C en el LexLarea real de nuesLro hLml. ara ello hemos de usar evenLos, yo
para soluclonarlo que he hecho es que se vuelque el conLenldo con cualquler camblo
que se produzca en el campo de LexLo. LsLo lo podemos conflgurar en la funcln de
lnlclallzacln del cuadro W?SlW?C.
Ll cdlgo conslsLe slmplemenLe en que se aslgna una funcln al evenLo y esa
funcln lo que reallza es el volcado del conLenldo.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 37


CLra opcln lnLeresanLe es que se produzca un volcado en el submlL del
formularlo.



!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 38

7.- S|stema de contro| de vers|ones
ara el desarrollo de esLe proyecLo se ha usado un slsLema de conLrol de
verslones cenLrallzado, que ha sldo subversln. Como reposlLorlo se ha usado Coogle
code.
La u8L del proyecLo en google code es la slgulenLe.
hLLp://code.google.com/p/Llendaonllnelpl[dyb/

Lo que se encuenLra almacenado en el reposlLorlo de google code es un
proyecLo de neL8eans, el cual se encuenLra en la carpeLa ttook.
hLLp://code.google.com/p/Llendaonllnelpl[dyb/source/browse/#svn2lLrunk
233lsLaLe233uclosed
Ls poslble ba[ar el proyecLo haclendo un cbeckoot del mlsmo con el cllenLe de
subversln que nosoLros deseemos. or e[emplo podemos usar el cllenLe que Lrae
neLbeans por defecLo.
A conLlnuacln mosLramos los pasos que hemos de segulr para hacer un
checkouL desde neLbeans y asl obLener el proyecLo compleLo.

Ln la slgulenLe venLana se nos pregunLar por la u8L del reposlLorlo.
hLLps://Llendaonllnelpl[dyb.googlecode.com/svn

!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 39


Ln esLa venLana se nos pregunLar por la ruLa de la que deseamos hacer el
checkouL y posLerlormenLe por la ruLa denLro de nuesLro equlpo donde queremos que
se guarde el proyecLo.

Ln la slgulenLe venLana podemos comprobar que se ha reallzado correcLamenLe
la operacln y observamos que ha deLecLado que es un proyecLo de neL8eans y nos da
la opcln de abrlrlo o no abrlrlo.
!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 60


odemos acudlr al dlrecLorlo de nuesLro equlpo donde eleglmos guardar el
proyecLo y comprobaremos que se ha ba[ado correcLamenLe.



!uan ulez-?anguas 8arber rogramacln con !ava LL 1lenda Cnllne
_____________________________________________________________________________
!dyb - Mayo 2011 61

8.- Aspectos a me[orar
La usabllldad de la apllcacln se ha LraLado de hacer lo me[or poslble para
hacerla lo ms amlgable poslble pero aun asl hay aspecLos que son me[orables, como
puede ser la paglnacln de los resulLados, la aparlencla de la pglna de lnlclo y la de la
pglna de acerca han sldo basLanLe ausLeras.
La funcln de sublda de lmgenes podrla ser me[orable modlflcando el modelo
de daLos y de esLa manera ayudarlamos al SLC (Searh Lnglne CpLlmlzaLlon) para que
nuesLras lmgenes fueran me[or lndexadas por los moLores de busqueda.
1amblen podrla ser lnLeresanLe la lnclusln de ms Llpos de grflcas en la
seccln de esLadlsLlcas de los admlnlsLradores para obLener ms lnformacln sobre el
esLado y la evolucln e la Llenda. ue la mlsma forma que esLas grflcas podrlan ser
me[orables en lo que se reflere al aspecLo de las mlsmas. or e[emplo se podrla usar
[avascrlpL para represenLar las mlsmas.
Sl esLo se LraLara de una apllcacln real no podrlamos usar el Llpo de daLo
Jooble para represenLar los preclos de las cosas debldo a que esLe Llpo de daLo podrla
efecLuar redondeos o a[usLes que no son deseables cuando esLamos hablando de
dlnero. Sl en la Llenda hublera descuenLos o porcenLa[es de alguna forma se podrlan
empezar a observar las consecuenclas. Lo que me[or hublera esLado para subsanar
esLe problema serla haber usado la clase de [ava 8lqueclmol que Llene una mayor
preclsln.