diseÑo de aplicaciones web bloque 3: parte servidora …

48
Bloque 3: Parte servidora (backend) DISEÑO DE APLICACIONES WEB Jesús Montes jmontes@fi.upm.es TEMA 3.1: SPRING Y JAVA EE

Upload: others

Post on 05-Jul-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

Bloque 3: Parte servidora (backend)

DISEÑODEAPLICACIONESWEB

Jesú[email protected]

TEMA3.1:SPRINGYJAVAEE

Page 2: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

Disclaimer

• Estematerialestábasadoenunmaterialoriginalde:§  BoniGarcía([email protected])

SPRINGYJAVAEE

2

Page 3: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

Índice de contenidos

1.  JavaEnterpriseEdition2. Maven3.  Spring

SPRINGYJAVAEE

3

Page 4: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

Índice de contenidos

1.  JavaEnterpriseEdition§  Introducción

§  EvolucióndeJavaEE

§  ArquitecturadeJavaEE7

§  Servidordeaplicaciones

§  EmpaquetadodeaplicacionesJavaEE2.  Maven3.  Spring

SPRINGYJAVAEE

4

Page 5: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

Introducción•  JavaEnterpriseEditionaparecióafinalesdelos90paraeldesarrollodeaplicacionesempresariales

§  Necesitaaccesoadatos

§  Aplicalalógicadelnegocio

§  Añadecapasdepresentaciónalainformación

§  Secomunicaconsistemasexternos

•  Actualmente,lasaplicacionesempresarialesmásextendidassonlasaplicacionesweb

SPRINGYJAVAEE

5

Page 6: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

EvolucióndeJavaEE

SPRINGYJAVAEE

6

Page 7: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

EvolucióndeJavaEE

•  CaracterísticascomunesJ2EE1.x:

§  Resultóserunatecnologíacomplicadacontiempodedesarrollolargo

§  PorestarazónaparecierontecnologíascomoSpring,conelobjetivodepermitirundesarrollomuchomásligero

•  ApartirdeJavaEE5sesimplificóelmodelodedesarrollo:

§  Anotacionesenelcódigo(envezdeficherosdeconfiguraciónXML)

§  Programaciónconobjetossimples(PlainOldJavaObjects,POJOs)

§  Convenciónsobreconfiguración:Loquenoseespecifica,seconsideraquetieneelvalorpordefecto(quesueleserrazonable)

§  JavaEEpuedeserusadadeformacompletaojuntoconelframeworkSpring

§  Másinformación:http://docs.oracle.com/javaee/7/tutorial/

SPRINGYJAVAEE

7

Page 8: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

ArquitecturadeJavaEE7•  JavaEEesunconjuntodeespecificacionesdelibreríasquecualquierempresaocomunidaddesoftwarelibrepuedenimplementar

•  LasespecificacionesdeJavaEEsedefinenenunaorganizaciónllamadaJavaCommunityProcess(JCP)creadaen1998

•  CadaespecificaciónsedenominaJavaSpecificationRequests(JSR)

§  Porejemplo,JSR317correspondeconJPA2.0

•  ExistenJSRumbrella(paraguas)queagrupandiferentesJSRs

§  Porejemplo,elJSR316correspondeconJavaEE6

SPRINGYJAVAEE

8

Page 9: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

ArquitecturadeJavaEE7• JavaEE7esunaespecificaciónumbrella(paraguas)definidaporelJSR342quecontiene38especificaciones,porejemplo:§  JavaServlet3.1(JSR340)

§  JavaServerPages2.3(JSR245)

§  JavaAPIforJSONProcessing(JSR353)

§  JavaPersistenceAPI2.1JPA(JSR338)

§  …

SPRINGYJAVAEE

9

Page 10: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

ArquitecturadeJavaEE7• ParareducireltamañodeJavaEEsehancreadolosperfiles(profiles)queimplementanunsubconjuntodelaespecificacióncompletaJavaEE

• ElúnicoperfildefinidoeselWebProfileconlasespecificacionesnecesariasparaeldesarrollodeaplicacionesweb§  JSP,Servlets,JSF,JPA,EJBLite,etc…

SPRINGYJAVAEE

10

Page 11: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

ArquitecturadeJavaEE7

SPRINGYJAVAEE

11

Page 12: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

Servidordeaplicaciones•  Unservidordeaplicacionesesunframeworkqueproporcionainfraestructuraparaeldespliegue,ejecuciónygestióndeaplicaciones

•  Típicamenteconsisteenunservidorweb(HTTP)queejecutaaplicacionesdinámicasenelladoservidor

•  EnelmundoJavatambiénseconocealosservidoresdeaplicacionescomocontenedores(containers)

§  ComoJavaEEesunsuperconjuntodeJavaSE,cualquieraplicaciónJavaEEpuedeusarlaAPIdeJavaSE

SPRINGYJAVAEE

12

Page 13: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

Servidordeaplicaciones•  ContenedoresJavaEE:cumpleconlaespecificaciónJavaEEcompleta(oalmenoselperfilWeb)

SPRINGYJAVAEE

13

Glassfish 4.0 (Java EE 7)

WildFly 8.0 (Java EE 7)

TomEE 1.6 (Java EE 6 Web Profile)

Page 14: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

Servidordeaplicaciones•  Contenedoresweb:ofrecenlaAPIsdeServletsyJSPs.SelepuedenañadirotraslibreríasJavaEEcomplementarias(exceptoEJB)

SPRINGYJAVAEE

14

Apache Tomcat 8 (Servlets 3.1 y JSPs 2.3)

Eclipse Jetty 9.1 (Servlets 3.1 y JSPs 2.3)

Page 15: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

1. Java Enterprise Edition

EmpaquetadodeaplicacionesJavaEE•  UnaaplicaciónJavaSEseempaquetaenunficheroJAR(Javaarchive)

§  UnJAResunficherocomprimidoquecontieneclasesJavacompilados(bytecodes,ficheros.class)yotrosrecursos

•  UnaaplicaciónwebJavaEEseempaquetaenunficheroWAR(Webapplicationarchive)

§  UnWARestambiénunficherocomprimidoquecontieneloscomponentesJavaactivosenelservidor(servlets,etc)ylaaplicaciónweb(HTML,CSS,Java-Scripts,imágenes,etc)

SPRINGYJAVAEE

15

Page 16: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

Índice de contenidos

1.  JavaEnterpriseEdition2. Maven

§  Introducción

§  Gestióndedependencias

§  Gestióndelciclodevida

§  Ejemplo:creacióndeunproyectoMavendesdeEclipse

§  Ejemplo:usodelog4jenunaaplicaciónJava3.  Spring

SPRINGYJAVAEE

16

Page 17: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

Introducción•  MavenesunaherramientaquepermitelaautomatizacióndelciclodevidadeaplicacionesJava

§  Compilación,ejecución,pruebas,despliegue,gestióndedependencias…

•  DesarrolladoporlafundaciónApache•  Softwarelibre(licenciaApache2.0)

•  Versiónactualestable(noviembre2015):3.3.9

•  Otrasherramientassimilares:Ant,Gradle

SPRINGYJAVAEE

17

https://maven.apache.org/

Page 18: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

ProyectoMaven•  Mavensigueelprincipioágilde“convenciónsobreconfiguración”

•  UnproyectoMaventieneunaestructuradecarpetasdeterminada

SPRINGYJAVAEE

18

•  src/main/java:clasesJava

•  src/main/resources:recursos(≠clasesJava)

•  src/test/java:testsJava

•  src/tets/resources:recursosparatests

Page 19: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

Introducción•  UnproyectoMavendebeincluirensuraízunficheropom.xml (projectobjectmodel).Laestructurabásicaescomosigue:

SPRINGYJAVAEE

19

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>io.github.web</groupId> <artifactId>examples</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>

El groupId, artifactId y version forman las coordenadas del proyecto. Deben identificar unívocamente dicho proyecto. El prefijo -SNAPSHOT en la versión se suele emplear para identificar la versión de desarrollo

Page 20: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

Gestióndedependencias•  Mavenseencargadedescargarladependenciassimplementeañadiendoladependenciaenlaseccióndependenciesdelpom.xml

•  PordefectolasdependenciassedescargandelrepositoriocentraldeMaven:http://search.maven.org/

•  Sedescarganenelrepositoriolocalennuestrosistemaubicadoen~/.m2/repository

SPRINGYJAVAEE

20

Page 21: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

Gestióndedependencias

•  Lasdependenciaspuedentenerlossiguientesámbitos:

§  <scope>compile</scope>:Dependenciavisibleparatodoslasclasesdelproyecto(dentrodemainydetest).Opciónpordefecto(noesnecesarioponerlaexplícitamente)

§  <scope>test</scope>:Dependenciavisiblesóloparalostests(dentrodecarpetatest)

§  <scope>provided</scope>:Dependencianecesariaentiempodecompilaciónperonoenruntime

§  <scope>runtime</scope>:Dependencianonecesariaentiempodecompilaciónperosíenruntime

§  <scope>system</scope>:LadependenciaestafueradelrepositoriolocalMaven(enlarutaindicadapor<systemPath>/path-to/lib.jar</systemPath>)

SPRINGYJAVAEE

21

prin

cipa

les

Page 22: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

Gestióndedependencias

•  LasdependenciasMavenmásusadasenproyectosJavadeGitHubson:

SPRINGYJAVAEE

22

http://blog.takipi.com/githubs-10000-most-popular-java-projects-here-are-the-top-libraries-they-use/

Page 23: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

Gestióndelciclodevida

•  Mavensepuedeusardesdelaconsoladecomandosobienintegradoenunentornodedesarrollo(porejemploEclipse)

•  LasprincipalesfasesdelciclodevidamanejadasporMavenson:

§  mvn compile:CompilaelcódigofuenteJava

§  mvn test:Ejecutalaspruebasunitarias

§  mvn package:Empaquetalosbinarios(JAR,WAR)

§  mvn install:Instalaelbinarioempaquetadoenelrepositoriolocal

•  Mavengeneralosartefactosenlacarpetatargetenlaraízdelproyecto.Paraborraresosartefactosusamoselcomandomvn clean

SPRINGYJAVAEE

23

Page 24: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

Arquetipos

•  UnarquetipoesunaplantillaparaundeterminadotipodeproyectoMaven

•  Ejemplodeproyectonuevocreadoconelarquetipomaven-archetype-webapp

SPRINGYJAVAEE

24

Page 25: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven SPRINGYJAVAEE

25

Ejemplo:creacióndeunproyectoMavendesdeEclipse•  FileàNewàOther

Page 26: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven SPRINGYJAVAEE

26

Ejemplo:creacióndeunproyectoMavendesdeEclipse

Con arquetipo Sin arquetipo

Page 27: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

Ejemplo:usodelog4jenunaaplicaciónJava

SPRINGYJAVAEE

27

•  Estructuradelproyecto: •  pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>io.github.web</groupId> <artifactId>examples</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> </project>

Page 28: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

2. Maven

28

SPRINGYJAVAEE

import org.apache.log4j.Logger;

public class LogExample {

public static final Logger logger = Logger.getLogger(LogExample.class);

public static void main( String[] args ) { logger.info( "¡Hola mundo!" ); }}

•  LogExample.java:

log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

•  log4j.properties:

Page 29: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

Índice de contenidos

1.  JavaEnterpriseEdition2.  Maven

3.  Spring§  Introducción

§  SpringvsJavaEE

§  Inyeccióndedependencias

§  ArquitecturadeunaaplicaciónwebSpring

§  SpringBoot

SPRINGYJAVAEE

29

Page 30: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

Introducción•  SpringesunframeworkdedesarrollodeaplicacionesempresarialesbasadoentecnologíasJava

•  ElobjetivofundamentaldeSpringessimplificareldesarrolloJava§  LaprimeraversiónfueescritaporRodJohnsonydescritaensulibro

ExpertOne-on-OneJ2EEDesignandDevelopment(octubre2002)

•  Opensource(licenciaApache2.0)

•  Versiónestable(octubre2015):4.2.2

SPRINGYJAVAEE

30

http://spring.io/

Page 31: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

Introducción•  Springtieneunaestructuramodular

•  AlgunosdelosproyectosSpringmássignificativosson:

•  Haytodavíamás:https://spring.io/projects

SPRINGYJAVAEE

31

• Núcleo de Spring • Proporciona

inyección de dependencias

•  Incluye Spring MVC

Spring Framework

• Simplifica el despliegue de aplicaciones

• Convención sobre configuración

Spring Boot

• Proporciona acceso a bases de datos

• Relacionales o no relacionales

Spring Data

• Soporte para autenticación y autorización

Spring Security

Page 32: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

SpringvsJavaEE

•  JavaEEesunconjuntodelibreríasestándarenJava•  SpringesunframeworksoftwarelibrequeseapoyaenalgunosestándaresJavaEE

•  HaydesarrolladoresquesólousanJavaEEyotrosquecombinanSpringyJavaEEensusaplicaciones

SPRINGYJAVAEE

32

Page 33: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

SpringvsJavaEE•  EsquematípicodeunaaplicaciónJavaEE:

SPRINGYJAVAEE

33

JavaSE

ContenedorJavaEE

Aplicaciónweb

Para implementar la aplicación web se pueden usar librerías de Java SE y las librerías de Java EE proporcionadas por el servidor de aplicaciones

Page 34: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

SpringvsJavaEE•  EsquematípicodeunaaplicaciónSpring:

SPRINGYJAVAEE

34

JavaSE

Contenedorweb

Aplicaciónweb

Spring

Para implementar la aplicación web se pueden usar librerías de Java SE, las librerías proporcionadas por el contenedor web y el framework Spring

Page 35: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

Inyeccióndedependencias

•  AloscomponentesdelaaplicaciónSpringselosdenominabeans

•  Springdisponedeunsistemadeinyeccióndedependenciasparabeans

§  Creaunobjetoporcadamódulodefinido

§  Inyectalasdependenciasenlosmódulosquedependendeél

•  EnlasversionesinicialesdeSpring,losbeanssedefiníanenXML

•  EnSpring2.5seintrodujolaanotación@ComponentquepermitedefiniruncomponentequeesautomáticamentedescubiertoporSpring

•  Siuncomponentedependeotro,defineesecomponentecomounatributoanotadocon@Autowired

SPRINGYJAVAEE

35

Page 36: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

Inyeccióndedependencias•  Ejemplo:

SPRINGYJAVAEE

36

@Component public class UsersService { public int getNumUsers() { return 5; } }

@Controller public class GreetingController { @Autowired private UsersService usersService; @RequestMapping("/greeting") public ModelAndView greeting() { return new ModelAndView("greeting_template") .addObject("name", usersService.getNumUsers() + " users"); } }

GreetingController UsersService

Page 37: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

Inyeccióndedependencias•  Enalgunasocasionesesnecesarioconfigurarloscomponentesdelaaplicación

•  Paraello,enlaclasedelaaplicaciónsepuedecrearelcomponentemanualmentepasandocualquierconfiguracióncomoparámetroenelconstructoroinvocandolosmétodosdelobjeto

•  Sedefineunmétodoanotadocon@Beanquecreaelcomponente

SPRINGYJAVAEE

37

Page 38: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

Inyeccióndedependencias•  Ejemplo:

SPRINGYJAVAEE

38

@Component public class UsersService { private int numUsers; public UsersService(int numUsers){ this.numUsers = numUsers; } public int getNumUsers(){ return numUsers; } }

@SpringBootApplication public class Application { @Bean public UsersService usersService(){ return new UsersService(10); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

Lacreaciónmanualdelcomponente

permiteconfigurarlo

Page 39: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

ArquitecturadeunaaplicaciónwebSpring

SPRINGYJAVAEE

39

Controlador Usuarios

Sistema envío de correos

Servicio Usuarios

Repositorio Usuarios

Controlador Productos

Controlador Pedidos

Servicio Productos

Servicio Pedidos

Módulo de Integración con otros sistemas

Repositorio Productos

Repositorio Pedidos

Controladores (Interfaz)

Servicios (Lógica de negocio)

Repositorios (Persistencia)

Módulos de Integración

Page 40: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

ArquitecturadeunaaplicaciónwebSpring•  Lamayoríadelasaplicacioneswebutilizanbasesdedatosparaguardarsuinformación

•  Todasesasaplicacionestienenunaarquitecturasimilarquefacilitasudesarrolloymantenimiento

•  Losserviciosylosmódulosdeintegraciónsuelenestaranotadoscon@Serviceparaindicarsunaturaleza

•  @Serviceessimilara@Component(sepuedeninyectarenotroscomponentes)

SPRINGYJAVAEE

40

Page 41: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

SpringBoot•  EsunabibliotecaquefacilitaeldesarrollodeaplicacionesconSpring

•  PermiteusarelservidordeaplicacioneswebTomcatempotradoenlaaplicación

•  Simplificalaconfiguraciónyaceleraeldesarrollo•  Esunalibreríabastantereciente,antesseimplementabanlasaplicacionesusandodirectamenteSpring

SPRINGYJAVAEE

41

Page 42: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

SpringBoot•  EsquematípicodeunaaplicaciónSpringBoot:

SPRINGYJAVAEE

42

Para implementar la aplicación web se pueden usar librerías de Java SE, las librerías proporcionadas por el contenedor web y el framework Spring y Spring Boot

JavaSE

Contenedorweb

Spring

SpringBoot

Aplicaciónweb

Page 43: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring

SpringBoot•  PodemoscrearaplicacionesSpringBootdeformasencillaconlaaplicación

webhttps://start.spring.io/

•  VamosaverunodelosejemplosmássimplesdeaplicaciónSpringBoot(HelloWorld)

SPRINGYJAVAEE

4343

Page 44: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring SPRINGYJAVAEE

4444

<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>io.github.web</groupId><artifactId>hello-world</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.2.7.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

pom.xml

Proyectopadredelqueseheredalaconfiguración

TipodeproyectoSpringqueestásdesarrollando

Java8

Plugindespring-boot(sirveparaempaquetarlaaplicación)

SpringBoot•  HelloWorld:

Page 45: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring SPRINGYJAVAEE

4545

packageio.github.web;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DemoApplication.class,args);}}

DemoApplication.java SpringBoot•  HelloWorld:

<!DOCTYPEhtml><html><head><title>Springboot-helloworld</title></head><body>Helloworld!</body></html>

index.html

Page 46: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring SPRINGYJAVAEE

4646

<?xmlversion="1.0"encoding="UTF-8"?><configuration><includeresource="org/springframework/boot/logging/logback/base.xml"/><loggername="org.springframework.web"level="INFO"/></configuration>

logback.xml

SpringBoot•  HelloWorld:

server.port=8080

application.properties

Page 47: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring SPRINGYJAVAEE

4747

SpringBoot•  ExtendiendoelHelloWorld:

§  Añadimoslog4jcomodependenciaenpom.xml

§  CreamosunControllerqueaceptapeticionesconparámetros

packageio.github.web;

import java.util.Arrays;import org.apache.log4j.Logger;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ApplicationContext;

@SpringBootApplicationpublic class DemoApplication {

public static final Logger logger = Logger.getLogger(DemoApplication.class);

public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(DemoApplication.class, args); String[] beans = ctx.getBeanDefinitionNames(); Arrays.sort(beans); for (String b : beans) logger.info("Bean: "+b); }}

DemoApplication.java

Page 48: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …

3. Spring SPRINGYJAVAEE

4848

SpringBoot•  ExtendiendoelHelloWorld:

packageio.github.web;

import org.apache.log4j.Logger;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;

@RestControllerpublic class HelloController {

public static final Logger logger = Logger.getLogger(HelloController.class);

@RequestMapping("/hello")String hello(@RequestParam String name) {

logger.info("Recibida solicitud con parámetro name="+name);return "Hello "+name+"!";

}}

HelloController.java