Struts-Java-en-Eclipse.pdf
-
Upload
marcos-crisostomo -
Category
Documents
-
view
37 -
download
0
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