Head First Servlets & JSP
Aprenda cómo escribir servlets y JSP, qué hace que un contenedor web funcione (y qué lo marca), cómo usar el lenguaje de expresión de JSP (EL para abreviar) y cómo escribir descriptores de implementación para sus aplicaciones web. Domina la etiqueta c: out y obtén un control de lo que ha cambiado exactamente desde el examen anterior J2EE 1.4. No solo pasa el nuevo examen J2EE 1.5 SCWCD, comprenderá estas cosas y lo pondrá a trabajar de inmediato.
Compre Head First Servlets y JSP Book en línea a precios bajos en India
- ¿Cuál es el mejor libro sobre el genocidio armenio?
- ¿Hay libros de fantasía para adolescentes sin vampiros o hombres lobo?
- ¿Cuáles son las lecturas obligatorias en la gestión del talento?
- ¿Cuáles son los mejores libros sobre arquitectura del paisaje?
- ¿Cuál es un buen libro de John Green?
- Introducción y descripción general del Capítulo 1: ¿Por qué usar Servlets y JSP?
- Todos quieren un sitio web
- ¿Qué hace tu servidor web?
- ¿Qué hace un cliente web?
- Los clientes y servidores conocen HTML y HTTP
- Guía HTML de dos minutos
- Lo que escribes … (el HTML)
- Lo que crea el navegador …
- ¿Qué es el protocolo HTTP?
- HTML es parte de la respuesta HTTP
- Si esa es la respuesta, ¿qué hay en la solicitud?
- GET es una solicitud simple, POST puede enviar datos de usuario
- Es verdad … puedes enviar un poco de datos con HTTP GET
- Anatomía de una solicitud HTTP GET
- Anatomía de una solicitud HTTP POST
- Anatomía de una respuesta HTTP, y ¿qué diablos es un “tipo MIME”?
- Todas las piezas En una pagina.
- URL Hagas lo que hagas, no lo pronuncies “Earl”.
- Estructura de directorios para un sitio web simple de Apache
- A los servidores web les encanta servir páginas web estáticas
- Pero a veces necesitas más que solo el servidor web
- Dos cosas que el servidor web solo no hará
- El término que no es Java para una aplicación auxiliar de servidor web es el programa “CGI”
- Servlets desmitificados (escribir, desplegar, ejecutar)
- JSP es lo que sucedió cuando alguien introdujo Java a HTML
- Capítulo 2 Descripción general de alto nivel: Arquitectura de la aplicación web
- ¿Qué es un contenedor?
- ¿Qué pasa si tenía Java, pero no servlets o contenedores?
- ¿Qué te da el contenedor?
- Cómo maneja el contenedor una solicitud
- Cómo se ve en el código (qué hace que un servlet sea un servlet)
- Te preguntas cómo el Contenedor encontró el Servlet …
- Un servlet puede tener TRES nombres
- Uso del descriptor de implementación para asignar URL a servlets
- ¡Pero espera! Hay más que puedes hacer con el DD
- Historia: Bob construye un sitio de emparejamiento
- Él comienza a construir un montón de servlets … uno para cada página
- Pero luego se pone feo, por lo que agrega JSP
- Pero luego su amigo dice: “ESTÁS usando MVC, ¿verdad?”
- El patrón de diseño Modelo-Vista-Controlador (MVC) corrige esto
- Aplicando el patrón MVC a la aplicación web de emparejamiento
- Pero entonces su amigo Kim echa un vistazo
- ¿Hay una respuesta?
- Un descriptor de implementación (DD) “en funcionamiento”
- Cómo encaja J2EE en todo esto
- Capítulo 3 MVC práctico: Tutorial de Mini MVC
- Construyamos una aplicación web real (pequeña)
- La vista del usuario de la aplicación web: un asesor de cerveza
- Aquí está la arquitectura …
- Creando su entorno de desarrollo
- Crear el entorno de implementación
- Nuestra hoja de ruta para construir la aplicación
- El HTML para la página de formulario inicial
- Implementar y probar la página de inicio
- Asignación del nombre lógico a un archivo de clase de servlet
- La primera versión del servlet controlador
- Compilar, desplegar y probar el servlet del controlador
- Construyendo y probando la clase de modelo
- Mejorando el servlet para llamar al modelo, para que podamos obtener consejos REALES …
- Código de versión dos de servlet
- Pasos clave para la versión dos de servlet
- Revise la aplicación web de consejos de cerveza MVC parcialmente completada
- Cree la “vista” JSP que da el consejo
- Mejora del servlet para “llamar” al JSP (versión tres)
- Código para la versión de servlet tres
- Compila, implementa y prueba la aplicación final.
- Todavía hay mucho que aprender.
- Capítulo 4 Solicitud y respuesta: ser un servlet
- Los servlets son controlados por el contenedor
- Pero hay más en la vida de un servlet
- Los tres grandes momentos del ciclo de vida
- ¡Cada solicitud se ejecuta en un hilo separado!
- Al principio: cargando e inicializando
- El método de solicitud HTTP determina si se ejecuta doGet () o doPost ()
- En realidad, uno o más de los otros métodos HTTP podrían aparecer (brevemente) en el examen …
- La diferencia entre GET y POST
- No, no se trata solo del tamaño
- La historia de la solicitud no idempotente.
- POST no es idempotente
- ¿Qué determina si el navegador envía una solicitud GET o POST?
- ¡POST NO es el predeterminado!
- Enviar y usar un solo parámetro
- Enviar y usar DOS parámetros
- Además de los parámetros, ¿qué más puedo obtener de un objeto Request?
- Revisión: ciclo de vida del servlet y API
- Revisión: HTTP y HttpServletRequest
- Así que esa es la solicitud … ahora veamos la respuesta
- Usando la respuesta para E / S
- Imagina que quieres enviar un JAR al cliente …
- Código de servlet para descargar el JAR
- Whoa ¿Cuál es el trato con el tipo de contenido?
- Tiene dos opciones de salida: caracteres o bytes.
- Puede configurar encabezados de respuesta, puede agregar encabezados de respuesta
- Pero a veces simplemente no quieres lidiar con la respuesta tú mismo …
- La redirección de servlet hace que el navegador haga el trabajo
- Un despacho de solicitud hace el trabajo en el lado del servidor
- Redireccionamiento vs. Envío de solicitud
- Revisión: HttpServletResponse
- Coffee Cram: Mock Exam Chapter 4
- Coffee Cram: Capítulo 4 Respuestas
- Capítulo 5 Atributos y oyentes: ser una aplicación web
- Kim quiere configurar su dirección de correo electrónico en el DD, no codificarlo dentro de la clase de servlet
- Parámetros iniciales al rescate
- No puede usar los parámetros de inicio del servlet hasta que el servlet se inicialice
- Los parámetros de inicio del servlet son de solo lectura UNA VEZ, cuando el Contenedor inicializa el servlet
- Probar su ServletConfig
- ¿Cómo puede un JSP obtener parámetros de inicio de servlet?
- Establecer un atributo de solicitud funciona … pero solo para el JSP al que reenvió la solicitud
- Parámetros de inicio de contexto al rescate
- Recuerde la diferencia entre los parámetros de inicio de servlet y los parámetros de inicio de contexto
- ServletConfig es uno por servlet ServletContext es uno por aplicación web
- Entonces, ¿qué más puedes hacer con tu ServletContext?
- ¿Qué sucede si desea un parámetro de inicio de la aplicación que sea una base de datos DataSource?
- ¿Qué es exactamente un atributo?
- Coffee Cram: Mock Exam Chapter 5
- Coffee Cram: Capítulo 5 Respuestas
- Capítulo 6 Gestión de sesiones: estado conversacional
- Kim quiere mantener el estado específico del cliente en múltiples solicitudes
- Se supone que funciona como una conversación REAL …
- ¿Cómo puede rastrear las respuestas del cliente?
- Cómo funcionan las sesiones
- Un problema … ¿cómo sabe el contenedor quién es el cliente?
- El cliente necesita una ID de sesión única
- ¿Cómo intercambian el Cliente y el Contenedor la información de la ID de sesión?
- La mejor parte: ¡el Contenedor hace prácticamente todo el trabajo de las cookies!
- ¿Qué sucede si quiero saber si la sesión ya existió o si acaba de crearse?
- ¿Qué sucede si SOLO quiero una sesión preexistente?
- Puedes hacer sesiones incluso si el cliente no acepta cookies, pero tienes que trabajar un poco más …
- No te olvides de HttpSessionBindingListener
- HttpSessionActivationListener permite que los atributos se preparen para el gran movimiento …
- Oyentes relacionados con la sesión
- Coffee Cram: Mock Exam Chapter 6
- Coffee Cram: Capítulo 6 Respuestas
- Capítulo 7 Uso de JSP: ser un JSP
- Al final, un JSP es solo un servlet
- Hacer un JSP que muestre cuántas veces se ha accedido
- Ella lo despliega y lo prueba
- El JSP no reconoce la clase Counter
- Use la directiva de página para importar paquetes
- Pero luego Kim menciona “expresiones”
- Las expresiones se convierten en el argumento para un out.print ()
- Kim deja caer la bomba final …
- Declarando una variable en un scriptlet
- ¿Qué pasa REALMENTE con tu código JSP?
- Necesitamos otro elemento JSP …
- Declaraciones JSP
- Es hora de ver el servlet generado REAL
- La variable out no es el único objeto implícito …
- Un comentario…
- API para el servlet generado
- Ciclo de vida de un JSP
- La traducción y la compilación solo ocurren UNA VEZ
- Inicializando su JSP
- Atributos en un JSP
- Usando PageContext para atributos
- Ejemplos que usan pageContext para obtener y establecer atributos
- Mientras estamos en el tema … hablemos más sobre las tres directivas
- Scriptlets considerados perjudiciales?
- No solía haber una alternativa.
- EL: la respuesta a, bueno, todo.
- Vistazo a EL
- Usando
- Puedes elegir ignorar EL
- Pero espera … todavía hay otro elemento JSP que no hemos visto: acciones
- Coffee Cram: Examen de prueba Capítulo 7
- Coffee Cram: Capítulo 7 Respuestas
- Capítulo 8 JSP sin guión: páginas sin guión
- Nuestra aplicación MVC depende de los atributos.
- Pero, ¿qué pasa si el atributo no es una Cadena, sino una instancia de Persona?
- Necesitamos más código para obtener el nombre de la persona
- Person es un JavaBean, por lo que utilizaremos las acciones estándar relacionadas con bean
- Deconstruyendo y
- ¡ también puede CREAR un bean!
- Puede usar
- ¡ puede tener un cuerpo!
- Servlet generado cuando tiene un cuerpo
- ¿Puedes hacer referencias de frijoles polimórficos?
- Agregar un atributo de tipo a
- Usando tipo sin clase
- El atributo de ámbito predeterminado es “página”
- Pasando directamente de la solicitud al JSP sin pasar por un servlet …
- El atributo param al rescate
- Pero espera ! Se pone aún mejor …
- Si puedes soportarlo, se pone aún MEJOR …
- Las etiquetas de frijol convierten propiedades primitivas automáticamente
- Pero, ¿qué pasa si la propiedad es algo más que una cadena o primitiva?
- Intentando mostrar la propiedad de la propiedad
- Expression Language (EL) salva el día!
- Deconstruyendo el lenguaje de expresión JSP (EL)
- Uso del operador punto (.) Para acceder a propiedades y valores de mapas
- El operador [] es como el punto solo mucho mejor
- El [] te da más opciones …
- Usar el operador [] con una matriz
- Un índice de cadena se convierte en un int para matrices y listas
- Para beans y Maps, puede usar cualquier operador
- Si NO es un literal de cadena, se evalúa
- Puedes usar expresiones anidadas dentro de los corchetes
- No puedes hacer $ {foo.1}
- EL representa texto sin formato, incluido HTML
- Los objetos implícitos EL
- Parámetros de solicitud en EL
- ¿Qué sucede si desea obtener más información de la solicitud?
- RequestScope NO es el objeto de solicitud
- Los objetos implícitos de alcance pueden salvarte
- Obtener cookies y parámetros de inicio
- Imagina que quieres que tu JSP tire dados
- Implementar una aplicación con funciones estáticas
- Y algunos otros operadores EL …
- EL maneja los valores nulos con gracia
- Revisión del lenguaje de expresión JSP (EL)
- Piezas de plantilla reutilizables
- La directiva include
- La acción estándar
- NO son lo mismo debajo …
- La directiva de inclusión ocurre en el tiempo de traducción sucede en tiempo de ejecución
- La directiva de inclusión en la primera solicitud
- La acción estándar en la primera solicitud
- UH oh. Ella está en lo correcto…
- La forma en que DEBEMOS haberlo hecho
- Personalizar el contenido incluido con
- La acción estándar
- Un avance condicional …
- Cómo funciona …
- Con , el búfer se borra ANTES del reenvío
- Revisión de acción estándar relacionada con frijoles
- La revisión incluye
- Coffee Cram: Mock Exam Chapter 8
- Coffee Cram: Capítulo 8 Respuestas
- Capítulo 9 Uso de JSTL: las etiquetas personalizadas son potentes
- EL y las acciones estándar son limitadas
- El caso del HTML que desaparece (reimpreso)
- Hay una mejor manera: use la etiqueta
- Los valores nulos se representan como texto en blanco
- Establecer un valor predeterminado con el atributo predeterminado
- Looping sin scripting
- Deconstruyendo
- Incluso puede anidar etiquetas
- Hacer una inclusión condicional con
- Pero, ¿y si necesitas otro?
- La etiqueta no funcionará para esto
- La etiqueta y sus socios y
- La etiqueta … mucho más genial que
- Usando con beans y Maps
- Puntos clave y gotchas con
- simplemente tiene sentido
- Con , ahora hay TRES formas de incluir contenido
- puede llegar FUERA de la aplicación web
- Personalizando lo que incluyes
- Haciendo lo mismo con
- para todas sus necesidades de hipervínculos
- ¿Qué pasa si la URL necesita codificación?
- NO desea que sus clientes vean esto:
- Crea tus propias páginas de error
- Configurar páginas de error en el DD
- Las páginas de error obtienen un objeto adicional: excepción
- La etiqueta . Como probar / atrapar … algo así
- Puedes hacer que la excepción sea un atributo
- ¿Qué sucede si necesita una etiqueta que NO esté en JSTL?
- Usar una biblioteca de etiquetas que NO sea de JSTL
- Darle sentido al TLD
- Uso de la etiqueta personalizada “consejo”
- El manejador de etiquetas personalizadas
- Presta atención a
- NO es solo para expresiones EL
- Qué puede estar en un cuerpo de etiqueta
- El manejador de etiquetas, el TLD y el JSP
- El taglib es solo un nombre, no una ubicación
- El contenedor construye un mapa
- Cuatro lugares donde el contenedor busca TLD
- Cuando un JSP usa más de una biblioteca de etiquetas
- Coffee Cram: Examen de prueba Capítulo 9
- Coffee Cram: Capítulo 9 Respuestas
- Capítulo 10 Desarrollo de etiquetas personalizadas: cuando incluso JSTL no es suficiente …
- Incluye e importaciones puede ser desordenado
- Archivos de etiqueta: como incluir, solo mejor
- ¿Pero cómo se envían los parámetros?
- ¡A un archivo de etiqueta, no envía parámetros de solicitud, envía atributos de etiqueta!
- ¿No se declaran los atributos de etiqueta en el TLD?
- Los archivos de etiquetas usan la directiva de atributos
- Cuando un valor de atributo es realmente grande
- Declarar contenido corporal para un archivo de etiqueta
- Donde el contenedor busca archivos de etiquetas
- Cuando necesita más que archivos de etiquetas … A veces necesita Java
- Hacer un manejador simple de etiquetas
- Una etiqueta simple con un cuerpo
- La API de etiqueta simple
- La vida de un manejador simple de etiquetas
- ¿Qué pasa si el cuerpo de la etiqueta usa una expresión?
- Una etiqueta con datos de fila dinámica: iterando el cuerpo
- Una etiqueta simple con un atributo
- ¿Qué es exactamente un JspFragment?
- SkipPageException: deja de procesar la página …
- SkipPageException muestra todo hasta el punto de la excepción
- Pero, ¿qué sucede cuando se invoca la etiqueta desde una página incluida?
- SkipPageException detiene solo la página que invoca directamente la etiqueta
- Todavía tiene que saber sobre los manejadores de etiquetas clásicos
- API de manejador de etiquetas
- Un manejador de etiquetas clásico muy pequeño
- Un manejador de etiquetas clásico con DOS métodos
- Cuando una etiqueta tiene un cuerpo: comparar Simple vs. Clásico
- Las etiquetas clásicas tienen un ciclo de vida diferente
- El ciclo de vida clásico depende de los valores de retorno
- IterationTag te permite repetir el cuerpo
- Valores de retorno predeterminados de TagSupport
- OK, seamos realistas …
- Nuestra etiqueta dinámica no está completa …
- Podríamos agregar más atributos de etiqueta personalizados …
- Hijo de más atributos de etiqueta
- El regreso del hijo de más atributos de etiqueta
- ¡Me estoy cansando de estos atributos de etiqueta!
- Nuestro código de manejador de etiquetas usando la interfaz DynamicAttributes
- El resto del código del manejador de etiquetas
- OK, hay un poco de configuración en el TLD
- ¿Qué pasa con los archivos de etiquetas?
- ¿Pero qué pasa si USTED necesita acceso al contenido del cuerpo?
- Con BodyTag, obtienes dos métodos nuevos
- Con BodyTag, puedes amortiguar el cuerpo
- ¿Qué pasa si tienes etiquetas que funcionan juntas?
- Una etiqueta puede llamar a su etiqueta principal
- Descubra cuán profundo es el anidamiento …
- Las etiquetas simples pueden tener padres clásicos
- Puedes subir, pero no puedes bajar …
- Obteniendo información del niño al padre
- Menú y manejadores de etiquetas MenuItem
- Conseguir un antepasado arbitrario
- Uso de la API PageContext para manejadores de etiquetas
- Coffee Cram: Mock Exam Chapter 10
- Coffee Cram: Capítulo 10 Respuestas
- Capítulo 11 Implementación de aplicaciones web: Implementación de su aplicación web
- La alegría del despliegue
- ¿Qué ocurre en una aplicación web?
- Archivos WAR
- Aspecto de un archivo WAR desplegado
- Hacer que el contenido estático y los JSP sean directamente accesibles
- Cómo funciona REALMENTE la asignación de servlets
- Las asignaciones de servlet pueden ser “falsas”
- Problemas sutiles …
- Configurar archivos de bienvenida en el DD
- Cómo el contenedor elige un archivo de bienvenida
- Configurar páginas de error en el DD
- Configurar la inicialización del servlet en el DD
- Hacer un JSP compatible con XML: un documento JSP
- Memorizar las etiquetas DD relacionadas con EJB
- Memorizar la etiqueta DD JNDI
- Memorizar la etiqueta DD
- Coffee Crem: Mock Exam Chapter 11
- Coffee Crem: Capítulo 11 Respuestas
- Capítulo 12 Seguridad de la aplicación web: manténgalo en secreto, manténgalo seguro
- Los chicos malos están en todas partes
- Y no es solo el SERVIDOR el que se lastima …
- Los 4 grandes en seguridad de servlet
- Una pequeña historia de seguridad
- Cómo autenticarse en HTTP World: el comienzo de una transacción segura
- Una mirada un poco más cercana a cómo el Contenedor realiza la Autenticación y Autorización
- ¿Cómo hizo eso el contenedor?
- ¡Mantenga la seguridad fuera del código!
- ¿Quién implementa la seguridad en una aplicación web?
- Los grandes trabajos en seguridad de servlets
- Solo autenticación suficiente para discutir la Autorización
- Paso 1 de autorización: definición de roles
- Paso 2 de autorización: definición de restricciones de recursos / métodos
- Las reglas para los elementos
- Reglas exigentes de para subelementos
- La forma en que funciona
- Cómo interactúan varios elementos
- Duelo de elementos
- El servlet de recetas de Alice, una historia sobre seguridad programática …
- Métodos de personalización: isUserInRole ()
- El lado declarativo de la seguridad programática.
- Autenticación revisitada
- Implementando Autenticación
- Autenticación basada en formularios
- Resumen de tipos de autenticación
- Ella no sabe acerca de la “conexión de capa de transporte protegida” de J2EE
- Asegurando datos en tránsito: HTTPS al rescate
- Cómo implementar la confidencialidad e integridad de los datos con moderación y declaración
- Proteger los datos de la solicitud.
- Coffee Cram: Mock Exam Chapter 12
- Coffee Cram: Capítulo 12 Respuestas
- Capítulo 13 Filtros y envolturas: el poder de los filtros
- Mejorando toda la aplicación web
- ¿Qué tal algún tipo de “filtro”?
- Los filtros son modulares y configurables en el DD
- Los filtros de tres formas son como servlets
- Crear el filtro de seguimiento de solicitudes
- El ciclo de vida de un filtro.
- Piense en los filtros como “apilables”
- Declarando y ordenando filtros
- Flash de noticias: a partir de la versión 2.4, los filtros se pueden aplicar a los despachadores de solicitudes
- Compresión de salida con un filtro del lado de respuesta
- Arquitectura de un filtro de respuesta.
- Pero, ¿es realmente así de simple?
- La salida ha salido del edificio.
- Podemos implementar nuestra PROPIA respuesta
- Envoltorios de roca
- Agregar un Contenedor simple al diseño
- Agregar un contenedor de flujo de salida
- El código de filtro de compresión real
- Código de envoltura de compresión
- Contenedor de compresión, código de clase auxiliar
- Coffee Cram: Mock Exam Chapter 13
- Coffee Cram: Capítulo 13 Respuestas
- Capítulo 14 Patrones y puntales: patrones de diseño empresarial
- El hardware del sitio web puede complicarse
- El software de aplicación web puede complicarse
- Por suerte para nosotros, tenemos patrones J2EE
- Rendimiento (y las “ilidades”)
- Alineando nuestros vernáculos …
- Más principios de diseño …
- Patrones para soportar componentes de modelos remotos
- Cómo el equipo de negocios apoya a los diseñadores web cuando los componentes MVC se ejecutan en una JVM
- ¿Cómo manejarán los objetos remotos?
- RMI hace la vida fácil
- Solo un poco más de revisión de RMI
- Agregar RMI y JNDI al controlador
- ¿Qué tal un objeto “intermedio”?
- El “intermediario” es un delegado comercial
- Simplifique sus delegados comerciales con el localizador de servicios
- Proteger los JSP del diseñador web de la complejidad del modelo remoto
- Compare el diagrama del modelo local con este diagrama del modelo remoto
- Hay buenas y malas noticias …
- ¿Tiempo para un objeto de transferencia?
- Patrones de nivel empresarial: revisión rápida
- Nuestro primer patrón revisitado … MVC
- MVC en una aplicación web real
- Mirando el controlador MVC
- Mejorando los controladores MVC
- Diseñando nuestro controlador de fantasía
- ¡Si! Es Struts en pocas palabras
- ¿Struts es un contenedor?
- ¿Cómo encaja el controlador frontal?
- Refactorizando la aplicación Beer para Struts
- La arquitectura de la aplicación Struts Beer
- Una forma de frijol expuesto
- Cómo funciona un objeto de acción
- struts-config.xml: uniéndolo todo
- Especificando Struts en el DD web.xml
- ¡Instala Struts y simplemente ejecútalo!
- Crear el entorno de implementación
- Revisión de patrones para el SCWCD
- Delegado de negocios
- Servicio de localización
- Transferir objeto
- Filtro interceptor
- Modelo, Vista, Controlador (MVC)
- Controlador frontal
- Coffee Cram: Examen simulado Capítulo 14
- Coffee Cram: Capítulo 14 Respuestas
- Examen final simulado del apéndice: Café Cram
- Coffee Cram: examen final de prueba
- Coffee Cram: respuestas del examen final