!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
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
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.