Está en la página 1de 61

Ejemplo

de Programacin con Java EE



Una Tienda Online












Juan Dez-Yanguas Barber
Programacin con Java EE 6

Jdyb - Mayo 2011


Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

ndice
1.- PREMBULO

2.- INTRODUCCIN

3.- DISEO DEL SISTEMA

10

3.1.- HERRAMIENTAS UTILIZADAS


3.2.- PATRN DE DISEO MVC
3.3.- DISEO DE LA PERSISTENCIA. PATRN DAO
3.4.- DISEO DE FILTROS
3.5.- ACCESO A LOS MECANISMOS DE PERSISTENCIA
2.6.- SEGURIDAD DE LA APLICACIN

10
11
12
14
14
14

4.- MODELOS DE DATOS USADOS

16

4.1.- MODELO DE DATOS DE PRODUCTO


4.2.- MODELO DE DATOS PARA EL USUARIO
4.3.- MODELO DE DATOS PARA EL LA CESTA DE LA COMPRA
4.4.- MODELO DE DATOS PARA LOS COMENTARIOS

16
17
18
19

5.- CONFIGURACIN DE LA APLICACIN

20

5.1.- CONFIGURACIN DE PERSISTENCIA EN MODO FICHERO


5.2.- CONFIGURACIN DE PERSISTENCIA EN MODO DE BASES DE DATOS
5.3.- CONFIGURACIONES MISCELNEAS SOBRE LA APLICACIN
5.4.- CONFIGURACIN DEL SERVIDOR SMTP PARA EL ENVO DE EMAILS
5.5.- CONFIGURACIN DE LAS PLANTILLAS PARA EL ENVO DE EMAILS
5.6.- LIBRERAS NECESARIAS

20
22
25
26
28
29

6.- FUNCIONAMIENTO EN DETALLE DEL SISTEMA

31

6.1.- ESTRUCTURA DE LA APLICACIN


6.2.- DIAGRAMAS DE NAVEGACIN DE FILTROS
6.3.- DIAGRAMAS DE NAVEGACIN DE LISTENERS
6.4.- FLUJO DE NAVEGACIN DE LAS OPERACIONES PBLICAS
6.5.- FLUJO DE NAVEGACIN PARA OPERACIONES DE USUARIO REGISTRADO
6.6.- FLUJO DE NAVEGACIN DE LAS OPERACIONES DEL ADMINISTRADOR
6.7.- SOBRE EL JAVASCRIPT QUE SE HA USADO

31
36
38
39
46
49
55

7.- SISTEMA DE CONTROL DE VERSIONES

58

8.- ASPECTOS A MEJORAR

61

Jdyb - Mayo 2011


Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

1.- Prembulo
He sido siempre un apasionado de la informtica, y desde que comenc mis
estudios de Ingeniera Informtica esta aficin por la materia ha ido creciendo
progresivamente.
Actualmente he finalizado mis estudios de Ingeniera Tcnica en Informtica de
Sistemas, los que continuar el prximo ao para proseguir con la Ingeniera Superior.
El proyecto que aqu les presento viene a ser una asignatura completa,
asignatura dedicada a la programacin de aplicaciones web, y esta en concreto fue
impartida en Java.
Cog desde el principio con mucho nimo esta asignatura y poco a poco me fue
gustando ms. Le fui dedicando muchas horas a este proyecto hasta llegar a conseguir
un ejemplo lo ms realista posible de lo que pudiera ser una tienda online.
He disfrutado muchsimo realizando este proyecto no solo porque se trataba de
algo nuevo sino porque he adquirido muchos e interesantes conocimientos sobre el
lenguaje, si bien es cierto que me queda mucho por aprender de este lenguaje he de
reconocer que esto me ha ayudado a dar un paso importante en este continuo
aprendizaje.
Una vez completado el curso pens que ya que haba dedicado mucho tiempo a
este proyecto podra tambin llegar a ms personas y ser de ayuda, por lo que he
seguido trabajando en el mismo para publicarlo con una documentacin completa.
No puedo terminar este texto sin agradecer a Abraham Otero Quintana el
inters que ha despertado en m con este proyecto y los nimos que me ha dado para
continuar con ello hasta obtener un proyecto perfeccionado para su publicacin.
Tambin le tengo que agradecer la ayuda que me ha prestado de manera totalmente
desinteresada para la publicacin del mismo.
Sin ms me despido y espero que os sea de ayuda este documento as como el
proyecto en si.
Pueden ponerse en contacto conmigo en esta direccin de correo electrnico
sin problema alguno: jdyb04jdyb@gmail.com

Jdyb - Mayo 2011


Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

2.- Introduccin
En este proyecto se ha tratado de llevar a cabo el diseo de una aplicacin web
que cumpla con las funcionabilidades de una tienda online completa.
La aplicacin debe tener una interfaz de administracin la cual nos permita una
administracin completa de los productos (aadir, modificar, borrar y consultar),
tambin es posible la bsqueda de productos.

Jdyb - Mayo 2011


Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________


Para acceder a la zona de administracin es necesario estar autentificado, la
autentificacin se realiza mediante un correo electrnico y una contrasea.


Tambin es posible que los usuarios se registren en la aplicacin con la ventaja
de que no tendrn que introducir los datos completos para realizar la compra.
Tambin podrn consultar su historial de compras y por supuesto modificar sus datos.

Jdyb - Mayo 2011


Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________


La parte principal de la aplicacin es el listado de productos donde el usuarios
puede aadirlos a la cesta de la compra. El usuario podr consultar el estado de su
carrito en todo momento y podr editar la cantidad de cada producto segn desee.

Jdyb - Mayo 2011


Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________


Cuando el usuario quiera dar por terminada su compra tendr que rellenar el
formulario con los datos de la compra en el caso de no estar registrado. En caso
contrario lo nico que tendr que hacer es seleccionar la forma de pago.


Posteriormente un correo electrnico ser enviado al usuario con los detalles
de la compra.
La aplicacin tiene otras funcionabilidades extra a parte de las bsicas de una
tienda online.
Es posible aadir comentarios a los productos siendo un usuario registrado.

Jdyb - Mayo 2011


Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________



Es posible tambin asignar imgenes a los productos, el sistema est capacitado
para enviar emails a los usuarios cuando se registran, cuando realizan una compra, y
tambin tienen la opcin de recuperar la contrasea en caso de prdida; el sistema
genera una nueva contrasea y es enviada por correo electrnico al usuario.

Jdyb - Mayo 2011


Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________


Cuenta con la opcin de usar persistencia contra bases de datos as como
persistencia contra ficheros en formato binario de objetos serializados.

Como ayuda a los administradores cuenta con un registro de peticiones
realizadas al servidor que son guardados en una base de datos o en fichero (segn sea
el mtodo de persistencia); este registro ayudar a realizar un seguimiento detallado
para los administradores.

Es posible la visualizacin de estadsticas de ventas, esta opcin estar
disponible para aquellos usuarios que sean administradores de la tienda.


Jdyb - Mayo 2011

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

3.- Diseo del sistema


3.1.- Herramientas utilizadas
Como lenguaje de programacin para la aplicacin en el servidor se ha usado
Java EE 6, el servidor de aplicaciones usado es GlassFish Server 3.1
Como entorno de desarrollo se ha usado NetBeans 7.0.
Para la presentacin de cara al usuario se han empleado pginas JSP para la
generacin del cdigo HTML que finalmente ser mostrado al usuario mediante el
navegador web que ser el que renderice dicho cdigo.
Gracias a este diseo se podra decir que el trabajo que hemos tenido que
dedicar a la aplicacin del cliente es insignificante debido a que no hemos tenido que
encargarnos nosotros del desarrollo del navegador, nicamente de generar el cdigo
que este renderizar.
Esta es la principal ventaja de usar este modelo de diseo unido a que se estn
usando tecnologas estandarizadas.

Jdyb - Mayo 2011


10

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

3.2.- Patrn de diseo MVC


Para el desarrollo del sistema se ha usado un patrn de diseo en el cual hay
claramente diferenciadas tres partes. Por una parte nos podemos encontrar con los
modelos de datos que en nuestro caso seran los objetos java que necesitamos para
representar la informacin de nuestra aplicacin, la cual estara almacenada en una
base de datos, en ficheros o en cualquier otro modo de persistencia.
Por otra parte tenemos las vistas que seran las pginas que se encargan de la
presentacin al usuario. Estas pginas estaran formadas por las pginas estticas
HTML y las pginas dinmicas JSP.
Por ltimo tendramos la parte del controlador que sera la encargada de
realizar las acciones necesarias para nuestro modelo de negocio. Esta parte realizar
unas acciones y de manera general posteriormente decidir la vista que se desea
presentar al usuario, como ya se ha dicho esta parte se encarga de las operaciones
necesarias por el modelo de negocio y por lo tanto ser esta parte la que reciba las
acciones por parte del usuario.

Base de datos

VB
Actualizar
modelo

Acciones del
usuario

Objetos Java

Controlador
Usuario

Java

Consultas al
modelo

if(conn
SELEC
WHERE
print

Servlet Java
EE

Seleccionar
vista

Modelos de vista

HTML


Jdyb - Mayo 2011

JSP


11

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

3.3.- Diseo de la persistencia. Patrn DAO


A continuacin usaremos el patrn de diseo que se ha usado para el
mecanismo de persistencia de la aplicacin.
Este patrn trata de independizar el tipo de persistencia del resto de la
aplicacin, de esta manera la aplicacin no tiene dependencia del tipo de persistencia
que se este llevando a cabo.
Por poner un ejemplo, podemos estar desarrollando la aplicacin con
persistencia contra ficheros y posteriormente decidir que lo queremos hacer contra
base de datos y no habra que cambiar nada de la lgica de negocio de la aplicacin,
nicamente habra que implementar los mtodos necesarios para persistir contra la
base de datos.
Explicamos a continuacin en que consiste este patrn de diseo.
En primer lugar tendramos una interfaz que indicara los mtodos que son
necesarios en la persistencia (los mtodos a los que se llamarn despus para acceder
a la persistencia).
Por cada mtodo de persistencia tendramos una clase que implementa todos y
cada uno de los mtodos de la interfaz. Para asegurarnos de que no se crea ms de
una de estas clases durante el desarrollo de la aplicacin deberamos hacer que estas
clases sigan un patrn de diseo singleton (explicado posteriormente).
Por ltimo tendramos una factora que dependiendo de los argumentos, en
nuestro caso parmetros del descriptor de despliegue, nos devolvera una instancia de
la clase encargada de la persistencia (dependiendo de los argumentos para el tipo de
persistencia).
Para acceder a la persistencia no tendramos mas que acceder mediante la
interfaz a los mtodos y de esta manera el modelo de negocio de la aplicacin es
totalmente independiente del tipo de persistencia.
El patrn de diseo singleton consiste en crear un constructor para la clase que
solo permita que haya una nica instancia de la clase en la aplicacin. Esto se hara
haciendo un constructor que compruebe si hay o no una instancia de la clase en la
aplicacin, si la hay devolvera es misma instancia, en caso contrario se creara una
nueva instancia.
La forma de controlar las instancias existentes es hacer que la propia clase
contenga en sus atributos una instancia de ella misma.
Mostramos a continuacin un diagrama de clases en el que se muestran las
dependencias de cada una de estas clases.
Jdyb - Mayo 2011

12

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Modelo de persistencia. Patrn DAO


StartListener

persistencia.PersistenceFactory

private persistence: PersistenceInterface

public static PersistenceInterface


getInstance (String type)

public void contextInitialized(ServletContextEvent sce)


public void contextDestroyed(ServletContextEvent sce)
private boolean startValidate(ServletContext context)

beans.Producto

persistencia.PersistenceInterface

beans.Usuario

public boolean init (String locationUser, String


locationProduct);
public boolean exit ()

beans.Comentario
public boolean addUser (Usuario user)
beans.Carrito

persistencia.PersistenceFile

persistencia.PersistenceBD

persistence: PersistenceFile

instance: PersistenceBD

fileNameUser: String
fileNameProduct: String
productos: Map<String, Producto>

public boolean addProduct (Producto prod)


public boolean delUser(String mail)

usuarios: Map<String, Usuario

nameBD: String
logger: Logger

lockProductos: Object
lockUsuarios: Object

public boolean delProduct(String codigo)

pool: DataSource

private ArrayList <String>


requestIncompleteCarts (String mail)

public Usuario getUser (String mail)


public Producto getProduct (String codigo)
public boolean updateUser (String mail, Usuario
user)
public boolean updateProduct (String codigo,
Producto prod)
public int anyAdmin ()
public Map <String, Producto> getProducts()
public Map <String, Usuario> getUsers ()
public Map<String, Producto> searchProd(String
campo, String term)
public boolean saveRequest (String fechaHora,
String requestedURL, String remoteAddr, String
remoteHost, String method, String param, String
userAgent)
public boolean saveCart (Carrito cart, boolean
completado, String date, String formPago)
public Carrito requestLastIncompleteCart (String
mail)
public boolean saveCart (Carrito cart, boolean
completado, String date, String formPago)
public boolean deleteImcompleteCartsClient
(String mailClient)
public ArrayList <Carrito> requestSalesRecord
(String campo, String term)
public ArrayList <Producto>
getDetailsCartRecord (String codigo)
public boolean newComment (Usuario user,
String codigoProducto, String codigoComentario,
String fechaHora, String comentario)
public Comentario getComment (String
codComentario)
public boolean deleteComment (String
codigoComentario)
public boolean updateComment (String
codComentario, Comentario comentario)
public LinkedList <Comentario> getComentarios
(String campo, String valor)

Jdyb - Mayo 2011


13

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

3.4.- Diseo de filtros


En este apartado veremos algunos aspectos del diseo de la aplicacin que
considero de inters aparte de los ya explicados en los apartados anteriores.
Hay un filtro que recoge todas las peticiones y se encarga de registrar cada una
de las peticiones, en este filtro de setean tanto la respuesta como la peticin con la
codificacin que usa toda la aplicacin; de esta manera nos aseguramos de que toda la
aplicacin este funcionando en la misma codificacin para evitar problemas. Ahora
bien, esto no nos asegura de que el resto de cosas externas sigan en la misma
codificacin (UTF-8), como pueden ser las bases de datos u otros recursos externos
que se usen en la aplicacin.
La autentificacin de la aplicacin est basada en el uso de filtros. Hay un filtro
que nos permite acceder a la zona de usuarios registrados de la aplicacin
(dependiendo de los atributos de la sesin) y un filtro posterior que verifica que
podamos acceder a la zona de administracin, zona a la que solo deben acceder los
usuarios con suficientes permisos.

3.5.- Acceso a los mecanismos de persistencia
Respecto al modelo de persistencia que se ha comentado se podra aadir que
para acceder a las funciones de la persistencia lo que se realiza es obtener siempre la
interfaz que se guard en el contexto de la aplicacin al inicio de la misma con un
listener de inicio de contexto.

2.6.- Seguridad de la aplicacin
La aplicacin ha sido diseada prestando mucha atencin a los aspectos de
seguridad de la misma, no se ha tenido absolutamente ninguna idea preconcebida a la
hora del diseo de la misma, se ha partido del pensamiento de que todo ha de ser
validado.
En primer lugar se ha optado por la opcin de eliminar las contraseas de las
bases de datos, la aplicacin no contiene ninguna contrasea, en ningn momento son
guardadas. Lo que se almacena es una huella de la contrasea mas una pequea
cadena fija para que sea resistente tambin a los ataques por diccionario a la base de
datos en busca de huellas conocidas. Cuando el usuario introduce una contrasea se
seguira se obtendra la huella de la misma y lo que se compara seran las dos huellas.
Sin asegurarlo totalmente podra afirmar que la nica forma de que un usuario se
hiciera con la contrasea de otro sera teniendo un sniffer en la red de la vctima
Jdyb - Mayo 2011

14

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

(puesto que la aplicacin no funciona sobre https), otra opcin sera intentar robar la
sesin de alguna manera, pero as no se conseguira la contrasea del usuario, sino
acceso a su sesin por un periodo limitado de tiempo.
Otro aspecto importante en la seguridad son todas las entradas de datos que
ser reciben del usuario tanto de formularios como de cualquier tipo de peticin que
tenga que atender el servidor, no se debe dar por supuesto nada.
En todos los formularios que recibe la aplicacin lo primero que se hace con
ellos es verificar que contengan los parmetros que deseamos (dependiendo del
formulario concreto), y posteriormente todos los parmetros recibidos son validados
con la librera ESAPI mediante expresiones regulares, evitando de esta manera
intentos de Cross Site Scripting o de inyeccin SQL. Tambin son validados todos
aquellos campos que deben permitir cualquier texto (como puede ser el caso de los
comentarios) en busca de cualquier etiqueta HTML sospechosa y tambin se
contemplan los ataques usando codificaciones diferentes.
Posteriormente una vez validados cada uno de los parmetros se analiza cada
uno de ellos para verificar que tengan sentido, no se permiten nmeros negativos, no
se permite eliminar al ltimo administrador, no se permite subir un archivo que no sea
una imagen y como tamao mximo 8mb.
A la hora de construir el sistema se ha construido con una idea final en mente
que es procurar en la medida de lo posible o en todos los casos si es posible que la
aplicacin fallase por el uso incorrecto de los usuarios o el intento de introduccin de
datos errneos en formularios o intento de jugar con las URLs de la aplicacin. Con
esto quiero decir que para cada accin que realiza la aplicacin primero se comprueba
si es posible realizarla. Por ejemplo, no se puede borrar un administrador si es el nico
que hay, no se pueden comprar mas unidades de las que tiene un producto, no se
puede borrar o editar un producto o usuario que no existe.

Jdyb - Mayo 2011


15

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

4.- Modelos de datos usados


En este apartado se explicarn los modelos de datos que han sido usados para
representar todos los datos con los que trabaja la aplicacin.

4.1.- Modelo de datos de Producto
Con esta clase se pretender representar un producto de la tienda con todos los
atributos que contiene, estos atributos sern los requeridos por el enunciado.

Cdigo (Creado de manera automtica usando UUIDs)

Nombre

Precio

Stock

Descripcin corta

Detalles

Se presenta a continuacin un diagrama UML representando la clase.

Producto
Producto
codigo: String

public String getDesc()

nombre: String

public String getDetalles()

precio: double

public String getNombre()

stock: int

public double getPrecio()

desc: String

public int getStock()

detalles:String

public String getCodigo()

public Producto ()

public String
getDisponibilidad ()

public Producto(String
codigo, String nombre,
double precio, int stock)
public Producto(String
codigo, String nombre,
double precio, int stock,
String desc, String detalles)



Jdyb - Mayo 2011

16

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________


Como se puede observar en el diagrama UML no hay ningn mtodo en esta
clase que permita modificar el producto por lo que se puede decir que las instancias de
esta clase sern inmutables, una vez creados los objetos no ser posible modificar los
mismos. Se ha hecho de esta manera para evitar problemas de concurrencia.

Si los objetos no son inmutables sera posible por ejemplo que un usuario que
esta comprando cambiara las unidades de un producto mientras que el administrador
cambie las unidades del mismo producto.

4.2.- Modelo de datos para el usuario
Con esta clase se pretende representar un usuario dentro de la tienda online.
Cada objeto de la clase tendr los siguientes siguientes atributos.

Nombre

Direccin

Email (identificador nico)

Contrasea (MD5 de la contrasea)

Permisos (a Administrador, c Cliente normal)

A continuacin de puede observar un diagrama UML representando la clase.

Usuario

Usuario
nombre: String

public String getDir()

dir: String

public String getMail()

mail: String

public String getNombre()

pass: String

public String getPass()

permisos: char

public char getPermisos()

public Usuario ()

public String
getPrintablePermissions ()

public Usuario(String
nombre, String dir, String
mail, String pass, char
permisos)



Jdyb - Mayo 2011

17

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

4.3.- Modelo de datos para el la cesta de la compra


Con esta clase se pretende representar la cesta de la compra de un usuario. El
carrito de la compra tiene los siguientes atributos.

Cdigo del carrito

Email del usuario

Mapa de productos que contiene los productos aadidos al carro

Precio del carro completo

Fecha de la compra

Hora de la compra

Forma de pago de la compra

Carrito
Carrito
codigo: String

public Carrito ()

user: String

public Carrito(String codigo,


String user)
public Carrito(String codigo,
String user, double precio)
public Carrito(String codigo,
String user, double precio,
String fecha, String hora,
String formaPago)
public boolean editCant
(String prod, int cantidad,
double prodPrice)
public void delProduct
(String prod)

articulos: Map <String,


Integer>
precio: double
fecha: String
hora: String
formPago: String
public Map <String, Integer>
getArticulos ()
public int getLenght ()
public double getPrecio ()
public String getCodigo()

public String getUser()


public void setArticulos
(Map<String, Integer>
articulos)

public void setPrecio


(double price

public String getHora()

public String getFecha()

public void setUser(String


user)

public String getFormaPago


()
public void addProduct
(String newProd, int
cantidad, double prodPrice)

public void removeProd


(String prod, double
prodPrice)


Jdyb - Mayo 2011

18

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

4.4.- Modelo de datos para los comentarios


Con esta clase se pretende representar un comentario aadido por un usuario a
un producto del catlogo de la tienda. Un comentario se representa con los siguientes
atributos.

Cdigo del comentario

Fecha

Hora

Cdigo del producto

Email del usuario

Nombre del usuario

Texto del comentario

Comentario
Comentario
codigoComentario: String

public String getEmail()

fecha: String

public String
getCodigoComentario()
public String
getCodigoProducto()
public String getComentario
()

hora: String
codigoProducto: String
Email: String
nombre: String
comentario: String
public Comentario(String
codigoComentario, String
fecha, String hora, String
codigoProducto, String
Email, String nombre, String
comentario)

public String getFecha()


public String getHora()
public String getNombre()
public String getFechaHora
()

Jdyb - Mayo 2011


19

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

5.- Configuracin de la aplicacin


En este captulo se van a describir diferentes aspectos de configuracin de la
aplicacin necesarios para poder desplegar la aplicacin correctamente.
5.1.- Configuracin de persistencia en modo fichero
Es posible que la aplicacin funcione con persistencia contra ficheros. Para que
funcione correctamente es necesario configurar una serie de parmetros en el
descriptor de despliegue de la aplicacin.
Lo primero que tenemos que hacer es indicar que la persistencia de la
aplicacin va a funcionar contra ficheros. Para ello tenemos que configurar el
parmetro de contexto persistenceMethod. El valor que debe tener este
parmetro para que funcione con ficheros es file.



Posteriormente lo que tendremos que hacer es configurar la ruta de los
ficheros, si nicamente pone el nombre del fichero se guardaran en el directorio del
dominio del servidor de aplicaciones. Los archivos van a ser cargados usando
directorios del sistema, no se van a emplear mtodos de contexto o del classpath para
cargarlos.
La ruta del fichero que contiene los datos de productos y usuarios viene dado
por el parmetro de contexto archivoDatos. Es un fichero de tipo binario.



La ruta del fichero que contiene el historial de carritos viene dada por el
parmetro de contexto archivoHistoriales. Es un fichero de tipo binario



La ruta del fichero que contiene carritos sin comprar que son guardados para
ser recuperados al inicio de la sesin de los usuarios viene dada por el parmetro de
contexto archivoRecuperacion. Es un fichero de tipo binario.

Jdyb - Mayo 2011


20

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________



La ruta del fichero de registro de acciones viene dada por el parmetro de
contexto archivoLog. Es un fichero de texto plano.

Jdyb - Mayo 2011


21

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

5.2.- Configuracin de persistencia en modo de bases de datos


La aplicacin tambin est preparada para que la persistencia funcione contra
bases de datos, para ello se emplea un pool de conexiones que es necesario configurar
en el servidor de aplicaciones, y en el descriptor de despliegue.
La aplicacin se ha desarrollado con una base de datos MySQL, para preparar la
base de datos para la aplicacin se incluye junto con este documento un export de la
base de datos completa.
A continuacin se muestran los datos que son necesarios para configurar el
pool de conexiones

Nombre del recurso: el que se desee.

JNDI: jdbc/OnlineShop (el nombre que ser usado en el descriptor de


despliegue)

Motor de bases de datos: MySQL

Nivel de aislamiento de las transacciones: READ-COMMITED

Puerto: 3306 (puerto por defecto de mySQL)

Nombre de la base de datos

URL: jdbc:mysql://HOSTBASEDATOS

Nombre del servidor

Usuario

Contrasea

Para que el pool de conexiones funcione es necesario incluir el conector de la


base de datos en los directorios del servidor de aplicaciones. El conector para MySQL
lo puede descargar desde la pgina web oficial.
http://www.mysql.com/downloads/connector/j/
Una vez descargado debe incluir el archivo jar del conector en el directorio del
servidor de aplicaciones. En el caso de GlassFish ser el siguiente.
glassfish-3.1/glassfish/lib

Una vez se ha configurado el servidor de aplicaciones hay que pasar a
configurar la aplicacin.

Jdyb - Mayo 2011


22

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________


En primer lugar es necesario configurar el modo de persistencia en el descriptor
de despliegue.



En segundo lugar hemos de configurar el nombre del recurso JNDI y
posteriormente el nombre de la tabla. Para ello se usan parmetros del contexto que
fueron usados para la persistencia en modo de fichero.

Tambin es necesario configurar el recurso en el descriptor de despliegue.



Por ltimo se ha de configurar el recurso en el descriptor de despliegue
especfico del servidor de aplicaciones. En el caso de GlassFish se hara como se puede
ver aqu.




A continuacin se muestran las sentencias SQL necesarias para crear las tablas
necesarias de la base de datos.

Jdyb - Mayo 2011


23

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Jdyb - Mayo 2011


24

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

5.3.- Configuraciones miscelneas sobre la aplicacin


Si la aplicacin no encuentra un usuario administrador automticamente lo
crear partiendo de una serie de parmetros del descriptor de despliegue. Es necesario
tener en cuenta que debido a que existen validaciones de datos en la aplicacin los
datos introducidos tendrn que ser datos vlidos.




Es posible configurar la caducidad de la sesin de usuario en minutos, esto
indica el tiempo en el que si la sesin est inactiva se cerrar de manera automtica.



Sobre el contexto de la aplicacin es necesario indicar que est preparada para
funcionar sin contexto directamente sobre la raz del servidor de aplicaciones debido a
que todas las rutas usadas en la aplicacin se dan a partir de la raz del servidor. Si se
configurara un contexto habra que configurar de nuevo todas las rutas de la
aplicacin. Este parmetro de configuracin lo encontramos en el descriptor de
despliegue propio del servidor de aplicaciones. Mostramos como se hara para
GlassFish.


Tambin es necesario que la carpeta setup de la aplicacin este aadida al
classpath de ejecucin de la mquina virtual.

En esta carpeta se encuentran ficheros de configuracin de las libreras de
validacin y las plantillas de los emails que son enviados.

Jdyb - Mayo 2011


25

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________



5.4.- Configuracin del servidor SMTP para el envo de emails
La aplicacin permite el envo de emails a los usuarios cuando son registrados
con sus datos de registro, tambin cuando una compra es realizada detallndose en el
mismo los detalles de la compra y por ltimo tambin admite la posibilidad de
recuperacin de la contrasea de los usuarios en caso de olvido.
Para el envo de los emails es necesario configurar un servidor SMTP y ser
configurado desde el descriptor de despliegue de la aplicacin mediante los
parmetros de contexto. Los parmetros con los que viene configurado son
plenamente funcionales.

hostMail: Host del servidor SMTP

TSLMail: Si el servidor permite o no cifrado TSL

mailPort: Puerto del servidor SMTP

mailUser: Usuario con el que es necesario iniciar sesin para enviar los
correos

Jdyb - Mayo 2011


26

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

authMail: Si es necesaria o no la autentificacin para el envo de


mensajes

mailFrom: Direccin de email del remitente que aparecer en los


correos enviados

mailPass: Contrasea del servidor SMTP

A continuacin se muestra un ejemplo de configuracin en el descriptor de


despliegue de la aplicacin.

Jdyb - Mayo 2011


27

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

5.5.- Configuracin de las plantillas para el envo de emails


Existen plantillas personalizables para el envo de emails. Las podemos
encontrar en la carpeta setup que como hemos dicho debe de estar aadida al
classpath de la mquina virtual de java.
En primer lugar encontramos la plantilla con nombre plantillaCompra.html. Esta
plantilla ser usada para el envo de emails detallando los detalles de la compra.
Usted decide la informacin que desea incluir en la plantilla con las siguientes
claves, donde usted ponga los siguiente cdigos ser donde aparezca en el email la
informacin correspondiente.

&LISTA: Aqu aparecer una tabla detallando la lista de productos


siguiendo los estilos css .headerTable y .contentTable que indican el
estilo de la cabecera y el contenido respectivamente

&TOTAL: Aqu aparecer el total de la compra en euros y con dos


decimales.

&NAME: Nombre del cliente

&EMAIL: Email del cliente

&DIR: Direccin del cliente

&FORMPAGO: Forma de pago escogida por el cliente


La plantilla de envo de recuperacin de contrasea est bajo el nombre
plantillaRecuperarPass.html. Se detallan a continuacin los cdigos para la inclusin de
datos.

&NAME: Nombre del cliente

&EMAIL: Email del cliente

&PASS: Nueva contrasea para el cliente


La plantilla de registro para los usuarios esta bajo el nombre
plantillaRegistro.html. Se detallan a continuacin los cdigos para la inclusin de
datos.

&NAME: Nombre del cliente elegido para el registro

Jdyb - Mayo 2011


28

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

&EMAIL: Email del registro

&DIR: Direccin del cliente para el registro


5.6.- Libreras necesarias
En este captulo vamos a detallar cuales son las libreras que han sido usadas en
el desarrollo de la aplicacin.
Podemos encontrar las libreras necesarias en la carpeta lib.
ESAPI 2.0GA Librera usada para la validacin de entradas de usuario est
situado dentro de la carpeta lib y necesita las libreras que estn incluidas en la carpeta
esapi-required.
Los ficheros de configuracin necesarios para esta librera se encuentran en la
carpeta setup que como hemos indicado hay que aadirla al classpath.

ESAPI.properties: Fichero principal de configuracin de ESAPI

validation.properties: Fichero de configuracin para las expresiones


usadas en la validacin

antisamy-slashdot-1.4.3.xml: Fichero de validacin de HTML para HTML


que pueda introducir el usuario

JFreeChart 1.0.13 es la librera que se ha usado para generar las grficas de


estadsticas, situada en la carpeta lib y requiere la librera Jcommon 1.0.16 tambin
situada en la carpeta lib.

Jdyb - Mayo 2011


29

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Jdyb - Mayo 2011


30

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

6.- Funcionamiento en detalle del sistema


En este apartado se va a detallar el flujo de navegacin de cada una de las
operaciones que se pueden realizar y de esta manera comprender mejor su
funcionamiento.
6.1.- Estructura de la aplicacin
En el presente apartado vamos a ver como se ha organizado la aplicacin en
directorios segn las funciones de cada Servlet, clase java o vista JSP.
Mostramos en primer lugar la organizacin de Servlets y clases en los diferentes
paquetes.

Mostramos a continuacin la organizacin de vistas de la aplicacin.

Jdyb - Mayo 2011


31

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________



En primer lugar podemos observar como tenemos un paquete control.admin, al
igual que en las vistas tambin lo hay, dentro de la carpeta admin podemos encontrar
tambin una carpeta administration. Dentro del paquete control.admin de archivos
java tambin se encuentra un directorio que no se ve tambin llamado administration,

Jdyb - Mayo 2011


32

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

podemos observar que existe este directorio en el descriptor de despliegue en la


configuracin de los Servlets.

La funcin que cumple el directorio admin es almacenar en el mismo las
acciones de administracin, pero slo aquellas que se puedan llevar a cabo siendo
usuario registrado pero sin permisos de administrador. La entrada a este directorio se
comprueba con el filtro AdminFilter definido en el descriptor de despliegue de la
aplicacin.

En el directorio administration es donde se encuentran todas las acciones que
se pueden llevar a cabo siendo administrador, que son todas aquellas que se refieren a
la administracin de la tienda. La entrada en esta zona es comprobada por el filtro
AdministrationFilter, este filtro solo comprueba si el usuario es administrador o no lo
es, no es necesario que compruebe la autentificacin del usuario debido a que ya ha
sido comprobada por el filtro AdminFilter el cual se encuentra antes que este.

Tambin podemos observar el paquete modelo, en el cual se encuentran los
beans utilizados en la aplicacin. Dentro del mismo encontramos las clases que
representan un carrito de la compra, un comentario, un usuario o un producto.

Dentro de paquete control encontramos diferentes Servlets y clases usados
para realizar diferentes funciones de la aplicacin, ser explicada cada uno de ellos en
detalle posteriormente.

Podemos observar tambin el paquete persistencia en el cual se encuentran las
clases necesarias que se describieron anteriormente, todas ellas juntas forman el
patrn DAO de la aplicacin.

Por ltimo podemos observar el paquete control.productos, todo lo que hay
dentro de este paquete es accesible mediante la ruta /shop que si observamos hay una
carpeta que se llama as en las vistas de la aplicacin. Todo lo que se encuentra dentro
de este directorio hace las funciones necesarias para la compra y todas aquellas
acciones a realizar con los productos, eso s, nicamente aquellas acciones pblicas.

Pasemos a ver ahora la estructura organizativa de las vistas de la aplicacin. En
primer lugar comentar que todas las vistas son pginas dinmicas JSP, no hay
contenido esttico html.

Como ya hemos visto anteriormente tenamos las carpetas admin y
administration, que ya se ha comentado que tipo de funciones agrupaban.

Posteriormente observamos la carpeta css, en la cual podemos encontrar la
hoja de estilos de la aplicacin, todas las vistas de la aplicacin usan esta hoja de
estilos. Tambin podemos encontrar dentro de esta carpeta la hoja de estilos que
aplicada sobre los formularios a la hora de la validacin mediante JavaScript.
Jdyb - Mayo 2011

33

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________


Observamos una carpeta llamada images, dentro de esta carpeta se guardarn
todas las imgenes que use la aplicacin, dentro de la misma habr varias carpetas.

La carpeta icons contiene los iconos que se usan en la aplicacin, como por
ejemplo puede ser el carrito de la compra.

Posteriormente vemos la carpeta products que contiene las imgenes de los
productos, cada una de ellas tiene como nombre el cdigo del producto al que
pertenece.

Observamos la carpeta stats la cual contiene todas las imgenes referentes a
las estadsticas grficas de la aplicacin. Las estadsticas grficas sern generadas y
almacenadas en esta carpeta y sern posteriormente mostradas al usuario.

Por ltimo la carpeta template, la cual contiene todas las imgenes utilizadas
por la plantilla de la aplicacin.
Posteriormente vemos en la raz de la aplicacin el home, la pgina de login y la
pgina de acerca de.
Despus podemos encontrar la carpeta scripts, dentro de la cual podemos
encontrar todos los documentos javascript usados en la aplicacin.
Dentro de esta carpeta observamos el documento jquery-1.6.1.js, que es la
librera jquery necesaria para usar otros plugins que se han usado que se vern a
continuacin.
El documento scripts.js incluye una serie de funciones creadas para no tener
que escribirlas directamente en las pginas jsp sino solo tener que llamar a estas
funciones. Por ejemplo, podemos encontrar dentro de este documento la funcin
necesaria para cargar el editor de textos tiny-mce.
Posteriormente encontramos la carpeta tiny_mce en la que se encuentran
todos los elementos del plugin tiny-mce.
Finalmente observamos el documento vanadium.js que es el la librera usada
para las validaciones de javascript. Este documento ha sido modificado para dar los
mensajes en espaol y tambin se han modificado algunas de las expresiones
regulares de validacin y se han aadido otras.

Observamos la carpeta shop que contiene las vistas de las acciones a realizar
referentes a las acciones con los productos y con la compra, siempre y cuando sean
pblicas.

Posteriormente tenemos la carpeta WEB-INF, en la cual se encuentran aquellas
pginas a las que no deseamos que el usuario llegue directamente, tiene varias
Jdyb - Mayo 2011

34

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

carpetas dentro y en su raz el descriptor de despliegue y el fichero de configuracin


especfico del servidor de aplicaciones usado (GlassFish 3.1).

Encontramos en primer lugar la carpeta admin que contiene la pgina de
logout, a la cual tiene lgica que no se llegue sin realizar esa accin en concreto,
tambin tiene la pgina de pre-visualizacin de producto que es usada al editar y
aadir productos y tiene lgica que solo se llegue a esta pgina a travs de dichas
acciones.

Encontramos la carpeta include que contiene pginas jsp que van a ser incluidas
en las vistas de la aplicacin, a estas pginas no se debe llegar, solo deben ser incluidas
en el cuerpo de otras pginas jsp.

Dentro de esta carpeta podemos encontrar el header de la aplicacin que
contiene el men superior y la barra superior, tambin encontramos el footer o pie de
pgina de la misma, observamos tambin una pgina llamada resultados que es la
encargada de mostrar los resultados de las acciones realizadas y esta es incluida en
todas las pginas jsp que esperan recibir mensajes de los resultados de las acciones.
Encontramos tambin en este directorio el men de la aplicacin tanto para la seccin
de administracin como para el resto de las secciones (menu, menuAdministracion).
Por ltimo encontramos el mdulo de comentarios de la aplicacin que ser el que es
incluido en la pgina de visualizacin de producto para que muestre los comentarios
de los productos.

Finalmente encontramos un directorio que contiene las pginas de error
(paginasError) de la aplicacin, a las cuales no se debe llegar salvo que haya ocurrido el
error pertinente.










Jdyb - Mayo 2011

35

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________
VB

6.2.- Diagramas de navegacin de filtros

En este apartado mostraremos los diagramas de navegacin referentes a los


filtros para evitar mostrarlos en los diagramas de navegacin de todas las acciones por
claridad.

Todas las peticiones

Java

LogFilter.java

Destino
Guarda
registro deVB
peticin




Peticiones dirigidas a /admin/*

Autentificado

Java

Java
Destino

LogFilter.java

AdminFilter.java
Sin
autentificar

JSP

restricted.jsp

Jdyb - Mayo 2011


36

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________
Peticiones dirigidas a /admin/administration/*

Sin
autentificar

Java

Java

LogFilter.java

AdminFilter.java

Autentificado

Java

VB

JSP

restricted.jsp

Administrador
Destino

AdministrationFilter.java

Usuario
registrado

JSP

/admin/index.jsp

Jdyb - Mayo 2011


37

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

6.3.- Diagramas de navegacin de listeners


En este apartado detallamos los diagramas de navegacin para los listeners de
VB
la aplicacin.
Listener de inicio de contexto
Despliegue de la
aplicacin

JSP

Persistencia
cargada
if(conn
SELEC
WHERE
print

/index.jsp

Java

StartListener.java

Error
inicializando
persistencia

RuntimeException


Listener de sesin
Sesin caducada o
cerrada

Si no es usuario
registrado; o si lo es pero
no tiene carro. Continua el
flujo normal

if(conn
SELEC
WHERE
print

SaveSession
Listener.java

Si es usuario autentificado
y tiene carro sin comprar

Continua el flujo normal de


navegacin

Destino

Jdyb - Mayo 2011


Guarda
carrito que no
se ha
confirmado

38

VB

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

6.4.- Flujo de navegacin de las operaciones pblicas


En este apartado se ver el flujo de navegacin de las operaciones que se
pueden realizar en la tienda de manera pblica.
VB

En estos diagramas podremos ver cuadros en los que pone GET y POST, esto
indica las acciones que se realizarn en caso de acceder a los servlets mediante un
verbo u otro de los mtodos http.
Para este primer diagrama vamos a mostrar como se sigue el diagrama con
capturas de pantalla para que se tome como ejemplo para entender el resto de los
diagramas.
Aadir producto al carrito

JSP
Listado de productos

Java
<script
var a=
var xl
if(xls

AddCarritoServlet

/shop/products.jsp

Aade el producto al
carro si corresponde

Caso de error aade


un mensaje a la
peticin

Si el error es
formulario
incorrecto o
peticin
POST

Error 404


Jdyb - Mayo 2011

39

VB

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

VB
VB


Actualizar unidades de un producto en el carrito

JSP
Listado de productos en
el carrito

Java

Si la sesin no
contiene carrito

JSP

<script
var a=
var xl
if(xls

EditAmount
Servlet

Formulario
incorrecto

/shop/
products.jsp

/shop/cart.jsp

Error 404

Actualiza el carro si
las
comprobaciones
son positivas

Si hay error en las


comprobaciones se
aade mensaje



Para borrar un producto de la cesta se seguira el mismo mecanismo con la
salvedad de que la cantidad que se pedira son cero unidades.

Jdyb - Mayo 2011


40

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________
Borrar el carrito de la compra (vaciarlo)

JSP

Java

Listado de productos en
el carrito

<script
var a=
var xl
if(xls

VB

DeleteCart
Servlet

VB

/shop/cart.jsp


Validar carrito de la compra (paso previo a la compra)

VB

JSP

Si se han hecho
cambios en el
carrito se avisa

Java

Listado de productos en
el carrito
GET

<script
var a=
var xl
if(xls

UpdateCart
Servlet
Si no es la
operacin de venta
definitiva

/shop/cart.jsp
Si no hay carrito en
la sesin

JSP
Listado de productos

JSP
Formulario de venta

/shop/products.jsp

/shop/buycart.jsp

POST

Error 404

Jdyb - Mayo 2011


41

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________
Realizar la compra

JSP

VB

Java

Formulario de venta

Si se han hecho
cambios en el
carrito se avisa

<script
var a=
var xl
if(xls

POST

/shop/buycart.jsp

UpdateCart
Servlet

Si no hay carrito en
la sesin

Java

JSP

<script
var a=
var xl
if(xls

Listado de productos

Error 404
GET

VB
BuyServlet

/shop/products.jsp

POST

Fallos o cambios
en el carrito

Compra exitosa

Registro de la
compra

Enviar Email

JSP
Compra realizada

/shop/buyinformation.jsp



Es importante destacar de este diagrama el paso previo antes de la compra por
el Servlet UpdateCartServlet, es posible que el que lo vea se pregunte porque pasa
antes por aqu que por el Servlet que realmente realiza la compra. Se ha diseado as
por cuestiones de rendimiento. El Servlet que realiza la compra comprueba si las
unidades son correctas o no y edita el catlogo, pero estas operaciones las realiza de
manera sincronizada y pidiendo locks, por lo que el rendimiento de la aplicacin
disminuira significativamente en el caso de que hubiera muchos hilos concurrentes
ejecutando el Servlet de compra.
Por ello se ha implementado el primer Servlet, en el que se realizan esas
operaciones (sin editar productos) pero no son sincronizadas y de esta manera
Jdyb - Mayo 2011

42

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

evitamos que todas las peticiones lleguen al servlet que realiza la compra. Se podra
decir que de esta manera reducimos las peticiones que llegan al servlet de compra y
las que llegan al mismo tienen un porcentaje de acierto mayor a la hora de completar
VB
la compra con xito.
Tambin es importante este paso previo antes de la compra porque ese servlet
tambin realiza una actualizacin del precio del carrito por si algn producto cambi el
precio en el periodo de tiempo en el que ha estado ese producto en el carrito. De esta
manera aseguramos que el precio que se paga por el carrtito es el actual.

Busqueda de productos

JSP
Busqueda

Java

GET

<script
var a=
var xl
if(xls

SearchProduct
Servlet

POST

Error 404

/shop/products.jsp
Correcto

Sin parmetros de
vuelta

Buscar
productos

Jdyb - Mayo 2011


43

VB

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________
Registro de usuarios

JSP

GET

Registro
Error 404
POST

Ante errores hay


mensajes

/login.jsp

Registro
correcto

Nuevo usuario

VB

VB

Enviar email
registro



Inicio de sesin

JSP

GET

Java

Inicio de sesin

<script
var a=
var xl
if(xls

Error 404
POST

AuthServlet

Login

Autentificacin
correcta

Errores en la
autentificacin
Pgina a la que se intent
acceder y dio error

Inicio de sesin
manual

JSP

Inicio de sesin
despus de un error
Inicio

/index.jsp


Jdyb - Mayo 2011

44

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________
Recuperacin de contrasea

JSP

Java

Inicio de sesin

GET

<script
var a=
var xl
if(xls

PassRecover
Servlet

/login.jsp

Error 404
Proceso
correcto

POST
Error en el
proceso

Actualizar
contrasea

Jdyb - Mayo 2011


Envio email para


recuperar la contrasea

45

VB
Juan Dez-Yanguas Barber
Programacin con Java EE
Tienda Online
_____________________________________________________________________________

6.5.- Flujo de navegacin para operaciones de usuario registrado


En este apartado se va a detallar el flujo de navegacin para las operaciones
que pueden realizar los usuarios registrados (no administradores).

VB

Cambio de contrasea
JSP

Java

Cambio de contrasea

GET

VB

<script
var a=
var xl
if(xls

ChangePass
Servlet

/admin/
preferences.jsp

Error 404
POST

Error en el
proceso

JSP
Proceso
completado
/WEB-INF/
admin/
logout.jsp

Java
<script
var a=
var xl
if(xls

LogOutServlet

No se encuentra el
usuario de la sesin

Actualizar
datos

Jdyb - Mayo 2011


46

VB

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Cambiar los datos personales

JSP

GET

Java

Cambio de datos personales

<script
var a=
var xl
if(xls

Error 404

EditUserServlet
POST

/admin/preferences.jsp

VB

Error en el
proceso

VB
Actualizar
datos

Proceso
completado

Aadir comentario al producto


GET

Java

JSP

<script
var a=
var xl
if(xls

Aadir comentario

Error 404
POST

AddComment
Servlet

/shop/
viewprod.jsp?
prod=

Error en el
proceso

Proceso
completado

Guardar
datos

Jdyb - Mayo 2011


47

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Cerrar sesin
Java

JSP
Cerrar sesin

<script
var a=
var xl
if(xls

VB

VB

LogOutServlet

/logout

Sesin no
iniciada

La sesin se cerro
por un error

Cierre
normal

JSP

JSP

JSP

Login

/index.jsp

Login

/login.jsp

Jdyb - Mayo 2011


/WEB-INF/
admin/
logout.jsp

48

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
VB
VB
_____________________________________________________________________________

6.6.- Flujo de navegacin de las operaciones del administrador


En este apartado veremos en detalle como es el flujo de las operaciones que
puede realizar un usuario de la tienda con permisos de administrador.

Aadir producto al catlogoVB


JSP

Java

1 ----2 ----3 -----

POST

<script
var a=
var xl
if(xls

Aadir al catlogo

AddProduct
Servlet

/admin/
administration/
addproduct.jsp

Error en el
transcurso de la
operacin

Operacin exitosa
GET

JSP
Confirmar
producto

Previsualizacin producto

VB

Editar
producto

/WEB-INF/admin/
preview_prod.jsp
GET

Error
guardando

Exito
guardando

Guarda
producto

JSP
Administracin de productos

/admin/administration/
products_administration.jsp

Jdyb - Mayo 2011


49

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Editar producto del catlogo


JSP
Editar producto
1 ----2 ----3 -----

Java

POST

VB

<script
var a=
var xl
if(xls

Operacin
correcta

EditProduct
Servlet

/admin/
administration/
modifyprod.jsp

Errores en la
operacin

JSP
Previsualizacin producto

Editar
producto

JSP
Administracin de productos

Confirmar
producto

/WEB-INF/admin/
preview_prod.jsp

GET
GET

/admin/administration/
products_administration.jsp
Error
guardando

Exito
guardando

Guarda
producto

Jdyb - Mayo 2011


50

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Editar usuario
VB
JSP

GET

Java

Editar usuario

<script
var a=
var xl
if(xls

Error 404
POST

EditUserComplete
Servlet

/admin/administration/
edituser.jsp?user=

Errores

Operacin
completada

JSP
Administracin de
usuarios

VB

VB

Actualizar
usuario

/admin/administration/
user_administration.jsp

Borrar usuario
JSP
Lista de usuarios

Java
<script
var a=
var xl
if(xls

Error en
peticion
Error 404

DeleteUser
Servlet

/admin/administration/
user_administration.jsp
Borrado
correcto

Error en el
proceso

Borrar
usuario

Jdyb - Mayo 2011


51

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Borrar producto
JSP

VB

JSP

Listado productos

Borrar producto

/admin/administration/
delprod.jsp?prod=

/admin/administration/
products_administration.jsp

Cancelar

Confirmar

POST

Java
<script
var a=
var xl
if(xls

DeleteProduct
Servlet

GET
Error

Error 404

Exito

Borrar
producto

Jdyb - Mayo 2011


52

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Editar comentario
JSP

JSP

Producto

Editar comentario

VB
Error 404

/admin/administration/
editcomment?cod=

/shop/viewprod.jsp?
prod=

Parmetros
correctos

Parmetros
incorrectos

Error
validacin

Java

<script
var a=
var xl
if(xls

Errores

EditComment
Servlet
Correcto

Actualizar
comentario

Jdyb - Mayo 2011


53

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

Borrar comentario
JSP
Java

Producto

Error 404

<script
var a=
var xl
if(xls

DeleteComment
Servlet

/shop/viewprod.jsp?
prod=

Error
parmetros
o POST
Borrado
correcto

Borrado
fallido

Jdyb - Mayo 2011


54

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

6.7.- Sobre el JavaScript que se ha usado


Todo el JavaScript usado en el sistema usan la librera JQuery, cuya principal
funcin consiste en facilitar el acceso al documento HTML, facilitar el manejo de
eventos as como en el uso de Ajax.
En primer lugar podemos destacar la librera VanadiumJS que nos ayuda a la
validacin de formularios mediante JavaScript. Esta librera es capaz de validar campos
de los formularios simplemente poniendo la clave correspondiente en el atributo class
del campo del formulario y nos da el mensaje de error siguiendo la hoja de estilos que
est dentro de la carpeta css.
Mostremos un ejemplo para el formulario de login.



Mostramos a continuacin la web de la librera usada, aunque el documento de
la librera que se usa en esta aplicacin ha sido modificado para dar los mensajes en
espaol y tambin se han modificado algunas de las expresiones regulares y se han
aadido otras expresiones regulares como por ejemplo para validar las direcciones.

http://www.vanadiumjs.com/


Otra de las libreras usadas es Tiny-MCE el cual sirve para que los cuadros de
texto de los textarea sean cuadros de texto WYSIWYG. Para ello hay que inicializar las
pginas que contengan los textarea con una funcin que especifica las opciones de
plugin. Esta funcin la podemos ver en el documento scripts.js.

Jdyb - Mayo 2011


55

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________



Dejo a continuacin la web del plugin en donde se puede obtener ms
informacin acerca de las opciones.

http://tinymce.moxiecode.com/


Algo que hay que tener muy en cuenta a la hora de usar este plugin es que se
ha dejado muy corto de opciones debido a que se valida el html de entrada en el
servidor por cuestiones de seguridad, por lo que hay ciertas etiquetas de html o css
que no estn permitidas, por ello el fichero XML de configuracin de antisamy est
adaptado especialmente a este plugin.

Otro aspecto muy importante a tener en cuenta es que la combinacin de estos
dos plugins puede tener problemas, a continuacin explico las causas.

El cuadro de texto WYSIWYG que se genera no es el mismo textarea que hay en
nuestro html, se podra decir que es uno virtual, por lo que nosotros escribimos en el
virtual, por lo tanto nuestro textarea est vaco y por esta causa la validacin por la
librera Vanadium fallara.

Por ello lo que hay que hacer es volcar el contenido del cuadro de texto
WYSIWYG en el textarea real de nuestro html. Para ello hemos de usar eventos, yo
para solucionarlo que he hecho es que se vuelque el contenido con cualquier cambio
que se produzca en el campo de texto. Esto lo podemos configurar en la funcin de
inicializacin del cuadro WYSIWYG.

El cdigo consiste simplemente en que se asigna una funcin al evento y esa
funcin lo que realiza es el volcado del contenido.
Jdyb - Mayo 2011

56

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________



Otra opcin interesante es que se produzca un volcado en el submit del
formulario.

Jdyb - Mayo 2011


57

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

7.- Sistema de control de versiones


Para el desarrollo de este proyecto se ha usado un sistema de control de
versiones centralizado, que ha sido subversin. Como repositorio se ha usado Google
code.
La URL del proyecto en google code es la siguiente.
http://code.google.com/p/tiendaonlinelpijdyb/


Lo que se encuentra almacenado en el repositorio de google code es un
proyecto de NetBeans, el cual se encuentra en la carpeta trunk.
http://code.google.com/p/tiendaonlinelpijdyb/source/browse/#svn%2Ftrunk%
253Fstate%253Dclosed
Es posible bajar el proyecto haciendo un checkout del mismo con el cliente de
subversin que nosotros deseemos. Por ejemplo podemos usar el cliente que trae
Netbeans por defecto.
A continuacin mostramos los pasos que hemos de seguir para hacer un
checkout desde netbeans y as obtener el proyecto completo.

En la siguiente ventana se nos preguntar por la URL del repositorio.


https://tiendaonlinelpijdyb.googlecode.com/svn

Jdyb - Mayo 2011


58

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________


En esta ventana se nos preguntar por la ruta de la que deseamos hacer el
checkout y posteriormente por la ruta dentro de nuestro equipo donde queremos que
se guarde el proyecto.



En la siguiente ventana podemos comprobar que se ha realizado correctamente
la operacin y observamos que ha detectado que es un proyecto de NetBeans y nos da
la opcin de abrirlo o no abrirlo.

Jdyb - Mayo 2011


59

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________



Podemos acudir al directorio de nuestro equipo donde elegimos guardar el
proyecto y comprobaremos que se ha bajado correctamente.

Jdyb - Mayo 2011


60

Juan Dez-Yanguas Barber


Programacin con Java EE
Tienda Online
_____________________________________________________________________________

8.- Aspectos a mejorar


La usabilidad de la aplicacin se ha tratado de hacer lo mejor posible para
hacerla lo ms amigable posible pero an as hay aspectos que son mejorables, como
puede ser la paginacin de los resultados, la apariencia de la pgina de inicio y la de la
pgina de acerca han sido bastante austeras.
La funcin de subida de imgenes podra ser mejorable modificando el modelo
de datos y de esta manera ayudaramos al SEO (Searh Engine Optimization) para que
nuestras imgenes fueran mejor indexadas por los motores de bsqueda.
Tambin podra ser interesante la inclusin de ms tipos de grficas en la
seccin de estadsticas de los administradores para obtener ms informacin sobre el
estado y la evolucin e la tienda. De la misma forma que estas grficas podran ser
mejorables en lo que se refiere al aspecto de las mismas. Por ejemplo se podra usar
javascript para representar las mismas.
Si esto se tratara de una aplicacin real no podramos usar el tipo de dato
double para representar los precios de las cosas debido a que este tipo de dato podra
efectuar redondeos o ajustes que no son deseables cuando estamos hablando de
dinero. Si en la tienda hubiera descuentos o porcentajes de alguna forma se podran
empezar a observar las consecuencias. Lo que mejor hubiera estado para subsanar
este problema sera haber usado la clase de java BigDecimal que tiene una mayor
precisin.

Jdyb - Mayo 2011


61

También podría gustarte