Problema de Encoding UTF-8 en Spring MVC
CharacterEncodingFilter es un filtro que nos ayuda a especificar un tipo de codificación de caracteres concreto tanto para solicitudes y como para las respuestas.
Se puede configurar en el fichero web.xml de tu aplicación. De la siguiente forma:
encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /*
En el caso de que estés usando Spring Security, en lugar de configurar el CharacterEncodingFilter en el web.xml necesitas crear un filtro personalizado y añadirlo a la cadena de filtros en primer lugar. Puedes asegurarte que el filtro esté el primero si lo añades con el addFilterBefore en tu clase WebSecurityConfigurerAdapter. Ejemplo:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { ... @Override protected void configure(HttpSecurity http) throws Exception { http.addFilterBefore(new EncodingFilter(), ChannelProcessingFilter.class); ... } } public class EncodingFilter extends GenericFilterBean { @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } }
Además, para que funcione el encoding, se debe tener en cuenta lo siguiente:
1 – Es necesario añadir en las jsps la siguiente definición.
< %@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" % >
2 – En caso de estar utilizando Tomcat puede se sea necesario setear el valor URIEncoding en el fichero server.xml.
Aplicación que integra Spring-Boot + AngularJS + Thymeleaf
En mi repositorio de GitHub he dejado una apicación simple que integra Spring-Boot con AngularJS utilizando lo siguiente:
– Para la configuración de Spring se ha utilizado Spring Boot junto con los siguientes módulos
. . . . 1- Spring Data JPA -> como capa de persistencia.
. . . . 2- Spring Data REST con Spring HATEOAS -> para la capa de servicios rest con los que interactuará AngularJS.
. . . . 3- Spring Security -> para la Autenticación y Autorización de la aplicación.
. . . . 4- Spring MVC con Thymeleaf -> se utiliza para gestionar principalmente los listados de consulta, así como todas las vistas que no tienen formularios.
. . . . 5- AngularJS -> se utiliza para las vistas de los formularios de detalles.
. . . . 6- Bootstrap + Angular-ui + Font Awesome + Angular-Show-Errors -> para el diseño y maquetación del front end.
. . . . 7- JUnit -> pruebas unitarias.
– Se utilizan Base de datos y servidor embebidos a modo de ejemplo: H2 y Tomcat.
– Para la creación de informes se utiliza JasperReports. Se ha configurado el pom para que a partir de los ficheros /src/main/resources/static/reports/*.jrxml y genere los /src/main/webapp/jasper/*.jasper. Para ello basta con ejecutar mvn generate-resources.
– La gestión de dependencias se realiza con: Maven y bower.
Instalación
=========
1- Instalar maven (utilizada la 3.0.5)
2- Instalar el wraper de maven para spring-boot:
mvn -N io.takari:maven:wrapper
3- Se puede ejecutar de varias formas:
//Con maven: mvn spring-boot:run. //o bien //Construyendo el jar: mvn clean package //Y haciéndolo correr con: java -jar target/springangularjs-0.0.1-SNAPSHOT.jar
4- Si todo va bien la aplicación correrá en: http://localhost:8080/
5- Copiar proyecto e importarlo al eclipse como proyecto de maven.
6- Recordar que para modificar las librerías de js es necesario bower. Para ello:
. . . . a- se necesita tener instalado node.js (https://nodejs.org/)
. . . . b- se necesita también tener instalado git (https://git-scm.com/download/win)
. . . . c- instalamos bower con:
npm install -g bower
. . . . d- finalmente ejecutando «bower install» en el proyecto nos colocara en el directorio /src/main/resources/static/bower_components las versiones de las librerías indicadas en el bower.json.
Todo el código esta subido al GitHub
Esquema de la Arquitectura
Digrama de clases
Despliegue aplicación Spring-Boot en Openshift
En este tutorial vamos a explicar como se debe desplegar una aplicación Spring-Boot en Openshift. La aplicación correrá en un tomcat y utilizará como Base de Datos H2.
Creamos la aplicación en OpenShift. Para ello:
Paso 1: Nos registramos en https://www.openshift.com/
Paso 2: Creamos una aplicación que contenga un Tomcat 7 (JBoss EWS 2.0).
Instalamos y configuramos las Openshift Client Tools
Paso 1: Lo primero que debemos hacer es instalar Ruby, la versión que recomienda Openshift es la 1.9.3.
http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-1.9.3-p551.exe
(Cuando estamos instalando Ruby debemos marcar la opcion que dice Add Ruby executables to your PATH, para que se añada al Path del sistema.)
Para saber si tenemos Ruby añadido correctamente al Path, abrimos un terminal y ejecutamos:
ruby –v.
Paso 2: Instalamos la última versión de Git.
https://github.com/msysgit/msysgit/releases/download/Git-1.9.5-preview20150319/Git-1.9.5-preview20150319.exe
para comprobar si git también está bien instalado poedemos ejecutar:
git --version.
Paso 3: Instalamos las Client Tools (Openshift rhc).
//Para instalar las rhc sólo debemos escribir en nuestro terminal: gem install rhc //A continuación, configuramos con: rhc setup
Nos pedirá logarnos con nuestras credenciales. Al introducirlas, si son correctas el sistema de configuración nos indicará que va a crear un Token para que podamos acceder a OpenShift sin necesidad de colocar nuestras credenciales de acceso, este Token se guardará en nuestra carpeta de usuario en una carpeta llamada .openshift.
Generando War
Usando maven se puede hacer directamente por la consola con:
mvn clean package
Desplegando WAR en OpenShift
Paso 1: Primero debemos crear un SSH public key para poder acceder al servidor por ssh. Se crean desde la propia consola web de Openshift. O usamos la que nos ha creado por defecto openshift en nuestro directorio de usuario cuando se instaló rhc.
Si queremos crear una nueva podemos crearla con el Putty Key Generator. Luego se debe añadir en el openshift a través de la consola web.
Paso 2: Descargamos el repositorio git.
Paso 3: Borrar la carpeta src y el pom.xml
Paso 4: Colocamos nuestro WAR en la carpeta webapp
Paso 5: Editar el archivo server.xml que está en .openshift/config/server.xml. Buscamos el siguiente conector y en el redirectPort pone 8443, le quitamos el 8 y guardamos.
Paso 6: Al archivo .openshift/config/context.xml le añadimos la siguiente Valve:
< Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="x-forwardedproto"/>
Paso 7: Hacemos commit y push
Paso 8: Reiniciamos el servidor.
Base de datos H2
Se debe colocar el fichero de bd en app-root/data y darle permisos de lectura y escritura.
Máquinas virtuales de Bitmani para desarrollo web
Bitnami es una biblioteca de aplicaciones de servidor populares y entornos de desarrollo que se pueden instalar con un solo clic. Es tan sencillo como descargarse una máquina virtual ya preparada para VMware o Virtual Box con los servidores que deseemos. Además, luego le puedes ir añadiendo módulos que vayas necesitando.
A continuación se muestra una guía de comandos rápida de uso para montar un servidor Tomcat con java 1.7 y nodejs.
Arrancar y parar Tomcat ----------------------- Todos los servicios se arrancan y paran de la siguiente forma: sudo /opt/bitnami/ctlscript.sh status sudo /opt/bitnami/ctlscript.sh start tomcat sudo /opt/bitnami/ctlscript.sh stop tomcat sudo /opt/bitnami/ctlscript.sh restart tomcat Cambiar el teclado inglés ------------------------- Por defecto la máquina virtual viene configurada con teclado en inglés. Para cambiarlo sería: sudo dpkg-reconfigure keyboard-configuration Activar SSH ----------- Por defecto el servicio ssh viene desactivado. Se puede activar así: sudo mv /etc/init/ssh.conf.back /etc/init/ssh.conf sudo start ssh Configuración de red en VMware ------------------------------ Tarjetas de red con el VMware Bridge Protocol desactivado. Tarjetas de red con ip y dns automático. Network Adapter de la máquina virtual en modo brighed. Configurar la red manualmente. ------------------------------ Hay que editar el archivo interfaces, por ejemplo así: 1- Editamos la interface de la tarjeta de red. En este caso la eth0 vi /etc/network/interfaces Dentro del archivo debes buscar: auto eth0 iface eth0 inet dhcp y sustituirlo por lo que corresponda en cada caso: auto eth0 iface eth0 inet static address 192.168.1.40 netmask 255.255.255.0 gateway 192.168.1.1 network 192.168.1.0 broadcast 192.168.1.255 2- Ahora editamos los DNS: vi /etc/resolv.conf nameserver = 8.8.8.8 nameserver = 8.8.4.4 3- Por ultimo reiniciamos el servicio de red: /etc/init.d/networking restart Cambiar la jdk -------------- Descargar la deseada, en este caso queremos pasar de la 1.8 que nos traia la máquina a la 1.7 así que descargamos al 1.7 de aquí http://www.oracle.com/technetwork/es/java/javase/downloads/jre7-downloads-1880261.html Lo más rápido es reemplazar el directorio /opt/bitnami/java por el nuevo. Se puede hacer por consola tal que así: sudo mv /opt/bitnami/java /opt/bitnami/java8 sudo mv /tmp/java /opt/bitnami/java sudo chown -R root /opt/bitnami/java (cambiar el usuario) sudo chown -R :root /opt/bitnami/java (Cambiar el grupo) sudo chmod -R 777 /opt/bitnami/java Añadir un módulo nuevo (Ej: nodejs) ----------------------------------- Descargarse de la página el *.run https://bitnami.com/stack/nodejs/installer#linux Se puede utilizar para ello el comando wget si se quiere. wget https://bitnami.com/..................../bitnami-nodejs-5.4.0-0-linux.run Darle permisos: chmod 755 bitnami-nodejs-5.4.0-0-linux.run Ejecutarlo y seguir los pasos de instalación sudo /bitnami-nodejs-5.4.0-0-linux.run Apagar la máquina virtual ------------------------- sudo poweroff
DOC:
https://wiki.bitnami.com/Virtual_Appliances_Quick_Start_Guide
https://bitnami.com/stack/tomcat/virtual-machine
Unable to read TLD «META-INF/tld/tiles-jsp.tld» from JAR file
En una aplicación web J2EE que corría sobre un Tomcat me daba este error:
Unable to read TLD "META-INF/tld/tiles-jsp.tld" from JAR file
Para solucionarlo borré el jsp-api.jar del WAR del proyecto.
Normalmente, jsp-api.jar no debe estar incluido en el WAR de una aplicación porque el servidor de aplicaciones debe tenerlo en su biblioteca común.
Tamaño de memoria del Tomcat
Para modificar el tamaño de la memoria debemos ir a:
(Windows)
$TOMCAT_HOME\bin\catalina.bat y añadir: set CATALINA_OPTS=”-Xms512m -Xmx512m”
(Linux)
$TOMCAT_HOME\bin\catalina.sh y añadir: export CATALINA_OPTS=”-Xms512m -Xmx512m”
Nota: El 512 se corresponde con el total de memoria a utilizar.
Categorias
- adobe (2)
- agile (1)
- Alfresco (1)
- Android (26)
- Angular (6)
- angularjs (10)
- apache (1)
- axis (2)
- Bases de datos (14)
- Bootstrap (1)
- C# (3)
- Cámara (1)
- chrome (3)
- Codeigniter (2)
- Control de Versiones (2)
- CSS (25)
- CVS (1)
- Django (9)
- Django Rest Framework (1)
- DNS (1)
- Docker (3)
- dominio (1)
- eclipse (5)
- Entity Framework (2)
- ETL (1)
- Firefox (6)
- flash (1)
- freecad (1)
- Git (12)
- GitHub (4)
- gpg (2)
- Groovy (1)
- Handlebars (1)
- hibernate (4)
- hosting (1)
- HTML (50)
- HTML 5 (26)
- Impresión 3D (9)
- Inkscape (1)
- IOS (2)
- ireports (3)
- Java (44)
- Javascript (55)
- JBoss (5)
- JPA (2)
- JQuery (20)
- Json (7)
- JSP (6)
- Keycloak (1)
- Lamp (1)
- LDAP (2)
- lean (1)
- linkedin (1)
- LINQ (1)
- linux (13)
- Livecycle (1)
- log (1)
- microcontroladores (1)
- MongoDB (4)
- MySQL (8)
- Node.js (5)
- OC4J (1)
- Openshift (2)
- Oracle (6)
- Patrones de Diseño (1)
- Photoshop (2)
- php (20)
- PostgreSQL (1)
- python (19)
- rabbitmq (1)
- Raspberry PI (13)
- Raspherry PI (5)
- React (6)
- seguridad (3)
- Selenium (3)
- Sencha Touch (1)
- Sin categoría (29)
- Spring (17)
- spring-boot (3)
- SQL (7)
- SQLServer (1)
- SSO (1)
- struts (2)
- SVN (1)
- Talend (1)
- Tomcat (6)
- unity (3)
- Visual Studio Code (2)
- vmware (5)
- Web Services (11)
- windows (18)
- wordpress (10)
- Xiaomi (1)
- xml (2)
Trabajos Realizados
- App Android – Autoka Fr
- App Android – Cartelera Cántabra
- App Android – Gramática y Vocabulario Ingles
- App Android – Hoja de Gastos
- App Android – Hotel Torre Cristina
- App Android – OcioEnjoy
- App Android – Visor CardBoard
- App Firefox – Managapp
- DiamanteBomba – DisasterCode
- Generador de Partes de Trabajo
- GitHub – Android Web Generator
- GitHub – Dynamic Angular Gallery
- GitHub – Dynamic React Gallery
- GitHub – Sotilizator
- GitHub – SpringAngularJS
- GitHub – Swiper Dynamic Angular Gallery
- HazParejas – DisasterCode
- RompeCabezas – DisasterCode
- Unity Game – English Couple
- Unity Game – Kill Wasp
- WordPress – El Buen Apicultor
- WordPress – El Cajón de los Retales
- WordPress – El Vestidito Azul
- WordPress – Feuchas
- WordPress – Fragua de Navajas Ponce
- WordPress – Humor a las Tres
- WordPress – Photo Places