Professional Documents
Culture Documents
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
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
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.
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.
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.
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.
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.
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
10
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
Controlador Usuario
if(conn SELEC WHERE print
Java
Servlet Java EE
Modelos de vista
HTML
JSP
11
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
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
13
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
(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.
15
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
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)
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
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
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 ()
19
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.
20
La ruta del fichero de registro de acciones viene dada por el parmetro de contexto archivoLog. Es un fichero de texto plano.
21
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.
22
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.
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.
23
24
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.
25
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
26
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
27
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
&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.
29
30
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,
32
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
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
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
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
Peticiones dirigidas a /admin/*
Autentificado
Java
Java
Destino
LogFilter.java
JSP
restricted.jsp
36
VB
Java
Java
Sin autentificar
JSP
LogFilter.java
AdminFilter.java
restricted.jsp
Autentificado
Java
Administrador Destino
AdministrationFilter.java
Usuario registrado
JSP
/admin/index.jsp
37
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
/index.jsp
StartListener.java
RuntimeException
Listener de sesin
Sesin caducada o cerrada
SaveSession Listener.java
Destino
38
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
Error 404
Jdyb
-
Mayo
2011
39
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
JSP
EditAmount Servlet
Formulario incorrecto
/shop/ products.jsp
/shop/cart.jsp
Error 404
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.
40
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
JSP
Listado de productos
JSP
Formulario de venta
/shop/products.jsp
POST
/shop/buycart.jsp
Error 404
41
VB
JSP
Formulario de venta
Java
<script var a= var xl if(xls
POST
/shop/buycart.jsp
UpdateCart Servlet
Java
<script var a= var xl if(xls
JSP
Listado de productos
VB BuyServlet
/shop/products.jsp
POST
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
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
43
JSP
Registro
GET
/login.jsp
Registro correcto
Nuevo usuario
VB
VB
Inicio de sesin
JSP
Inicio de sesin
Java
<script var a= var xl if(xls
GET
Login
AuthServlet
Autentificacin correcta
JSP
/index.jsp
Jdyb
-
Mayo
2011
44
JSP
Inicio de sesin
Java
<script var a= var xl if(xls
GET
/login.jsp
Error 404
Actualizar contrasea
45
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
LogOutServlet
Actualizar datos
46
JSP
Cambio de datos personales
GET
Java
<script var a= var xl if(xls
EditUserServlet
/admin/preferences.jsp
VB
Actualizar datos
VB
Error en el proceso
Proceso completado
JSP
Aadir comentario
Java
<script var a= var xl if(xls
AddComment Servlet
Error en el proceso
Proceso completado
Guardar datos
47
Cerrar sesin
JSP
Cerrar sesin
Java
<script var a= var xl if(xls
VB
VB
LogOutServlet
/logout
Sesin no iniciada
Cierre normal
JSP
Login
JSP
JSP
/index.jsp
Login
/login.jsp
48
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.
Java
<script var a= var xl if(xls
POST
AddProduct Servlet
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
49
Java
<script var a= var xl if(xls
POST
VB
EditProduct Servlet
Operacin correcta
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
50
Editar usuario
VB JSP
Editar usuario GET
Java
<script var a= var xl if(xls
EditUserComplete Servlet
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
DeleteUser Servlet
/admin/administration/ user_administration.jsp
Borrado correcto Error en el proceso
Borrar usuario
51
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
DeleteProduct Servlet
Borrar producto
52
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
Errores
Actualizar comentario
53
Borrar comentario
JSP
Producto
Java
<script var a= var xl if(xls
Error 404
DeleteComment Servlet
/shop/viewprod.jsp? prod=
Borrado correcto Borrado fallido
54
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.
55
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
57
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.
58
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.
59
Podemos acudir al directorio de nuestro equipo donde elegimos guardar el proyecto y comprobaremos que se ha bajado correctamente.
60
61