Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Online Shop
Online Shop
ndice
1.-
PREMBULO
2.- INTRODUCCIN
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
10
Base de datos
VB
Actualizar
modelo
Acciones del
usuario
Objetos Java
Controlador
Usuario
Java
Consultas al
modelo
if(conn
SELEC
WHERE
print
Servlet Java
EE
Seleccionar
vista
Modelos de vista
HTML
Jdyb
-
Mayo
2011
JSP
11
12
persistencia.PersistenceFactory
beans.Producto
persistencia.PersistenceInterface
beans.Usuario
beans.Comentario
public boolean addUser (Usuario user)
beans.Carrito
persistencia.PersistenceFile
persistencia.PersistenceBD
persistence: PersistenceFile
instance: PersistenceBD
fileNameUser: String
fileNameProduct: String
productos: Map<String, Producto>
nameBD: String
logger: Logger
lockProductos: Object
lockUsuarios: Object
pool: DataSource
13
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
Nombre
Precio
Stock
Descripcin corta
Detalles
Producto
Producto
codigo: String
nombre: String
precio: double
stock: int
desc: String
detalles:String
public Producto ()
public String
getDisponibilidad ()
public Producto(String
codigo, String nombre,
double precio, int stock)
public Producto(String
codigo, String nombre,
double precio, int stock,
String desc, String detalles)
Jdyb
-
Mayo
2011
16
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
Usuario
Usuario
nombre: String
dir: String
mail: String
pass: String
permisos: char
public Usuario ()
public String
getPrintablePermissions ()
public Usuario(String
nombre, String dir, String
mail, String pass, char
permisos)
Jdyb
-
Mayo
2011
17
Fecha de la compra
Hora de la compra
Carrito
Carrito
codigo: String
public Carrito ()
user: String
Jdyb
-
Mayo
2011
18
Fecha
Hora
Comentario
Comentario
codigoComentario: String
fecha: String
public String
getCodigoComentario()
public String
getCodigoProducto()
public String getComentario
()
hora: String
codigoProducto: String
Email: String
nombre: String
comentario: String
public Comentario(String
codigoComentario, String
fecha, String hora, String
codigoProducto, String
Email, String nombre, String
comentario)
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
URL: jdbc:mysql://HOSTBASEDATOS
Usuario
Contrasea
22
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.
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
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.
mailUser:
Usuario
con
el
que
es
necesario
iniciar
sesin
para
enviar
los
correos
26
27
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.
28
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.
29
30
31
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
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
35
Java
LogFilter.java
Destino
Guarda
registro deVB
peticin
Peticiones dirigidas a /admin/*
Autentificado
Java
Java
Destino
LogFilter.java
AdminFilter.java
Sin
autentificar
JSP
restricted.jsp
36
Sin
autentificar
Java
Java
LogFilter.java
AdminFilter.java
Autentificado
Java
VB
JSP
restricted.jsp
Administrador
Destino
AdministrationFilter.java
Usuario
registrado
JSP
/admin/index.jsp
37
JSP
Persistencia
cargada
if(conn
SELEC
WHERE
print
/index.jsp
Java
StartListener.java
Error
inicializando
persistencia
RuntimeException
Listener de sesin
Sesin caducada o
cerrada
Si no es usuario
registrado; o si lo es pero
no tiene carro. Continua el
flujo normal
if(conn
SELEC
WHERE
print
SaveSession
Listener.java
Si es usuario autentificado
y tiene carro sin comprar
Destino
Guarda
carrito que no
se ha
confirmado
38
VB
En
estos
diagramas
podremos
ver
cuadros
en
los
que
pone
GET
y
POST,
esto
indica
las
acciones
que
se
realizarn
en
caso
de
acceder
a
los
servlets
mediante
un
verbo
u
otro
de
los
mtodos
http.
Para
este
primer
diagrama
vamos
a
mostrar
como
se
sigue
el
diagrama
con
capturas
de
pantalla
para
que
se
tome
como
ejemplo
para
entender
el
resto
de
los
diagramas.
Aadir producto al carrito
JSP
Listado de productos
Java
<script
var a=
var xl
if(xls
AddCarritoServlet
/shop/products.jsp
Aade el producto al
carro si corresponde
Si el error es
formulario
incorrecto o
peticin
POST
Error 404
Jdyb
-
Mayo
2011
39
VB
VB
VB
Actualizar unidades de un producto en el carrito
JSP
Listado de productos en
el carrito
Java
Si la sesin no
contiene carrito
JSP
<script
var a=
var xl
if(xls
EditAmount
Servlet
Formulario
incorrecto
/shop/
products.jsp
/shop/cart.jsp
Error 404
Actualiza el carro si
las
comprobaciones
son positivas
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
Java
Listado de productos en
el carrito
<script
var a=
var xl
if(xls
VB
DeleteCart
Servlet
VB
/shop/cart.jsp
Validar carrito de la compra (paso previo a la compra)
VB
JSP
Si se han hecho
cambios en el
carrito se avisa
Java
Listado de productos en
el carrito
GET
<script
var a=
var xl
if(xls
UpdateCart
Servlet
Si no es la
operacin de venta
definitiva
/shop/cart.jsp
Si no hay carrito en
la sesin
JSP
Listado de productos
JSP
Formulario de venta
/shop/products.jsp
/shop/buycart.jsp
POST
Error 404
41
JSP
VB
Java
Formulario de venta
Si se han hecho
cambios en el
carrito se avisa
<script
var a=
var xl
if(xls
POST
/shop/buycart.jsp
UpdateCart
Servlet
Si no hay carrito en
la sesin
Java
JSP
<script
var a=
var xl
if(xls
Listado de productos
Error 404
GET
VB
BuyServlet
/shop/products.jsp
POST
Fallos o cambios
en el carrito
Compra exitosa
Registro de la
compra
Enviar Email
JSP
Compra realizada
/shop/buyinformation.jsp
Es
importante
destacar
de
este
diagrama
el
paso
previo
antes
de
la
compra
por
el
Servlet
UpdateCartServlet,
es
posible
que
el
que
lo
vea
se
pregunte
porque
pasa
antes
por
aqu
que
por
el
Servlet
que
realmente
realiza
la
compra.
Se
ha
diseado
as
por
cuestiones
de
rendimiento.
El
Servlet
que
realiza
la
compra
comprueba
si
las
unidades
son
correctas
o
no
y
edita
el
catlogo,
pero
estas
operaciones
las
realiza
de
manera
sincronizada
y
pidiendo
locks,
por
lo
que
el
rendimiento
de
la
aplicacin
disminuira
significativamente
en
el
caso
de
que
hubiera
muchos
hilos
concurrentes
ejecutando
el
Servlet
de
compra.
Por
ello
se
ha
implementado
el
primer
Servlet,
en
el
que
se
realizan
esas
operaciones
(sin
editar
productos)
pero
no
son
sincronizadas
y
de
esta
manera
Jdyb
-
Mayo
2011
42
evitamos
que
todas
las
peticiones
lleguen
al
servlet
que
realiza
la
compra.
Se
podra
decir
que
de
esta
manera
reducimos
las
peticiones
que
llegan
al
servlet
de
compra
y
las
que
llegan
al
mismo
tienen
un
porcentaje
de
acierto
mayor
a
la
hora
de
completar
VB
la
compra
con
xito.
Tambin
es
importante
este
paso
previo
antes
de
la
compra
porque
ese
servlet
tambin
realiza
una
actualizacin
del
precio
del
carrito
por
si
algn
producto
cambi
el
precio
en
el
periodo
de
tiempo
en
el
que
ha
estado
ese
producto
en
el
carrito.
De
esta
manera
aseguramos
que
el
precio
que
se
paga
por
el
carrtito
es
el
actual.
Busqueda de productos
JSP
Busqueda
Java
GET
<script
var a=
var xl
if(xls
SearchProduct
Servlet
POST
Error 404
/shop/products.jsp
Correcto
Sin parmetros de
vuelta
Buscar
productos
43
VB
JSP
GET
Registro
Error 404
POST
/login.jsp
Registro
correcto
Nuevo usuario
VB
VB
Enviar email
registro
Inicio de sesin
JSP
GET
Java
Inicio de sesin
<script
var a=
var xl
if(xls
Error 404
POST
AuthServlet
Login
Autentificacin
correcta
Errores en la
autentificacin
Pgina a la que se intent
acceder y dio error
Inicio de sesin
manual
JSP
Inicio de sesin
despus de un error
Inicio
/index.jsp
Jdyb
-
Mayo
2011
44
JSP
Java
Inicio de sesin
GET
<script
var a=
var xl
if(xls
PassRecover
Servlet
/login.jsp
Error 404
Proceso
correcto
POST
Error en el
proceso
Actualizar
contrasea
45
VB
Juan
Dez-Yanguas
Barber
Programacin
con
Java
EE
Tienda
Online
_____________________________________________________________________________
Cambio de contrasea
JSP
Java
Cambio de contrasea
GET
VB
<script
var a=
var xl
if(xls
ChangePass
Servlet
/admin/
preferences.jsp
Error 404
POST
Error en el
proceso
JSP
Proceso
completado
/WEB-INF/
admin/
logout.jsp
Java
<script
var a=
var xl
if(xls
LogOutServlet
No se encuentra el
usuario de la sesin
Actualizar
datos
46
VB
JSP
GET
Java
<script
var a=
var xl
if(xls
Error 404
EditUserServlet
POST
/admin/preferences.jsp
VB
Error en el
proceso
VB
Actualizar
datos
Proceso
completado
Java
JSP
<script
var a=
var xl
if(xls
Aadir comentario
Error 404
POST
AddComment
Servlet
/shop/
viewprod.jsp?
prod=
Error en el
proceso
Proceso
completado
Guardar
datos
47
Cerrar sesin
Java
JSP
Cerrar sesin
<script
var a=
var xl
if(xls
VB
VB
LogOutServlet
/logout
Sesin no
iniciada
La sesin se cerro
por un error
Cierre
normal
JSP
JSP
JSP
Login
/index.jsp
Login
/login.jsp
/WEB-INF/
admin/
logout.jsp
48
Java
POST
<script
var a=
var xl
if(xls
Aadir al catlogo
AddProduct
Servlet
/admin/
administration/
addproduct.jsp
Error en el
transcurso de la
operacin
Operacin exitosa
GET
JSP
Confirmar
producto
Previsualizacin producto
VB
Editar
producto
/WEB-INF/admin/
preview_prod.jsp
GET
Error
guardando
Exito
guardando
Guarda
producto
JSP
Administracin de productos
/admin/administration/
products_administration.jsp
49
Java
POST
VB
<script
var a=
var xl
if(xls
Operacin
correcta
EditProduct
Servlet
/admin/
administration/
modifyprod.jsp
Errores en la
operacin
JSP
Previsualizacin producto
Editar
producto
JSP
Administracin de productos
Confirmar
producto
/WEB-INF/admin/
preview_prod.jsp
GET
GET
/admin/administration/
products_administration.jsp
Error
guardando
Exito
guardando
Guarda
producto
50
Editar usuario
VB
JSP
GET
Java
Editar usuario
<script
var a=
var xl
if(xls
Error 404
POST
EditUserComplete
Servlet
/admin/administration/
edituser.jsp?user=
Errores
Operacin
completada
JSP
Administracin de
usuarios
VB
VB
Actualizar
usuario
/admin/administration/
user_administration.jsp
Borrar usuario
JSP
Lista de usuarios
Java
<script
var a=
var xl
if(xls
Error en
peticion
Error 404
DeleteUser
Servlet
/admin/administration/
user_administration.jsp
Borrado
correcto
Error en el
proceso
Borrar
usuario
51
Borrar producto
JSP
VB
JSP
Listado productos
Borrar producto
/admin/administration/
delprod.jsp?prod=
/admin/administration/
products_administration.jsp
Cancelar
Confirmar
POST
Java
<script
var a=
var xl
if(xls
DeleteProduct
Servlet
GET
Error
Error 404
Exito
Borrar
producto
52
Editar comentario
JSP
JSP
Producto
Editar comentario
VB
Error 404
/admin/administration/
editcomment?cod=
/shop/viewprod.jsp?
prod=
Parmetros
correctos
Parmetros
incorrectos
Error
validacin
Java
<script
var a=
var xl
if(xls
Errores
EditComment
Servlet
Correcto
Actualizar
comentario
53
Borrar comentario
JSP
Java
Producto
Error 404
<script
var a=
var xl
if(xls
DeleteComment
Servlet
/shop/viewprod.jsp?
prod=
Error
parmetros
o POST
Borrado
correcto
Borrado
fallido
54
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
Otra
opcin
interesante
es
que
se
produzca
un
volcado
en
el
submit
del
formulario.
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