Plantilla para Ingeniería Web UCM, edición 2018-19
Esta plantilla está pensada para ser usada como la base de los proyectos a realizar en la edición 2018-19 de la asignatura. Está basada en el resultado de crear un proyecto en STS 4.1.1 vía new spring starter project > security + jpa + hsqldb + thymeleaf + web + websocket
, pero además incorpora
- una aplicación de ejemplo completa, que usa WebSockets para medir el grado de seguimiento de una clase, y que permite la subida y descarga de ficheros
- clases de modelo que, vía JPA, se persisten como tablas en la BD HSQLDB, incluyendo para autenticación.
- pruebas unitarias
- un fichero "leeme.html" de ejemplo
- Lee su "leeme.html" para ver tanto el proyecto como su estructura a nivel de BD y vistas.
- Lánzala ejecutando la aplicación y entrando vía http://localhost:8080
Hay 3 tipos de usuarios: el administrador, que puede dar de alta profesores. Los profesores, que pueden gestionar grupos y activar / desactivar encuestas; y los alumnos, que para hacer login usan el código asignado en el momento de crear el grupo (y que les dice el profe), y que votan para hacer saber su opinión.
En realidad, los alumnos se crean dinámicamente, en el momento de suministrar el código.
Cuando entran en la aplicación, pueden votar sobre una serie de preguntas estándar (configuradas por el profesor), y hacer y votar sus propias preguntas. En todo momento, pueden ver qué han votado ellos y sus compañeros (en forma de agregado: la aplicación es muy anónima, para que no haya miedo a participar).
Como todo proyecto maven, los fuentes se encuentran bajo la carpeta src/ (y los metadatos del proyecto, incluyendo la forma de construirlo y sus dependencias, están en el pom.xml). Siguiendo con el esquema maven, en src/ hay varios subdirectorios:
- src/main: para los fuentes que forman parte de la distribución
- java: para fuentes java que forman la aplicación en sí
- es.ucm.fdi.iw: configuración de la aplicación web Spring. Distintos ficheros se encargan de distintos apartados:
AppConfig
: expone algunos "beans" para i18n (internacionalización) y gestión de rutas para ficheros cargados por los usuarios, en colaboración conLocalData
.SecurityConfig
: configura los accesos a la aplicación, en colaboración conIwUserDetailsService
, que especifica cómo verificar permisos en las tablas generadas con JPA. Hay usuarios pre-creados en elimport.sql
. Los usuarios que entran vía el login estándar son inicializados y redirigidos en elLoginSuccessHandler
.WebSocketConfig
configura el uso de WebSockets, yIwApplication
especifica cómo lanzar la aplicación desde spring boot.StartupConfig
: llamada una vez la aplicación empieza a funcionar, permite hacer inicializaciones de último momento visibles para todos los usuarios.
- es.ucm.fdi.iw.control: controladores; gestión de peticiones a la aplicación. Las anotadas con
@Controller
permiten especificar mapeos petición-manejador (con@GetMapping
y familia). Hay varios controladores, cada uno especializado en un área:RootController
: para los recién llegadosAdminController
: para administraciónUserController
: para gestionar perfiles de usuarios, y mostrar sus fotosClassController
: para entrar en una clase, y ver preguntasApiController
: para gestionar peticiones AJAX para preguntar y votarIwSocketHandler
: no es un controlador tradicional, sino que gestiona comunicación asíncrona vía websockets. Lo usa mucho elApiController
, para informar a los participantes en una clase de cómo van las votaciones, y de la aparición de nuevas preguntas y borrado de preguntas viejas.
- es.ucm.fdi.iw.model: clases de modelo; las anotadas con
@Entity
, generan tablas usando JPA
- es.ucm.fdi.iw: configuración de la aplicación web Spring. Distintos ficheros se encargan de distintos apartados:
- resources: para ficheros de configuración, o recursos que se sirven por la aplicación pero que no forman parte directamente del código de la misma
- import.sql: contenido inicial de la base de datos. Se ejecuta después de generar la BD a partir de las clases del modelo, y debe ser compatible con lo generado.
- application*.properties: configuración a alto nivel de la aplicación. El principal es application.properties, y ahí puedes especificar un "perfil", según el cual se cargará o bien application-default.properties (si no lo cambias), que usa una BD que se regenera a cada vez -- o application-externaldb.properties, que usa una BD externa persistente, pero que tienes que haber lanzado antes para que funcione.
- Message*.properties: por si quieres internacionalizar tu aplicación, lo cual es educativo pero aburrido, y no sube mucho la nota (pero es bueno entender cómo funciona). Ver transparencias sobre thymeleaf para ver cómo incluir mensajes internacionalizados en tu aplicación.
- static: recursos web no-dinámicos, tipo imágenes, CSSs, JS, ...
- templates: templates thymeleaf, y fragmentos de los mismos
- java: para fuentes java que forman la aplicación en sí
- src/test: para los ficheros que se usan sólo en las pruebas
- src/test/java: código de pruebas
- src/test/resources: ficheros de recursos para usar durante las pruebas
- Clona el repositorio a tu cuenta de grupo
- Modifica, en el pom.xml, el nombre de proyecto y su grupo
- Elimina todo lo que sea karmómetro-específico:
- sustituye la información del leeme
- sustituye las clases de modelo karmómetro-específicas
- elimina controladores y templates que no necesites. Recomiendo modificar, sin borrar, los fragmentos de
header
ynav
, porque tienen funcionalidad útil relacionada con websockets; y el scriptkclient.js
, al menos en la parte relacionada con esos mismos websockets. - retoca la seguridad para que se adapte a tus roles y lo que debe poder hacer cada uno
- Ábrelo con tu copia de STS