You are on page 1of 15

Manual Bsico de Struts

Autor: Javier Antoniucci

Introduccin Qu es Struts? Cmo funciona esto en aplicaciones Web? Para qu sirve? icencia? ! para qu este manual b"sico? #nde encuentro m"s info?

Introduccin
Qu es Struts?
$s un frame%or& que implementa el patrn de arquitectura '(C en Java )n frame%or& es la e*tensin de un len+ua,e mediante una o m"s ,erarqu-as de clases que implementan una funcionalidad . que /opcionalmente0 pueden ser e*tendidas1 $l frame%or& puede involucrar 2a+ ibraries1 $l patrn de arquitectura '(C /'odel3(ie%3Controller0 es un patrn que define la or+ani4acin independiente del 'odel /5b,etos de 6e+ocio07 la (ie% /interfa4 con el usuario u otro sistema0 . el Controller /controlador del %or&flo% de la aplicacin8 9si esto. aqu- . me piden esto entonces :acer tal cosa7 si sale bien mostrar esto . sino lo aquello otro901

Cmo funciona esto en aplicaciones Web?

$l nave+ador +enera una solicitud que es atendida por el Controller /un Servlet especiali4ado01 $l mismo se encar+a de anali4ar la solicitud7 se+uir la confi+uracin que se le :a pro+ramado en su ;' . llamar al Action correspondiente pas"ndole los par"metros enviados1 $l Action instanciar" .<o utili4ar" los ob,etos de ne+ocio para concretar la tarea1 Se+=n el resultado que retorne el Action7 el Controller derivar" la +eneracin de interfa4 a una o m"s JSPs7 las cuales podr"n consultar los ob,etos del 'odel a fines de reali4ar su tarea1

ara !u sir"e?
$videntemente7 como todo frame%or& intenta7 simplifica notablemente la implementacin de una arquitectura se+=n el patrn '(C1 $l mismo separa mu. bien lo que es la +estin del %or&flo% de la aplicacin7 del modelo de ob,etos de ne+ocio . de la +eneracin de interfa41 $l controlador .a se encuentra implementado por Struts7 aunque si fuera necesario se puede :eredar . ampliar o modificar7 . el %or&flo% de la aplicacin se puede pro+ramar desde un arc:ivo ;' as acciones que se e,ecutar"n sobre el modelo de ob,etos de ne+ocio se implementan bas"ndose en clases predefinidas por el frame%or& . si+uiendo el patrn >acade1 ! la +eneracin de interfa4 se soporta mediante un con,unto de 2a+s predefinidos por Struts cu.o ob,etivo es evitar el uso de Scriplets /los tro4os de cdi+o Java entre 9?@9 . 9@A907 lo cual +enera venta,as de mantenibilidad . de perfomance /poolin+ de 2a+s7 cac:in+7 etc01 o+-sticamente7 separa claramente el desarrollo de interfa4 del %or&flo% . l+ica de ne+ocio permitiendo desarrollar ambas en paralelo o con personal especiali4ado1 2ambin es evidente que potencia la reutili4acin7 soporte de m=ltiples interfaces de usuario /Btml7 sBtml7 Wml7 #es&top applications7 etc10 . de m=ltiples idiomas7 localismos7 etc1

#icencia?
Struts est" disponible ba,o la licencia 9free3to3use3license9 de la Apac:e Soft%are >oundation /ver :ttp8<<%%%1apac:e1or+< IC$6S$3C1C0

$ para !u este manual bsico?


Para simplificar el 9first touc:9 . para e*plicar Struts desde el punto de vista del desarrollo de aplicaciones Web1 6o pretende ser un tutorial7 una +u-a del usuario ni un manual de referencia1 $llos .a se :an escrito . est"n disponibles en las direcciones que se mencionan en la seccin 9#nde encuentro m"s info?9

%nde encuentro ms info?


:ttp8<<,a&arta1apac:e1or+<struts :ttp8<<,a&arta1apac:e1or+<struts<userDuide :ttp8<<,a&arta1apac:e1or+<struts<api<inde*1:tml :ttp8<<,+uru1com<faq<Struts :ttp8<<,+uru1com<forums<Struts :ttp8<<,a&arta1apac:e1or+<struts<EInvolved

F=squedas en %%%1+oo+le1com poniendo como primera palabra Struts1

Manual Bsico de Struts


Autor: Javier Antoniucci

'odel

Intro Action Fean S.stem State Feans Fusiness o+ic Feans Accediendo a F#

Model
Intro
$l 'odel comprende todos los 5b,etos de 6e+ocio donde se implementa la l+ica de ne+ocio /el 9:o% itGs done90 . donde se debe soportar todos los requisitos funcionales del Sistema sin me4clarlo con partes correspondientes al %or&flo% /el 9%:at to do90 que corresponden al Controller1

Action Bean
Deneralmente7 los Action Beans siempre reali4an las si+uientes acciones8 C1 5btener los valores necesarios del Action Form7 JavaBean7 request7 session o de donde sea1 H1 lamar a los ob,etos de ne+ocio del 'odel1 I1 Anali4ar los resultados7 . se+=n los mismos retornar el Action>or%ard correspondiente1 (eamos entonces un e,emplo de Action Bean8
public final class LogonAction extends Action { public ActionForward perform(ActionMapping mapping, ActionForm form, ttp!ervlet"equest request, ttp!ervlet"esponse response# t$rows %&'xception, !ervlet'xception { (( &bteniendo atributos Locale locale ) getLocale(request#* Message"esources messages ) get"esources(#* +ser user ) null* (( ,alidando los par-metros Action'rrors errors ) new Action'rrors(#* !tring username ) ((LogonForm# form#.get+sername(#* !tring password ) ((LogonForm# form#.get/assword(#* tr0 { 1ata!ource data!ource ) servlet.find1ata!ource(null#* 2onnection m02onnection ) data!ource.get2onnection(#* 3 catc$ (!4L'xception e# { errors.add(Action'rrors.5L&BAL6'""&", new

Action'rror(7error.database.missing7##* save'rrors(request, errors#* return (new ActionForward(mapping.get%nput(###* 3 +serFactor0 userFactor0 ) new +serFactor0(database#* user ) userFactor0.get+ser(username, password#* if (user )) null# { errors.add(Action'rrors.5L&BAL6'""&", new Action'rror(7error.password.mismatc$7##* save'rrors(request, errors#* return (new ActionForward(mapping.get%nput(###* 3 (( 5uardando el usuario en la sesion ttp!ession session ) request.get!ession(#* session.setAttribute(2onstants.+!'"68'9, user#* (( 'liminando el form bean obsoleto if (mapping.getAttribute(# :) null# { if (7request7.equals(mapping.get!cope(### request.removeAttribute(mapping.getAttribute(##* else session.removeAttribute(mapping.getAttribute(##* 3 (( /asando el control a la siguiente p-gina return (mapping.findForward(7success7##* 3 3

S&stem State Beans


os S.stem State Feans son el con,unto de ob,etos de ne+ocio que representan el estado actual del sistema7 por e,emplo8 el carrito de la compra que el usuario va modificando a lo lar+o de su interaccin con la aplicacin1 $stos ob,etos de ne+ocio ser"n t-picamente JavaFeans o $JFs de los que se +uardar" referencia en la sesin del usuario7 que ser"n modificados desde los Action . que ser"n consultados desde las JSPs1 $sta clase de ob,etos no debiera tener nin+=n conocimiento de la (ie%1

Business#o'ic Beans
os ob,etos de ne+ocio son los que implementan la l+ica de ne+ocio7 el cmo :acer las cosas . su propia persistencia1 $stos ob,etos de ne+ocio no debiera tener nin+=n conocimiento de la (ie% o el Controller de forma que debieran ser perfectamente reutili4ables para implementar soporte a distintas interfaces . :asta para incluirse en nuevas aplicaciones1

Accediendo a B%
Con Struts se puede definir un datasource para una aplicacin desde el struts(confi')*ml /m"s informacin en la seccin 92:e Action 'appin+s Confi+uration >ile9 del 9Struts )ser 'anual901 $ste datasource nos permite obtener una connection desde un Action . desde all- utili4arlo o pasarlo al 'odel1 'u. pr"ctico1 $ste es un e,emplo de acceso a una cone*in desde un Action8

public ActionForward perform(ActionMapping mapping, ActionForm form, ttp!ervlet"equest request, ttp!ervlet"esponse response# { ;avax.sql.1ata!ource data!ource* ;ava.sql.2onnection m02onnection* ... tr0 { data!ource ) servlet.find1ata!ource(null#* m02onnection ) data!ource.get2onnection(#* ... 3 catc$ (!4L'xception sqle# { get!ervlet(#.log(72onnection.process7, sqle#* 3 finall0 { ... tr0 { m02onnection.close(#* 3 catc$ (!4L'xception e# { get!ervlet(#.log(72onnection.close7, e#* 3 3 3

Manual Bsico de Struts


Autor: Javier Antoniucci

(ie%

Intro Internacionali4acin >orms 2a+s

+ie,
Intro
a (ie% comprende las JSP /principalmente0 . los servlets involucrados en la +eneracin de la interfa4 de usuario o con otros Sistemas1 Struts provee soporte para construir aplicaciones multi3 idioma7 interaccin con formularios . otras utilidades mediante la utili4acin de 2a+s especiales /2a+ ibraries01

Internacionali-acin
o podemos abreviar en la si+uiente receta8 C1 Crear un arc:ivo de te*to /e,8 'iAplicacion1properties0 en el directorio donde se encuentren las clases de la aplicacin /e,8 d8JcomJempresaJaplicacion0 donde se conten+an las claves . valores con el formato clave1subclaveKte*to de los te*tos que pertene4can al idioma principal1 $,emplo8
... application.title) 1emo de !truts en A/L%2A2%&< index.$eader)Bienvenido a la 1emo de !truts en A/L%2A2%&< ...

H1 Para cada idioma alternativo se crear" un arc:ivo nuevo que se llame i+ual pero que termine en 9L**1properties9 siendo ** el cdi+o IS5 de idioma /e,8 'iAplicacinLen1properties01 I1 $n struts(confi')*ml se debe confi+urar el 2a+ <servlet<init3param<param3name application . ponerle como param3value la locali4acin del arc:ivo con el idioma principal1 $,emplo8
=servlet> =servlet?name>action=(servlet?name> ... =init?param> =param?name>application=(param?name> =param?value>com.empresa.aplicacion.MiAplicacion=(param?value> =(init?param> ...

M1 $n %eb1*ml deberemos inclur8


=web?app> ... =taglib> =taglib?uri>(@'B?%<F(struts?bean.tld=(taglib?uri>

=taglib?location>(@'B?%<F(struts?bean.tld=(taglib?location> =(taglib> ... =(web?app>

N1 $n las JSPs donde utilicemos la internacionali4acin deberemos incluir al comien4o8


... =AB taglib uri)7(@'B?%<F(struts?bean.tld7 prefix)7bean7 A> ...

para declarar que utili4aremos la 2a+ ibrar. struts3bean con el prefi,o bean . definida en <W$F3I6><struts3bean1tld O1 ! finalmente7 utili4aremos el 2a+ =beanCmessage De0)7clave.subclave7(> donde clave . subclave corresponden al te*to por el que se reempla4ar" se+=n el idioma del usuario1 $,emplo
... =E%EL'>=beanCmessage De0)7application.title7(>=(E%EL'> ...

Por defecto Struts asi+na a cada usuario el idioma principal de la aplicacin1 Si se utili4a el ta+ =$tmlC$tml locale)7true7> /reempla4a a 9=$tml>9 . debe cerrarse con 9=($tmlC$tml>90 entonces se utili4ar" el primero de los idiomas soportados por la aplicacin que se encuentre en el :eader 9Accept3 an+ua+e9 enviado por su nave+ador1 Pero si se desea proponerle al usuario una lista de idiomas entonces ste podr" cambiarse mediante session.setAttribute( Action.L&2AL'68'9, new ;ava.util.Locale(countr0, language## donde countr. . lan+ua+e ser"n el strin+ del pa-s e idioma a establecer1 Adem"s de te*to podran incluirse variables /al i+ual que se :ace en los println0 . :asta formato de datos1 Para m"s informacin ver la documentacin oficial de Sun disponible en :ttp8<<,ava1sun1com<,Hse<C1I<docs<+uide<intl<

.orms
)na de las tareas que durante el desarrollo de una aplicacin insume muc:o traba,o /aunque en realidad no lo mere4can0 es la interaccin con formularios7 .a sea para editar u obtener nueva informacin1 as comprobaciones7 la +estin de errores7 el volver a presentarle el mismo form al usuario con los valores que puso . los mensa,es de error . un lar+o etctera est"n soportadas por Struts a fines de :acernos la vida un poco m"s f"cil1 a idea es la si+uiente8 todo el traba,o de comprobaciones . +eneracin de mensa,es de error se implementa en los Action>orm . todo el traba,o de +eneracin de interfa4 en la<s JSP1 (eamos la receta8 C1 Crear el Action>orm /ver la seccin 'odel < Action>orm Feans0 H1 Crear la p"+ina JSP del formulario utili4ando los 2a+s que provee Struts /ver la seccin (ie% < 2a+s01 $,emplo8
... =AB taglib uri)7(@'B?%<F(struts?bean.tld7 prefix)7bean7 A> =AB taglib uri)7(@'B?%<F(struts?$tml.tld7 prefix)7$tml7 A> ... =$tmlC$tml> ... =$tmlCform action)7(logon7 focus)7username7>

...

=$F>=beanCmessage De0)7logon.$eader7(>=($F> =$tmlCform action)7(logon7 focus)7username7> =$G>=$tmlCerrors(>=($G> =$H>=beanCmessage De0)7logon.mainEext7(>=($H> =p>=beanCmessage De0)7logon.username7(> =$tmlCtext propert0)7username7 siIe)7FJ7 maxlengt$)7FJ7(>=(p> =p>=beanCmessage De0)7logon.password7(> =$tmlCpassword propert0)7password7 siIe)7FJ7 maxlengt$)7FJ7 redispla0)false(>=(p> =p>=$tmlCsubmit propert0)7submit7 value)7!ubmit7(>=(p> =p>=$tmlCreset(>=(p> ... =($tmlCform> ... =($tmlC$tml>

I1 #eclarar el Action>orm en struts(confi')*ml a+re+ando en <struts3confi+<form3beans el ta+ =form?bean name)7nombreForm7 t0pe)7paquete.clase7(> . en la declaracin del Action /ver la seccin Controller < Action Feans0 a+re+ar los atributos name)7nombreForm77 scope)7(request K session#77 e input)7paginaForm.;sp71 $,emplo8
=struts?config> ... =form?beans> ... =form?bean name)7logonForm7 t0pe)7com.empresa.aplicacion.LogonForm7(> ... =(form?beans> ... =action?mappings> ... =action pat$)7(logon7 t0pe)7com.empresa.aplicacion.LogonAction7 name)7logonForm7 scope)7request7 input)7(logon.;sp7> ... =(action> ... =action?mappings> ... =(struts?config>

/a's
F"sicamente7 un 2a+ de JSP consiste en un 2a+ con formato =prefi;oEagLibCnombreEag atributo)valor ... > que cuando la JSP se compila es sustitu-do por una llamada a la clase 2a+Bandler que se encar+a de resolver su funcionalidad1 $l 2a+Bandler e*tiende Bod0Eag!upport o Eag!upport /se+=n si es un ta+ que tiene bod.07 que implementa su funcionalidad en los mtodos do!tartEag(#7 do'ndEag(#7do%nitBod0(#7 doAfterBod0(# /los dos =ltimos slo en las que e*tienden Bod0Eag!upport07 adem"s de los +etters . setters correspondientes a sus atributos1 $sta clase se define en un 2a+ ibrar. #efinition /arc:ivo *ml con e*tensin 2 # donde se define el nombre del ta+7 la clase 2a+Bandler que lo atiende7 la definicin de sus atributos7 si tiene bod.7 etc10 que a su ve4 se debe declarar en el %eb1*ml /dentro de =web?app> se pone =taglib> =taglib?uri> nombreEagLib =(taglib?uri> =taglib? location>(directorios(nombreArc$ivo.tld =(taglib?location>

=(taglib>0 . en la JSP donde se utili4ar" /=AB taglib uri)7nobreEagLib7 prefix)7prefi;oEagLib7 A>01 >inalmente7 el 2a+ que se usa en la JSP consiste en =prefi;oEagLibCnombreEag atributo)valor ... >1 Para m"s info7 ver la p"+ina oficial de Sun sobre 2a+ ibraries en :ttp8<<,ava1sun1com<products<,sp<ta+libraries1:tml1 a funcionalidad de los 2a+s inclu-dos en Struts se encuentran documentados en8

:tml8 :ttp8<<,a&arta1apac:e1or+<struts<struts3:tml1:tml bean8 :ttp8<<,a&arta1apac:e1or+<struts<struts3bean1:tml lo+ic8 :ttp8<<,a&arta1apac:e1or+<struts<struts3lo+ic1:tml nested8 :ttp8<<,a&arta1apac:e1or+<struts<struts3nested1:tml :tml8 :ttp8<<,a&arta1apac:e1or+<struts<api<or+<apac:e<struts<ta+lib<:tml<pac&a+e3 summar.1:tml bean8 :ttp8<<,a&arta1apac:e1or+<struts<api<or+<apac:e<struts<ta+lib<bean<pac&a+e3 summar.1:tml lo+ic8 :ttp8<<,a&arta1apac:e1or+<struts<api<or+<apac:e<struts<ta+lib<lo+ic<pac&a+e3 summar.1:tml nested8 :ttp8<<,a&arta1apac:e1or+<struts<api<or+<apac:e<struts<ta+lib<nested<pac&a+e3 summar.1:tml

as clases 2a+Bandlers que implementan dic:a funcionalidad est"n documentadas en8


Manual Bsico de Struts


Autor: Javier Antoniucci

Controller Intro Action>orm Feans

Controller
Intro
$l Controller comprende la funcionalidad involucrada desde que un usuario +enera un est-mulo /clic& en un lin&7 env-o de un formulario7 etc10 :asta que se +enera la interfa4 de respuesta1 $ntre medio7 llamar" a los ob,etos de ne+ocio del 'odel para que resuelvan funcionalidad propia de la l+ica de ne+ocio . se+=n el resultado de la misma e,ecutar" la JSP que deba +enerar la interfa4 resultante1 Struts inclu.e un servlet que a partir de la confi+uracin de struts3confi+1*ml recibe las solicitudes del usuario7 llama al Action Fean que corresponda .7 se+=n lo que ste retorne7 e,ecuta una JSP1 Por consi+uiente7 las tareas que se deben reali4ar son8 C1 $scribir una clase Action que e*tienda de org.apac$e.action.Action1 (er seccin 9Controller Action Fean91 H1 Confi+urar el struts(confi')*ml para que inclu.a el nuevo action mappin+ . sus posibles for%ards de salida1 Por e,emplo8
=struts?config> ... =action?mappings> ... =action pat$)7(logoff7 t0pe)7com.empresa.aplicacion.LogoffAction7> =forward name)7success7 pat$)7(index.;sp7(> =(action> ... =(action?mappings> ... =(struts?config>

$n este caso7 cuando la solicitud sea 9(logoff9 el Controller llamar" a o+offAction . si esta retorna un Action>or%ard con valor success entonces e,ecutar" (index.;sp1 Pero111 qu pasa si es una accin asociada a un formulario? a respuesta es un poco m"s comple,a8 se debe definir un Form Bean7 un Action Mapping con el Form Bean asociado . el o los forwards necesarios1 Por e,emplo8
=struts?config> ... =form?beans> ... =form?bean name)7logonForm7 t0pe)7com.empresa.aplicacion.LogonForm7(> ... =(form?beans> ... =global?forwards>

...

=forward name)7success7 pat$)7(mainMenu.do7(> ... =(global?forwards> ... =action?mappings> ... =action pat$)7(logon7 t0pe)7com.empresa.aplicacion.LogonAction7 name)7logonForm7 scope)7request7 input)7(logon.;sp7> =(action> ... =(action?mappings> ... =(struts?config>

$n este caso se :a definido un +lobal3for%ard que7 como su nombre lo indica7 viene a ser un for%ard que se aplica a todos los action3mappin+s /e*cepto que se re3defina para al+uno en particular01 I1 Incluir los lin&s /preferentemente utili4ando =$tmlClinD>0 o forms /necesariamente utili4ando =$tmlCform>0 necesarios en las JSPs correspondientes1

Action.orm Beans
os Action>orm Feans son clases que e*tienden Action>orm . que implementan mtodos +et . set para cada una de los inputs de un form de una p"+ina7 . los mtodos validate . reset1

Cuando un usuario completa un formulario . lo env-a7 el Controller busca en el scope especificado el ActionForm Fean correspondiente /todo esto confi+urado en el struts(confi')*ml0 . si no lo encuentra lo crea1 ue+o reali4a un set por cada input del form . finalmente llama al mtodo validate1 Si ste retornara uno o m"s errores7 el Controller llamar-a a la JSP del formulario para que sta lo volviera a +enerar /con los valores establecidos por el usuario0 e inclu.era el o los mensa,es de error correspondientes1 Si todo estuviese bien7 llamar-a al mtodo perform del Action /tambin confi+urado en el struts(confi')*ml0 pas"ndole el ActionForm Fean como par"metro para que sea utili4ado para obtener los valores de los datos1 Si bien el ActionForm tienen caracter-sticas que corresponden al 'odel7 los ActionForm pertenecen a la (ie%1 Justamente uno de estos puntos comunes es la validacin de datos . a fines de evitar la duplicacin de funcionalidad7 si un desde un ActionForm debe reali4ar controles de validacin que se :ubiesen implementado en un ob,eto de ne+ocio entonces se deber-a utili4ar una instancia de ste para efectuarlos1 $,emplo8
public final class 2lienteForm extends ActionForm { private !tring nombre ) null* Action'rrors errors ) null* 2liente cliente ) null* ... public 2lienteForm(# { ... (( 2rear u obtener el ob;eto como sea... cliente ) new 2liente(#* errors ) new Action'rrors* ... 3 public !tring get<ombre(# { return (t$is.nombre#* 3

public void set<ombre(!tring nombre# { tr0 { cliente.set<ombre(nombre#* 3 catc$ ('xception e# { errors.add(7nombre7, new Action'rror(7error.nombre7##* 3 t$is.nombre ) nombre* 3 public void reset(ActionMapping mapping, ttp!ervlet"equest request# { t$is.nombre ) null* 3 public Action'rrors validate(ActionMapping mapping, ttp!ervlet"equest request# { 3 3 ... return errors*

Al momento de escribir un Action>orm debemos tener en mente los si+uientes principios8


6o debe tener nada que corresponda a la l+ica de ne+ocio 6o deber-a tener m"s que implementaciones de +etters . setters /obli+atoriamente un par por cada input del formP si el input se llama nombre entonces tendremos get<ombre(# . set<ombre(!tring nombre##7 . de los mtodos reset . validate %ebe ser un .ire,all entre el usuario & el Action !ue deten'a todo tipo de errores de incompletitud o inconsistencia Si el formulario se desarrolla en varias p"+inas /por e,emplo7 en las interfaces de tipo 9Wi4ard9<9Asistentes90 el Action>orm . el Action deber"n ser los mismos7 lo que permitir"7 entre otras cosas7 que los input se puedan reor+ani4ar en distintas p"+inas sin cambiar los Action>orm ni los Action

Manual Bsico de Struts


Autor: Javier Antoniucci

Cmo pon+o en funcionamiento Struts?

Cmo pon'o en funcionamiento Struts?


Como todo frame%or&7 Struts consiste en una librer-a de clases . una serie de confi+uraciones por lo que su instalacin es mu. similar en todos los servidores de aplicaciones que provean /o puedan a+re+"rsele0 soporte de8

Java #evelopment Qit /version C1H or posterior0 Servlet Container /version H1H or posterior0 JavaServer Pa+es /JSP0 /version C1C o posterior0 ;' Parser compatible con Java API for ;' Parsin+ /JA;P0 specification7 C1C o posterior J#FC H1R 5ptional Pac&a+e Classes

a instalacin consiste en8 C1 5btener la distribucin binaria desde :ttp8<<,a&arta1apac:e1or+<struts<inde*1:tmlEAcquirin+ . descomprimirla H1 Copiar lib0commons(1)2ar /clases comunes de Ja&arta07 lib0struts)2ar /JAS de las clases Struts0 . lib0struts(1)tld /2a+ ibrar. #escriptors de los 2a+s de Struts0 en el directorio W$F3I6><lib de la aplicacin I1 'odificar el W$F3I6><%eb1*ml de la aplicacin para incluir un elemento 9=servlet>9 que define el Servlet del Controller . un 9=servlet?mapping>9 que estable4ca las peticiones que ste atiende1 Por e,emplo8
=web?app> ... =servlet> =servlet?name>action=(servlet?name> =servlet?class>org.apac$e.struts.action.Action!ervlet=(servlet?class> =init?param> =param?name>application=(param?name> =param?value>com.empresa.aplicacion.Application"esources=(param? value> =(init?param> =init?param> =param?name>config=(param?name> =param?value>(@'B?%<F(struts?config.xml=(param?value> =(init?param> =init?param> =param?name>debug=(param?name> =param?value>L=(param?value> =(init?param> =init?param> =param?name>detail=(param?name> =param?value>L=(param?value> =(init?param> =init?param> =param?name>validate=(param?name> =param?value>true=(param?value> =(init?param> =load?on?startup>L=(load?on?startup>

=(servlet> ... =servlet?mapping> =servlet?name>action=(servlet?name> =url?pattern>M.do=(url?pattern> =(servlet?mapping> ... =(web?app>

3ota8 com.empresa.aplicacion.Application"esources es la locali4acin del arc:ivo 91properties9 del idioma principal de la aplicacin M1 'odificar el W$F3I6><%eb1*ml de la aplicacin para incluir la definicin de los 2a+ ibraries1 Por e,emplo8
=web?app> ... =taglib> =taglib?uri>strutsBean=(taglib?uri> =taglib?location>(@'B?%<F(struts?bean.tld=(taglib?location> =(taglib> =taglib> =taglib?uri>struts tml=(taglib?uri> =taglib?location>(@'B?%<F(struts?$tml.tld=(taglib?location> =(taglib> =taglib> =taglib?uri>strutsLogic =(taglib?uri> =taglib?location>(@'B?%<F(struts?logic.tld=(taglib?location> =(taglib> =displa0?name>=(displa0?name> =description>=(description> ... =(web?app>

N1 A+re+ar la definicin de las 2a+ ibraries en las JSPs que se utilicen1 $,emplo8
=AB taglib uri)7strutsBean7 prefix)7bean7 A> =AB taglib uri)7struts tml7 prefix)7$tml7 A> =AB taglib uri)7strutsLogic7 prefix)7logic7 A>

O1 Crear un struts(confi')*ml donde se confi+ure el Controller se+=n se describi en las secciones anteriores1 Si bien est"n comen4ando a sur+ir aplicaciones que +estionan la confi+uracin de Struts en forma visual /Camino7 StrutsConsole7 etc10 es mu. recomendable familiari4arse primero con la confi+uracin manual antes de utili4ar estas :erramientas

You might also like