Upload
ousli07
View
6.711
Download
9
Embed Size (px)
DESCRIPTION
Introdución o uso de struts nas I Xornadas de Programación Web en Software Libre de Ousli
Citation preview
PROGRAMACIÓN WEB CO FRAMEWORK STRUTS
Beatriz Montero Fernández http://ousli.org
ÍNDICEÍNDICE
1) INTRODUCCIÓN2) J2EE3) MVC4) INSTALACIÓN DE UN ENTORNO DE DESENVOLVEMENTO
EN UBUNTU 7.045) STRUTS
● MODELO● VISTA● CONTROLADOR
INTRODUCCIÓNINTRODUCCIÓN
¿QUE É STRUTS?
➢ Framework libre para o desenvolvemento de aplicacións web➢ Baixo a plataforma J2EE➢ Baixo o patrón MVC
J2EEJ2EE
● Conxunto de estándares e especificacións para o desenvolvemento de aplicación empresarias baseadas en compoñentes de software modulares, que se executan sobre un servidor de aplicacións, baixo a tecnoloxía Java
Java + Compoñentes adicionais orientados a empresas
● Inclúe:• Especificacións de API e define como coordinalas:JDBC,RMI,JMS,
Servizos Web, XML,...• Especificacións únicas: EJB's, servlets, JSP's,..• Varias tecnoloxías de servizos web
J2EEJ2EE
J2EEJ2EE
CARACTERÍSTICAS
Aplicacións de empresas portables, escalables, integrables con tecnoloxías anteriores
Desarrolladores no desenvolvemento, deseñadores no deseño Pouco ou ningún gasto:
✔ Gratuito✔ Moitas ferramentas de código aberto:
• NetBeans IDE• Eclipse IDE• Apache Ant• Apache Maven• Junit• Apache Tomcat• ...
✔
MVCMVC
● CONTROLADOR: Único que recibe as peticións dos usuarios
● MODELO: estado interno da aplicación (entidades e regras de negocio)
● VISTAS: presentan o estado interno do sistema
MVCMVC
MODELO I (MVC1)
MVCMVC
MODEL II (MVC2)
INSTALACIÓN DE UN ENTORNO DE DESARROLLO INSTALACIÓN DE UN ENTORNO DE DESARROLLO EN UBUNTU 7.04EN UBUNTU 7.04
SDK Java
Apache Tomcat
EasyEclipse
Struts
MySQL
STRUTSSTRUTS
TÉRMINOS ESPECÍCOSActions
➢ Posible acción a invocar➢ Regras de negocio
ActionMapping➢ Mapea as URL's
ActionForm➢ Formulario➢ Encapsulan parámetros das peticións dos clientes
ActionServlet. ➢ O controlador
strutsconfig.xml.➢ “A intelixencia do Controlador”
STRUTSSTRUTS
FUNCIONAMENTO
STRUTS: MODELOSTRUTS: MODELOJavaBeans ● Compoñente software que pode ser reutilizable. ● Implementan la interfaz serializable● Constructor sen argumentos● Propiedades accesibles mediante getXXX() y setXXX()● Distínguense:
JavaBeans de estado JavaBeans 'ActionForm' JavaBeans de Lóxica de Negocio
STRUTS: MODELOSTRUTS: MODELO
Beans 'ActionForm'
● Herdan da clase org.apache.struts.action.ActionForm● Non lóxica de negocio● Validación automática: validate()● No strutsconfig.xml:
<formbeans> <formbean name="loginForm" type="com.empresa.LoginForm"/> <formbeans>
<action path="/slogin" type="com.empresa.LoginAction"name="loginForm"scope="request" validate="true"input="/jsp/login.jsp">
... </action>
STRUTS: MODELOSTRUTS: MODELO
Beans Lóxica de Negocio
● Clases que implementan a lóxica● Reciben os beans de estado para manipulalos● Independentes e reutilizables.● Segundo a complexidade da aplicación:
• JavaBeans ordinarios que interaccionan con JavaBeans de estado• JavaBeans ordinarios que acceden a BD usando JDBC• EnterpriseJavaBeans(EJB's)
STRTUS: MODELOSTRTUS: MODELO
Acceso a BD RelacionalesPool de conexións● As conexións un base de datos son caras, existe un número limitado de conexións que se poden mater abertas nun servidor en función da súa memoria, potencia, do sistema ao que accedemos > non podemos arriesgarnos a esgotar as conexións.● Conxunto limitado de conexión que se reutilizan continuamente para dar servizos aos clientes para aumentar a escalabilidade e o rendemento, o que fai posible que as conexións non se este abrindo continuamente.● O pool de conexións inicializase con un número de conexións determinado.● Os clientes abren a conexión, acceden ao servizo e por último pechan a conexión. ● É importante que o cliente abra e peche a conexión, porque si non se estaría devolvendo o pool, e correríamos o risco de esgotar os recursos do noso servidor.
STRUTS: MODELOSTRUTS: MODELO
Pool de conexións de Struts• No strutsconfig.xml:
<datasources> <datasource type="org.apache.commons.dbcp.BasicDataSource"> <setproperty property="driverClassName" value="com.mysql.jdbc.Driver" /> <setproperty property="url" value="jdbc:mysql://localhost/carrito" />
<setproperty property="username" value="root" /><setproperty property="password" value="" /><setproperty property="maxActive" value="10" /><setproperty property="maxWait" value="5000" /><setproperty property="defaultAutoCommit" value="false" /><setproperty property="defaultReadOnly" value="false" /><setproperty property="validationQuery" value="SELECT COUNT(*) FROM
producto" /> </datasource></datasources>
STRUTS: MODELOSTRUTS: MODELO
Pool de conexións con Struts.● Librerías que precisamos:
• commonspool1.2.1.jar• mysqlconnectorjava5.0.3bin.jar• commonsdbcp1.2.1.jar
● Accendo ao pool de conexións:• A través de javax.sql.DataSource
...javax.sql.DataSource dataSource = getDataSource(httpServletRequest);con = dataSource.getConnection();PreparedStatement pstmt = con.prepareStatement("SELECT * FROM tutoriales WHERE id < ?");...
STURTS: VISTASTURTS: VISTA
●JSP's●Mensaxes internacionalizados●Librerías de Etiquetas personalizadas de JSP●Maquetación Tiles
STRUTS: VISTASTRUTS: VISTA
Mensaxes internacionalizados
● Struts permite construír aplicacións internacionalizadas e localizadas:• Locale – Elección do país, idioma e formateo• ResourceBundle – Mensaxes en varios idiomas• PropertyResourceBundle – Implementación do ResourceBundle.
Ficheiro de recursos•“nome=valor”
• MessageFormat – Reemplezar porcións dun string dunha mensaxe, orde das palabras en función do idioma
• MessageResources – Paquetes de recursos como bases e datos. •
STRUTS: VISTASTRUTS: VISTA
Mensaxes internacionalizados
●Paquetes de recursos:• MyResources.property – Mensaxes do idioma por defecto do servidor
•inglés > prompt.hello=hello• MyResources_XX.property – Mensaxes no idioma XX
•español > prompt.hello=Hola●No web.xml:
<servlet> <initparam>
<paramname>application</paramname> <paramvalue>com.mycompany.mypackage.MyResources</paramvalue>
</initparam> <.../> </servlet>
STRUTS: VISTASTRUTS: VISTA
Librerías de Etiquetas Personalizadas de JSP
<input type=”text” name=”username” value=”<%= loginBean.getUsername() %>”/>
vs
<html:text property=”username”>
● strutshtml: formularios, mesaxes de erro, visualización de mensaxes● strutsbean: traballar e definir beans ● strutslogic: manexar a xeración condicional de saída de texto, bucles, ...● strutstiles: maquetación mediante plantillas
STRUTS: VISTASTRUTS: VISTA
Tiles●Maquetación da aplicacións Web mediante plantillas●Construcción de páxinas en base a plantillas con Struts:
• Plantilla que define elementos estáticos e áreas donde inserir outros contidos.• Definir a plantilla no arquivo: tilesdef.xml
<tilesdefinitions> <definition name="plantillaA" path="/jsp/defaultLayout.jsp">
<put name="header" value="/jsp/header.jsp" /> <put name="menubar" value="/jsp/mainMenu.jsp" />
<put name="copyleft" value="/jsp/left.jsp" /></definition>
<tilesdefinitions>
• A páxina real que utiliza a plantilla insertando textos e outras porcións dinámicamente
• Porcións particulares reutilizables
STRUT: CONROLADORSTRUT: CONROLADOR
● Único controlador: ActionServlet que a través do strutsconfig mapea unha URI a unha Action● Escribir a Action● Configurar o ActionMapping(en XML) no strutsconf.xml● Configurar o ficheiro descriptor de despregue: web.xml
STRUTS: CONTROLADORSTRUTS: CONTROLADOR
Action● Obxectivo: procesar unha solicitude mediante o método execute()
1.Validar o estado actual da sesión do usuario2.Realiza o procesamento requerido para tratar a solicitude3.Actualizar o estado do sistema4.Devolve un obxecto ActionForward que identifica a onde se debe reenviar o control da aplicación, mediante o método findForward()
STRUTS: CONTROLADORSTRUTS: CONTROLADOR
DispatchAction1. Definimos a clase que agrupará as diferentes accións
public class XestionLibrosAction extends DispatchAction{ ....}
2. Definimos un método por cada acción:public ActionForward altaLibro(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{
Implentación da lóxica para dar de alta un libro}public ActionForward modificacionLibro(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{
Implentación da lóxica para modificar un libro
STRUTS: CONTROLADORSTRUTS: CONTROLADOR
DispatchAction
3. Indicar o servlet que acción executar mediante un parámetro 'action':<action path=”/altaLibros”
type=”com.tutorial.libros.XestionLibrosAction”name=”libro”parameter=”action”input=”/altaLibros.jsp”>
</action>
<action path=”/baixaLibros”type=”com.tutorial.libros.XestionLibrosAction”name=”libro”parameter=”action”input=”/baixaLibros.jsp”>
</action>...
STRUTS: CONTROLADORSTRUTS: CONTROLADOR
DispatchAction
4. Darlle valor a ese parámetro 'action'Na altaLibro.jsp:
<html:hidden property=”action” values=”altaLibro”/>
Na baixaLibro.jsp:<html:hidden property=”action” values=”baixaLibro”/>
STRUTS: CONTROLADORSTRUTS: CONTROLADOR
Implementación do ActionMapping en strutsconfig.xml
STRUTS: CONTROLADORSTRUTS: CONTROLADOR
Configurar o ficheiro descriptor de despregue: web.xmlObxectivo. Indicar os compoñentes Struts que vamos utilizar:
● ServletAction<servlet>
<servletname>action</servletname> <servletclass> org.apache.struts.action.ActionServlet </servletclass> <initparam> <paramname>config</paramname> <paramvalue> /WEBINF/strutsconfig.xml </paramvalue> </initparam> <initparam> <paramname>debug</paramname> <paramvalue>2</paramvalue> </initparam> <initparam> <paramname>mapping</paramname> <paramvalue> org.apache.struts.example.ApplicationMapping </paramvalue> </initparam>
</servlet>
CONTROLADOR: STRUTSCONTROLADOR: STRUTS
Configurar o ficheiro descriptor de despregue: web.xml
Mapeo do ServletAction: Define as URL's a ser procesadas polo ActionServlet
a) <servletmapping> <servletname>action</servletname> <urlpattern>/execute/*</urlpattern>
</servletmapping>
URI: /logon URL: www.mycompany.com/myApplication/execute/logon
b) <servletmapping> <servletname>action</servletname> <urlpattern>*.do</urlpattern>
</servletmapping>
URI: /logon URL:www.mycompany.com/myApplication/logon.do
CONTROLADOR: STRUTSCONTROLADOR: STRUTSConfigurar o ficheiro descriptor de despregue: web.xml
Librería e etiquetas de Struts:
<taglib>
<tagliburi>/WEBINF/strutsbean.tld </tagliburi> <tagliblocation>/WEBINF/strutsbean.tld</tagliblocation></taglib><taglib> <tagliburi>/WEBINF/strutshtml.tld</tagliburi> <tagliblocation>/WEBINF/strutshtml.tld</tagliblocation></taglib><taglib> <tagliburi>/WEBINF/strutslogic.tld</tagliburi> <tagliblocation>/WEBINF/strutslogic.tld</tagliblocation></taglib><taglib> <tagliburi>/WEBINF/strutstemplate.tld</tagliburi> <tagliblocation>WEBINF/strutstemplate.tld</tagliblocation></taglib>
STRUTSSTRUTS
¿É STRUTS A MELLOR OPCIÓN PARA TÓDOLOS PROXECTOS?
DEPENDE...
Gracias pola atención!!Gracias pola atención!!
PROGRAMACIÓN WEB CO FRAMEWORK STRUTS
Beatriz Montero Fernández http://ousli.org