Computación avanzada en java cert

Maestros Online
Maestros OnlineEducación um Maestros Online

www.maestronline.com ciencias_help@hotmail.com

Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
Solicita una cotización a través de nuestro
correo
Maestros Online
Computación
avanzada en JAVA
Apoyo en
ejercicios
Servicio de asesorías y solución de ejercicios
Ciencias_help@hotmail.com
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
Instalación de Tomcat
1. De acuerdo al sistema operativo objetivo, obtener el paquete de instalación para
Tomcat v8.0 de http://tomcat.apache.org/download-80.cgi
2. Descomprimir el archivo de instalación o ejecutar el instalador.
3. Investigar cómo iniciar/detener Tomcat además de los scripts
startup.sh/shutdown.sh, startup.bat/shutdown.bat y como servicio en Windows.
4. Documentar instalación con capturas de pantalla.
Cambio de Puerto de 8080 a 9090 y agregar usuario admin
1. Investigar cómo cambiar el puerto por defecto (8080).
a. Modificar el puerto por defecto al puerto 8090.
2. Investigar como agregar usuarios y roles.
a. Agregar rol manager-ui.
b. Agregar usuario admin con el rol manager-ui asignado.
3. Documentar instalación con capturas de pantalla.
Integrar Eclipse con Tomcat
1. Definir el servidor previamente instalado en Eclipse.
2. Crear un Dynamic Web Application y asignar el servidor Tomcat v8.0 previamente
definido en Eclipse.
3. Compilar y ejecutar la Web Application.
4. Documentar con capturas de pantalla.
Crear un archivo WAR del código incluido en el tag v1.2.6
1. Clonar el repositorio de github: https://github.com/jm66/CS13304
2. Cambiar al tag v1.2.6
3. Importar proyecto a Eclipse IDE.
4. Ajustar el Runtime Environment: JRE y Apache Tomcat.
5. Investigar cómo exportar código a un archivo WAR.
6. Documentar con capturas de pantalla.
Hacer el deployment con Tomcat Manager
1. Acceder a Tomcat Manager disponible en http://localhost:8090/manager/html con
el usuario admin previamente creado.
2. Hacer el deployment de la aplicación.
3. Acceder a la aplicación para validar deployment.
4. Documentar con capturas de pantalla.
Tomando en cuenta el último ejemplo del tema donde se demuestra como subir archivos del
cliente al servidor, investigar el método para transmitir archivos por medio de HTTP desde el
servidor al cliente. Esto incluye los streams de entrada y salida, Headers utilizados para que el
navegador entienda que se está transfiriendo un archivo y qué tipo de archivo.
Utilizar el código fuente del tag v1.3.8, donde se incluyen dos Servlets: DownloadServlet.java
y UploadServlet.java; Files.html para incluir las formas y la estructura de web app.
En la clase UploadServlet.java no es necesario modificar, pues funciona tal como se explicó
anteriormente
En el archivo WebContent/Files.html:
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
1. Crear un nuevo formulario para descargar un nombre de archivo dado. El formulario
contará con los siguientes elementos:
a. Identificador “download”
b. Acción “DownloadServlet”
c. Método “GET”
d. Un elemento input de tipo text con nombre fileName y un placeholder con
valor de archivo.ext
e. Un elemento input de tipo submit con texto Descargar
2. El diseño debe lucir como la siguiente imagen:
El deployment descriptor (web.xml):
1. Definición del Servlet DownloadServlet con la clase me.jmll.DownloadServlet.
2. Definición de servlet mapping para DownloadServlet como /Download y
/DownloadServlet
3. Definición de Context Init Params
a. Nombre: pathDestino
b. Valor: <Path destino donde se subirán los archivos>
En la clase DownloadServlet:
1. El método HTTP POST no será permitido, por tanto si se accede al DownloadServlet
con el método POST debe de responder con un HTTP estatus 405. Método No
Permitido.
2. El método HTTP GET será el único permitido para descargar archivos, por tanto
doGet() llamará a doRequest(), el cual cuenta con la lógica de negocio deseada para
enviar archivos al cliente.
3. En el método doRequest()
a. Obtener primero el parámetro fileName enviado en la solicitud.
b. Si no existe, responder la solicitud con un HTTP status 400.
c. Obtener el contexto del servlet en la variable servletContext.
d. Obtener el context init param pathDestino y crear el path completo para el
archivo que se va a descargar.
e. En el Try-With-Resources y dentro de los recursos, crear instancias
de FileInputStream a partir del archivo a descargar y OutputStream a partir del
objeto Response.
f. Obtener el MIME Type del archivo a descargar, en dado caso que no se pueda
descargar, hacer por defecto que sea “application/octet-stream”.
g. Asignar el MIME Type a la respuesta HTTP, además de incluir la longitud de la
respuesta mediante el método length() del archivo a descargar.
h. Configurar el response Header “Content-Disposition” como attachment y el
nombre del archivo. Se sugiere investigar la forma en que operan.
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
i. Si no existe el archivo, responder con un HTTP status 404.
4. Investiga qué es Twitter Bootstrap y cómo se puede integrar con una web app.
(http://getbootstrap.com/)
a. Ten a la mano la documentación de su CSS, JS y componentes.
5. El contenido de la web app Administrador de Archivos parte del tag v1.4.3 del
repositorio del curso cuenta con lo siguiente:
Dentro del código de fuente de los Servlets se encuentran dos paquetes, me.jmll.* y
me.jmll.io. El paquete me.jmll.io cuenta con una clase NIO2RecursiveDir.java, el cual es
encargado de buscar recursivamente el contenido de un directorio específico tipo Path.
Las clases AdminArchivos, DescargaArchivo y ListaArchivos dentro del paquete
me.jmll.* son los elementos que serán corregidos para su correcto funcionamiento.
Se incluyeron también librerías para el uso de tag-libraries en WEB-INF/lib.
WEB-INF/views cuenta con los archivos JSP para mostrar información y el archivo
index.jsp redirecciona a al URI /Admin.do que es el url mapping del servlet
AdminArchivos.
6. Dentro del archivo WEB-INF/includes/Bootstrap.jsp deben de ir los recursos
relacionados con Twitter Bootstrap necesarios para mostrar el contenido utilizando
este Framework.
a. Estos recursos deben de ser entregados por medio de un CDN (Content
Delivery Network).
b. El archivo Deben WEB-INF/includes/Bootstrap.jsp debe ser incluidos en el
tag <header> de HTML de WEB-INF/views/DifForm.jsp y WEB-INF/
views/DirView.jsp
7. En el servlet me.jmll.ListaArchivos:
a. Utilizando java.nio.Path crea un objeto basado en el parámetro obtenido
“path”.
b. Crea un objeto de tipo List que almacene objetos de tipo java.nio.Path y
sea ArrayList. Este elemento almacenará los resultados
de NIO2RecursiveDir.
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
c. Valida que exista el objeto Path creado en el paso 3(a) exista y sea directorio
para llamar a NIO2RecursiveDir.walkdir() y obtén los resultados en la lista
creada en el paso 3(b).
d. De lo contrario, un error será agregado a la lista errores definida al inicio, el
cual será necesario agregar como atributo al request con el nombre “errores”.
e. Obtén el RequestDispatcher con “/WEB-INF/views/DirView.jsp” y reenvía
con el método forward.
8. En el servlet me.jmll.AdminArchivos:
a. Obtén el atributo “errores” de la request para después asignarlo una vez más a
la nueva request.
b. Obtén el RequestDispatcher con “/WEB-INF/views/DirForm.jsp” y reenvía
con el método forward.
9. En el JSP /WEB-INF/views/DirForm.jsp
a. Con ayuda de la documentación de Twitter Bootstrap, haz que el
campo path sea requerido.
b. Con ayuda de la documentación de Twitter Bootstrap, crea un botón de tipo
submit que tenga el texto “Listar” y el ícono “glyphicon-search”.
c. Tomando en cuenta que se cuenta con un atributo de solicitud
llamado errores, investiga el uso del tag <c:forEach> e imprime los errores
con JSP Expression Language.
10. En el JSP /WEB-INF/views/DirView.jsp
a. Con ayuda del tag <c:if> y ${fn:lenght() lt 1} valida si el objeto en el
atributo paths cuenta con menos de un elemento.
b. Con el tag <c:forEach> genera las filas de la tabla con
el nombre del elemento, el path, y el tamaño. Toma en cuenta que cada uno
de los elementos es de tipo java.nio.Path, y puedes acceder a sus métodos tal
como lo menciona la documentación.
11. La clase DescargaArchivo es el resultado de DownloadServlet de la Actividad 1
del Tema 3.
12. Investiga qué es Twitter Bootstrap y cómo se puede integrar con una web app.
(http://getbootstrap.com/)
a. Ten a la mano la documentación de su CSS, JS y componentes.
13. Investigar cómo cargar Resource Bundles (java.util.ResourceBundle) en Servlets
basados en locales (java.util.Locale).
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
14. El contenido de la web app Administrador de Archivos, parte del tag v1.5.7 del
repositorio del curso cuenta con lo siguiente:
15. En la actividad del tema anterior no se utilizaron elementos de Bootstrap que
requerían JQuery para su funcionamiento, por tanto dentro de WEB-
INF/BootstrapJS.jsp se debe:
a. Agregar la versión 1.11.3 de JQuery para que los elementos del UI de esta
nueva versión funcionen correctamente. El recurso debe ser proporcionado por
una CDN, no local.
b. Tal como lo recomienda Twitter Bootstrap, estos recursos JS se recomiendan
ser cargados al final de la página, por tanto, en los archivos DirForm.jsp y
DirView.jsp requieren ser importados donde se indica.
16. El paquete me.jmll.i18n cuenta con dos recursos necesarios para internacionalizar la
web app, uno en inglés y otro en español. Cada uno con 20 llaves que serán ubicadas
a lo largo de la web app en JSP y servlets.
a. DirForm.jsp, DirView.jsp: validar que el parámetro locale se encuentre en la
solicitud, de lo contrario, validar si la variable locale está vacía y asignar ese
valor; de lo contrario, asignar el valor pageContext.request.locale a la variable
de session (scope=”session"). El tag a usar es <c:set var=”locale”
value=”${expresión}”/>
b. DirForm.jsp, DirView.jsp: con el tag <fmt:setLocale> asignar el valor de la
variable previamente configurada en la sesión (scope=”session")
c. DirForm.jsp, DirView.jsp: cargar bundle me.jmll.i18n.app en la variable
appBundle con el tag <fmt:setBundle>
d. DirForm.jsp, DirView.jsp: de acuerdo al video de lo esperado en la aplicación,
utilice el tag <fmt:message> correctamente para mostrar los mensajes dentro
de los bundles app.properties y app_es.properties.
e. ListaArchivos.java y DescargaArchivo.java de acuerdo con la investigación
de cargar atributos de sesión y ResourceBundle en Servlets, crea
un Locale a partir del
atributo request.getSession().getAttribute("locale"), para después cargar
ese Locale con el método getBundle de ResourceBundle.
f. ListaArchivos.java y DescargaArchivo.java: internacionaliza mensajes y
errores también dentro de los servlets.
17. Descargar el código fuente del tag v1.6.3.
18. Renombrar el tag file creado previamente de WEB-
INF/tags/bootstrap/content.tag a WEB-INF/tags/bootstrap/base.tag y realizar los
cambios necesarios para que pueda ser referido como <b:base> en un JSP.
19. Crear un tagfile parte de WEB-INF/tags/bootstrap/ llamado container.tag y que
pueda realizar la función de <div class=”container|container-fluid”> el tag debe un
atributo: fluid de tipo Boolean para en caso de especificarlo como válido, se debe
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
crear el div con la clase container-fluid, de lo contrario, se debe crear el div con la
clase container. Este tag contará con cuerpo.
20. Crear un tagfile WEB-INF/tags/bootstrap/ llamado pageHeader.tag, el cual se
encargará de crear un <div> con la clase page-header con dos
atributos: title ysubTitle de tipo String, el primero requerido y el segundo no. Este tag
no tendrá cuerpo.
21. Crear un tagfile WEB-INF/tags/bootstrap/ llamado jumbotron.tag que contará con un
atributo title requerido y el cuerpo del tag será mostrado como el contenido de texto
del elemento <div class=”jumbotron”>.
22. Crear un tagfile WEB-INF/tags/bootstrap/ llamado alert.tag, el cual contará con tres
atributos type (String), dismissable (Boolean) y fadeIn (Boolean). El
atributotype especificará el tipo de alerta (warning, danger, info, success). El
atributo dismissable especificará si el botón podrá ser cerrado y fadeIn indicará si un
efecto de difuminación se agregará.
23. El contenido de index.jsp no se modificará pues será la forma de validar si los tag files
fueron creados exitosamente:
24. Al crear cada uno de estos tags bajo el nombre correcto y hacer el deployment de la
aplicación, se tendrá que observar algo como se muestra en la siguiente imagen o en
el video adjunto:
25. La actividad la componen 3 Servlets: Login, Logout y Session, además de un POJO
User que simulará entradas en una base de datos por medio de HashMap.
26. POJO User cuenta con tres atributos de tipo String: username, password y fullName.
Cree los getters/setters y constructor con atributos username y password.
27. Servlet Login Método init():
a. Creará un objeto de tipo Map llamado DB, el cual estará compuesto de String
como llaves y me.jmll.model.User como valor.
b. Validará que exista el atributo “DB” en el contexto del servlet ServletContext. Si
no existe creará una instancia de HashMap<String, User> referenciado a DB.
c. Se crearán los siguientes usuarios para inicializar la base de datos:
User user1 = new User("anakin", "deathStar2");
user1.setFullName("Anakin Skywalker");
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
User user2 = new User("kenobi", "starfighter");
user2.setFullName("Obi Wan Knenobi");
d. Posteriormente a la creación de usuarios, se generará un evento DEBUG
utilizando el Logger log inicializado en el servlet comentando que se han
creado usuarios.
e. Después se guardará en el contexto del Servlet ServletContext el atributo DB.
f. Si existe, referenciará el objeto del ServletContext a la variable DB.
g. Generará un evento INFO con el Logger log previamente inicializado.
28. Servlet Login Método doGet(): obtendrá el request dispatcher y enviará la solicitud
a /WEB-INF/views/session.jsp si el atributo de la sesión user no es nulo. De lo
contrario, llamará al método doPost()
29. Servlet Login Método doPost():
a. Validará que los parámetros de la solicitud inputPassword e inputUsername no
sean nulos, de lo contrario, agregará un elemento string a la lista errores con el
mensaje “You should login first. Registrará un evento WARN con el log con el
mismo mensaje y reenviará a /WEB-INF/views/login.jsp utilizando el
requestDispatcher.
b. Si el usuario no es nulo, asigna el atributo user a la sesión con el valor de
getUsername y crea un Cookie llamado fullName con el valor de getFullName.
30. Servlet Login Método login():
a. El método valida que el usuario y que el password no sean nulos; de ser nulo,
regresa un valor nulo.
b. Obtiene el atributo DB del ServletContext, y lo referencia a la variable DB para
posteriormente validar la existencia del usuario en cuestión utilizando el
método get (username) de la clase HashMap.
31. Servlet Logout:
a. El método doGet obtiene el atributo de la sesión user, el cual si existe utiliza el
método removeAttribute() de la sesión para eliminarlo, posteriormente busca
entre las Cookies la llamada fullName para asignarle un valor nulo y maxAge
de 0. Finalmente se invalida la sesión con el método invalidate().
32. Log4j2: se agregan tres loggers, uno por cada clase con referencia al appender
LogFile
Investigación
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
1. Investiga sobre Rate Limiting Patterns, los Headers y el Status Code que se
manejan en la Response.
2. Investiga cómo se definen los parámetros de inicio en Filters y cómo pueden ser
cargados desde el Filter.
Desarrollo
1. Crear un Filter llamado RateLimit dentro del paquete me.jmll.filter.
2. Definir el Filter en el deployment descriptor para filtrar solicitudes hacia URL con
extensión CSS.
3. Agregar dentro de la definición de los parámetros del Filter dos
elementos REQ_LIMIT y TIME_LIMIT. El primero maneará la cantidad de solicitudes
recibidas y el segundo controlará el periodo de tiempo en que las solicitudes sean
recibidas.
4. En la clase RateLimit definir:
a. La variable logger de tipo org.apache.logging.log4j.Logger con los
modificadores de acceso necesarios para obtener por medio
deorg.apache.logging.log4j.LogManager el logger para la clase en cuestión.
b. La variable req_limit de tipo Integer con modificador de acceso privado y
valor de 5.
c. La varaible time_limit de tipo Integer con modificador de acceso privado y
valor de 15000.
d. Una constante de tipo String llamada REQ_LIMIT con valor de un String
“REQ_LIMIT”.
e. Una constante de tipo String llamada TIME_LIMIT con valor de un String
“TIME_LIMIT”.
f. Tres constantes de tipo String con modificador de acceso
privado XRATE_LIMIT, XRATE_LIMIT_REMAINING y XRATE_LIMIT_RESET, la
s cuales concentran el valor en string de los headers apropiados.
5. En la clase RateLimit crear:
a. Dentro del método encargado de cargar la configuración definida en el
deployment descriptor, agregar las líneas para
cargar REQ_LIMIT y TIME_LIMIT y sus valores asignarlos a req_limit y time_limit
respectivamente.
6. En la clase RateLimit dentro del método doFilter:
a. Realiza el casting de request y response
a HttpServletRequest y HttpServletResponse.
b. Agregar el header definido en XRATE_LIMIT a la response.
c. Si es que ha excedido el número de solicitudes en el periodo agregar el
header. XRATE_LIMIT_RESET y el código de estado HTTP correcto para
especificar que han sido muchas solicitudes.
d. Establecer el encoding de la respuesta en UTF-8.
7. En el archivo de configuración log4j2.xml agregar el
filter me.jmll.filter.RateLimit para que utilice LogFile.
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
8. Después de agregar lo antes definido, se debe esperar un resultado de acuerdo al
video de la actividad.
El participante creará cuatro recursos REST utilizando Spring Framework, el patrón de
diseño Model-View-Controller y Controller-Service-Repository. Los recursos se
encargarán de enumerar los archivos en un directorio en específico, descargar, subir y
borrar archivos, enviar notificaciones por medio de eventos asíncronos, siguiendo los
principios del Richardson Maturity Model. La evidencia consiste en 2 entregables, que se
describen a continuación: Avance 1 de la evidencia. Ambiente de desarrollo y
requerimientos. Entrega final de la evidencia. Diseño, programación y
Ambiente de desarrollo Como parte de la primer entrega, debes crear tu ambiente de
desarrollo donde desarrollarás el programa RESTfulWS.  Instalar JDK 8 en su versión más
reciente.  Instalar el web container de tu preferencia (Tomcat, Glassfish, u otro), toma en
cuenta que Tomcat es el que se indagará en el curso.  Crear una cuenta en GitHub como
usuario normal o estudiante (con tu cuenta de correo https://education.github.com/). 
Instalar GitHub para Escritorio o Git en línea de comando.  Instalar un IDE de acuerdo a
los mencionados (Eclipse, NetBeans, IntelliJIDEA).  Crear un repositorio en GitHub con tu
cuenta bajo el nombre de RESTfulWS, por ejemplo https://github.com/jm66/RESTfulWS,
con los siguientes requerimientos: 1. Archivo README.md con las siguientes secciones: a)
Instalación b) Uso c) Créditos d) Licencia 2. Archivo .gitignore para ignorar los archivos
.class, .swp y los archivos de proyecto de tu IDE seleccionado. Por ejemplo, eclipse:
.project, .metadata, etc. 3. Crear un branch llamado develop donde se registrarán todos
los cambios en tu código. Por ejemplo, https://github.com/jm66/RESTfulWS/network •
Configurar el IDE instalado para manejar tu repositorio en GitHub. Una vez completado
este punto incluirás el link de tu repositorio, donde se recibirá el código en la entrega
final. Proyecto Maven En el curso se utilizará Maven para el manejo de dependencias a
partir del módulo tres, sin embargo es un requisito para la evidencia. Por lo tanto, el
segundo commit del branch "develop" es la estructura de un proyecto Maven, debe
investigarse cómo crearlo de acuerdo al IDE seleccionado, el cual debe incluir al menos los
siguientes puntos: 1. Código fuente dentro de "src/main/java" 2. Recursos utilizados por
el código fuente "src/main/resources" 3. Código fuente de pruebas y recursos de prueba
dentro de "src/test/java" y "src/test/resrouces". 4. Archivo pom.xml con los siguientes
elementos: a. La definición de las siguientes propiedades: Propiedad Valor java-version
1.8 org.springframework-version 4.2.5.RELEASE org.aspectj-version 1.6.10
jackson.version 2.4.2 log4j.version 2.0.2
La definición de las siguientes dependencias: Group Id Artifact Id Version Scope Others
org.aspectj aspectjrt ${org.aspectjversion} org.apache.commons commonslang3 3.3.2
compile org.apache.logging.log4j log4j-api ${log4j.version} compile
org.apache.logging.log4j log4j-core ${log4j.version} runtime org.apache.logging.log4j
log4j-jcl ${log4j.version} runtime org.apache.logging.log4j log4j-slf4jimpl
${log4j.version} runtime javax.inject javax.inject 1 javax.validation validation-api 1.0.0.GA
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
com.fasterxml.jackson.core jackson-core ${jackson.versio n} compile
com.fasterxml.jackson.core jacksonannotations ${jackson.versio n} compile
com.fasterxml.jackson.core jacksondatabind ${jackson.versio n} compile
com.fasterxml.jackson.datat ype jacksondatatypejsr310 ${jackson.versio n} compile
javax.servlet javax.servletapi 3.1.0 provided javax.servlet.jsp javax.servlet. jsp-api 2.3.1
provided javax.el javax.el-api 3.0.0 provided javax.servlet.jsp.jstl javax.servlet. jsp.jstl-api
1.2.1 compile javax.annotation javax.annotat ion-api 1.2 compile junit junit 4.7 test
org.glassfish.web javax.servlet. jsp.jstl 1.2.2 compile Exclude: javax.servlet; servlet-ap
javax.servlet.jsp; jsp-api javax.servlet.jsp.jstl; jstlapi org.springframework springcontext
${org.springfram ework-version} org.springframework springwebmvc ${org.springfram
ework-version} org.springframework spring-oxm ${org.springfram ework-version}
compile org.springframework springcontextsupport ${org.springfram ework-version} c. La
definición de la siguiente configuración de build: i. Source Directory: src/main/java ii.
Resource: src/main/resources iii. Test Source Directory: src/test/java iv. Test Resource:
src/test/resources d. La propiedad URL debe ser el URL del repositorio de GitHub
previamente creado. e. La definición de los siguientes plugins:
maven-eclipseplugin 2.9 org.springframework.ide.ec lipse.core.springnature
org.springframework.ide.e clipse.core.springbuilder true true org.codehaus.mojo exec-
mavenplugin 1.2.1 org.test.int1.Main org.apache.maven.plu gins maven-war-plugin 2.3
src/main/webapp org.apache.maven.plu gins maven-compilerplugin 3.1 1.8 1.8 Analizar
los siguientes requerimientos El producto final serán unos RESTful Web Services que
provean las siguientes funcionalidades:  Recurso para descargar, subir y borrar archivos
especificados en el parámetro path por medio de los métodos GET, POST y DELETE,
respectivamente.  Recurso para listar contenidos de un directorio en específico por medio
del parámetro dir. Los archivos listados generan un link para su descarga por medio del
recurso file/.  Recurso para crear (enviar) y listar el registro de las notificaciones. 
Recurso para obtener colección usuarios.  Recurso principal el cual contiene los recursos
disponibles: user, directory, file, notify. Puntos adicionales:  La aplicación contará con un
log donde se registrarán las actividades de la aplicación en sus diferentes niveles.  La
aplicación será totalmente portable, es decir, que se podrá ejecutar en cualquier sistema
operativo que tenga instalado Java8.  La aplicación contará con las dependencias
incluidas por Maven, por tanto, sólo con hacer el deployment del WAR se podrá ejecutar
sin necesidad de descargar librerías adicionales.  La aplicación contará con el correcto
manejo de recursos y excepciones, es decir, si ocurre una excepción, el programa no
saldrá, sino que seguirá ejecutándose y mostrará el mensaje de error en la pantalla. La
descripción de requerimientos es sólo con propósitos informativos, pues más adelante se
podrán analizar a profundidad.
A continuación se describen las instrucciones para la entrega final: La estructura del
código del proyecto final se basará en la contenida en la práctica del tema 12, Hypermedia
control en RESTful Web Services, donde hasta este punto se habrá elaborado al menos el
Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
www.maestronline.com
recurso user y se tendrá conocimiento de patrones de diseño MVC y CSR, además de los
principios REST y el modelo de madurez de Richardson, este último resalta la importancia
de Hypermedia control en los recursos de los Web Services RESTful. Tal como se mencionó
en los requerimientos, los RESTful Web Services residirán en el mapping /api/v1/ y
tendrán los siguientes recursos y métodos HTTP disponibles (esto deberá incluirse en la
documentación wiki del repositorio): Recurso Mapping Descripción GET POST PUT DELETE
OPTIONS file /api/v1/file/ Subir, descargar, borrar archivos. Si Si No Si Si directory
/api/v1/dire ctory/ Listar archivos contenidos en un directorio. Si No No No Si notify
/api/v1/notif y/ Crear y listar notificaciones. Si Si No No Si user /api/v1/user / Crear,
listar, actualizar, borrar usuarios. Si Si Si Si Si index /api/v1/ Listar los recursos
disponibles en el api. Si No No No No
Para cada recurso se creará un branch en GitHub a partir de develop con la base de la
práctica el tema 12 como se muestra a continuación: A través del desarrollo cada uno de
los recursos hará merge con el branch develop cuando esté listo y aquellos dependientes
como directory y file podrán ser un solo branch, pero se recomienda que sea
independientes. Para más información acerca de operación de git, se recomienda ir al sitio
oficial https://git-scm.com/ Finalmente, cuando se haga el merge de develop con el
branch master para la versión final, esta también será identificada con un tag en la versión
estable, por ejemplo, v1.0. Curso: Computac

Recomendados

Productividad basada en herramientas tecnológicas cert von
Productividad basada en herramientas tecnológicas certProductividad basada en herramientas tecnológicas cert
Productividad basada en herramientas tecnológicas certMaestros Online
397 views4 Folien
Administración de proyectos de software y java cert von
Administración de proyectos de software y java certAdministración de proyectos de software y java cert
Administración de proyectos de software y java certMaestros Online
910 views7 Folien
Desarrollo de proyecto de mercadotecnia digital cert von
Desarrollo de proyecto de mercadotecnia digital certDesarrollo de proyecto de mercadotecnia digital cert
Desarrollo de proyecto de mercadotecnia digital certMaestros Online
7.7K views4 Folien
Documentación de software sa09003 2013 von
Documentación de software sa09003 2013Documentación de software sa09003 2013
Documentación de software sa09003 2013Maestros en Linea
417 views10 Folien
Manual 2014 i 04 lenguaje de programación ii (0870) von
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Robert Rayco Quiroz
1.7K views163 Folien
Aa2 blackboard von
Aa2 blackboardAa2 blackboard
Aa2 blackboardANDRES9226
61 views27 Folien

Más contenido relacionado

Similar a Computación avanzada en java cert

13. Configuracion De Aplicaciones Web Asp.Net von
13.  Configuracion De Aplicaciones Web Asp.Net13.  Configuracion De Aplicaciones Web Asp.Net
13. Configuracion De Aplicaciones Web Asp.Netguest3cf6ff
1.9K views30 Folien
Presentacion med line ed bennett von
Presentacion   med line ed bennettPresentacion   med line ed bennett
Presentacion med line ed bennettgarciafjgs
342 views22 Folien
Web Services JAX-RS RESTful y SOAP von
Web Services JAX-RS RESTful y SOAPWeb Services JAX-RS RESTful y SOAP
Web Services JAX-RS RESTful y SOAPismaelmartincolmenarejo
488 views28 Folien
Computación 3 sb04003 2013 von
Computación 3 sb04003 2013Computación 3 sb04003 2013
Computación 3 sb04003 2013Maestros en Linea
151 views9 Folien
Desarrollo de Apps Web en Ruby on Rails von
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
11.8K views30 Folien
Taller desarrollo web von
Taller  desarrollo webTaller  desarrollo web
Taller desarrollo webJosue Cucaita Murcia
479 views11 Folien

Similar a Computación avanzada en java cert(20)

13. Configuracion De Aplicaciones Web Asp.Net von guest3cf6ff
13.  Configuracion De Aplicaciones Web Asp.Net13.  Configuracion De Aplicaciones Web Asp.Net
13. Configuracion De Aplicaciones Web Asp.Net
guest3cf6ff1.9K views
Presentacion med line ed bennett von garciafjgs
Presentacion   med line ed bennettPresentacion   med line ed bennett
Presentacion med line ed bennett
garciafjgs342 views
Desarrollo de Apps Web en Ruby on Rails von Freelancer
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
Freelancer11.8K views
Hacking uploaders von linenoise
Hacking uploadersHacking uploaders
Hacking uploaders
linenoise537 views
Introducción al desarrollo de aplicaciones web von Anfap
Introducción al desarrollo de aplicaciones webIntroducción al desarrollo de aplicaciones web
Introducción al desarrollo de aplicaciones web
Anfap1.1K views
Instalación de Tomcat 7 en Linux y Windows von pablolp
Instalación de Tomcat 7 en Linux y WindowsInstalación de Tomcat 7 en Linux y Windows
Instalación de Tomcat 7 en Linux y Windows
pablolp4.8K views

Más de Maestros Online

Gobernabilidad de tecnologías de información von
Gobernabilidad de tecnologías de informaciónGobernabilidad de tecnologías de información
Gobernabilidad de tecnologías de informaciónMaestros Online
2.8K views15 Folien
Simulación de eventos discretos von
Simulación de eventos discretosSimulación de eventos discretos
Simulación de eventos discretosMaestros Online
10K views6 Folien
El emprendedor y el empresario profesional cert von
El emprendedor y el empresario profesional certEl emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional certMaestros Online
91.9K views24 Folien
Derecho bancario, bursátil, litigios, fiscal cert von
Derecho bancario, bursátil, litigios, fiscal certDerecho bancario, bursátil, litigios, fiscal cert
Derecho bancario, bursátil, litigios, fiscal certMaestros Online
5K views9 Folien
Desarrollo de proyecto en desarrollo internacional cert von
Desarrollo de proyecto en desarrollo internacional certDesarrollo de proyecto en desarrollo internacional cert
Desarrollo de proyecto en desarrollo internacional certMaestros Online
602 views3 Folien
Manejo de la producción y cadena de suministro cert von
Manejo de la producción y cadena de suministro certManejo de la producción y cadena de suministro cert
Manejo de la producción y cadena de suministro certMaestros Online
1.4K views4 Folien

Más de Maestros Online(20)

Gobernabilidad de tecnologías de información von Maestros Online
Gobernabilidad de tecnologías de informaciónGobernabilidad de tecnologías de información
Gobernabilidad de tecnologías de información
Maestros Online2.8K views
El emprendedor y el empresario profesional cert von Maestros Online
El emprendedor y el empresario profesional certEl emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional cert
Maestros Online91.9K views
Derecho bancario, bursátil, litigios, fiscal cert von Maestros Online
Derecho bancario, bursátil, litigios, fiscal certDerecho bancario, bursátil, litigios, fiscal cert
Derecho bancario, bursátil, litigios, fiscal cert
Maestros Online5K views
Desarrollo de proyecto en desarrollo internacional cert von Maestros Online
Desarrollo de proyecto en desarrollo internacional certDesarrollo de proyecto en desarrollo internacional cert
Desarrollo de proyecto en desarrollo internacional cert
Maestros Online602 views
Manejo de la producción y cadena de suministro cert von Maestros Online
Manejo de la producción y cadena de suministro certManejo de la producción y cadena de suministro cert
Manejo de la producción y cadena de suministro cert
Maestros Online1.4K views
Tecnología de los materiales cert von Maestros Online
Tecnología de los materiales certTecnología de los materiales cert
Tecnología de los materiales cert
Maestros Online1.2K views
Desarrollo de proyecto de procesos de manufactura cert von Maestros Online
Desarrollo de proyecto de procesos de manufactura certDesarrollo de proyecto de procesos de manufactura cert
Desarrollo de proyecto de procesos de manufactura cert
Maestros Online7.3K views
Esquemas de retiro y protección financiera cert von Maestros Online
Esquemas de retiro y protección financiera certEsquemas de retiro y protección financiera cert
Esquemas de retiro y protección financiera cert
Maestros Online2K views
Análisis financiero y esquemas de financiamiento cert von Maestros Online
Análisis financiero y esquemas de financiamiento certAnálisis financiero y esquemas de financiamiento cert
Análisis financiero y esquemas de financiamiento cert
Maestros Online1.5K views
Crédito, riesgo, inversiones y seguros cert von Maestros Online
Crédito, riesgo, inversiones y seguros certCrédito, riesgo, inversiones y seguros cert
Crédito, riesgo, inversiones y seguros cert
Maestros Online928 views
Desarrollo de proyecto de psicología organizacional cert von Maestros Online
Desarrollo de proyecto de psicología organizacional certDesarrollo de proyecto de psicología organizacional cert
Desarrollo de proyecto de psicología organizacional cert
Maestros Online5.9K views
Probabilidad y estadísticas descriptiva ebc von Maestros Online
Probabilidad y estadísticas descriptiva ebcProbabilidad y estadísticas descriptiva ebc
Probabilidad y estadísticas descriptiva ebc
Maestros Online2K views
El emprendedor y la innovación cert von Maestros Online
El emprendedor y la innovación certEl emprendedor y la innovación cert
El emprendedor y la innovación cert
Maestros Online4.4K views
Derecho fiscal y contribuciones cert von Maestros Online
Derecho fiscal y contribuciones certDerecho fiscal y contribuciones cert
Derecho fiscal y contribuciones cert
Maestros Online3.2K views
Identificación de negocios digitales cert von Maestros Online
Identificación de negocios digitales certIdentificación de negocios digitales cert
Identificación de negocios digitales cert
Maestros Online287 views

Último

25 de Novembro no IES Monelos von
25 de Novembro no IES Monelos25 de Novembro no IES Monelos
25 de Novembro no IES MonelosAgrela Elvixeo
33 views8 Folien
Tema 15. Funciones del DNA 2023.pptx von
Tema 15. Funciones del DNA 2023.pptxTema 15. Funciones del DNA 2023.pptx
Tema 15. Funciones del DNA 2023.pptxIES Vicent Andres Estelles
29 views116 Folien
Discurso argumentativo von
Discurso argumentativoDiscurso argumentativo
Discurso argumentativoAnthonyAguilera11
46 views67 Folien
1701704307_UpdWfY.pdf von
1701704307_UpdWfY.pdf1701704307_UpdWfY.pdf
1701704307_UpdWfY.pdfWilliam Henry Vegazo Muro
90 views1 Folie
Tema 2 Aparato digestivo 2023.pdf von
Tema 2 Aparato digestivo 2023.pdfTema 2 Aparato digestivo 2023.pdf
Tema 2 Aparato digestivo 2023.pdfIES Vicent Andres Estelles
57 views91 Folien
elementos-marketing-digital.pdf von
elementos-marketing-digital.pdfelementos-marketing-digital.pdf
elementos-marketing-digital.pdfestefanimilenca
55 views157 Folien

Último(20)

PPT TECNOLOGIAS PARA LA ENSEÑANZA VIRTUAL.pptx von CarlaFuentesMuoz
PPT TECNOLOGIAS PARA LA ENSEÑANZA VIRTUAL.pptxPPT TECNOLOGIAS PARA LA ENSEÑANZA VIRTUAL.pptx
PPT TECNOLOGIAS PARA LA ENSEÑANZA VIRTUAL.pptx
CarlaFuentesMuoz37 views
Intranet y extranet cuadro comparativo.pdf von UPTVT
Intranet y extranet cuadro comparativo.pdfIntranet y extranet cuadro comparativo.pdf
Intranet y extranet cuadro comparativo.pdf
UPTVT32 views
Fase 4- Estudio de la geometría analítica.pptx von blogdealgebraunad
Fase 4- Estudio de la geometría analítica.pptxFase 4- Estudio de la geometría analítica.pptx
Fase 4- Estudio de la geometría analítica.pptx
RES 2796-023 A 33(2).pdf von gabitachica
RES 2796-023 A 33(2).pdfRES 2796-023 A 33(2).pdf
RES 2796-023 A 33(2).pdf
gabitachica39 views

Computación avanzada en java cert

  • 1. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com Solicita una cotización a través de nuestro correo Maestros Online Computación avanzada en JAVA Apoyo en ejercicios Servicio de asesorías y solución de ejercicios Ciencias_help@hotmail.com
  • 2. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com Instalación de Tomcat 1. De acuerdo al sistema operativo objetivo, obtener el paquete de instalación para Tomcat v8.0 de http://tomcat.apache.org/download-80.cgi 2. Descomprimir el archivo de instalación o ejecutar el instalador. 3. Investigar cómo iniciar/detener Tomcat además de los scripts startup.sh/shutdown.sh, startup.bat/shutdown.bat y como servicio en Windows. 4. Documentar instalación con capturas de pantalla. Cambio de Puerto de 8080 a 9090 y agregar usuario admin 1. Investigar cómo cambiar el puerto por defecto (8080). a. Modificar el puerto por defecto al puerto 8090. 2. Investigar como agregar usuarios y roles. a. Agregar rol manager-ui. b. Agregar usuario admin con el rol manager-ui asignado. 3. Documentar instalación con capturas de pantalla. Integrar Eclipse con Tomcat 1. Definir el servidor previamente instalado en Eclipse. 2. Crear un Dynamic Web Application y asignar el servidor Tomcat v8.0 previamente definido en Eclipse. 3. Compilar y ejecutar la Web Application. 4. Documentar con capturas de pantalla. Crear un archivo WAR del código incluido en el tag v1.2.6 1. Clonar el repositorio de github: https://github.com/jm66/CS13304 2. Cambiar al tag v1.2.6 3. Importar proyecto a Eclipse IDE. 4. Ajustar el Runtime Environment: JRE y Apache Tomcat. 5. Investigar cómo exportar código a un archivo WAR. 6. Documentar con capturas de pantalla. Hacer el deployment con Tomcat Manager 1. Acceder a Tomcat Manager disponible en http://localhost:8090/manager/html con el usuario admin previamente creado. 2. Hacer el deployment de la aplicación. 3. Acceder a la aplicación para validar deployment. 4. Documentar con capturas de pantalla. Tomando en cuenta el último ejemplo del tema donde se demuestra como subir archivos del cliente al servidor, investigar el método para transmitir archivos por medio de HTTP desde el servidor al cliente. Esto incluye los streams de entrada y salida, Headers utilizados para que el navegador entienda que se está transfiriendo un archivo y qué tipo de archivo. Utilizar el código fuente del tag v1.3.8, donde se incluyen dos Servlets: DownloadServlet.java y UploadServlet.java; Files.html para incluir las formas y la estructura de web app. En la clase UploadServlet.java no es necesario modificar, pues funciona tal como se explicó anteriormente En el archivo WebContent/Files.html:
  • 3. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com 1. Crear un nuevo formulario para descargar un nombre de archivo dado. El formulario contará con los siguientes elementos: a. Identificador “download” b. Acción “DownloadServlet” c. Método “GET” d. Un elemento input de tipo text con nombre fileName y un placeholder con valor de archivo.ext e. Un elemento input de tipo submit con texto Descargar 2. El diseño debe lucir como la siguiente imagen: El deployment descriptor (web.xml): 1. Definición del Servlet DownloadServlet con la clase me.jmll.DownloadServlet. 2. Definición de servlet mapping para DownloadServlet como /Download y /DownloadServlet 3. Definición de Context Init Params a. Nombre: pathDestino b. Valor: <Path destino donde se subirán los archivos> En la clase DownloadServlet: 1. El método HTTP POST no será permitido, por tanto si se accede al DownloadServlet con el método POST debe de responder con un HTTP estatus 405. Método No Permitido. 2. El método HTTP GET será el único permitido para descargar archivos, por tanto doGet() llamará a doRequest(), el cual cuenta con la lógica de negocio deseada para enviar archivos al cliente. 3. En el método doRequest() a. Obtener primero el parámetro fileName enviado en la solicitud. b. Si no existe, responder la solicitud con un HTTP status 400. c. Obtener el contexto del servlet en la variable servletContext. d. Obtener el context init param pathDestino y crear el path completo para el archivo que se va a descargar. e. En el Try-With-Resources y dentro de los recursos, crear instancias de FileInputStream a partir del archivo a descargar y OutputStream a partir del objeto Response. f. Obtener el MIME Type del archivo a descargar, en dado caso que no se pueda descargar, hacer por defecto que sea “application/octet-stream”. g. Asignar el MIME Type a la respuesta HTTP, además de incluir la longitud de la respuesta mediante el método length() del archivo a descargar. h. Configurar el response Header “Content-Disposition” como attachment y el nombre del archivo. Se sugiere investigar la forma en que operan.
  • 4. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com i. Si no existe el archivo, responder con un HTTP status 404. 4. Investiga qué es Twitter Bootstrap y cómo se puede integrar con una web app. (http://getbootstrap.com/) a. Ten a la mano la documentación de su CSS, JS y componentes. 5. El contenido de la web app Administrador de Archivos parte del tag v1.4.3 del repositorio del curso cuenta con lo siguiente: Dentro del código de fuente de los Servlets se encuentran dos paquetes, me.jmll.* y me.jmll.io. El paquete me.jmll.io cuenta con una clase NIO2RecursiveDir.java, el cual es encargado de buscar recursivamente el contenido de un directorio específico tipo Path. Las clases AdminArchivos, DescargaArchivo y ListaArchivos dentro del paquete me.jmll.* son los elementos que serán corregidos para su correcto funcionamiento. Se incluyeron también librerías para el uso de tag-libraries en WEB-INF/lib. WEB-INF/views cuenta con los archivos JSP para mostrar información y el archivo index.jsp redirecciona a al URI /Admin.do que es el url mapping del servlet AdminArchivos. 6. Dentro del archivo WEB-INF/includes/Bootstrap.jsp deben de ir los recursos relacionados con Twitter Bootstrap necesarios para mostrar el contenido utilizando este Framework. a. Estos recursos deben de ser entregados por medio de un CDN (Content Delivery Network). b. El archivo Deben WEB-INF/includes/Bootstrap.jsp debe ser incluidos en el tag <header> de HTML de WEB-INF/views/DifForm.jsp y WEB-INF/ views/DirView.jsp 7. En el servlet me.jmll.ListaArchivos: a. Utilizando java.nio.Path crea un objeto basado en el parámetro obtenido “path”. b. Crea un objeto de tipo List que almacene objetos de tipo java.nio.Path y sea ArrayList. Este elemento almacenará los resultados de NIO2RecursiveDir.
  • 5. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com c. Valida que exista el objeto Path creado en el paso 3(a) exista y sea directorio para llamar a NIO2RecursiveDir.walkdir() y obtén los resultados en la lista creada en el paso 3(b). d. De lo contrario, un error será agregado a la lista errores definida al inicio, el cual será necesario agregar como atributo al request con el nombre “errores”. e. Obtén el RequestDispatcher con “/WEB-INF/views/DirView.jsp” y reenvía con el método forward. 8. En el servlet me.jmll.AdminArchivos: a. Obtén el atributo “errores” de la request para después asignarlo una vez más a la nueva request. b. Obtén el RequestDispatcher con “/WEB-INF/views/DirForm.jsp” y reenvía con el método forward. 9. En el JSP /WEB-INF/views/DirForm.jsp a. Con ayuda de la documentación de Twitter Bootstrap, haz que el campo path sea requerido. b. Con ayuda de la documentación de Twitter Bootstrap, crea un botón de tipo submit que tenga el texto “Listar” y el ícono “glyphicon-search”. c. Tomando en cuenta que se cuenta con un atributo de solicitud llamado errores, investiga el uso del tag <c:forEach> e imprime los errores con JSP Expression Language. 10. En el JSP /WEB-INF/views/DirView.jsp a. Con ayuda del tag <c:if> y ${fn:lenght() lt 1} valida si el objeto en el atributo paths cuenta con menos de un elemento. b. Con el tag <c:forEach> genera las filas de la tabla con el nombre del elemento, el path, y el tamaño. Toma en cuenta que cada uno de los elementos es de tipo java.nio.Path, y puedes acceder a sus métodos tal como lo menciona la documentación. 11. La clase DescargaArchivo es el resultado de DownloadServlet de la Actividad 1 del Tema 3. 12. Investiga qué es Twitter Bootstrap y cómo se puede integrar con una web app. (http://getbootstrap.com/) a. Ten a la mano la documentación de su CSS, JS y componentes. 13. Investigar cómo cargar Resource Bundles (java.util.ResourceBundle) en Servlets basados en locales (java.util.Locale).
  • 6. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com 14. El contenido de la web app Administrador de Archivos, parte del tag v1.5.7 del repositorio del curso cuenta con lo siguiente: 15. En la actividad del tema anterior no se utilizaron elementos de Bootstrap que requerían JQuery para su funcionamiento, por tanto dentro de WEB- INF/BootstrapJS.jsp se debe: a. Agregar la versión 1.11.3 de JQuery para que los elementos del UI de esta nueva versión funcionen correctamente. El recurso debe ser proporcionado por una CDN, no local. b. Tal como lo recomienda Twitter Bootstrap, estos recursos JS se recomiendan ser cargados al final de la página, por tanto, en los archivos DirForm.jsp y DirView.jsp requieren ser importados donde se indica. 16. El paquete me.jmll.i18n cuenta con dos recursos necesarios para internacionalizar la web app, uno en inglés y otro en español. Cada uno con 20 llaves que serán ubicadas a lo largo de la web app en JSP y servlets. a. DirForm.jsp, DirView.jsp: validar que el parámetro locale se encuentre en la solicitud, de lo contrario, validar si la variable locale está vacía y asignar ese valor; de lo contrario, asignar el valor pageContext.request.locale a la variable de session (scope=”session"). El tag a usar es <c:set var=”locale” value=”${expresión}”/> b. DirForm.jsp, DirView.jsp: con el tag <fmt:setLocale> asignar el valor de la variable previamente configurada en la sesión (scope=”session") c. DirForm.jsp, DirView.jsp: cargar bundle me.jmll.i18n.app en la variable appBundle con el tag <fmt:setBundle> d. DirForm.jsp, DirView.jsp: de acuerdo al video de lo esperado en la aplicación, utilice el tag <fmt:message> correctamente para mostrar los mensajes dentro de los bundles app.properties y app_es.properties. e. ListaArchivos.java y DescargaArchivo.java de acuerdo con la investigación de cargar atributos de sesión y ResourceBundle en Servlets, crea un Locale a partir del atributo request.getSession().getAttribute("locale"), para después cargar ese Locale con el método getBundle de ResourceBundle. f. ListaArchivos.java y DescargaArchivo.java: internacionaliza mensajes y errores también dentro de los servlets. 17. Descargar el código fuente del tag v1.6.3. 18. Renombrar el tag file creado previamente de WEB- INF/tags/bootstrap/content.tag a WEB-INF/tags/bootstrap/base.tag y realizar los cambios necesarios para que pueda ser referido como <b:base> en un JSP. 19. Crear un tagfile parte de WEB-INF/tags/bootstrap/ llamado container.tag y que pueda realizar la función de <div class=”container|container-fluid”> el tag debe un atributo: fluid de tipo Boolean para en caso de especificarlo como válido, se debe
  • 7. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com crear el div con la clase container-fluid, de lo contrario, se debe crear el div con la clase container. Este tag contará con cuerpo. 20. Crear un tagfile WEB-INF/tags/bootstrap/ llamado pageHeader.tag, el cual se encargará de crear un <div> con la clase page-header con dos atributos: title ysubTitle de tipo String, el primero requerido y el segundo no. Este tag no tendrá cuerpo. 21. Crear un tagfile WEB-INF/tags/bootstrap/ llamado jumbotron.tag que contará con un atributo title requerido y el cuerpo del tag será mostrado como el contenido de texto del elemento <div class=”jumbotron”>. 22. Crear un tagfile WEB-INF/tags/bootstrap/ llamado alert.tag, el cual contará con tres atributos type (String), dismissable (Boolean) y fadeIn (Boolean). El atributotype especificará el tipo de alerta (warning, danger, info, success). El atributo dismissable especificará si el botón podrá ser cerrado y fadeIn indicará si un efecto de difuminación se agregará. 23. El contenido de index.jsp no se modificará pues será la forma de validar si los tag files fueron creados exitosamente: 24. Al crear cada uno de estos tags bajo el nombre correcto y hacer el deployment de la aplicación, se tendrá que observar algo como se muestra en la siguiente imagen o en el video adjunto: 25. La actividad la componen 3 Servlets: Login, Logout y Session, además de un POJO User que simulará entradas en una base de datos por medio de HashMap. 26. POJO User cuenta con tres atributos de tipo String: username, password y fullName. Cree los getters/setters y constructor con atributos username y password. 27. Servlet Login Método init(): a. Creará un objeto de tipo Map llamado DB, el cual estará compuesto de String como llaves y me.jmll.model.User como valor. b. Validará que exista el atributo “DB” en el contexto del servlet ServletContext. Si no existe creará una instancia de HashMap<String, User> referenciado a DB. c. Se crearán los siguientes usuarios para inicializar la base de datos: User user1 = new User("anakin", "deathStar2"); user1.setFullName("Anakin Skywalker");
  • 8. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com User user2 = new User("kenobi", "starfighter"); user2.setFullName("Obi Wan Knenobi"); d. Posteriormente a la creación de usuarios, se generará un evento DEBUG utilizando el Logger log inicializado en el servlet comentando que se han creado usuarios. e. Después se guardará en el contexto del Servlet ServletContext el atributo DB. f. Si existe, referenciará el objeto del ServletContext a la variable DB. g. Generará un evento INFO con el Logger log previamente inicializado. 28. Servlet Login Método doGet(): obtendrá el request dispatcher y enviará la solicitud a /WEB-INF/views/session.jsp si el atributo de la sesión user no es nulo. De lo contrario, llamará al método doPost() 29. Servlet Login Método doPost(): a. Validará que los parámetros de la solicitud inputPassword e inputUsername no sean nulos, de lo contrario, agregará un elemento string a la lista errores con el mensaje “You should login first. Registrará un evento WARN con el log con el mismo mensaje y reenviará a /WEB-INF/views/login.jsp utilizando el requestDispatcher. b. Si el usuario no es nulo, asigna el atributo user a la sesión con el valor de getUsername y crea un Cookie llamado fullName con el valor de getFullName. 30. Servlet Login Método login(): a. El método valida que el usuario y que el password no sean nulos; de ser nulo, regresa un valor nulo. b. Obtiene el atributo DB del ServletContext, y lo referencia a la variable DB para posteriormente validar la existencia del usuario en cuestión utilizando el método get (username) de la clase HashMap. 31. Servlet Logout: a. El método doGet obtiene el atributo de la sesión user, el cual si existe utiliza el método removeAttribute() de la sesión para eliminarlo, posteriormente busca entre las Cookies la llamada fullName para asignarle un valor nulo y maxAge de 0. Finalmente se invalida la sesión con el método invalidate(). 32. Log4j2: se agregan tres loggers, uno por cada clase con referencia al appender LogFile Investigación
  • 9. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com 1. Investiga sobre Rate Limiting Patterns, los Headers y el Status Code que se manejan en la Response. 2. Investiga cómo se definen los parámetros de inicio en Filters y cómo pueden ser cargados desde el Filter. Desarrollo 1. Crear un Filter llamado RateLimit dentro del paquete me.jmll.filter. 2. Definir el Filter en el deployment descriptor para filtrar solicitudes hacia URL con extensión CSS. 3. Agregar dentro de la definición de los parámetros del Filter dos elementos REQ_LIMIT y TIME_LIMIT. El primero maneará la cantidad de solicitudes recibidas y el segundo controlará el periodo de tiempo en que las solicitudes sean recibidas. 4. En la clase RateLimit definir: a. La variable logger de tipo org.apache.logging.log4j.Logger con los modificadores de acceso necesarios para obtener por medio deorg.apache.logging.log4j.LogManager el logger para la clase en cuestión. b. La variable req_limit de tipo Integer con modificador de acceso privado y valor de 5. c. La varaible time_limit de tipo Integer con modificador de acceso privado y valor de 15000. d. Una constante de tipo String llamada REQ_LIMIT con valor de un String “REQ_LIMIT”. e. Una constante de tipo String llamada TIME_LIMIT con valor de un String “TIME_LIMIT”. f. Tres constantes de tipo String con modificador de acceso privado XRATE_LIMIT, XRATE_LIMIT_REMAINING y XRATE_LIMIT_RESET, la s cuales concentran el valor en string de los headers apropiados. 5. En la clase RateLimit crear: a. Dentro del método encargado de cargar la configuración definida en el deployment descriptor, agregar las líneas para cargar REQ_LIMIT y TIME_LIMIT y sus valores asignarlos a req_limit y time_limit respectivamente. 6. En la clase RateLimit dentro del método doFilter: a. Realiza el casting de request y response a HttpServletRequest y HttpServletResponse. b. Agregar el header definido en XRATE_LIMIT a la response. c. Si es que ha excedido el número de solicitudes en el periodo agregar el header. XRATE_LIMIT_RESET y el código de estado HTTP correcto para especificar que han sido muchas solicitudes. d. Establecer el encoding de la respuesta en UTF-8. 7. En el archivo de configuración log4j2.xml agregar el filter me.jmll.filter.RateLimit para que utilice LogFile.
  • 10. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com 8. Después de agregar lo antes definido, se debe esperar un resultado de acuerdo al video de la actividad. El participante creará cuatro recursos REST utilizando Spring Framework, el patrón de diseño Model-View-Controller y Controller-Service-Repository. Los recursos se encargarán de enumerar los archivos en un directorio en específico, descargar, subir y borrar archivos, enviar notificaciones por medio de eventos asíncronos, siguiendo los principios del Richardson Maturity Model. La evidencia consiste en 2 entregables, que se describen a continuación: Avance 1 de la evidencia. Ambiente de desarrollo y requerimientos. Entrega final de la evidencia. Diseño, programación y Ambiente de desarrollo Como parte de la primer entrega, debes crear tu ambiente de desarrollo donde desarrollarás el programa RESTfulWS.  Instalar JDK 8 en su versión más reciente.  Instalar el web container de tu preferencia (Tomcat, Glassfish, u otro), toma en cuenta que Tomcat es el que se indagará en el curso.  Crear una cuenta en GitHub como usuario normal o estudiante (con tu cuenta de correo https://education.github.com/).  Instalar GitHub para Escritorio o Git en línea de comando.  Instalar un IDE de acuerdo a los mencionados (Eclipse, NetBeans, IntelliJIDEA).  Crear un repositorio en GitHub con tu cuenta bajo el nombre de RESTfulWS, por ejemplo https://github.com/jm66/RESTfulWS, con los siguientes requerimientos: 1. Archivo README.md con las siguientes secciones: a) Instalación b) Uso c) Créditos d) Licencia 2. Archivo .gitignore para ignorar los archivos .class, .swp y los archivos de proyecto de tu IDE seleccionado. Por ejemplo, eclipse: .project, .metadata, etc. 3. Crear un branch llamado develop donde se registrarán todos los cambios en tu código. Por ejemplo, https://github.com/jm66/RESTfulWS/network • Configurar el IDE instalado para manejar tu repositorio en GitHub. Una vez completado este punto incluirás el link de tu repositorio, donde se recibirá el código en la entrega final. Proyecto Maven En el curso se utilizará Maven para el manejo de dependencias a partir del módulo tres, sin embargo es un requisito para la evidencia. Por lo tanto, el segundo commit del branch "develop" es la estructura de un proyecto Maven, debe investigarse cómo crearlo de acuerdo al IDE seleccionado, el cual debe incluir al menos los siguientes puntos: 1. Código fuente dentro de "src/main/java" 2. Recursos utilizados por el código fuente "src/main/resources" 3. Código fuente de pruebas y recursos de prueba dentro de "src/test/java" y "src/test/resrouces". 4. Archivo pom.xml con los siguientes elementos: a. La definición de las siguientes propiedades: Propiedad Valor java-version 1.8 org.springframework-version 4.2.5.RELEASE org.aspectj-version 1.6.10 jackson.version 2.4.2 log4j.version 2.0.2 La definición de las siguientes dependencias: Group Id Artifact Id Version Scope Others org.aspectj aspectjrt ${org.aspectjversion} org.apache.commons commonslang3 3.3.2 compile org.apache.logging.log4j log4j-api ${log4j.version} compile org.apache.logging.log4j log4j-core ${log4j.version} runtime org.apache.logging.log4j log4j-jcl ${log4j.version} runtime org.apache.logging.log4j log4j-slf4jimpl ${log4j.version} runtime javax.inject javax.inject 1 javax.validation validation-api 1.0.0.GA
  • 11. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com com.fasterxml.jackson.core jackson-core ${jackson.versio n} compile com.fasterxml.jackson.core jacksonannotations ${jackson.versio n} compile com.fasterxml.jackson.core jacksondatabind ${jackson.versio n} compile com.fasterxml.jackson.datat ype jacksondatatypejsr310 ${jackson.versio n} compile javax.servlet javax.servletapi 3.1.0 provided javax.servlet.jsp javax.servlet. jsp-api 2.3.1 provided javax.el javax.el-api 3.0.0 provided javax.servlet.jsp.jstl javax.servlet. jsp.jstl-api 1.2.1 compile javax.annotation javax.annotat ion-api 1.2 compile junit junit 4.7 test org.glassfish.web javax.servlet. jsp.jstl 1.2.2 compile Exclude: javax.servlet; servlet-ap javax.servlet.jsp; jsp-api javax.servlet.jsp.jstl; jstlapi org.springframework springcontext ${org.springfram ework-version} org.springframework springwebmvc ${org.springfram ework-version} org.springframework spring-oxm ${org.springfram ework-version} compile org.springframework springcontextsupport ${org.springfram ework-version} c. La definición de la siguiente configuración de build: i. Source Directory: src/main/java ii. Resource: src/main/resources iii. Test Source Directory: src/test/java iv. Test Resource: src/test/resources d. La propiedad URL debe ser el URL del repositorio de GitHub previamente creado. e. La definición de los siguientes plugins: maven-eclipseplugin 2.9 org.springframework.ide.ec lipse.core.springnature org.springframework.ide.e clipse.core.springbuilder true true org.codehaus.mojo exec- mavenplugin 1.2.1 org.test.int1.Main org.apache.maven.plu gins maven-war-plugin 2.3 src/main/webapp org.apache.maven.plu gins maven-compilerplugin 3.1 1.8 1.8 Analizar los siguientes requerimientos El producto final serán unos RESTful Web Services que provean las siguientes funcionalidades:  Recurso para descargar, subir y borrar archivos especificados en el parámetro path por medio de los métodos GET, POST y DELETE, respectivamente.  Recurso para listar contenidos de un directorio en específico por medio del parámetro dir. Los archivos listados generan un link para su descarga por medio del recurso file/.  Recurso para crear (enviar) y listar el registro de las notificaciones.  Recurso para obtener colección usuarios.  Recurso principal el cual contiene los recursos disponibles: user, directory, file, notify. Puntos adicionales:  La aplicación contará con un log donde se registrarán las actividades de la aplicación en sus diferentes niveles.  La aplicación será totalmente portable, es decir, que se podrá ejecutar en cualquier sistema operativo que tenga instalado Java8.  La aplicación contará con las dependencias incluidas por Maven, por tanto, sólo con hacer el deployment del WAR se podrá ejecutar sin necesidad de descargar librerías adicionales.  La aplicación contará con el correcto manejo de recursos y excepciones, es decir, si ocurre una excepción, el programa no saldrá, sino que seguirá ejecutándose y mostrará el mensaje de error en la pantalla. La descripción de requerimientos es sólo con propósitos informativos, pues más adelante se podrán analizar a profundidad. A continuación se describen las instrucciones para la entrega final: La estructura del código del proyecto final se basará en la contenida en la práctica del tema 12, Hypermedia control en RESTful Web Services, donde hasta este punto se habrá elaborado al menos el
  • 12. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com www.maestronline.com recurso user y se tendrá conocimiento de patrones de diseño MVC y CSR, además de los principios REST y el modelo de madurez de Richardson, este último resalta la importancia de Hypermedia control en los recursos de los Web Services RESTful. Tal como se mencionó en los requerimientos, los RESTful Web Services residirán en el mapping /api/v1/ y tendrán los siguientes recursos y métodos HTTP disponibles (esto deberá incluirse en la documentación wiki del repositorio): Recurso Mapping Descripción GET POST PUT DELETE OPTIONS file /api/v1/file/ Subir, descargar, borrar archivos. Si Si No Si Si directory /api/v1/dire ctory/ Listar archivos contenidos en un directorio. Si No No No Si notify /api/v1/notif y/ Crear y listar notificaciones. Si Si No No Si user /api/v1/user / Crear, listar, actualizar, borrar usuarios. Si Si Si Si Si index /api/v1/ Listar los recursos disponibles en el api. Si No No No No Para cada recurso se creará un branch en GitHub a partir de develop con la base de la práctica el tema 12 como se muestra a continuación: A través del desarrollo cada uno de los recursos hará merge con el branch develop cuando esté listo y aquellos dependientes como directory y file podrán ser un solo branch, pero se recomienda que sea independientes. Para más información acerca de operación de git, se recomienda ir al sitio oficial https://git-scm.com/ Finalmente, cuando se haga el merge de develop con el branch master para la versión final, esta también será identificada con un tag en la versión estable, por ejemplo, v1.0. Curso: Computac