You are on page 1of 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 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 4.- MODELOS DE DATOS USADOS 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 5.- CONFIGURACIN DE LA APLICACIN 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 6.- FUNCIONAMIENTO EN DETALLE DEL SISTEMA 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 7.- SISTEMA DE CONTROL DE VERSIONES 8.- ASPECTOS A MEJORAR 3 4 10 10 11 12 14 14 14 16 16 17 18 19 20 20 22 25 26 28 29 31 31 36 38 39 46 49 55 58 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 9

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

Objetos Java

Acciones del usuario

Controlador Usuario
if(conn SELEC WHERE print

Consultas al modelo Seleccionar vista

Java

Servlet Java EE

Modelos de vista

HTML

JSP

Jdyb - Mayo 2011


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 private persistence: PersistenceInterface public void contextInitialized(ServletContextEvent sce) public void contextDestroyed(ServletContextEvent sce) private boolean startValidate(ServletContext context) persistencia.PersistenceFactory public static PersistenceInterface getInstance (String type)

beans.Producto

persistencia.PersistenceInterface public boolean init (String locationUser, String locationProduct); public boolean exit () persistencia.PersistenceFile persistence: PersistenceFile persistencia.PersistenceBD instance: PersistenceBD pool: DataSource nameBD: String logger: Logger private ArrayList <String> requestIncompleteCarts (String mail)

beans.Usuario

beans.Comentario public boolean addUser (Usuario user) beans.Carrito public boolean addProduct (Producto prod) public boolean delUser(String mail) public boolean delProduct(String codigo) 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)

leNameUser: String leNameProduct: String productos: Map<String, Producto> usuarios: Map<String, Usuario lockProductos: Object lockUsuarios: Object

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 nombre: String precio: double stock: int desc: String detalles:String public Producto () public Producto(String codigo, String nombre, double precio, int stock) public Producto(String codigo, String nombre, double precio, int stock, String desc, String detalles) public String getDesc() public String getDetalles() public String getNombre() public double getPrecio() public int getStock() public String getCodigo() public String getDisponibilidad ()


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 dir: String mail: String pass: String permisos: char public Usuario () public Usuario(String nombre, String dir, String mail, String pass, char permisos) public String getDir() public String getMail() public String getNombre() public String getPass() public char getPermisos() public String getPrintablePermissions ()


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 user: String 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 void setPrecio (double price public String getFecha() public String getFormaPago () public void addProduct (String newProd, int cantidad, double prodPrice) public Carrito () 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) public String getUser() public void setArticulos (Map<String, Integer> articulos) public String getHora() public void setUser(String user) 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 fecha: String 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 getEmail() public String getCodigoComentario() public String getCodigoProducto() public String getComentario () 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. 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
28

&NAME: Nombre del cliente &EMAIL: Email del cliente &PASS: Nueva contrasea para el cliente

Jdyb - Mayo 2011

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.


31

Jdyb - Mayo 2011

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 _____________________________________________________________________________

6.2.- Diagramas de navegacin de filtros

VB

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 VB registro de 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/*

VB

Java

Java

Sin autentificar

JSP

LogFilter.java

AdminFilter.java

restricted.jsp

Autentificado

Java

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

VB

JSP

Persistencia cargada
if(conn SELEC WHERE print

Java

Error inicializando persistencia

/index.jsp

StartListener.java

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

Guarda carrito que no se ha confirmado

Jdyb - Mayo 2011

38

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

VB

VB

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

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
<script var a= var xl if(xls

Si la sesin no contiene carrito

JSP

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
Listado de productos en el carrito

Java
<script var a= var xl if(xls

VB VB

DeleteCart Servlet

/shop/cart.jsp


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

VB
Si se han hecho cambios en el carrito se avisa

JSP
Listado de productos en el carrito GET

Java
<script var a= var xl if(xls

UpdateCart Servlet

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

Si no es la operacin de venta definitiva

JSP
Listado de productos

JSP
Formulario de venta

/shop/products.jsp
POST

/shop/buycart.jsp

Error 404

Jdyb - Mayo 2011

41

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


Realizar la compra

VB

JSP
Formulario de venta

Java
<script var a= var xl if(xls

Si se han hecho cambios en el carrito se avisa

POST

/shop/buycart.jsp

UpdateCart Servlet

Si no hay carrito en la sesin

Java
<script var a= var xl if(xls

Error 404 GET

JSP
Listado de productos

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

VB

JSP
Busqueda

Java
<script var a= var xl if(xls

GET

SearchProduct Servlet

POST

Error 404

/shop/products.jsp
Correcto Sin parmetros de vuelta

Buscar productos

Jdyb - Mayo 2011

43

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


Registro de usuarios

JSP
Registro

GET

Error 404 POST Ante errores hay mensajes

/login.jsp

Registro correcto

Nuevo usuario

VB

VB

Enviar email registro


Inicio de sesin

JSP
Inicio de sesin

Java
<script var a= var xl if(xls

GET

Error 404 POST

Login

AuthServlet

Autentificacin correcta

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

Inicio de sesin manual

Inicio de sesin despus de un error Inicio

JSP

/index.jsp


Jdyb - Mayo 2011 44

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


Recuperacin de contrasea

JSP
Inicio de sesin

Java
<script var a= var xl if(xls

GET

/login.jsp

PassRecover Servlet Proceso correcto POST Error en el proceso

Error 404

Actualizar contrasea

Envio email para recuperar la contrasea

Jdyb - Mayo 2011

45

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

VB

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

Cambio de contrasea
JSP
Cambio de contrasea

VB

Java
<script var a= var xl if(xls

GET

VB
Error 404 POST

ChangePass Servlet

/admin/ preferences.jsp

Error en el proceso

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

Java
<script var a= var xl if(xls

No se encuentra el usuario de la sesin

LogOutServlet

Actualizar datos

Jdyb - Mayo 2011

46

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

Cambiar los datos personales

JSP
Cambio de datos personales

GET

Java
<script var a= var xl if(xls

EditUserServlet

Error 404 POST

/admin/preferences.jsp

VB
Actualizar datos

VB

Error en el proceso

Proceso completado

Aadir comentario al producto


GET

JSP
Aadir comentario

Java
<script var a= var xl if(xls

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
JSP
Cerrar sesin

Java
<script var a= var xl if(xls

VB

VB

LogOutServlet

/logout

Sesin no iniciada

La sesin se cerro por un error

Cierre normal

JSP
Login

JSP

JSP

/index.jsp

Login

/login.jsp

/WEB-INF/ admin/ logout.jsp

Jdyb - Mayo 2011

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
Aadir al catlogo
1 ----2 ----3 -----

Java
<script var a= var xl if(xls

POST

AddProduct Servlet

Error en el transcurso de la operacin

/admin/ administration/ addproduct.jsp JSP


Previsualizacin producto

Operacin exitosa GET Confirmar producto

Editar producto

VB

/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
<script var a= var xl if(xls

POST

VB

EditProduct Servlet

Operacin correcta

/admin/ administration/ modifyprod.jsp

Errores en la operacin

JSP
Previsualizacin producto

Editar producto

JSP
Administracin de productos Confirmar producto GET GET

/WEB-INF/admin/ preview_prod.jsp

/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
Editar usuario GET

Java
<script var a= var xl if(xls

Error 404 POST

EditUserComplete Servlet

/admin/administration/ edituser.jsp?user= JSP


Administracin de usuarios

Errores

Operacin completada

VB

Actualizar usuario

VB

/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
Listado productos

JSP
Borrar producto

VB

/admin/administration/ products_administration.jsp

/admin/administration/ delprod.jsp?prod=
Cancelar Confirmar

POST

Java
<script var a= var xl if(xls

Error 404

GET Error Exito

DeleteProduct Servlet

Borrar producto

Jdyb - Mayo 2011

52

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

Editar comentario
JSP
Producto

JSP
Editar comentario

VB
Error 404

/shop/viewprod.jsp? prod=

/admin/administration/ editcomment?cod=

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
Producto

Java
<script var a= var xl if(xls

Error 404

DeleteComment Servlet

/shop/viewprod.jsp? prod=
Borrado correcto Borrado fallido

Error parmetros o POST

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

You might also like