Вы находитесь на странице: 1из 21

Ediciones ENI

Java Enterprise Edition


Desarrollo de aplicaciones web con JEE 6

Colección
Recursos Informáticos

Contenido
Podrá descargar algunos elementos de este libro en la página web de Ediciones ENI:
http:www.ediciones-eni.com
Escriba la referencia ENI del libro RIT6JEE en la zona de búsqueda y valide.
Haga clic en el título y después en el vínculo de descarga.

Introducción . . . . . . . . . . . . . . . . . . . 11

Presentación de JEE Capítulo 1

A. Introducción . . . . . . . . . . . . . . . . . . . . 15

B. Servidores Web y servidores de aplicaciones . . . . . . 16

C. Clientes ligeros y clientes pesados . . . . . . . . . . . 18

D. Estructura de una aplicación JEE . . . . . . . . . . . 19

E. Empaquetado de una aplicación . . . . . . . . . . . . 21


1. Creación de un empaquetado . . . . . . . . . . . . . . . . 21
2. Visualización del contenido . . . . . . . . . . . . . . . . . 22
3. Extracción . . . . . . . . . . . . . . . . . . . . . . . . 23
4. Actualización . . . . . . . . . . . . . . . . . . . . . . . 24

El protocolo HTTP Capítulo 2

A. Presentación . . . . . . . . . . . . . . . . . . . . 27
1. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . 27
2. Las URL . . . . . . . . . . . . . . . . . . . . . . . . . 30

Desarrollo de aplicaciones web con JEE 6 1


Contenido

B. Las peticiones HTTP . . . . . . . . . . . . . . . . 32


1. Los distintos tipos de petición . . . . . . . . . . . . . . . . 32
2. Las cabeceras de petición . . . . . . . . . . . . . . . . . . 34

C. Las respuestas HTTP . . . . . . . . . . . . . . . . 36


1. Los diferentes tipos de respuesta . . . . . . . . . . . . . . . 36
2. Las cabeceras de respuesta . . . . . . . . . . . . . . . . . 38

D. Gestión del almacenamiento en caché . . . . . . . . . 40


1. Gestión realizada por el cliente . . . . . . . . . . . . . . . . 40
2. Gestión realizada por el servidor . . . . . . . . . . . . . . . 41

Servlets Capítulo 3

A. Presentación . . . . . . . . . . . . . . . . . . . . 45
1. Diálogo con un servlet . . . . . . . . . . . . . . . . . . . 45
2. Tratamientos realizados . . . . . . . . . . . . . . . . . . . 46
3. Clases e interfaces utilizadas . . . . . . . . . . . . . . . . . 47

B. Ciclo de vida de un servlet . . . . . . . . . . . . . . 48


1. Método init . . . . . . . . . . . . . . . . . . . . . . . . 48
2. Parámetros de inicialización . . . . . . . . . . . . . . . . . 49
3. Método destroy . . . . . . . . . . . . . . . . . . . . . . 50
4. Método service . . . . . . . . . . . . . . . . . . . . . . 50
5. Métodos doXXXX . . . . . . . . . . . . . . . . . . . . . . 51

2 Java Enterprise Edition


Contenido

C. Utilizar la petición HTTP . . . . . . . . . . . . . . . 53


1. Obtener información sobre la URL . . . . . . . . . . . . . . 54
2. Leer parámetros . . . . . . . . . . . . . . . . . . . . . . 58
3. Leer cabeceras. . . . . . . . . . . . . . . . . . . . . . . 62
4. Añadir información a la petición . . . . . . . . . . . . . . . 68

D. Construir la respuesta HTTP . . . . . . . . . . . . . 68


1. Definir el estado de la respuesta . . . . . . . . . . . . . . . 69
2. Agregar cabeceras . . . . . . . . . . . . . . . . . . . . . 71
3. Construir el cuerpo de la respuesta . . . . . . . . . . . . . . 72

E. Elementos accesibles desde un servlet . . . . . . . . . 77


1. Contexto de aplicación . . . . . . . . . . . . . . . . . . . 77
2. Sesión . . . . . . . . . . . . . . . . . . . . . . . . . . 83

F. Utilización de otros recursos . . . . . . . . . . . . . 83


1. Utilización del RequestDispatcher . . . . . . . . . . . . . . . 83
a. Include . . . . . . . . . . . . . . . . . . . . . . . . 84
b. Forward . . . . . . . . . . . . . . . . . . . . . . . . 86
2. Redirección . . . . . . . . . . . . . . . . . . . . . . . . 90

G. Filtros . . . . . . . . . . . . . . . . . . . . . . . 91
1. Creación . . . . . . . . . . . . . . . . . . . . . . . . . 92
2. Declaración . . . . . . . . . . . . . . . . . . . . . . . . 93

H. Eventos . . . . . . . . . . . . . . . . . . . . . . 97
1. Eventos asociados a la aplicación . . . . . . . . . . . . . . . 97
2. Eventos asociados a sesiones . . . . . . . . . . . . . . . . 100

I. Sincronización de servlets . . . . . . . . . . . . . . 105


1. Utilización de la interfaz SingleThreadModel . . . . . . . . . . 105
2. Utilización de bloques de código sincronizados . . . . . . . . . 106

Desarrollo de aplicaciones web con JEE 6 3


Contenido

Uso de sesiones Capítulo 4

A. Obtener el seguimiento de la sesión . . . . . . . . . . 109


1. Uso de cookies . . . . . . . . . . . . . . . . . . . . . . 109
a. Creación y envío de cookies. . . . . . . . . . . . . . . . 110
b. Recuperación y uso de cookies . . . . . . . . . . . . . . 111
2. Utilización de la sesión . . . . . . . . . . . . . . . . . . . 115
a. Reescritura de la URL . . . . . . . . . . . . . . . . . . 116
b. Campos de formulario ocultos . . . . . . . . . . . . . . . 117
c. Cookies . . . . . . . . . . . . . . . . . . . . . . . . 118

B. Utilización de la sesión . . . . . . . . . . . . . . . 119


1. Obtener una sesión . . . . . . . . . . . . . . . . . . . . . 119
2. Almacenar, consultar y suprimir elementos . . . . . . . . . . . 119
3. Finalizar la sesión . . . . . . . . . . . . . . . . . . . . . 120

Las páginas JSP Capítulo 5

A. Presentación . . . . . . . . . . . . . . . . . . . . 125
1. Tratamiento de una página JSP por el servidor . . . . . . . . . 127
2. Elementos que constituyen una página JSP . . . . . . . . . . . 131

B. Directivas JSP . . . . . . . . . . . . . . . . . . . 131


1. La directiva page. . . . . . . . . . . . . . . . . . . . . . 131
2. La directiva include. . . . . . . . . . . . . . . . . . . . . 133
3. La directiva taglib . . . . . . . . . . . . . . . . . . . . . 135

4 Java Enterprise Edition


Contenido

C. Scriptlets . . . . . . . . . . . . . . . . . . . . . 136
1. Declaración de variables o de métodos <%! %> . . . . . . . . 136
2. Inserción de instrucciones Java <% %> . . . . . . . . . . . . 137
3. Evaluación de una expresión <%= %> . . . . . . . . . . . . 137
4. Comentarios <%-- --%> . . . . . . . . . . . . . . . . . . 138

D. Objetos implícitos . . . . . . . . . . . . . . . . . . 138

E. Etiquetas JSP . . . . . . . . . . . . . . . . . . . 139


1. Etiqueta <jsp:useBean> . . . . . . . . . . . . . . . . . . 139
2. Etiqueta <jsp:getProperty> . . . . . . . . . . . . . . . . . 141
3. Etiqueta <jsp:setProperty> . . . . . . . . . . . . . . . . . 142
4. Etiqueta <jsp:include> . . . . . . . . . . . . . . . . . . . 145
5. Etiqueta <jsp:forward> . . . . . . . . . . . . . . . . . . . 148
6. Etiqueta <jsp:plugin> . . . . . . . . . . . . . . . . . . . 148

F. Sintaxis XML . . . . . . . . . . . . . . . . . . . . 151

La librería JSTL Capítulo 6

A. Presentación . . . . . . . . . . . . . . . . . . . . 155

B. Las expressions language. . . . . . . . . . . . . . . 156


1. Declaración de una expression language . . . . . . . . . . . . 156
2. Operadores en expressions language. . . . . . . . . . . . . . 159
3. Tratamiento de excepciones en las expressions language . . . . . 161

C. La librería básica . . . . . . . . . . . . . . . . . . 165


1. Etiquetas de gestión de variables . . . . . . . . . . . . . . . 165
a. Asignación de un valor a una variable . . . . . . . . . . . 165

Desarrollo de aplicaciones web con JEE 6 5


Contenido

b. Destrucción de una variable. . . . . . . . . . . . . . . . 167


2. Operaciones condicionales . . . . . . . . . . . . . . . . . . 167
a. Etiqueta <c:if>. . . . . . . . . . . . . . . . . . . . . 167
b. Etiqueta <c:choose> . . . . . . . . . . . . . . . . . . 168
3. Iteraciones . . . . . . . . . . . . . . . . . . . . . . . . 168
a. Etiqueta <c:forEach> . . . . . . . . . . . . . . . . . . 169
b. Etiqueta <c:forTokens> . . . . . . . . . . . . . . . . . 170
4. Manipulación de URL . . . . . . . . . . . . . . . . . . . . 170
a. Etiqueta <c:import> . . . . . . . . . . . . . . . . . . 171
b. Etiqueta <c:redirect> . . . . . . . . . . . . . . . . . . 171
c. Etiqueta <c:url> . . . . . . . . . . . . . . . . . . . . 172
d. Etiqueta <c:param> . . . . . . . . . . . . . . . . . . 172

D. La librería XML . . . . . . . . . . . . . . . . . . . 173


1. Etiquetas básicas. . . . . . . . . . . . . . . . . . . . . . 174
a. Etiqueta <x:parse> . . . . . . . . . . . . . . . . . . . 174
b. Etiqueta <x:set> . . . . . . . . . . . . . . . . . . . . 175
c. Etiqueta <x:out> . . . . . . . . . . . . . . . . . . . . 175
2. Etiquetas condicionales . . . . . . . . . . . . . . . . . . . 175
a. Etiqueta <x:if> . . . . . . . . . . . . . . . . . . . . . 175
b. Etiqueta <x:choose> . . . . . . . . . . . . . . . . . . 176
3. Etiqueta de iteración . . . . . . . . . . . . . . . . . . . . 176

E. La librería de internacionalización y de formato . . . . . 177


1. Internacionalización de una aplicación . . . . . . . . . . . . . 177
a. Definición de recursos . . . . . . . . . . . . . . . . . . 178
b. Uso de los recursos . . . . . . . . . . . . . . . . . . . 178
2. Formato de valores numéricos y de fechas . . . . . . . . . . . 180
a. Definición de la franja horaria que se usará . . . . . . . . . 180
b. Dar formato a una fecha y a una hora . . . . . . . . . . . 181
c. Dar formato a valores numéricos. . . . . . . . . . . . . . 183

6 Java Enterprise Edition


Contenido

F. Librería de acceso a bases de datos . . . . . . . . . . 184


1. Configurar una conexión . . . . . . . . . . . . . . . . . . . 184
2. Ejecución de una instrucción select . . . . . . . . . . . . . . 185
3. Utilizar los resultados . . . . . . . . . . . . . . . . . . . . 186
4. Ejecución de una instrucción SQL cualquiera . . . . . . . . . . 188
5. Utilización de parámetros en el código SQL. . . . . . . . . . . 188

Etiquetas JSP personalizadas Capítulo 7

A. Presentación . . . . . . . . . . . . . . . . . . . . 193

B. Los archivos de etiquetas . . . . . . . . . . . . . . 193


1. Creación de un archivo de etiquetas . . . . . . . . . . . . . . 194
2. Añadir atributos a una etiqueta personalizada . . . . . . . . . . 200
3. Variables en archivos de etiquetas . . . . . . . . . . . . . . 202

C. Las etiquetas diseñadas en Java. . . . . . . . . . . . 204


1. Etiquetas simples sin cuerpo . . . . . . . . . . . . . . . . . 205
2. Etiquetas con cuerpo . . . . . . . . . . . . . . . . . . . . 208

JDBC Capítulo 8

A. Principio de funcionamiento de una base de datos . . . . 215


1. Terminología . . . . . . . . . . . . . . . . . . . . . . . 215
2. El lenguaje SQL . . . . . . . . . . . . . . . . . . . . . . 216
a. Búsqueda de información. . . . . . . . . . . . . . . . . 216
b. Añadir datos . . . . . . . . . . . . . . . . . . . . . . 218

Desarrollo de aplicaciones web con JEE 6 7


Contenido

c. Actualización de datos . . . . . . . . . . . . . . . . . . 218


d. Eliminación de datos . . . . . . . . . . . . . . . . . . 219

B. Acceso a una base de datos desde Java . . . . . . . . 219


1. Presentación de JDBC . . . . . . . . . . . . . . . . . . . 221
2. Establecer y manipular la conexión . . . . . . . . . . . . . . 222
a. Carga del driver . . . . . . . . . . . . . . . . . . . . . 222
b. Establecer la conexión . . . . . . . . . . . . . . . . . . 223
c. Manipular la conexión . . . . . . . . . . . . . . . . . . 225
3. Ejecución de instrucciones SQL . . . . . . . . . . . . . . . . 230
a. Ejecución de instrucciones de base de datos
con el objeto Statement . . . . . . . . . . . . . . . . . 230
b. Ejecución de instrucciones parametrizadas con el objeto
PreparedStatement . . . . . . . . . . . . . . . . . . . 237
c. Ejecución de procedimientos almacenados con el objeto
CallableStatement . . . . . . . . . . . . . . . . . . . . 240
4. Utilización de conjuntos de registros con la interfaz ResultSet . . . 243
a. Posicionamiento en un ResultSet . . . . . . . . . . . . . 245
b. Lectura de datos en un ResultSet . . . . . . . . . . . . . 247
c. Modificación de los datos en un ResultSet. . . . . . . . . . 250
d. Eliminación de datos en un ResultSet . . . . . . . . . . . 253
e. Adición de datos en un ResultSet . . . . . . . . . . . . . 254
5. Gestión de transacciones . . . . . . . . . . . . . . . . . . 256
a. Implementación de transacciones . . . . . . . . . . . . . 257
b. Puntos de retorno . . . . . . . . . . . . . . . . . . . . 258
c. Niveles de aislamiento . . . . . . . . . . . . . . . . . . 258

C. Pool de conexiones y Datasource . . . . . . . . . . . 259


1. Principio y utilización de un pool de conexiones . . . . . . . . . 260
2. Configuración de un pool de conexiones . . . . . . . . . . . . 260
3. Utilización de un pool de conexiones . . . . . . . . . . . . . 261

8 Java Enterprise Edition


Contenido

Anexos
A. Estructura general del descriptor de despliegue . . . . . 265

B. Sección context-param . . . . . . . . . . . . . . . . 266

C. Sección filter . . . . . . . . . . . . . . . . . . . . 267

D. Sección filter-mapping . . . . . . . . . . . . . . . . 268

E. Sección listener. . . . . . . . . . . . . . . . . . . 269

F. Sección servlet . . . . . . . . . . . . . . . . . . . 270

G. Sección servlet-mapping . . . . . . . . . . . . . . . 271

H. Sección session-config . . . . . . . . . . . . . . . . 272

I. Sección mime-mapping . . . . . . . . . . . . . . . 273

J. Sección welcome-file-list . . . . . . . . . . . . . . . 274

K. Sección error-page . . . . . . . . . . . . . . . . . 274

L. Sección jsp-config. . . . . . . . . . . . . . . . . . 276

M. Sección security-constraint . . . . . . . . . . . . . . 278

N. Sección loging-config . . . . . . . . . . . . . . . . 280

O. Sección security-role . . . . . . . . . . . . . . . . 281

Índice . . . . . . . . . . . . . . . . . . . . . . . 282

Desarrollo de aplicaciones web con JEE 6 9


Ediciones ENI

Struts 2
El framework de desarrollo
de aplicaciones Java EE

Colección
Expert IT

Contenido
Podrá descargar algunos elementos de este libro en la página web
de Ediciones ENI: http://www.ediciones-eni.com.
Escriba la referencia ENI del libro EIT2STRU en la zona de búsqueda y valide.
Haga clic en el título y después en el vínculo de descarga.

Capítulo 1
Presentación
1. ¿Qué es un framework? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2. ¿Por qué utilizar un framework?. . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1 Normas y estándares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Framework y desarrollo Web. . . . . . . . . . . . . . . . . . . . . . . . . . 13
3. Los distintos tipos de framework . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4. ¿Qué framework elegimos?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5. Introducción a la programación en Java Entreprise Edition . . . . . . . 15
6. Struts 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7. Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8. Instalación del framework Struts 2. . . . . . . . . . . . . . . . . . . . . . . . . 20
9. En resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Capítulo 2
Modelo de diseño MVC y Java EE
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2. Primer proyecto MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3. Proyecto MVC con filtro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4. En resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2 Struts 2
El framework de desarrollo de aplicaciones Java EE

Capítulo 3
Empezar a usar Struts 2
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2. Funcionamiento general de Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . 42
3. Los interceptores de Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4. El archivo de configuración struts.xml . . . . . . . . . . . . . . . . . . . . . . 45
4.1 La etiqueta <package/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2 La etiqueta <include/>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.3 La etiqueta <action/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.4 La etiqueta <result/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.5 La etiqueta <param/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.6 La etiqueta <constant/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.7 La etiqueta <global-results/> . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.8 La etiqueta <interceptors/> . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5. Arquitectura de Struts 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6. Los archivos de propiedades struts.properties y default.properties. . 56
7. El archivo de propiedades de la aplicación web.xml . . . . . . . . . . . . 60
8. El archivo de configuración struts-default.xml . . . . . . . . . . . . . . . . 61
9. Nuestra primera aplicación con Struts . . . . . . . . . . . . . . . . . . . . . . 62
10. En resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Capítulo 4
Gestión de los registros y de la depuración
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2. Administración de la depuración. . . . . . . . . . . . . . . . . . . . . . . . . . . 72
3. Administración de la creación de perfiles (Profiling) . . . . . . . . . . . . 75
4. En resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Contenido 3

Capítulo 5
Gestión de las acciones
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2. Clases de acción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3. Administración de los recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.1 Acceso a los recursos por clase. . . . . . . . . . . . . . . . . . . . . . . . . 85
3.2 Acceso a los recursos por interfaz . . . . . . . . . . . . . . . . . . . . . . 87
3.3 Trasladar parámetros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4. Administración dinámica del mapping . . . . . . . . . . . . . . . . . . . . . . 93
5. Invocación dinámica de métodos . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6. Administración de los resultados . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.1 Redirección con parámetros. . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.2 Redirección sin parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.3 Redirección a una acción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.4 Redirección encadenada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.5 FreeMarker y Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.6 HttpHeader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.7 Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.8 XSLT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.9 PlainText. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7. Administración de las excepciones . . . . . . . . . . . . . . . . . . . . . . . . 116
8. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

Capítulo 6
Biblioteca de etiquetas de Struts
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
2. Las etiquetas de formulario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
2.1 La etiqueta <s:form/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
2.2 Los temas de presentación y el atributo theme . . . . . . . . . . . 126
2.3 La etiqueta <s:textfield/>. . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4 Struts 2
El framework de desarrollo de aplicaciones Java EE

2.4 La etiqueta <s:password/> . . . . . . . . . . . . . . . . . . . . . . . . . . 129


2.5 La etiqueta <s:submit/>. . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
2.6 La etiqueta <s:reset/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
2.7 La etiqueta <s:label/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
2.8 La etiqueta <s:head/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
2.9 La etiqueta <s:textarea/> . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
2.10 La etiqueta <s:checkbox/> . . . . . . . . . . . . . . . . . . . . . . . . . . 133
2.11 La etiqueta <s:select/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
2.12 La etiqueta <s:optgroup/> . . . . . . . . . . . . . . . . . . . . . . . . . . 141
2.13 La etiqueta <s:radio/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
2.14 La etiqueta <s:checkboxlist/> . . . . . . . . . . . . . . . . . . . . . . . 147
2.15 Otras etiquetas de los formularios de Struts . . . . . . . . . . . . . 150
3. Las etiquetas de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
3.1 La etiqueta <s:property/> . . . . . . . . . . . . . . . . . . . . . . . . . . 151
3.2 La etiqueta <s:a/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
3.3 La etiqueta <s:action/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
3.4 La etiqueta <s:param/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
3.5 La etiqueta <s:bean/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
3.6 La etiqueta <s:date/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
3.7 La etiqueta <s:set/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
3.8 La etiqueta <s:push/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
3.9 La etiqueta <s:url/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
3.10 Las etiquetas <s:if/>, <s:else/> y <s:elseif/> . . . . . . . . . . . 159
3.11 La etiqueta <s:iterator/> . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
3.12 La etiqueta <s:append/> . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
3.13 La etiqueta <s:sort/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
4. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Contenido 5

Capítulo 7
Mensajes e internacionalización
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
2. Aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
3. Acceso a las propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
4. Datos multilingües . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
5. Selección dinámica de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6. Acceso a los recursos de las clases . . . . . . . . . . . . . . . . . . . . . . . . . 185
7. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

Capítulo 8
Validación de entradas
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
2. Aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
3. Validaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
3.1 required. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
3.2 requiredstring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
3.3 stringlength. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
3.4 int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.5 date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.6 e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
3.7 url . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
3.8 regex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
3.9 fieldexpression y expression. . . . . . . . . . . . . . . . . . . . . . . . . . 203
3.10 conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
3.11 visitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
4. Aplicación de un ejemplo completo . . . . . . . . . . . . . . . . . . . . . . . 209
5. Gestión de mensajes de error y SUCCESS. . . . . . . . . . . . . . . . . . . 215
6. Escribir un validador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
6 Struts 2
El framework de desarrollo de aplicaciones Java EE

6.1 La interfaz Validator y las clases ValidatorSupport y


FieldValidatorSupport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
6.2 Declarar los validadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
6.3 Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
6.4 Validación en las clases de acción . . . . . . . . . . . . . . . . . . . . . 231
7. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

Capítulo 9
Gestión de los tipos y de las conversiones
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
2. Administración de las conversiones. . . . . . . . . . . . . . . . . . . . . . . . 236
3. Administración de los tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
4. Aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
5. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Capítulo 10
Capa modelo y acceso a los datos
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
2. Aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
3. El interceptor Preparable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
4. Acceso y manipulación de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 264
4.1 El modelo Data Access Object DAO . . . . . . . . . . . . . . . . . . . 265
5. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

Capítulo 11
Gestión de la carga o upload de datos
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
2. La etiqueta <s:file/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Contenido 7
3. El interceptor fileUpload. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
4. Carga única . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
5. Carga múltiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
6. Carga en Ajax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
7. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Capítulo 12
Gestión de la descarga de datos
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
2. Resultado stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
3. Descarga dinámica de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
4. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

Capítulo 13
Gestión de la carga de páginas
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
2. Aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
3. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Capítulo 14
Desarrollar interceptores
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
2. Escribir un interceptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
3. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
8 Struts 2
El framework de desarrollo de aplicaciones Java EE

Capítulo 15
Desarrollar resultados
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
2. Escribir un resultado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
3. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

Capítulo 16
Gestión del doble clic o doble envío
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
2. Aplicación del testigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
3. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

Capítulo 17
Struts y Ajax JQuery
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
2. Instalación del framework JavaScript . . . . . . . . . . . . . . . . . . . . . . 350
3. Tecnología Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
4. Optimizaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
4.1 Utilización de botones dinámicos . . . . . . . . . . . . . . . . . . . . . 363
4.2 Gestión de cuadros (box) dinámicos para las confirmaciones
y mensajes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
4.3 Utilización del complemento Widget. . . . . . . . . . . . . . . . . . . 368
4.4 Utilización de herramientas dinámicas . . . . . . . . . . . . . . . . . 373
4.5 Utilización de un servicio de autocompletado para
las búsquedas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
4.6 Gestión de clasificaciones dinámicas . . . . . . . . . . . . . . . . . . . 387
5. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Contenido 9

Capítulo 18
Los motores de plantillas
1. Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
2. Cómo usar Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
3. FreeMarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
4. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

Capítulo 19
XSLT
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
2. Utilización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
3. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

Capítulo 20
Complementos de Struts
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
2. El complemento JFreeChart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
3. El complemento Tiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
3.1 Página del formato de la plantilla . . . . . . . . . . . . . . . . . . . . . 422
3.2 Definición de la plantilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
3.3 Aplicación del complemento Tiles . . . . . . . . . . . . . . . . . . . . . 425
4. Escribir un complemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
5. Utilizar el complemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
6. Otros complementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
7. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
10 Struts 2
El framework de desarrollo de aplicaciones Java EE

Capítulo 21
Struts sin configuración
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
2. Configuración. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
3. Utilización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
3.1 Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
3.2 Notación de acciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
3.3 Anotaciones de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
3.4 Anotación de interceptores . . . . . . . . . . . . . . . . . . . . . . . . . . 442
3.5 Anotaciones de espacios de nombre . . . . . . . . . . . . . . . . . . . . 447
3.6 Anotaciones de las vistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
3.7 Anotaciones de las excepciones . . . . . . . . . . . . . . . . . . . . . . . 448
3.8 Carga automática de la configuración . . . . . . . . . . . . . . . . . . 449
4. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

Anexo
1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
2. Interceptores de Struts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
3. Object-Graph Navigation Language OGNL. . . . . . . . . . . . . . . . . . 454
4. En resumen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462

Índice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463

Вам также может понравиться