wad spring ejemplo

Upload: alejandrocifuent54

Post on 07-Jul-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 WAD Spring Ejemplo

    1/12

    Aplicación Web con Spring

    IntroducciónEn esta aplicación web MVC se utiliza Spring Framework. Permite al usuario introducir su nombre en un campo de texto,

    al digitar en OK , el nombre se regresa se muestra en una segunda p!gina con un saludo de bien"enida.El Framework Spring es un con#unto de aplicaciones de código abierto $ue %acilita el desarrollo de &a"a EE. Consiste enun contenedor, un ambiente para la gestión de componentes, un con#unto de ser"icios para las inter%aces de usuario web,transacciones persistencia. El Spring 'eb MVC es una parte de Spring, un %ramework MVC extensible para la creaciónde aplicaciones web.El ()E proporciona soporte integrado para Spring 4.x 3.x . *as bibliotecas se inclu en con el ()E se agreganautom!ticamente al classpath del pro ecto cuando se selecciona Spring. Se inclu en los "alores de con%iguración, comoel nombrado la asignación del DispatcherServlet de 'eb Spring MVC. *a biblioteca &S+* se puede registraropcionalmente en la creación del pro ecto. +ambi n se proporciona soporte para los arc-i"os de con%iguración del bean

    M* de Spring, inclu endo las siguientes %uncionalidades/• Completado de código . Es in"ocado en los arc-i"os de con%iguración de Spring M* para las clases de &a"a, as0

    como las re%erencias del bean.• Navegación . 1iperenlaces de las clases propiedades de &a"a mencionadas en las de%iniciones del bean de Spring, as0

    como -iperenlaces a otras re%erencias del bean de Spring.• Refactorización . 2enombrado de las re%erencias a las clases de &a"a en los arc-i"os de con%iguración de M* de

    Spring.

    1. Configuración de un Nuevo Proyecto con Springa. Creación del Proyecto a!e de Spring

    (nicio de la creación del nue"o pro ecto de la aplicación web con Spring.3. Seleccionar New Project 4Ctrl5S-i%t567 en el men8 File del ()E. Seleccionar la categor0a Java Web en

    Projects seleccionar Web Application . Clic en Next .

    9. En Project Na e , ingresar HelloSpring . Clic en Next .

    Spring Página 1

  • 8/18/2019 WAD Spring Ejemplo

    2/12

    :. En el paso mencionado 3! Server an" Settings , des-abilitar la opción #nable $ontexts an" %epen"enc&'njection , a $ue no se traba#a con la especi%icación JS()*++ .

    ;. Con%irmar $ue el ser"idor

  • 8/18/2019 WAD Spring Ejemplo

    3/12

  • 8/18/2019 WAD Spring Ejemplo

    4/12

    Se inicia el na"egador predeterminado del ()E se muestra el contenido de la p!gina de bien"enida &'W%!-#(F' sp'index. sp 7.

    Nota . Cuando se e#ecuta el pro ecto en el ()E, el pro ecto se compila se implanta en el ser"idor, luego se abre en elna"egador predeterminado. Por otra parte, el ()E proporciona la caracter0stica %eplo& on Save , $ue

    predeterminadamente se acti"a para pro ectos web. Bl guardar arc-i"os en el editor, el pro ecto se "uel"e a compilar desplegar en el ser"idor de %orma autom!tica. Para "er los cambios, simplemente se pueden re%rescar las p!ginas en elna"egador.Para entender lo $ue se realizó, se empieza por examinar el descriptor de despliegue del pro ecto 4 web.x l 7. Para abrireste arc-i"o en el editor, clic derec-o en el nodo W#2)'NF web.x l en la "entana Projects seleccionar %dit . El

    punto predeterminado de entrada de la aplicación es redirect. sp /)welcome-*ile-list+ )welcome-*ile+redirect. sp)'welcome-*ile+)'welcome-*ile-list+

    )entro de redirect. sp , existe un enunciado de redirección $ue dirige todas las solicitudes a index.htm /), response.send edirect& index.htm /0 ,+

    En el descriptor de despliegue, obser"ar $ue todas las solicitudes de patrones de 2* $ue coincidan con 1.htm semapean o asignan al DispatcherServlet de Spring.)servlet+ )servlet-name+dispatcher)'servlet-name+ )servlet-class+org.spring*ramework.web.servlet.DispatcherServlet)'servlet-class+ )load-on-start2p+ )'load-on-start2p+)'servlet+)servlet-mapping+ )servlet-name+dispatcher)'servlet-name+ )2rl-pattern+1.htm)'2rl-pattern+)'servlet-mapping+

    El nombre completo del ser"let despac-ador, como se muestra arriba, esorg.spring*ramework.web.servlet.DispatcherServlet . Esta clase est! contenida en la biblioteca deSpring, $ue se aAadió al classpath del pro ecto cuando ste se creó. Se puede "eri%icar esto en la "entana Projects

    buscando en el nodo de -ibraries . *ocalizar el spring-webmvc-3.4.4. %$%5S%. ar , luego expandirlo paraencontrar org.spring*ramework.web.servlet + DispatcherServlet .

    Spring Página 4

  • 8/18/2019 WAD Spring Ejemplo

    5/12

    El DispatcherServlet controla las solicitudes entrantes en %unción de los "alores de con%iguración $ue seencuentran en dispatcher-servlet.xml . Bbrir el dispatcher-servlet.xml seleccionado su pestaAa en eleditor. bser"ar el siguiente código.)bean id6 2rlMappingclass6 org.spring*ramework.web.servlet.handler.Simple"rl7andlerMapping + )propert8 name6 mappings + )props+ )prop ke86 'index.htm +indexController)'prop+ )'props+

    )'propert8+)'bean+)bean id6 view esolver class6 org.spring*ramework.web.servlet.view.#nternal eso2rceView esolver p9pre*ix6 'W%!-#(F' sp' p9s2**ix6 . sp '+)bean name6 indexController class6 org.spring*ramework.web.servlet.mvc.:arameteri;ableViewController p9view(ame6 index '+

    Se de%inen tres beans en este arc-i"o/ indexController , view esolver 2rlMapping . Cuando elDispatcherServlet recibe una petición $ue coincide con .ht como in"ex.ht , busca un controlador dentro de2rlMapping $ue pueda acomodar la solicitud. Brriba se obser"a la propiedad mappings $ue enlaza 'index.htm a

    indexController .El entorno de e#ecución busca entonces la de%inición de un bean llamado indexController , $ue es con"enientemente

    proporcionado en el es$ueleto del pro ecto. bser"ar $ue indexController -ereda de:arameteri;ableViewController . Esta es otra clase de Spring, $ue simplemente regresa una "ista. Bdem!s,obser"ar $ue p9view(ame6

  • 8/18/2019 WAD Spring Ejemplo

    6/12

    p2blic class 7elloService = public static String sayHello(String name) { return "Hello " + name + "!"; }>

    &. Implantación del Controlador y del 'odeloSe puede utilizar un SimpleFormController para mane#ar los datos del usuario determinar cu!l "ista regresar.Nota / SimpleFormController es obsoleta en Spring :.x. Sin embargo, los controladores anotados deben utilizarseen lugar de los arc-i"os M*.

    3. Bbrir el asistente New File . En $ategories , seleccionar Spring Fra ewor, H enFile 6&pes seleccionarSimple Form Controller .

    Nota / El ()E de 6etIeans proporciona plantillas para di"ersos arte%actos de Spring, inclu endo el arc-i"o decon%iguración M* de Spring, el 5bstractController el SimpleFormController .

    9. Clic en Next .:. (ngresar el nombre de la clase 7elloController crear un nue"o pa$uete ingresando controller en el

    campo de texto Pac,age . Clic en Finis-. El ()E crea la nue"a clase la abre en el editor.

    ;. Especi%icar las propiedades del controlador eliminando los comentarios de los m todos setter $ue se muestrande %orma predeterminada en la plantilla de la clase. Para eliminar los comentarios del %ragmento de código,marcar el código como se indica en la imagen de aba#o, enseguida digitar $trl)5.

    Spring Página 6

  • 8/18/2019 WAD Spring Ejemplo

    7/12

    Nota / )igitando $trl)5 se alternan los comentarios en el editor.?. 2ealizar los cambios de la siguiente manera 4en negrita! 7.

    p2blic 7elloController&/ = setCommandClass& Name .class/0 setCommand(ame& "name" /0 setS2ccessView& " ello View " /0 setFormView& "name View " /0>

    *a con%iguración del FormView permite establecer el nombre de la "ista $ue se utiliza para mostrar el %ormulario. Estaes la p!gina $ue contiene el campo de texto $ue permite a los usuarios introducir su nombre. *a con%iguración deS2ccessView asimismo permite establecer el nombre de la "ista $ue se debe mostrar en un en"0o exitoso. Cuando seestablece el Command(ame se de%ine el nombre del comando en el modelo. En este caso, el comando es el ob#eto%ormulario con los par!metros de la petición unidos a l. *a con%iguración de CommandClass permite establecer elnombre de la clase del comando. Se rellena una instancia de esta clase se "alida en cada solicitud.

    bser"ar $ue se muestra una bandera de error para (ame en el m todo setCommandClass 47/

    B-ora se debe crear la clase (ame como un bean sencillo para guardar la in%ormación de cada solicitud.

    @. En la "entana Projects , clic derec-o en el nodo del pro ecto seleccionar New Java $lass . Se muestra elasistente New Java $lass .

    =. (ngresar Name en el nombre de la clase, para el pa$uete seleccionar controller de la lista desplegable.

    Spring Página 7

  • 8/18/2019 WAD Spring Ejemplo

    8/12

    . Clic en Finish . Se crea la clase (ame se abre en el editor.D. En la clase (ame , crear un campo llamado val2e , enseguida crear los m todos de acceso 4es decir, m todos

    getter setter 7 para este campo. (niciar con la declaración del campo val2e /p2blic class (ame =

    private String value;

    >

    Nota / Para escribir r!pidamente private se puede escribir pr luego digitar 6ab . El modi%icador de acceso privatese aAade autom!ticamente a la l0nea. Este es un e#emplo del uso de plantillas de código del editor. Para obtener una listacompleta de plantillas de código, seleccionar 7elp Ke&boar" Shortc1ts $ar" .El ()E puede crear los m todos de acceso. En el editor, clic derec-o en val2e seleccionar #nsert Code 4o digitar

    Alt)'nsert 7. En el men8 emergente seleccionar ?etter and Setter .

    3>. En el cuadro de di!logo $ue se muestra, seleccionar la opción val2e9String , luego clic OK . *os m todosgetVal2e 47 setVal2e 47 se aAaden a la clase (ame /

    p2blic String getVal2e&/ = ret2rn val2e0>p2blic void setVal2e&String val2e/ = this.val2e 6 val2e0

    Spring Página 8

  • 8/18/2019 WAD Spring Ejemplo

    9/12

    >

    33. )igitar $trl)6ab seleccionar 7elloController para "ol"er a la clase 7elloController . bser"ar $uela bandera de identi%icación de error anterior -a desaparecido a $ue a-ora existe la clase (ame .

    39. Eliminar el m todo doS2bmit5ction 47 eliminar los comentarios del m todo onS2bmit 47. El m todoonS2bmit 47 permite crear su propio Model5ndView , $ue se re$uiere a$u0. 2ealizar los siguientes cambios/

    @Averrideprotected Model5ndView onS2bmit& 7ttpServlet eB2est reB2est 7ttpServlet esponse response Ab ect command !ind%xception errors/ throws %xception =

    (ame name 6 &(ame/ command0 Model5ndView mv 6 new Model5ndView&getS2ccessView&//0 mv.addAb ect& helloMessage helloService.sa87ello&name.getVal2e&///0 ret2rn mv0>

    Como se indicó arriba, el command se recon"ierte a un ob#eto (ame . Se crea una instancia de Model5ndView , seobtiene la "ista de xito usando un getter en SimpleFormController . Por 8ltimo, el modelo se rellena con datos.El 8nico elemento en el modelo es el mensa#e de saludo obtenida del 7elloService creado anteriormente. Se utiliza elm todo addAb ect 47 para agregar el mensa#e de saludo al modelo con el nombre 7elloMessage .

    3:. Corregir los errores de importación digitando clic derec-o en el editor elegir Fix ' ports 4Ctrl5S-i%t5(7.

    Nota . Con%irmar $ue org spring rame#or$ vali%ation &in%' ception org spring rame#or$ #eb servlet o%el*n% ie# est!n seleccionados en el cuadro de di!logo Fix All' ports .

    Spring Página 9

  • 8/18/2019 WAD Spring Ejemplo

    10/12

    3;. Clic en OK . El siguiente enunciado import se aAade a la parte superior del arc-i"o/import org.spring*ramework.web.servlet.Model5ndView0

    Como se indica en la documentación de la BP(, esta clase Jrepresenta un modelo la "ista regresada por un mane#ador,$ue es resuelto por un DispatcherServlet *a "ista puede tomar el %ormulario de un nombre de la "ista String $uetendr! $ue ser resuelta por un ob#eto View esolver H alternati"amente un ob#eto View se puede especi%icar directamente. El modelo es un Map , lo $ue permite el uso de m8ltiples ob#etos con cla"e por su nombreK.

    bser"ar $ue en esta etapa, no todos los errores son corregidos por$ue la clase toda"0a no puede identi%icar la clase7elloService , ni -acer uso de su m todo sa87ello 47.

    3?. )entro de 7elloController , declarar un campo pri"ado 7elloService /private 7elloService helloService0

    B continuación, crear un m todo setter p8blico para el campo/p2blic void set7elloService&7elloService helloService/ = this.helloService 6 helloService0>

    Por 8ltimo, clic derec-o en el editor seleccione Fix ' ports 4Ctrl5S-i%t5(7. El siguiente enunciado se agrega en la partesuperior del arc-i"o/import service.7elloService0

    +odos los errores se deben corregir.

    3@. 2egistrar 7elloService en application$ontext.x l . Bbrir application$ontext.x l en el editor e introducirel siguiente enunciado de un bean/

    )bean name6 helloService class6 service.7elloService '+

    Nota / Spring permite incluir en el ()E el completado de código en los arc-i"os de con%iguración M* para las clases de&a"a, as0 como las re%erencias a beans. Para in"ocar el completado de código, digitar $trl)Space cuando se traba#e en eleditor/

    3=. 2egistrar 7elloController en el "ispatcher)servlet.x l . Bbrir "ispatcher)servlet.x l en el editor eintroducir el siguiente enunciado del bean/

    )bean class6 controller.7elloController p9helloService-re*6 helloService '+

    (. Implantación de la! vi!ta!.Para implantar la "ista del pro ecto, se crean dos p!ginas &SP. *a primera, se nombra nameView. sp , $ue %uncionacomo la p!gina de bien"enida permite a los usuarios introducir un nombre. *a segunda p!gina, helloView. spmuestra un mensa#e de bien"enida $ue inclu e el nombre de entrada. Se inicia creando el arc-i"o helloView. sp .

    3. En la "entana Projects , clic derec-o en el nodo W#2)'NF jsp seleccionar New JSP . Se abrir! el asistente 6ew &SP File. 6ombrar al arc-i"o con ello ie# .

    9. Clic en Finish . Se crea la nue"a p!gina &SP en la carpeta jsp se abre en el editor.:. En el editor, cambiar el t0tulo del arc-i"o por 7ello , cambiar el mensa#e de salida para recuperar el

    7elloMessage del ob#eto Model5ndView $ue se crea en 7elloController .)head+ )meta http-eB2iv6 Content- 8pe content6 text'html0 charset6" F-E +

    Spring Página 10

  • 8/18/2019 WAD Spring Ejemplo

    11/12

    )title+7ello)'title+)'head+)bod8+ )h4+ =helloMessage>)'h4+)'bod8+

    ;. Crear otra p!gina &SP en la misma %orma, pero con el nombre nameView .?. En el editor, agregar la siguiente declaración de biblioteca de eti$uetas de Spring a nameView. sp .

    ),@taglib 2ri6 http9''www.spring*ramework.org'tags pre*ix6 spring ,+

    *o anterior importa la biblioteca de eti$uetas de Spring, $ue contiene eti$uetas 8tiles cuando se implantan las "istas como p!ginas &SP.@. Cambiar el contenido de las eti$uetas L title Lh4 para leer/ %nter Go2r (ame .=. Escriba el siguiente código deba#o de las eti$uetas L h4 /

    )spring9nested:ath path6 name + )*orm action6 method6 post + (ame9 )spring9bind path6 val2e + )inp2t t8pe6 text name6 =stat2s.expression> val2e6 =stat2s.val2e> + )'spring9bind+ )inp2t t8pe6 s2bmit val2e6 AH + )'*orm+)'spring9nested:ath+

    spring!bin" le permite enlazar una propiedad de bean. *a eti$ueta bind proporciona un estado de enlace "alor, $ue seutiliza como el nombre el "alor del campo de entrada. )e esta manera, cuando se en"0a el %ormulario, Spring sabr!cómo extraer el "alor en"iado. B$u0, la clase del comando 4 controller.(ame 7 posee una propiedad val2e , por lotanto, se establece path a val2e .

    spring!neste"Path permite anteponer una ruta espec0%ica a un bean . Por lo tanto, cuando se utilizó spring!bin" como semuestra arriba, la ruta -acia el bean se con"ierte en/ name.val2e . Se debe recordar $ue el nombre del comando7elloController es name . Por lo tanto, esta ruta se re%iere a la propiedad val2e de un bean de nombre name en el!mbito de la p!gina.

    . Cambiar el punto de entrada relati"a de la aplicación. En la actualidad, el punto de entrada del pro ecto siguesiendo index.htm $ue, como se describe en la sección anterior #jec1ci8n "el #s91eleto "el Pro&ecto , seredirige a W%!-#(F' sp'index. sp . Se puede especi%icar un punto de entrada para el pro ecto cuando sedespliega se e#ecuta. En la "entana Projects , clic derec-o en el nodo del pro ecto seleccionar Properties . Semuestra el cuadro de di!logo Project Properties . En $ategories , seleccionar (1n . En el campo (elative :(- ,ingresar 'hello.htm , a continuación clic en OK .

    En este momento se puede preguntar en donde se encuentra la asignación de hello.htm a 7elloController 6o se -a aAadido una asignación al bean 2rlMapping , como es el caso de in"ex.ht , la p!gina de bien"enida deles$ueleto del pro ecto. Esto es posible con un poco de magia de Spring proporcionada por la siguiente de%inición de

    bean en el dispatcher-servlet.xml /)beanclass6 org.spring*ramework.web.servlet.mvc.s2pport.ControllerClass(ame7andlerMapping '+

    Este beam es responsable de crear autom!ticamente un mapeo de 2* para todos los controladores registrados en elarc-i"o. +oma el nombre completo de la clase del controlador 4en este caso, controller.7elloController 7 toma el nombre del pa$uete el su%i#o Controller , a continuación, utiliza el resultado como un mapeo a una 2*.Por lo tanto, crea una asignación hello.ht para 7elloController . Esta magia sin embargo no %unciona para loscontroladores $ue se inclu en en el Framework Spring, como :arameteri;ableViewController . Se re$uiere unaasignación expl0cita.

    D. En la "entana Projects , clic derec-o en el nodo del pro ecto seleccionar (1n . El pro ecto se compila, implanta e#ecuta. Se abre el na"egador predeterminado, mostrando el hello.htm como el nameView del pro ecto.

    Spring Página 11

  • 8/18/2019 WAD Spring Ejemplo

    12/12

    6o ol"idar $ue la "ista inicial debe ser similar a la siguiente/Enter your name:Name / minombre OK

    N la de respuesta/Hello minombre!

    Nota /