Struts-Java-en-Eclipse.pdf

127
 TUTORIAL  FRAMEWORKS  STRUTS 

Transcript of Struts-Java-en-Eclipse.pdf

  • TUTORIALFRAMEWORKSSTRUTS

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 2

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 3

    INTRODUCCINASTRUTSCONECLIPSE..............................................................................................7

    FORMULARIOLOGINSTRUTSECLIPSE................................................................................................14

    ELFICHEROCSSESTILO.CSSESELQUESEVAAUTILIZARPARALAMAQUETACINDELEJEMPLO.....................................17CDIGODELFICHERODEPROPIEDADESMESSAGERESOURCES_ES_ES....................................................................19CDIGODELACLASEJAVAPARAELACTIONFORMLALLAMAMOSFORMULARIOFORM...........................................20CDIGOJAVADELACLASEACTIONLALLAMAMOSACCIONLOGIN......................................................................22

    FORMULARIOLOGINSTRUTS2PARTE...............................................................................................26

    CDIGOFUENTEDELAPGINACACELADA.JSP...................................................................................................26CDIGOFUENTEDELAPGINASATISFACTORIA.JSP.............................................................................................27CONFIGURACINDELFICHEROSTRUTSCONFING.XML.........................................................................................28ESTEFRAGMENTOYALOTENAMOSDELHOLAMUNDO........................................................................................28FRAGMENTOCORRESPONDIENTEALMAPEODELOSACTION.................................................................................28

    CREARUNAVENTANADEERROR404Y500ENSTRUTSCONECLIPSE.................................................30

    PARAELERROR500CLAVESPARAMESSAGERESOURCES.PROPERTIES....................................................................30PARALAPGINA404.JSP..............................................................................................................................30PARALAPGINA500.JSP..............................................................................................................................31ERROR500EJEMPLO...................................................................................................................................31

    FORMULARIODYNAACTIONFORMSTRUTSECLIPSE...........................................................................32

    VENTANADEREGISTRODINMICO..................................................................................................................32VENTANADEDATOSPERSONALESUNAVEZELREGISTROHASIDOENVIADO..............................................................32FICHEROFORMULARIODINAMICO.JSPPARA(PARACREARLOVIENEENPOSTDELOGINSTRUTSANTERIOR)......................33CLASEACTIONDENTRODELPACKAGEACCIONESACCIONDINAMICA.JAVA................................................................34VENTANACANCELADA2................................................................................................................................35PGINAJSPCANCELADA2.JSP.........................................................................................................................35PGINADATOSPERSONALES.JSP......................................................................................................................36

    STRUTSFORMULARIODYNAVALIDATORFORMECLIPSE.....................................................................40

    CDIGODELAPGINAEJERCICIOS.JSP.............................................................................................................41CDIGODELAPGINAFORMDINAVALIDACION.JSP.............................................................................................43IMAGENDELFORMULARIO.............................................................................................................................44CDIGOFUENTEDELAPGINAPERSONALESDATOSPERSONALES2.JSP....................................................................45COFIGURACINDELACTIONENELFICHEROSTRUTSCONFIG.XML..........................................................................46CLASEACTIONENELPACKAGEDEACCIONES.....................................................................................................47CDIGODEMESSAGERESOURCES_ES_ES.PROPERTIES........................................................................................47

    STRUTSDISPATCHACTIONECLIPSE....................................................................................................49

    CDIGOPARALACONFIGURACINDELARCHIVOSTRUTSCONFIG.XML...................................................................49CDIGOQUEAADIMOSALARCHIVOEJERCICIOS.JSP..........................................................................................49DECLARACINDELFORMULARIODINMICOENELFICHEROSTRUTSCONFIG.XML.....................................................50CONFIGURACINDELACTIONENELSTRUTSCONFIG.XMLACTIONDINAMICOLIBRO2..............................................50CDIGOFUENTEDELFICHERODELFICHEROFORMULARIODISPATCH.JSP..................................................................56CDIGOFUENTEDELFICHEROEDICION.JSP.......................................................................................................57CDIGOFUENTEDELFICHERODATOSLIBROS.JSP................................................................................................58

    IBATISPROYECTOWEBECLIPSE.........................................................................................................59

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 4

    CLASEBEANLIBRO.JAVA...............................................................................................................................59FICHERODECONFIGURACINDESQLMAP.......................................................................................................61

    STRUTSTILESPROYECTOWEBECLIPSE..............................................................................................66

    STRUTSTILESPROYECTOWEBECLIPSE2PARTE.................................................................................71

    TUTORIALHTMLSTRUTSTAGS..........................................................................................................74

    TUTORIALDELOOKUPDISPATCHACTIONSTRUTS...............................................................................75

    CDIGODEPGINAEJERCICIOS.JSPCOMOLOSANTERIORESEJEMPLOS....................................................................75CONFIGURACIONDELBEANDYNAVALIDATORFORM...........................................................................................76CONFIGURACINDELARCHIVOSTRUTSCONFIG.XMLPARAACTIONMAPPING.........................................................76CONFIGURACINDELFICHERODEPROPIEDADESPROPERTIES................................................................................77CDIGODELAPGINAJSPFORMULARIOLOOKUP.JSP..........................................................................................77CLASELOOKUPDISPATCHACTIONACCIONLOOKUPDISPATCHACTION.JAVA..............................................................78

    DATASOURCESTRUTS1.2.XPROYECTOWEBECLIPSE.........................................................................83

    DATASOURCESTRUTS...................................................................................................................................83CONFIGURACINDELARCHIVOSTRUTSCONFIG.XMLPARAELDATASOURCE............................................................83CONFIGURACINDELOSACTIONSPARAELSTRUTSCONFIG.XML............................................................................84CDIGODELAPGINAFALLIDA.JSP.................................................................................................................85CDIGODELAPGINAREGISTROSATISFACTORIO...............................................................................................86CDIGODELACLASEJAVAACCIONBASEDATOSDENTRODELPACKAGEDEACCIONES.................................................87

    DATASOURCESTRUTS1.3.XPROYECTOWEBECLIPSE.........................................................................90

    CONFIGURACINDELAACCINDATASOURCE.DOENELSTRUTSCONFIG.XML..........................................................90CONFIGURACINDELFICHERODEPROPIEDADES................................................................................................90CLASECONEXIONDENTRODELPACKAGECONEXIONES........................................................................................92CONFIGURACINDELFICHEROWEB.XML..........................................................................................................93FICHEROCONTEXT.XML.................................................................................................................................93CONFIGURACINDELAACCINFORMULARIODATASOURCE.DO.............................................................................94FORMULARIODATASOURCE.JSP.......................................................................................................................96MOSTRARLISTADO.JSP...................................................................................................................................97

    MOSTRANDOLISTADODEDATOS....................................................................................................100

    DESARROLLOWEBUPLOADFILESTRUTS..........................................................................................102

    CDIGODELACLASESUBIRARCHIVO.............................................................................................................103CDIGODELAPGINAJSPENCARGADADEMOSTRARELFORMULARIODESUBIDADEARCHIVO..................................104ENELFICHERODEPROPIEDADES...................................................................................................................105CLASEBEANPARAELFORMULARIO................................................................................................................105

    DESARROLLOWEBMLTIPLESARCHIVOSDECONFIGURACINSTRUTS...........................................108

    CDIGODELAPGINAENLACEPRIVADO.........................................................................................................108ENELFICHEROWEB.XMLDELPROYECTO........................................................................................................110

    DESARROLLOWEBCOMODINESSTRUTS..........................................................................................111

    CONFIGURACINDELARCHIVOSTRUTSCONFIGWILDCARD.XML.........................................................................111CDIGODEENLACES.JSP..............................................................................................................................112PGINA1JSP............................................................................................................................................112PGINA2JSP............................................................................................................................................113

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 5

    CREACINDEUNPLUGINCONSTRUTSXMLDOM...........................................................................114

    CLASEOBRERO..........................................................................................................................................117CONFIGURACINDELACTIONENSTRUTSCONFIG.XML......................................................................................118

    INTEGRACINSTRUTSHIBERNATE..................................................................................................119

    ARCHIVODECONFIGURACINHIBERNATE.CFG,XML..........................................................................................125

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 6

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 7

    INTRODUCCIN A STRUTS CON ECLIPSE

    Vamosadescargarnoselproyectostrutsdelapginaweboficial

    http://struts.apache.org/download.cgi

    escogemoslaversin1.3.10

    Laubicamosennuestrosistemadearchivosindependientementedelsistemaoperativoqueutilicemosydescomprimimoselficherozip

    Dentrodellacarpetadelproyectodestrutshayunfichero.warquecontienelaestructuradeunaaplicacinenblanco.Seutilizaparanotenerqueirincorporandojaralproyectonitldsparalasetiquetasstruts.

    larutaescarpetastrutsproyectoqueparalaversinquehemosdescargadoespathvuestro\struts1.3.10\apps\strutsblank1.3.10.war

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 8

    Lonicoquetenemosquehaceresabrirnuestroeclipseeimportardichoproyectoenblancoydarleunnombrenuevoparapoderempezar.

    File,importwaryseleccionarlarutadondeestanuestroficheroblank.warparalaversion1.3.10

    ledamosanextynosapareceotronuevocuadrodedilogodondeledamosnombrealproyectoyledecimosdondeestaelficheroblank.war

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 9

    pulsamossobreelbotnfinishyenlapestaaexploradordelproyectovemoslaestructuradedirectoriosdelnuevoproyectoenblancoholamundo

    Aligualqueenlosproyectosdejeeparaejecutarelproyectovamosarunasrunonserverescogemostomcatysalelapantalladebienvenidadelproyectostruts

    Vamosamodificarelproyectoparaquesalgaunmensajeencastellano,paraellovamosaconservarlasjspquetieneelproyectopordefectoycrearemosunnuevoficherodepropiedadesllamadoMesssageResources_es_ES.propertiesenelquevamosaincluirunaclavesparaque

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 10

    salgaporpantallaunmensajedebienvenida.

    Enelnuevoficherodeproperties

    1

    2

    3

    welcome.title=Holamundo Struts

    welcome.heading=Bienvenida!

    welcome.message=HolamundoStruts

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 11

    Ydentrodelficherodeconfiguracinstrutsconfig.xmlponemoslosiguiente

    1

    2

    3

    4

    Vamosaentenderunpocoestoqueacabamosdehaceryasentenderelfuncionamientodestruts.DentrodeldirectorioWebCotentqueescomoenjeeeldirectoriopblicohayunacarpetapagesdondetenemosunapginawelcome.jspconestecontenido

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    ERROR:Applicationresourcesnotloadedcheckservletcontainer

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 12

    15

    16

    17

    18

    19

    20

    21

    22

    23

    logsforerrormessages.

    Vamosacentrarnossolamenteenporquesaleelmensajeencastellano,deciramododecomentarioquestrutstienesuspropiostagshtmlvanprecedidiosdehtm:sepuedenvervarioscasoscomoydespusotrasetiquetas.

    vemosquelaetiquetabean:messagetieneunatributokeyconunvalorwelcome.titleparaelcasodelttulo,lomismovaasucederconelencabezadoyconmensaje.Loquehaceestaetiquetaesobtenerelvalordelficherodeconfiguracinreciencreado

    elformatodeesteficherodedepropiedadesesclave=valor

    Sinosfijamosennavegadoryvemoslaurldelproyectoarrancadoenlocal,observamosqueterminaenWelcome.do,nosestaindicandoquestrutsestrealizandolaaccinWelcome.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    Quesemapeaenlasecciondeacctionmetiante

    1

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 13

    2

    3

    4

    5

    6

    7

    8

    LaaccionWelcome.doestamapeadaenlaseccionactionmappingmedianteelnombredepathigualquelaaccionperosindopath=/Welcomeysereenvalalapginajspquevieneconelproyectostruts/pages/Welcome.jpdentrodeldirectoriapblicoWebContent

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 14

    FORMULARIO LOGIN STRUTS ECLIPSE

    ParahacerestetutorialvamosapartirdelproyectowebHolamundorealizadoanteriormenteHolamundo

    EnesteejemplosevenconeclipselautilizacindelosActionylosActionFormascomolaconfiguracindelstrutsconfing,utilizacinycargadeimgenesyutilizacindearchivoscssenproyectosstruts.

    NohayconexinparabasededatossedejaparaotrospostynoseutilizaelDynaActionFormquelosveremosenotrospost.

    Sepresentaelinterfazgrficodelaapliacinparaunmejorentendimiento,tenemosunformularioderegistroquetomaelnombreelapellidoyotrosdoscamposclaveyconfirmacindeclave,todosestoscamposdebenserrellenadosporelusuarioysecompruebaquelaclaveysuconfirmacinsoniguales.Elusuariotienelaposibilidaddecancelarelregistroyvoveralapaginaderegistrodesdeladecancelacin.

    Ventanaderegistro

    creacindelapginalogin.jspconeclipselasdemspginasserealizarndelamismaforma(cambiamoselnombredellapgina)

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 15

    cdigocorrespondientealficherologin.jspeselcdigoasociadoalaventanaderegistro

    Unadelascaractersticasdestrutsesquetienesupropiostagsparahtml,vienensiempreconlapalabrahtml:ydespueselnombredelaetiquetaencuestion.

    Paralacategoradej2eedeestesitiowebyahicieronejemplosdeintegracindecssconj2ee,comentoestoporquehayunadiferenciaimportanteconstruts.Paramuchagentequevienedeotroslenguajesodehacerjspestaranacostumbradosacolocarelarchivocssenundeterminadodirectorioyenlazarlomediantelaetiquelalink.Bienparaquelascssolasimgeneslaspodamosincluirenunproyectostrutsesnecesarioincluirenelheaddelapginajspdestrutslaetiqueta.

    Sinosfijamosenlasjspvemosqueaparecenentodasellas,loquehaceestaetiquetaesestablecerelpuntodereferenciadelapginaconrespectoalrestoalrestoderecursosdelproyecto.

    Ejemplo,siyosoylapginalogin.jspymedicenquehayunacssen../css/estilo.cssentoncessequetengoquebuscarenmidirectoriopadreybajaraldirectoriocssyalliencuentroestilo.css.Sinotengolareferenciabasenopuedoencontrarlosrecursoscssnideimagen.

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 16

    Ademsenlacabeceradelajspdebemosdeincluirel

    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 17

    5455565758596061626364

    www.railsymas.com

    Secreandoscarpetasnuevasalproyectollamadasimagenesycss(cadaunolaspuedellamarcomoquieramientrasmantengalacorrespondenciaconotraspartesdelproyecto)

    Imagendecreacin,carpetaimagenes

    EL FICHEROCSS ESTILO.CSS ES EL QUE SE VA A UTILIZARPARA LA MAQUETACIN DEL EJEMPLO

    123

    #contenedor{width:600px;marginleft:auto;

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 18

    456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657

    marginright:auto; }.campo{margintop:10px;}#imagen{float:right;}.boton{margin:10px5px;backgroundcolor:#554444;color:#fff;width:100px;}#formulario{margintop:60px;fontsize:16px;}#errores{backgroundcolor:#e6dfd5;color:#424c56;}#erroresulli{liststyleimage:url("../imagenes/flechaderecha.png");}#erroresul{bordercolor:#f00;}h2{textalign:center;}#pie{clear:both;height:30px;backgroundcolor:#424c56;}#piep{textalign:right;fontsize:14px;backgroundcolor:#e6dfd5;}

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 19

    CDIGO DEL FICHERO DE PROPIEDADES MESSAGERESOURCES_ES_ES

    123456789101112131415161718192021222324252627282930313233

    #clavesparalogintitulo.login=Registrousuariologin.nombre=nombrelogin.apellidos=apellidoslogin.claveConfirmacion=confirmacindepasswordlogin.clave=passwordlogin.imagen.alt=iconousuariologin.imagen=../imagenes/usuario.png;#clavesdeerrorerror.login.nombre=faltaelcamponombreerror.login.apellidos=faltaelcampoapellidoserror.login.clave=faltaelcampoclaveerror.login.claveConfirmacion=faltaelcampoclaveconfirmacionerror.login2=repitelaclave#clavesparasatisfactoriasatisfactoria.titulo=Resgistrocorrectosatisfactoria.imagen=../imagenes/correcto.pngsatisfactoria.imagen.alt=imagencorrectosatisfactoria.mensaje=Tehasregistradocorrectamente#clavesparacanceladacancelada.titulo=Registrocancelado cancelada.mensaje=Notehasregistradoenelsistemacancelada.imagen.alt=imagencanceladocancelada.imagen=../imagenes/cancelado.pngcancelada.login=Cancelacin#clavesparawelcomewelcome.title=Holamundo Struts welcome.heading=Bienvenida!welcome.message=HolamundoStruts

    CreamoslanuevaclaseFormularioFromdentrodelpackageformularios

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 20

    CDIGO DELA CLASE JAVA PARA EL ACTIONFORM LA LLAMAMOS FORMULARIOFORM

    12345678910111213141516171819202122232425

    packageformularios;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionErrors;importorg.apache.struts.action.ActionMessage;importjavax.servlet.http.HttpServletRequest;publicclassFormularioFormextendsActionForm{staticfinallongserialVersionUID=1L;privateStringnombre;privateStringapellidos;privateStringclave;privateStringclaveConfirmacion;//mtodosgettersysettersdelformulariopublicStringgetNombre(){ returnnombre;}

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 21

    2627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

    publicvoidsetNombre(Stringnombre) { this.nombre=nombre;}publicStringgetApellidos(){ returnapellidos;}publicvoidsetApellidos(Stringapellidos){ this.apellidos=apellidos;}publicStringgetClave(){ returnclave;}publicvoidsetClave(Stringclave){ this.clave=clave;}publicStringgetClaveConfirmacion(){ returnclaveConfirmacion;}publicvoidsetClaveConfirmacion(StringclaveConfirmacion){ this.claveConfirmacion=claveConfirmacion;}//mtodoquepermitelavalidacindeloscamposdelformulariopublicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest){ //creamosunnuevoobjetoActionErrors ActionErrorserrores=newActionErrors(); if(nombre==null||nombre.length()==0) { errores.add("nombre",newActionMessage("error.login.nombre")); } if(apellidos==null||apellidos.length()==0) { errores.add("apellidos",newActionMessage("error.login.apellidos")); } if(clave==null||clave.length()==0) { errores.add("clave",newActionMessage("error.login.clave")); } if(claveConfirmacion==null||claveConfirmacion.length()==0) { errores.add("claveConfirmacion",newActionMessage("error.login.claveConfirmacion")); } if(!clave.equals(claveConfirmacion)) { errores.add("confirmacion",newActionMessage("error.login2")); }

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 22

    82838485868788899091929394

    return errores;}//mtodopararesetearloscamposdelformulariopublicvoidreset(){ this.nombre=null; this.apellidos=null; this.claveConfirmacion=null; this.clave=null;}}

    CremosunanuevaclaseActiondentrodelpackageAcciones

    CDIGO JAVA DE LA CLASE ACTION LA LLAMAMOS ACCIONLOGIN

    12345678

    packageacciones;importorg.apache.struts.action.Action;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionForward;

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 23

    91011121314151617181920212223242526272829303132333435363738

    importformularios.*;//claseactionpublicclassAccionLoginextendsAction{ privateStringresultado;//creacindelmtodoexecute publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException { //sielusuariopulsaelbotndecancelado if(this.isCancelled(request)) { //comotenemosenelmtodoexecuteelobjetoActionMapgingpodemosmandaraunreenviodelstrutsconfig returnmapping.findForward("cancelada"); } else { //creamosunobjetoformularioForm FormularioFormformularioform=(FormularioForm)form; returnmapping.findForward("satisfactoria"); } }}

    SiintentamosejecutarunaclaseActionsinsucorrespondienteActionFormnosdaelsiguienteerroralejecutarelproyeto(salemuchomsporpantallaperosonlasdoslneasclaves)

    123

    javax.servlet.ServletException:Formbeannotspecifiedonmappingforaction: "loginAction"org.apache.jasper.JasperException:ExceptioninJSP:/pages/login.jsp

    Ventanadeerrorescamposvacos

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 24

    Errordeclave(nosoniguales)

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 25

    Enlasegundapartedeesteejemploformulariologinstruts2parteeclipse

    Sevenlaspginascancelada.jspysatisfactoria.jspascomolacofiguracindelstrutsconfig.xmlyexplicacionescorrespondientes.

    Agradecimientosporlasimgenesutilizadasavawww.webintenta.com

    http://www.smashingmagazine.com/2008/08/27/onstageafreeiconset/

    http://nick7even.deviantart.com/gallery/

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 26

    FORMULARIO LOGIN STRUTS 2 PARTE

    Ventanadecancelacin

    Enlacealaprimerapartedeltutorialloginstruts

    CDIGO FUENTE DE LAPGINA CACELADA.JSP

    1234567891011121314151617181920212223

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 27

    2425262728293031323334353637

    Volveralformulariologinwww.railsymas.com

    VentanaCorrectocuandoelusuariotienetodosloscamposcorrectos

    CDIGO FUENTE DE LAPGINA SATISFACTORIA.JSP

    12345678910111213141516

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 28

    171819202122232425262728293031

    www.railsymas.com

    CONFIGURACIN DEL FICHERO STRUTSCONFING.XML

    123456789

    ESTE FRAGMENTO YA LO TENAMOS DEL HOLAMUNDO

    123456789

    FRAGMENTO CORRESPONDIENTE AL MAPEO DE LOS ACTION

    1234567891011121314

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 29

    1516171819202122232425

    type="acciones.AccionLogin"scope="session"name="loginFormulario"validate="true"input="/pages/login.jsp">

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 30

    CREAR UNAVENTANA DE ERROR 404 Y 500 EN STRUTS CON ECLIPSE

    Cuandoseproduceunerror404,muchasvecescuandonavegamosporinternetnospodemosencontrarconesteerror.Lavisualizacindelmismodependedelnavegadorqueestemosutilizandoobiendelagestindedichoerrorporpartedelsitowebalquequeremosacceder.

    Enstrutstambinpodemosgestionardichoserrores,paraellonosvamosalficherodedescriptordedespliegueweb.xmlyescribimoslosiguiente

    123456

    404/pages/404.jsp

    1234

    500/pages/500.jsp

    Lassituacionesenlasqueseproduceesteerrorseriancuandonosbrindanunenlaceaunsitioyelrecursoalqueapuntaelenlacenoexisteobiencuandoescribimosdirectamenteunadireccindeunapginasobreunsitiowebylohacemosmal.

    PARA EL ERROR 500 CLAVES PARA MESSAGERESOURCES.PROPERTIES

    1234567891011

    #error404error.404.titulo=Recursonodisponibleerror.404.imagen=../imagenes/cancelado.pngerror.404.imagen.alt=nodisponibleerror.404.mensaje=pginanoencontrada#error500error.500.titulo=Errorenlapginaerror.500.imagen=../imagenes/cancelado.pngerror.500.imagen.alt=nodisponibleerror.500.mensaje=Losentimos,sehaproducidounerrorinterno

    PARA LA PGINA 404.JSP

    1234567891011

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 31

    12131415161718192021

    PARA LA PGINA 500.JSP

    Exactamenteigual

    12345678910111213141516171819202122

    ERROR 500 EJEMPLO

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 32

    FORMULARIO DYNAACTIONFORM STRUTS ECLIPSE

    Paraestetutorialpartimosdelproyectoholamundocreadoinicialmenteenanterioresposts,estaimagensecorrespondealaventanadeloginparaelformulariodinmico

    VENTANA DE REGISTRODINMICO

    VENTANA DE DATOSPERSONALES UNA VEZ ELREGISTRO HA SIDO ENVIADO

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 33

    LoprimerodetodoqueesDynaActionFormomejorparaquesirve?,buenoestaclasepermiteastrutstrabajarconloscamposdeunformulariosintenerquehacerunaclaseFormBeancomoenelejemplodeloginstrutsanteriormentevisto.

    Pasosquehayqueseguiroqueesloquenecesitamos,1formulariojsp,2unaconfiguracinenelarchivostrutsconfig.xmly3unaclaseDynaActionForm.java

    1Elformularioescomosiempreunapginawebconlasetiquetasstruts2Laconfiguracindelarchivostrutsconfig.xmlconstadedospasos2.1LaconfiguracindelBeandinmicoaquiseindicalaspropiedadesquevaatenerestenuevobean2.2LaconfiguacindellaclaseActionresponsabledetratarelformularioSeestablecelarelacinconelbeandynaActionFormylaclasequetrataloscamposdelformulariioylosreenviosalaspginasjspsegunsehayanintroducidolosdatosbienono.

    FICHERO FORMULARIODINAMICO.JSP PARA(PARA CREARLO VIENEEN POST DE LOGIN STRUTS ANTERIOR)

    12345678910111213141516171819202122232425262728293031323334

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 34

    3536373839404142434445464748

    www.railsymas.com

    CLASE ACTION DENTRO DEL PACKAGEACCIONES ACCIONDINAMICA.JAVA

    Siloscamposestnvacossemapealahacacanceladaysiestncompletoshaciala

    1234567891011121314151617181920212223242526272829303132333435

    packageacciones;importorg.apache.struts.action.Action;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.DynaActionForm;importorg.apache.struts.action.ActionErrors;importorg.apache.struts.action.ActionMessage;publicclassAccionDinamicaextendsAction{ publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException { //creamosunobjetodynamicactionform DynaActionFormformularioDinamico=(DynaActionForm)form; ActionForwardreenvio=null; ActionErrorsmensajes=newActionErrors(); if(((String)formularioDinamico.get("nombre")).equals("")) { mensajes.add("nombre",newActionMessage("error.login.nombre")); } if(((String)formularioDinamico.get("domicilio")).equals("")) {

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 35

    363738394041424344454647484950515253545556

    mensajes.add("domicio",newActionMessage("error.login.domicilio")); } //preguntamossihayerroresparahacerelreenvioalapagina if(mensajes.isEmpty()) { reenvio=mapping.findForward("datospersonales"); } else { reenvio=mapping.findForward("cancelada"); } System.out.print(reenvio.getPath()); returnreenvio; }}

    VENTANA CANCELADA2

    PGINA JSP CANCELADA2.JSP

    Pginaquemuestraelmensajedequelaaccinhasidocancelada

    1

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 36

    23456789101112131415161718192021222324252627282930313233343536

    Volveralformulariologinwww.railsymas.com

    PGINA DATOSPERSONALES.JSP

    Estapginarecuperalosdatosintroducidosporelusuariomediantelaetiqueta

    1234567891011121314

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 37

    151617181920212223242526272829303132333435363738

    Bienvenidowww.railsymas.com

    Declaracindelformulariodinmicoenelficherodeconfiguracinstrutsconfig.xml

    Enladefinicindelformbeanvemoscomoadiferenciadelejemplodellogincuandotenamosunformbeanyhacamosunareferenciamedianteelatributotypeaunaclasedenuestroproyectoahoralohacemosaunaclasedestrutsorg.apache.struts.action.DynaActionForm.Despusdeclaramoslaspropiedadesdelbeanmediantesutipoysiqueremosunvalorinicialseponeelatributoinitialconunvalor

    Enelejemplosedanlosvaloraloscamposnombre=usuarioPepedomicilio=domicilioPepeysedejasintocarlaedadperocomoestabainicializadaa18saleporpantalla.Ademsenlaclaseactionnosemirasiestavacaonoyaquepordefectotieneelvalor18

    12345678

    Declaracindelreenvoglobal

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 38

    Comofuncionalaaplicacinbienhayunindex.jsppordefectoenelproyectoestoyavieneasiconfiguradoenelarchivoweb.xml,ficherodedespliegue.SegeneraentonceslaaccinWelcome.doenelreenvoglobal,

    123456789

    EnlasdefinicionesdelasaccionesenActionMapping,laaccinwelcomerecogidoporelatributopathesmapeadaalarchivojspformularioDinmico.jspporloqueeslaprimerapginaquesalepordefecto.

    CuandoelusuariorellenaloscamposypulsasobrelosbotonesdelformularioseprocesalaacciondinamicoActionqueseestableceenelficherostrutsconfig.xmlporelatributopathysemapeaenelproyectoporlaclasejavaacciones.AccionDinmica.

    Sesueleponerunpackagesiempreparalasclasesaccionesyotroparalasclasesbeanperoesgustodelconsumidorhacerloono

    CuandolaclaseAccionDinmicaprocesaloscamposdelformulariomandamedianteunobjetodelaclaseactionMappingencontrarlareferenciadeunobjetomapeadoenelstrutsconfig.xmlmediantesiestanbienlosdatossemadaalapaginadatospersonales,jspporqueenlaclaseAccionDinmimatenamosreenvio=mapping.findForward(datospersonales);ymedianteelname=datospersonalesobtenimoslapginadatospersonales.jsp.

    Delamismaformasiloscamposestanvacostenemoserroresymensajes.isEmpty()nosdevuelvefalseporloquenosmandaalapginacancelada2.jsp

    Unadiferenciadeesteejemploconeldelformulariodelogin,apartedequenosevitamosunaclaseformbeanesquenonossalenloserroresenelformularioderecogidadedatos,podramosresolverloconobjetosdelaclaseAcctionMessagesperoexisteotravariantedelDynaActionFormquesipermitedeunaformasencillalavalidacindeloscamposllamadaDynaActionFormValidatoryloveremosenotroposts.

    1234567

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 39

    8910111213141516171819202122

    path="/Welcome"forward="/pages/formulariodinamico.jsp"/>

    clavesparaelarchivodepropropiedades.propertiescomosiempreelformatoesclave=valor

    12345678

    #clavesparadinamicodinamico.mensaje=Tehasregistradocorrectamentedinamico.imagen=../imagenes/base.jpgdinamico.imagen.alt=imageniconoregistrodinamico.registro.imagen=../imagenes/usuario2.pngdinamico.registro.imagen.alt=iconousuariotitulo.dinamico=Registrodinmico

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 40

    STRUTS FORMULARIO DYNAVALIDATORFORMECLIPSE

    Enelanteriorpostparalacategoradestrutshabamosvistolosformulariosdinmicosdestruts,comorepasodecamosqueeliminabanlacreacindedelaclasedetipoactionFormmediantelaconfiguracindelformbeanenelficherostrutsconfig.xml.

    LoqueocurriaconlaclaseDynaActionFormeraqueaunquetenamoselcdigoparalavalidacindeloscamposenlaclasenofuncionabaperoquesepodanimprimirlosmensajesydevolverlosmedianteelobjetorequestdepeticin.

    Lavalidacintambinseraposiblemediantejavascriptcomootroslenguajesperostrutsdisponedeunaclasequefacilitatodoesto,estaclasesellamaDynaValidatorFormypermitelavalidacindeloscamposdeunformulariodinmico.

    EnlosejemplosanterioresredirigamoslaaccionWelcome.doalaspginascorrespondientesdecadaejemploconlocualperdamosenelproyectolaposibilidaddeinteractuarconlosanterioresejemplos,paraquenoocurraesosepuedecrearunapginaslodeenlaces,alosdiferentesejerciciosamododemen.

    123456789101112131415161718

    loqueestamoshaciendoesredirigirelWelcome.doalapginaejercicios.jspqueestenlacarpetapages

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 41

    paralacssestilo.cssaadido

    .enlace{height:40px;}

    CDIGO DELA PGINAEJERCICIOS.JSP

    123456789101112131415161718192021222324252627

    Ejercicios1)formulariologinActionFom2)formulariodinmico

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 42

    282930313233343536

    3) formulariodinmicovalidacinwww.railsymas.com

    Cofiguracinenelstrutsconfig.xmldelbeandynavalidatorformtenemoselnombredelbeanenelatributonameyenelatributotypelaclasealaquepertenece,despustenemoslosmismoscamposqueenelformulariodynaactionform,nombre,domicilioyedadinicializadoa18

    123456

    Sinosfijamosenelficherodeconfiguracinstrutsconfig.xmlvienelosiguientedescomentadoyaenelproyectoenblancostrutsblank.xmldelquepartimos

    1234

    Strutsutilizadosficherosxmldeconfiguracinunoquevamosaintroducirdatosvalidation.xmlyelotrolodejaremoscomoestycomentaremosmsadelantevalidatorrules.xmldondetenemoslaconfiguracintiposdecampos(enterorealetc)presenciaonodeuncampotodoyaproporcionadoporelframeworkstruts.Estosdosficherosestanenlacarpetawebinfdelproyecto.

    Dentrodelficherovalidation.xmlintroducimoslosiguiente:

    123456789101112

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 43

    1314151617

    Comoyavenaesteficheroconbloquesdeclaradosnosfijamosquetienelasiguienteestructuraydentrosedeclaraelformularioconsuscampos.Elnamedelformtienequeserelmismodelnombrequeeldeclaradoenlaseccinformbeanparaelformulariodevalidacindinmica.Solamenteparalosdoscamposdelformularionombreydomiciliosepidequeseanrellenadosparaelloponemosdepends=requiredestofuncionayaqueelficherovalidatorrules.xmllotieneasestablecido.

    CDIGO DELA PGINAFORMDINAVALIDACION.JSP

    123456789101112131415161718192021222324252627282930313233343536373839

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 44

    404142434445464748

    www.railsymas.com

    IMAGEN DEL FORMULARIO

    Sepuedevercomoalenviarelformularioyavalidalapresenciadeloscamposenestecasoseenvivacoynosmuestraelavisodelosdoscampos

    CdigodelformulariodecancelacineselmismocdigoqueenelformularioDynaActionFormyaquenoesnecesariotocarloperosevuelveaincluiraquparaesteejemplocdigodecancelada2.jsp

    1234567

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 45

    8910111213141516171819202122232425262728293031323334353637

    Volveralmendeejercicioswww.railsymas.com

    CDIGO FUENTE DE LAPGINA PERSONALES DATOSPERSONALES2.JSP

    1234567891011121314151617181920212223

    Bienvenido

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 46

    242526272829303132333435363738

    www.railsymas.com

    Elformulariosehaenviadocorrectamenteysemuestranlosdatospasandonombre:manolodomicilio:casademanoloedad59

    COFIGURACIN DEL ACTION EN EL FICHERO STRUTSCONFIG.XML

    12345678

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 47

    9101112131415

    CLASE ACTION EN EL PACKAGEDE ACCIONES

    12345678910111213141516171819202122232425262728293031323334

    packageacciones;importorg.apache.struts.action.Action;importorg.apache.struts.action.ActionErrors;importorg.apache.struts.action.ActionMapping;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionForm;importorg.apache.struts.validator.DynaValidatorForm;publicclassAccionDinamicaValidacionextendsAction{ publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException { DynaValidatorFormformularioValidacion=(DynaValidatorForm)form; ActionForwardreenvio=null; if(isCancelled(request)){ //log.debug("Sehapulsadoelbotoncancel"); returnmapping.findForward("cancelada"); } reenvio=mapping.findForward("datospersonales"); returnreenvio; }}

    CDIGO DEMESSAGERESOURCES_ES_ES.PROPERTIES

    123456789

    #titulopginaejerciciosejercicios=Ejercicios#clavesparalapginadeformulariotitulo.dinamicoValidacion=formulariodinmicoValidacindinamicoValidacion.imagen=../imagenes/iconovalidacion.pngdinamicoValidacion.imagen.alt=iconovalidaci&oaccutendinamicoValidacion.mensaje=Tehasregistradocorrectamente

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 48

    1011121314151617

    dinamicoValidacion.registro.imagen= ../imagenes/usuario2.pngdinamicoValidacion.registro.imagen.alt=iconousuariocampo.nombre=elnombrecampo.domicilio=eldomicilioerrors.required={0}esrequerido.

    Vemoscomoenelficherodepropiedadespares,clavevalorpropertiesvieneerror.requireddonde{0}sesustituyeporelvalorcampodomiciliosegunelficherovalidation.xmlenparaelcasodedomiciliolomismoocurreconelnombre.

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 49

    STRUTS DISPATCHACTION ECLIPSE

    DispatchAction,laclaseDispatchActionpermitemltiplesoperacionesenunasolaclase,laideaesnotenerquehacerparacadaaccinunaclaseactiondistintaqueproceseunapeticinconcreta.

    Sitenemosenunformularioporejemploconaccesoaunabasededatosdelibros,puedequetengamosdiversosbotonesenesavista,parapoderaccederallistadoobienaccederaotromendondepodemoseditardeterminadoscamposdelregistroocalcularelvolumendeventas.Siutilizamoslaclaseactiontendramosquehacerquecadaunadeesasaccionesdelavistafueseaunaclasedistintaquelaprocesase.

    ParalautilizacindelaclaseDispatchAction,necesitamoscrearunaclasequeamplieyaadaunmtodoparacadafuncinquesenecesite.

    Habamosvistoloslinksenstrutsconelatributopagesapuntandohaciaunapginajspenlapginadeejerciciosincluimosunnuevoenlacehaciaelformularioparadispatchactionperoenestecasoutilizamoselatributoactiondelaetiquetahml:link.Estopermitehacerunenlacealaaccionqueasuvezserreenviadaaunapginajsp.

    CDIGO PARA LA CONFIGURACINDEL ARCHIVO STRUTSCONFIG.XML

    123

    CDIGO QUE AADIMOS AL ARCHIVO EJERCICIOS.JSP

    1234

    4)formulariodispatchAction

    ImagenparaEjercicios.jsp

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 50

    DECLARACIN DELFORMULARIO DINMICO EN EL FICHERO STRUTSCONFIG.XML

    1234567891011

    Elbeandinmicotienedospropiedadestituloyautorquesecompruebanqueexistan

    Configuracindelactionparaelficheroderecogidadedatosdellibroelactiondinamicolibro

    elnombredelaaccionvienedeterminadaporelatributopathdinamicolibrolaclasedeaccionvienedeterminadaporelatributotypeelatributoscopedeterminaelmbitoenestecasodepeticinelatributonamehacereferenciaalnombredelbeanalqueestaasociadalaaccinelatributovalidateatrueindicaquesevaaestablecerunavalidacindeloscamposdelformulariodinmicoelatributoinputindicacualeselformulariodeentradaparadesarrollarlaaccinyencasodevalidacincualeslajspquesemuestra.Losforwardspararealizarlosreenvoscorrespondientes

    123456789101112131415161718

    CONFIGURACIN DEL ACTION EN EL STRUTSCONFIG.XML ACTION DINAMICOLIBRO2

    12345

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 51

    678910111213

    name="dinamicolibro"validate="false"parameter="method">

    Comoestamoshaciendounformulariodinmicoyloqueremosvalidar,tenemosquecrearlassiguientesreglasenelficherovalidation.xml

    1234567891011121314151617

    elnombredelformularioenformname=dinamicolibroeselmismoqueelnamedelaconfiguracindelbeandeclaradoenelstrutsconfig.xml

    Imagendelficheroformulariodispatch.jsp,alaintroduccindedatosdellibro

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 52

    Imagendelficheroformulariodispatch.jsp

    Imagenresultadodelenvodelosdatos

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 53

    Introducimostitulo2enelcampodetitulo

    resultadofinal

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 54

    importorg.apache.struts.actions.DispatchAction;

    CdigodelficheroactiondelaclasedispatchActionimportamosimportorg.apache.struts.actions.DispatchAction,esalneadecdigosolamenteconelproyectodestrutsparalaversin1.3.10queesconlaqueseestanhaciendotodoslosejemplosdaerroryaqueelproyectoenblanconolareconoce.Parasolventaresteproblema,tenemosqueimportardeldirectoriodondedescomprimimoselproyectostruts,elficherojarlstrutsextras1.3.10.jardentrodelficherolibdelproyectowebeclipse.

    lib/strutsextras1.3.10.jar,

    1234567891011121314151617181920212223

    packageacciones;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionForward;importorg.apache.struts.actions.DispatchAction;importorg.apache.struts.validator.DynaValidatorForm;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassAccionDispatchextendsDispatchAction{ privateActionForwardenvio; privateDynaValidatorFormformulario; privateStringtitulo; privateStringautor; //creamoslosmtodosquerespondenalasacciones publicActionForwardcrear(ActionMappingmapping,ActionFormform,

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 55

    2425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

    HttpServletRequestrequest,HttpServletResponseresponse) throws Exception { //sihemoscanceladolaejecucinmandamosaljspdecancelacin if(isCancelled(request)) { envio=mapping.findForward("cancelada"); } else { //recuperamoslosdatosdelformulariobeandinmicoValidator formulario=(DynaValidatorForm)form; titulo=formulario.getString("titulo"); autor=formulario.getString("autor"); System.out.println(titulo); envio=mapping.findForward("editarlibros"); } returnenvio; } publicActionForwardEditarTitulo(ActionMappingmapping,ActionFormform,HttpServletRequestresquest,HttpServletResponseresponse)throwsException { //recuperamoslosdatosdelformulariobeandinmicoValidator formulario=(DynaValidatorForm)form; Stringcadena="Sehacambiado"+this.titulo+"por"+formulario.getString("titulo"); formulario.set("cambio",cadena); //recargamoselformularioconelvalorguardado formulario.set("autor",this.autor); envio=mapping.findForward("datoslibro"); returnenvio; } publicActionForwardEditarAutor(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException { //recuperamoslosdatosdelformulariobeandinmicoValidator //recuperamoslosdatosdelformulariobeandinmicoValidator formulario=(DynaValidatorForm)form; Stringcadena="Sehacambiado"+this.autor+"por"+formulario.getString("autor");

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 56

    808182838485868788899091

    formulario.set("cambio",cadena); //recargamoselformularioconel formulario.set("titulo",this.titulo); envio=mapping.findForward("datoslibro"); returnenvio; }}

    CDIGO FUENTE DELFICHERO DEL FICHERO FORMULARIODISPATCH.JSP

    1234567891011121314151617181920212223242526272829303132333435363738394041

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 57

    4243444546474849

    www.railsymas.com

    CDIGO FUENTE DELFICHERO EDICION.JSP

    123456789101112131415161718192021222324252627282930313233343536373839404142434445

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 58

    4647484950515253545556575859

    www.railsymas.com

    CDIGO FUENTE DELFICHERO DATOSLIBROS.JSP

    1234567891011121314151617181920212223242526272829303132333435363738

    www.railsymas.com

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 59

    IBATIS PROYECTO WEBECLIPSE

    Loprimero,comobiendicelawikipediaibatisesunmarcodetrabajodesarrolladoporapachequeseocupadelacapadepersistencia,situndoseentrelacapadenegocioylabasededatos.Ibatisestadisponibleparajava.netyrubyonrails.

    Ibatiscumpleunafuncinsimilaraladehibernate,algunosdesarrolladoresconsideranaibatisunaalternativaporsusencillezypornopresentarunlenguajeespecficoparaconsultas.

    Enlapginawebdelproyectoibatisenlaceproyectoibatis

    Recordarqueesteejemploestarealizadoenlinuxubuntuperoqueestotalmentecompatibleconwindows.

    Descargarlaversin2.3.0olaversin2.3.4conlasquesehaprobadoelejemplo,unavezdescargadoydesempaquetadoelproyectodentrodelacarpetalibtenemosunfichero.jarconlaversincorrespondiente.Eseficherodebemosdelimportarloeldirectoriolibdenuestroproyectowebdinmicodeeclipse.

    Partimosdelasituacindelejemplojdbceclipse,noshabamosdescargadomysql,yeljardriverparajdbccreandolabasededatoslibros_jdbc,conunatablallamadalibros.Eneseejemplocreabamosunservletquepormtodogetmostrabaunformularioparaenviardespuslosdatospormtodopost,insertarlosdatosymostrarunlistadodeloalmacenadoenlatabla.

    EnlacealejemploanteriorConexinabasesdedatosj2eejdbceclipse

    CLASE BEAN LIBRO.JAVA

    123456

    packageconexion;publicclassLibro{ privateintid_libro; privateStringtitulo_libro;

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 60

    789101112131415161718192021222324252627282930313233343536

    privateStringautor_libro; privateStringtematica_libro; publicintgetId_libro(){ returnid_libro; } publicvoidsetId_libro(intid_libro){ this.id_libro=id_libro; } publicStringgetTitulo_libro(){ returntitulo_libro; } publicvoidsetTitulo_libro(Stringtitulo_libro){ this.titulo_libro=titulo_libro; } publicStringgetAutor_libro(){ returnautor_libro; } publicvoidsetAutor_libro(Stringautor_libro){ this.autor_libro=autor_libro; } publicStringgetTematica_libro(){ returntematica_libro; } publicvoidsetTematica_libro(Stringtematica_libro){ this.tematica_libro=tematica_libro; }}

    FicherosdeconfiguracinparaibatissontresylospondremosenunpackageibatisMap

    Elficherobasedatos.javaeselservletdelanteriorejemplojdbcelutilizadoparaibatisesBaseDatosIbatis.java

    Enelpropioproyectodeapacheibatistienentutorialesindicandolafuncionalidaddecadaunodelosficherosnecesariosparaibatis

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 61

    CreamosunficheroxmlparaelmapeodelbeanLibroLibro.xml,esteficherocontieneelconjuntodeconsultasquevanaserutilizadasparaelbeanasociadoalatablalibros

    123456789101112131415161718192021222324252627282930

    SELECTidasid_libro,tituloastitulo_libro,autorasautor_libro,tematicaastematica_libroFROMlibrosWHEREid=#value#INSERTINTOlibros(id,titulo,autor,tematica)VALUES(#id_libro#,#titulo_libro#,#autor_libro#,#tematica_libro#)SELECTidasid_libro,tituloastitulo_libro,autorasautor_libro,tematicaastematica_libroFROMlibros

    ficherodepropiedadesparaelejemplo,sustituyealoquesehaciaenelanteriorejemplojdbcalcargareldriver

    1234

    driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/libros_jdbcusername=rootpassword=root

    FICHERO DECONFIGURACIN DE SQL MAP

    123456789

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 62

    101112131415161718192021222324252627282930

    enhancementEnabled="true"lazyLoadingEnabled="true"maxRequests="32"maxSessions="10"maxTransactions="5"useStatementNamespaces="false"/>

    Imagendelosjarsutilizados

    CreamosunaclasedentrodelpackageconexionconelnombreBaseDatosIbatis.java

    12345678910111213141516171819202122

    packageconexion;importjava.io.IOException;importjava.sql.SQLException;importjava.io.Reader;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.ibatis.sqlmap.client.SqlMapClient;importcom.ibatis.sqlmap.client.SqlMapClientBuilder;importcom.ibatis.common.resources.Resources;importjava.io.PrintWriter;importjava.util.List;importjava.util.Iterator;/***ServletimplementationclassforServlet:BaseDatosIbatis**/publicclassBaseDatosIbatisextendsjavax.servlet.http.HttpServletimplementsjavax.servlet.Servlet{staticfinallongserialVersionUID=1L;

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 63

    2324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

    privateSqlMapClientsqlMap=null;/*(nonJavadoc) *@seejavax.servlet.http.HttpServlet#HttpServlet() */ publicBaseDatosIbatis(){ super(); } publicvoidinit()throwsServletException { super.init(); try { Stringrecursos="ibatisMap/SqlMapConfigLibro.xml"; Readerleer=Resources.getResourceAsReader(recursos); sqlMap=SqlMapClientBuilder.buildSqlMapClient(leer); } catch(Exceptione) { System.out.print("errormapeo:"+e.getMessage()); } } /*(nonJavadoc) *@seejavax.servlet.http.HttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAutogeneratedmethodstub //mostramosellistadoconelmtodoget response.setContentType("text/html"); //preparamoselobjetodesalida PrintWritersalida=response.getWriter(); //creamoslasalida salida.print("\n"); salida.print("\n"); salida.print("\n"); salida.print("\n"); salida.print("\n"); salida.print("\n"); salida.print("\n"); salida.print("Librosjdbc"); salida.print("");

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 64

    798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134

    salida.print(""); salida.print(""); salida.print("\n"); salida.print("Titulo\n"); salida.print("\n"); salida.print("Autor\n"); salida.print("\n"); salida.print("Tematica\n"); salida.print("\n"); salida.print("\n"); salida.print("\n"); salida.print(""); salida.print("www.railsymas.com"); salida.print(""); salida.print("\n"); salida.print("\n"); salida.print(""); } /*(nonJavadoc) *@seejavax.servlet.http.HttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse) */ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //TODOAutogeneratedmethodstub Stringtitulo=request.getParameter("titulo"); Stringautor=request.getParameter("autor"); Stringtematica=request.getParameter("tematica"); response.setContentType("text/html"); PrintWritersalida=response.getWriter(); //creamoselobjetolibro Librolibro=newLibro(); libro.setAutor_libro(autor); libro.setTematica_libro(tematica); libro.setTitulo_libro(titulo); libro.setId_libro(0); //insertamosenlabasededatoselobjetolibro try { //insertamoslosdatosrecibidosde sqlMap.insert("introducirLibro",libro); //recuperamoslosdatosdelabasededatos Listresultado=sqlMap.queryForList("getLibros");

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 65

    135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176

    //mostramoselresultado salida.print("\n"); salida.print("\n"); salida.print("Mostramoslosdatos\n"); salida.print("\n"); salida.println(""); salida.print("\n"); salida.print("Librosjdbc"); salida.println(""); salida.println(""); salida.println("tituloautortematica"); salida.println(""); Iteratoriterador=resultado.iterator(); while(iterador.hasNext()) { LibroauxLibro=(Libro)iterador.next(); salida.println(""); salida.println(""+auxLibro.getTitulo_libro()+""); salida.println(""+auxLibro.getAutor_libro()+""); salida.println(""+auxLibro.getTematica_libro()+""); salida.println(""); } salida.println(""); salida.print(""); salida.print("www.railsymas.com"); salida.print(""); salida.print("\n"); salida.println(""); salida.println(""); } catch(SQLExceptione) {System.out.print("errordeconsulta"+e.getMessage()); } } }

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 66

    STRUTS TILES PROYECTO WEBECLIPSE

    Lostilessonplantillasqueutilizastrutsparalaorganizacindelaestructuravisualdelasvistasdeunproyectoweb.Enrealidadstrutsnohacemsqueintegrarensuframeworkalgoqueyaexistaenj2ee,queeranlasplantillasconjsp.

    Comoyasehizoenunejemplodej2eeutilizabamosladirectivaparaincluircontenidoestticoyparalainclusindinmicautizabamos.estoltimocomorecordatorioj2ee.

    Unavezcreadalaplantillalapodemosreutilizarparacualquierpginaquetengadichoformatoyasnotenerqueescribirtodocdigocadavezquesehaceunanuevapgina.

    Aligualqueenlosanteriorespost,aadimosunnuevoejercicioalalista,enestecasoparastrutstilesparaelloenelficheroejercicios.jsp,aadimoselsiguienteenlaceparalaaccinplantillas.

    1234

    5)strutstiles

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 67

    Recordarestamosconlaversin1.3.10yestaversintenemosunficherodeconfiguracinllamadostrutsconfig.xml,

    Vemoscomoellinkdelapginadelosejerciciosvalaaccinplantillas,enlaseccinactionMappingdelficherodeconfiguracinstrutsconfig.xml

    123

    Dentrodelproyectocreamosunacarpetatiles,dondecreamoslaspginasjspquevanaintervenirenelproyecto

    Enestaspginasjsphayunaqueesespecialmenteimportantecdigodepantilla.jsp

    12345678910111213141516171819202122232425

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 68

    26272829303132

    Imagendelaplantilla

    Losdiferentestiles,fragmentosdepginasjspcomoseutilizanetiquetasdestrutsesnecesariointegrarlalibreriahtmlentodasellas,recordarqueestanubicadastalcomolaimagen

    Cdigodecabecera.jsp

    1234

    Cdigodemenu.jsp

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 69

    123456

    ObjetosPersonajes

    Cdigodecuerpo.jsp

    123456

    Ejemplodedesarrolloconstrutstiles,tenemosunaplantillabaseydiferentesdefinicionesdepginaenunficheroxmlllamadotilesdef.xml

    Cdigodepie.jsp

    123456

    Ejercicios|Plantilla|Objetos|[email protected]

    Creamosdosnuevaspginasjspparalasvistaspersonajesyobjetos

    Cdigodepersonajes.jsp

    123456

    Personajes

    Cdigodelapginaobjetos.jsp

    123456

    Objetos

    ficherodepropiedades

    123

    #tilesimagen.cabecera=../imagenes/cabecera2.pngimagen.cabecera.alt=imagencabecera

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 70

    456789101112131415

    imagen.lapices=../imagenes/lapices.pngimagen.lapices.alt=lpicesimagen.libros=../imagenes/libros.pngimagen.libros.alt=librosimagen.objeto1=../imagenes/candado.pngimagen.objeto1.alt=candado.pngimagen.objeto2=../imagenes/impresora.pngimagen.objeto2.alt=impresora.pngimagen.personaje1=../imagenes/personachat.pngimagen.personaje1.alt=personachat.pngimagen.personaje2=../imagenes/personajes.pngimagen.personaje2.atl=personajes.png

    ficherodeconfiguracindelasaccionesstrutsconfig.xmenlaseccinactionmapping

    12345678910111213

    Tenemosdosposibilidadesestablecerlasdefinicionesmediantejspobienmedianteunficherodeconfiguracinxmldenominadotilesdef.xmldentrodelacarpetanwebinfdelproyectostruts

    Enelsiguientepostparalasegundapartedeesteejercicioseverelficherodeconfiguracinantescitadoylaexplicacinmsdetalladaascomolasdiferentescapturasdelasvistasobjetosypersonajes.

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 71

    STRUTS TILES PROYECTO WEBECLIPSE2 PARTE

    Comosepuedeobservarlasdosimgenessiguenteniendounaspectosimilaraldelaplantillainicial.Lonicoquecambiaeslapginajspqueestaasignadaaldivdecuerpodelesquelodelapantilla.jsp,eseeselobjetivodelostilesproporcionarunesquemavisualcomnaunconjuntodepginas.

    Dentrodelstrutsconfig.xmltenemosunaseccinyapreestablecida,solamentehayquedescomentarla

    123456

    comosepuedeobservarenestaseccinsehacereferenciaalarchivoxmlubicadoenwebinf/tilesdefs.xml,setratadelficheroxmlquetieneladecleracindelasdefinicionesdelasvistas.

    12345678910111213141516171819202122232425262728

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 72

    Laplantillatilesplantilla.jsperalapginajspquecontieneelesqueletodelaplantilla,secorrespondeconladefinicindelname=plantillatiles,estenombreesaprovechadoporstrutsparahacerreferenciaalaplantilladesdeelstrutsconfig.xml.

    Comoarrancalaplantillaencuantoalprocesodeejecucin.Partimoscomosiempredelapginadeejerciciosendichapginahayunenlaceaunactionqueesrecogidoporstrutsconfig.xmleseactionlovuelvoaponer

    123

    Eseactioneraplantillas.doydondesehaceelreenvoalforwardplantillatilesqueesjustamenteelvalordelatributonamedelasdefinicionesdetilesdef.xmlconelpathtiles/plantillas.jspelrestodelasjspdeladefinicinestanyadentrodelacarpetatilesalmismonivel.

    Unerrortpicoquepuedeocurrir,esdeclararlapginajspplantillas.jspyllamarladirectamenteenesecasonosdamltipleserrores,varioserroresactionservletyunerrordecontextoindicandoqueestvaco.

    Ladefinicindelficherotilesdef.xmleslaquealimentalaplantilla.jsp,indicandoenelnamelacabecera,men,cuerpoypielapginajspquelecorrespondeacadacualmedianteelatributovalue.Tambinhayunatributoopcionaltypequeindicaeltipodevalor,hemosutilizadodospagesystring,esteultimoparaindicarelttulodelapgina.

    Comosepuedeapreciarenelejemplotantodesdelaprimerapartecomolasegundaexistentresvistas,laprimeraqueestaenelanteriorpostycorrespondeconlaplantillainicialylavistadeobjetosypersonajes.

    Siqueremosutilizarpartedellayoutdelasplantillasperohaciendouncambioparatenerunavistanuevaejemploobjetosnotenemosmsquehacerunaherenciaporesoenladefinicindelarchivotilesdef.xmlnosvieneunname=plantillaobjetoqueheredaextendsdeplantillatiles,todomenoselcuerpoyelttulo.

    Medianteelficheroxmltilesdef.xmlhacemosherenciayademsestamossobreescribiendocomoenPOOunapartedelaplantilla,enestecasoelcuerpo.

    Enelstrutsconfig.xmlseincluyelosiguiente,elcontroladorproporcionadoporelframeworkTilesenlugardelcontroladordeStruts.EstecontroladoresunaversinextendidadelcontroladordeStruts.

    Siloquitamosodescomentamosnossaleunerrordeservletexception

    123

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 73

    Imagenlavistadeobjetos

    Imagendelavistadepersonajes

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 74

    TUTORIAL HTML STRUTS TAGS

    Enejemplosanteriores,sehabautilizadounasetiquetasquepodanresultardiferentessivenimosdeotroslenguajesdeprogramacinweb.

    Strutsutilizaunasetiquetashtmlmuysimilaresalasdehtmlperoconalgunasvariantes.Siempreseanteponelaetiquetahtml,detalformaqueparaindicarelinicioyelfindeldocumentoseponey

    Parasuutilizacinenunapginajspdebemosincluirlasiguientesintaxisparaelcasode1.3.10

    elvalordelatributoprefixseponehtmlparanoequivocarseperopodrasecualquierotronombre

    html equivaleahtml

    button equivalenteainputtype=button

    cancel equivaleainputtype=subtmit

    checkbox equivaleainputtype=checkbox

    hidden equivaleainputtype=hidden

    img equivaleaimg

    javascript equivaleajavascript

    link equivaleaa

    base basedelapgina

    messages muestralosmensajesdelidioma

    multibox typecheckboxperopermiteunarraydestringdelospropertyiguales

    option equivaleaoption

    password equivaleapassword

    radio equivalearadio

    reset equivaleareset

    select equivaleaselect

    submit equivaleatypesubmit

    text equivaleatypetext

    textarea equivaleatextarea

    frame equivaleaframe

    form equivaleahtml

    file equivaletypefile

    Enladescargadelproyectostrutsexisteunacarptetadocsconhtmlcontodalainformacionreferentealostagshtmlcomobeanlogictilesetc..

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 75

    TUTORIAL DE LOOKUPDISPATCHACTION STRUTS

    LookupDispatchactionesotraclasedestrutsquecomplementalosejerciciosanterioressobreformulariosstruts.

    HabamosvistolaclaseDispatchactionenstruts,queaportabalaposibilidadderealizardistintasaccionesenunasolaclase,aadiendounanuevapotencialidadalasclasesaction,lascualessolamentetenanelmtodoservicegenricopararesponderalaspeticionesdelosusuarios.

    LookupDispatchactiontienetambinensuconfiguracinunparmetroparameter,queindicaelnombredelmtodo.Lookupdispatchactiontienelaventajaquepermitedesdeunmismoformulariopoderllamaradistintosmtodos.

    CDIGO DEPGINA EJERCICIOS.JSP COMO LOS ANTERIORES EJEMPLOS

    123

    6)lookupdispatchAction

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 76

    CONFIGURACION DEL BEAN DYNAVALIDATORFORM

    12345678

    !================================================FormBeanDefinitions>

    CONFIGURACIN DEL ARCHIVO STRUTSCONFIG.XML PARA ACTION MAPPING

    123456789101112131415161718192021222324252627282930313233

    Configuracindelavalidacindeloscamposdelbeanenelficherovalidation.xmldentrodeltag

    ComorepasodesdeDynaValidatorForm,secreabanunosformulariosbeandinmicos,quepermitanvalidarloscamposdeunformulariosinteneerquecrearlaclase

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 77

    actionForm.Enelficheroxmlvalidation.xmlsecreanlasreglasparaqueloscamposseanobligatorios.

    12345678910111213141516

    CONFIGURACIN DEL FICHERO DE PROPIEDADES PROPERTIES

    12345678

    #lookupdispathActionformularioLookup.cancelar=cancelarformularioLookup.crear=crearformularioLookup.editartitulo=EditarTituloformularioLookup.editarautor=EditarAutortituloLookup.libro=LookupDispatchActionLookup.titulo=tituloLookup.autor=autor

    CDIGO DELA PGINAJSP FORMULARIOLOOKUP.JSP

    1234567891011121314151617181920212223

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 78

    242526272829303132333435363738394041424344454647

    www.railsymas.com

    CLASE LOOKUPDISPATCHACTION ACCIONLOOKUPDISPATCHACTION.JAVA

    123456789101112131415161718192021222324252627

    packageacciones;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionForward;importorg.apache.struts.actions.LookupDispatchAction;importorg.apache.struts.validator.DynaValidatorForm;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.util.Map;importjava.util.HashMap;publicclassAccionLookupDispatchActionextendsLookupDispatchAction{ privateActionForwardenvio; privateDynaValidatorFormformulario; privateStringtitulo; privateStringautor; protectedMapgetKeyMethodMap() { Mapmap=newHashMap(); map.put("formularioLookup.editartitulo","EditarTitulo"); map.put("formularioLookup.editarautor","EditarAutor"); map.put("formularioLookup.crear","crear");

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 79

    2829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283

    returnmap; } protectedActionForwardcancelled(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException { if(isCancelled(request)){ envio=mapping.findForward("cancelada"); } returnenvio; } //creamoslosmtodosquerespondenalasacciones publicActionForwardcrear(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException { //recuperamoslosdatosdelformulariobeandinmicoValidator formulario=(DynaValidatorForm)form; titulo=formulario.getString("titulo"); autor=formulario.getString("autor"); System.out.println(titulo); envio=mapping.findForward("editarlibros"); returnenvio; } publicActionForwardEditarTitulo(ActionMappingmapping,ActionFormform,HttpServletRequestresquest,HttpServletResponseresponse)throwsException { //recuperamoslosdatosdelformulariobeandinmicoValidator formulario=(DynaValidatorForm)form; Stringcadena="Sehacambiado"+this.titulo+"por"+formulario.getString("titulo"); formulario.set("cambio",cadena); //recargamoselformularioconelvalorguardado formulario.set("autor",this.autor); envio=mapping.findForward("datoslibro"); returnenvio; } publicActionForwardEditarAutor(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 80

    84858687888990919293949596979899100101102103

    { //recuperamoslosdatosdelformulariobeandinmicoValidator //recuperamoslosdatosdelformulariobeandinmicoValidator formulario=(DynaValidatorForm)form; Stringcadena="Sehacambiado"+this.autor+"por"+formulario.getString("autor"); formulario.set("cambio",cadena); //recargamoselformularioconel formulario.set("titulo",this.titulo); envio=mapping.findForward("datoslibro"); returnenvio; }}

    LookupDispatchAction,permitealigualquecondispatchactiontenervariasacciones(mtodos)enlamismaclasedetalformaquetenemosdosformulariosquellamanalamismaclase.Atravsdelosdiferentesmtodosserealizandistintasacciones.

    SeutilizaunHashMapparaestablecerunconjuntodecontraseasparalosdistintosmtodosausar,esascontraseassonlasulilizadasenlosbotonesdelaspginasjsp.

    EsnecesariocrearelmtodoprotectedMapgetKeyMethodMapparalacreacindelconjuntodeclavesmtodo.

    Sisequiereincluirelbotndecancelacinconelusodeestaclase,laconfiguracinenelficherostrutsconfig.xmlparaellonoresponde,porloquehayquehacercambiosenlaclasejavaeincluirelmtodocancelledparasobreescribirloyresponderalbotndecancelacin.

    Imagenresultadodelenvodelosdatos

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 81

    Introducimostitulo2enelcampodetitulo

    resultadofinal

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 82

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 83

    DATASOURCE STRUTS 1.2.X PROYECTO WEB ECLIPSE

    EnlacealproyectostrutsDatasource

    Eldatasource,seutilizaparaestablecerunpooldeconexionesqueimplementanlainterfacejavax.sql.DataSource.Permitiendoestablecerunaconfiguracinparalasbasesdedatosutilizadasenlasaplicacionesdestruts,ysolamentedesdelasclasesdenegociollamaraestaconfiguracinparapoderutilizarlas.

    Estetipodeconfiguracinesvlidoparalasversionesdestruts1.1hastalaversin1.2.9.Esteejemploadiferenciadelosanterioresdestrutsenelqueseutilizabalaversin1.3.10,estrealizadoconla1.2.9.

    DATASOURCE STRUTS

    Ladeclaracindeldatasourcevadalantedelosbeansparaladtdstrutsconfig_1_2.dtd

    1

    2

    3

    4

    5

    6

    7

    8

    CONFIGURACIN DEL ARCHIVO STRUTSCONFIG.XML PARA EL DATASOURCE

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 84

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    CONFIGURACIN DE LOS ACTIONS PARA EL STRUTSCONFIG.XML

    Creamoslosactionsparaelejemplo,simplementeredireccionamoslaaccinWelcome.doalaaccinconexin.Siseestablecelaconexincorrectamenteseredireccionaalapgina

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 85

    13

    14

    15

    16

    17

    18

    type="accion.accionBaseDatos"

    scope="request">

    CDIGO DELA PGINAFALLIDA.JSP

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    ConexionFallida

    conexionfallida

    www.railsymas.com

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 86

    CDIGO DELA PGINAREGISTRO SATISFACTORIO

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    Consultaalabasededatos

    Establecemosconexion

    www.railsymas.com

    resultadodelaejecucinporpantalla

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 87

    CDIGO DELA CLASE JAVA ACCIONBASEDATOS DENTRODEL PACKAGEDE ACCIONES

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    packageaccion;

    importorg.apache.struts.action.Action;

    importorg.apache.struts.action.ActionForward;

    importorg.apache.struts.action.ActionForm;

    importorg.apache.struts.action.ActionMapping;

    importjavax.servlet.http.HttpServletRequest;

    importjavax.servlet.http.HttpServletResponse;

    importjavax.sql.DataSource;

    importjava.sql.Connection;

    importjava.sql.Statement;

    importjava.sql.ResultSet;

    importjava.sql.SQLException;

    publicclassaccionBaseDatosextendsAction{

    privateDataSourcedatasource;

    privateConnectionconexion;

    privateStringdevolucion;

    privateStatementsentenciaSql;

    privateResultSetresultado;

    publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)

    {

    try

    {

    datasource=getDataSource(request);

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 88

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    conexion=datasource.getConnection();

    sentenciaSql=conexion.createStatement();

    resultado=sentenciaSql.executeQuery("Select*Fromlibros");

    while(resultado.next())

    {

    System.out.println(resultado.getString("autor"));

    }

    if(conexion!=null)

    {

    devolucion="satisfactoria";

    }

    conexion.close();

    }

    catch(SQLExceptione)

    {

    devolucion="fallida";

    }

    returnmapping.findForward(devolucion);

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 89

    61

    62

    63

    }

    }

    resultadoenconsoladelaejecucion,losautoresdelabasededatosdelibros_jdbcparalatablalibros

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    INFO:Tilesdefinitionfactoryfoundforrequestprocessor''.

    autor1

    autor2

    autor3

    autor4

    autor5

    autor6

    autor7

    autor7

    autor8

    autor9

    autor10

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 90

    DATASOURCE STRUTS 1.3.X PROYECTO WEB ECLIPSE

    integracindelenlaceenlapginawebdeejercicios

    123

    7)datasource

    CONFIGURACIN DE LAACCIN DATASOURCE.DO EN EL STRUTSCONFIG.XML

    1234

    Configuracindelbeanenelficherostrutsconfig.xml,eslaconfiguracindelbeandinmicoconlaspropiedadesdelatabladelabasededatoslibroscampotitulo,temticayautorvistosenjdbcj2ee

    12345

    CONFIGURACIN DEL FICHERO DE PROPIEDADES

    123456789

    #datasourceformulariodatasource.crear=enviarformulariodatasource.cancelar=cancelarformulariodatasource.titulo=formulariodatasourceformulariodatasource.titulolibro=tituloformulariodatasource.tematica=tematicaformulariodatasource.autor=autorformulariodatasource.resultado=listadodelibrosdatasourceresultado.titulo=listadodedatos

    Siintentamoscreareldatasourcealigualquehacamosconlaversin1.2nosdaerror,enelarchivodeconfiguracindestruts

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 91

    Ladtddestruts1.3soportaunconjuntodeetiquetasenelordenqueseindicaenlasiguienteimagen.

    Eltagnovienesoportadoparaestadtd

    Explicacionesdelproyectostrutsenelwikidatasource

    Removedtheandelements

    creamosunpackagenuevoparaalbergaralbeanlibro,packagevo,sellamaasporelpatrnvalueobject

    12345678910111213141516171819202122232425262728

    packagevo;publicclassLibro{ privateStringtitulo; privateStringautor; privateStringtematica; publicStringgetTitulo(){ returntitulo; } publicvoidsetTitulo(Stringtitulo){ this.titulo=titulo; } publicStringgetAutor(){ returnautor; } publicvoidsetAutor(Stringautor){ this.autor=autor; } publicStringgetTematica(){ returntematica; } publicvoidsetTematica(Stringtematica){ this.tematica=tematica; }}

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 92

    CLASE CONEXION DENTRO DEL PACKAGECONEXIONES

    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

    packageconexiones;importjava.sql.Connection;importjava.sql.SQLException;importjavax.sql.DataSource;importjavax.naming.InitialContext;importjavax.naming.NamingException;publicclassConexion{ privateConnectionconexion=null; publicConexion() { } publicConnectionestablecerConexion() { try { InitialContextcontexto=newInitialContext(); DataSourceds=(DataSource)contexto.lookup("java:comp/env/jdbc/datasource"); this.conexion=ds.getConnection(); } catch(NamingExceptione) { System.out.println(e.getMessage()); } catch(SQLExceptione) { System.out.println(e.getMessage()); } returnthis.conexion; }}

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 93

    CONFIGURACIN DEL FICHERO WEB.XML

    1234567

    DBConnectionjdbc/datasourcejavax.sql.DataSourceContainershareable

    FICHERO CONTEXT.XML

    1234567891011121314151617181920212223242526272829303132333435

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 94

    CONFIGURACIN DE LAACCIN FORMULARIODATASOURCE.DO

    12345678910111213

    1234567891011121314151617181920212223242526272829303132333435363738394041

    packageacciones;importconexiones.Conexion;importvo.Libro;importjava.io.PrintWriter;importjava.sql.SQLException;importorg.apache.struts.action.Action;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForm;importorg.apache.struts.validator.DynaValidatorForm;importjava.sql.Statement;importjava.sql.Connection;importjava.sql.ResultSet;importjava.util.ArrayList;importjavax.servlet.http.HttpSession;publicclassConexionDatasourceextendsAction{ privateConnectionconexionr=null; privateActionForwardenvio=null; privateConexionconexion=null; privateStatementsentenciaSql; privateResultSetresultado=null; privateLibrolibro; privateArrayListlistalibros; privateHttpSessionsession=null; publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException { DynaValidatorFormformulario=(DynaValidatorForm)form; conexion=newConexion(); response.setContentType("Text/html");

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 95

    424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798

    PrintWritersalida=response.getWriter(); if(this.isCancelled(request)) { envio=mapping.findForward("cancelada"); } else { try { conexionr=conexion.establecerConexion(); sentenciaSql=conexionr.createStatement(); //ejecutamoslasentenciadeseleccindeloscamposmenoselid System.out.print(formulario.get("titulo")); System.out.print(formulario.get("autor")); System.out.print(formulario.get("tematica")); sentenciaSql.executeUpdate("INSERTINTOlibrosVALUES("+0+",'"+formulario.get("titulo")+"','"+formulario.get("autor")+"','"+formulario.get("tematica")+"');"); //recuperamoslosdatosdelabasededatos resultado=sentenciaSql.executeQuery("SELECT*fromlibros;"); if(resultado!=null) { //creamoselarraydelibros listalibros=newArrayList(); while(resultado.next()) { libro=newLibro(); libro.setTitulo(resultado.getString("titulo")); libro.setAutor(resultado.getString("autor")); libro.setTematica(resultado.getString("tematica")); listalibros.add(libro); } //cerramoslaconexion conexionr.close(); //establecemoselparmetroporpeticion session=request.getSession(true); session.setAttribute("listadolibros",listalibros); envio=mapping.findForward("mostrardatos");

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 96

    99100101102103104105106107108109110111112

    } } catch( SQLExceptione) { salida.println("ExcepcionSql:"+e.getMessage()); } } returnenvio; } }

    FORMULARIODATASOURCE.JSP

    12345678910111213141516171819202122232425262728293031323334353637

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 97

    383940414243444546474849

    borrarwww.railsymas.com

    Imagencorrespondiente

    MOSTRARLISTADO.JSP

    Lasetiquetaslogicnospermiteniterarsobrelosresultadosobtenidos,logic:emptynospermitesabersielvalordelavariablereferenciadapornameestvaco,enstecasoseutilizaparamostrarelmensajecorrespondiente.Paracomprobarquenoestvacoseutilizalogic:notEmpty,paraluegoiterarporlosresultadoconlogic:iterate

    123456789101112

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 98

    13141516171819202122232425262728293031323334353637383940414243444546474849

    Labasededatosdelibrosestavacatituloautortematicawww.railsymas.com

    Imagencorrespondiente

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 99

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 100

    MOSTRANDO LISTADO DE DATOS

    Cuandomostramoslosdatos,recogidosdeunabasesdedatos,puedequeelnmerodeitemsrecogidosseabastanteamplioporloqueresultarabastanteengorrosoparaelusuarioverunlistadomuylargo.

    Sehacenecesariodarunarespuestaaesteproblema.paraelloutlizamoslapaginacin

    Podemoscreardedosformasdistintas,bienamanoobienutilizandounalibreradestrutsadecuada.Displaytagesunjarquepermitelapaginacinylaexprotacindedatosadiferentesformatos.

    Parasuutilizacin,necesitamosimportarlalibreradisplaytag(http://displaytag.sf.net)

    123456789101112131415161718192021222324252627282930313233343536

    www.railsymas.com

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 101

    necesitamosincorporarelarchivodepropiedades,paradisplaytag,

    Losdatosquesemuestranpuedencambiar,dejarmenosesposible

    alpasarlapgina

    enlacarpetasrcsecopiaelficherodepropiedadesen

    castellano

    _es_zonageogrficaejemploes_AR,es_MXetc.

    elactionalquellamalatablaensuatributouri,configuradoenelstrutsconfig.xml

    123

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 102

    DESARROLLO WEB UPLOADFILE STRUTS

    Ejemploparasubirunarchivozipmediantestruts

    formbean,sedeclaraelnombredelformulariobeancomouploadFormenatributotypesedeclaralarutadelaclasebean

    123

    Enelarchivodeconfiguracindelstrutsconfig.xmlenlasecciondeactionsmedianteelatributopathindicamosquestrutsrespondaanteunaaccinuploadfileconlapginaubicadaen/pages/formularioloadfile.jspencargadademostrarunformularioparasubirelarchivo

    123456789101112131415

    Sisesubielarchivowebcorrectamenteserealizaunreenvioalapginamostrarinformacinparaindicarunmensajedeconfirmacinalusuario,encaso

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 103

    contrariomedianteelatributoinputseindicaquelapropiapginajspdesubidadelarchivomuestreporpantallaelmensajecorrespondientesegnelerrorcometido

    CDIGO DELA CLASE SUBIR ARCHIVO

    123456789101112131415161718192021222324252627282930313233343536373839404142434445

    packageacciones;importorg.apache.struts.action.Action;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.upload.FormFile;importformularios.Formularioupload;importjava.io.FileOutputStream;importjava.io.File;publicclassSubirArchivoextendsAction{ privateActionForwardenvio; publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException { FormulariouploadformularioSubido=(Formularioupload)form; FileOutputStreamfileoutputstream=null; try { FormFilefichero=formularioSubido.getFichero(); Stringruta=this.getServlet().getServletContext().getRealPath("/upload/")+fichero.getFileName(); fileoutputstream=newFileOutputStream(newFile(ruta)); fileoutputstream.write(fichero.getFileData()); } finally { if(fileoutputstream!=null) { fileoutputstream.close(); } } returnmapping.findForward("subido"); }}

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 104

    CDIGO DELA PGINAJSP ENCARGADA DE MOSTRAR EL FORMULARIO DE SUBIDA DE ARCHIVO

    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

    www.railsymas.com

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 105

    EN EL FICHERO DE PROPIEDADES

    123456789

    #uploadfileuploadfile.titulo=formulariouploadfileuploadfile.fichero=introduceelficheroasubiruploadfile.imagen=../imagenes/subirarchivo.pnguploadfile.imagen.alt=imagenarchivoerror.fichero.vacio=elficheroestavacoerror.fichero.tipo=elarchivonoesdetipoziperror.fichero.tamanio=erroreltamaoexcedelopermitidouploadfile.resultado=formulariosubido

    CLASE BEAN PARA EL FORMULARIO

    12345678910111213141516171819202122232425262728293031323334353637383940414243

    packageformularios;importorg.apache.struts.action.ActionForm;importorg.apache.struts.upload.FormFile;importorg.apache.struts.action.ActionErrors;importjavax.servlet.http.HttpServletRequest;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionMessage;publicclassFormulariouploadextendsActionForm{ staticfinallongserialVersionUID=1L; privateFormFilefichero; privateStringinformacion; publicStringgetInformacion(){ returninformacion; } publicvoidsetInformacion(Stringinformacion){ this.informacion=informacion; } publicFormFilegetFichero(){ returnfichero; } publicvoidsetFichero(FormFilefichero){ this.fichero=fichero; } publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest) { ActionErrorserrores=newActionErrors(); //yaestasubidomiramossiesdeltipoindicado if(fichero.getFileSize()==0) { //estavaco errores.add("fichero",newActionMessage("error.fichero.vacio"));

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 106

    444546474849505152535455565758596061626364656667686970

    } else { if(!fichero.getContentType().equals("application/xzipcompressed")) { errores.add("fichero",newActionMessage("error.fichero.tipo")); System.out.print(fichero.getContentType()); } else { if(fichero.getFileSize()>2000000) { errores.add("fichero",newActionMessage("error.fichero.tamanio")); } } } returnerrores; }}

    Situacinenlaquehemosdadoalbotndeenviarsinhaberseleccionadounarchivo

    Errordeformatodearchivo

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 107

    Situacinelarchivo,stieneelformatozipperonoshemosexcedidodetamaosoportadoporlaaplicacin

    Situacinenlaquehemosenviadocorrectamenteelarchivo

    Paracomprobarelficherosubidoalproyectodesplegamoslaaplicacinenelservidortomcatmedianteunwardelproyecto

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 108

    DESARROLLO WEB MLTIPLES ARCHIVOS DECONFIGURACIN STRUTS

    Enestepostveremoscomocreardiferentesarchivosdeconfiguracinparaelframeworkstruts.

    Estamosconlaversin1.3.10destrutsysellevanmostradosdiferentesejemplossobreesteframework.siemprealahoradeactivaruncomponentedestrutstenamosqueiralarchivodeconfiguracin,llegaelmomentoenqueestearchivodeconfiguracinestasobrecargadodelneasdecdigo.

    Enesteejemplointervienenlosdosarchivosdeconfiguracin,declaracindeunaaccinenelarchivodeconfiguracindestrutsconfig.xmldenominadamulticonfiguracinyseproduceelreenvioalapginaenlaceprivado.jsp

    123

    CDIGO DELA PGINAENLACEPRIVADO

    12345678910111213141516171819202122232425

    Zonaprivadawww.railsymas.com

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 109

    26

    Enesapginajspexisteunenlacequeactivalaaccinconfig2queapareceenelficherodeconfiguracinstrutsconfig2.xml

    Enlaceimagen

    Sedeclaraenstrutsconfig2.xmlunbeandinmicollamadoformularioprivadocondoscamposdetipostring,yunaaccinprivado,quevasertratadadesdestrutsconfig2.xml

    123456789101112131415161718192021222324252627

    visualizacindelapginaprivadodondesemuestraunformulariodeusuario,

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 110

    EN EL FICHERO WEB.XML DEL PROYECTO

    12345678910

    actionorg.apache.struts.action.ActionServletconfig/WEBINF/strutsconfig.xml,/WEBINF/strutsconfig2.xml2

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 111

    DESARROLLO WEB COMODINES STRUTS

    Seguimosconeltutorialdestruts

    Pginajspconvariosejemplosdeutilizacindecomodines(wildcard)

    CreamosunficherodeconfiguracinstrutsespecficoparaelejemploylointegramosenelficherodescriptordedespliegueenstrutsconfigWildcard.xml

    12345678910

    actionorg.apache.struts.action.ActionServletconfig/WEBINF/strutsconfig.xml,/WEBINF/strutsconfig2.xml,/WEBINF/strutsconfigWildcard.xml2

    CONFIGURACIN DEL ARCHIVO STRUTSCONFIGWILDCARD.XML

    1234567891011

    strutsconfig>

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 112

    CDIGO DEENLACES.JSP

    123456789101112131415161718192021222324252627282930313233343536

    Enlaces primeropginap1pginap1segundoprimerapginap2www.railsymas.com

    Laspginasjspsonsimples,notienenninguncdigoespecial

    PGINA 1 JSP

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 113

    PGINA 2 JSP

  • TUTORIALFRAMEWORKSTRUTS

    http://www.railsymas.com 114

    CREACIN DE UN PLUGIN CON STRUTS XML DOM

    Tutorialdestrutsparalacreacindeunpluginenstruts

    Strutsnospermitelacreacindepluginspropios,enlosdiferentespostutilizabamospluginsstandardcomostrutsvalidatorystrutstiles.Perotambinsepuedencrearpluginsamedidadenuestrasnecesidades

    Tenemosunficheroxml,dondetenemosunaestructuraunelementonodoraizllamadoplantillayunaseriedenodoshijosllamadosobrero,cadaelementohijoconstadeunatributonombreydoselementossubhijoscargoyedad

    123456789101112131415

    pen25capataz46pintor38

    Esteficheroxmllodenominamosplantillas.xmlyserelficheroqueleaelplugindestruts.

    Paralacreacindelplugindebemosdedeclararloenelficherostrutsconfig.xml

    1234567

    Porunladotenemoselnombreeldelaclasedelplugin,enelvalordelatributoclassNameyporotroelvalordelapropiedaddireccinenelqueindicamoslarutaaladireccindelficheroxml

    LaclasequeimplementalainterfacePlugin,debeimplementarlosmtodosinitydestroy,sisepasanparmetrosenladeclaracindelpluginenestecasodireccinconelvalordelarutaalficheroparapoderasignarvaloryrecuperardesdelaclasedelpluginesnecesariocrear