34
PROGRAMACIÓN WEB CO FRAMEWORK STRUTS Beatriz Montero Fernández - http://ousli.org

STRUTS (MVC e Java)

  • Upload
    ousli07

  • View
    6.704

  • 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

Page 1: STRUTS (MVC e Java)

PROGRAMACIÓN WEB CO FRAMEWORK STRUTS

Beatriz Montero Fernández ­ http://ousli.org

Page 2: STRUTS (MVC e Java)

ÍNDICEÍNDICE

1) INTRODUCCIÓN2) J2EE3) MVC4) INSTALACIÓN DE UN ENTORNO DE DESENVOLVEMENTO 

EN UBUNTU  7.045) STRUTS

●  MODELO●  VISTA●  CONTROLADOR

Page 3: STRUTS (MVC e Java)

INTRODUCCIÓNINTRODUCCIÓN

¿QUE É STRUTS?

➢  Framework libre para o desenvolvemento de aplicacións web➢  Baixo a plataforma J2EE➢  Baixo o patrón MVC

Page 4: STRUTS (MVC e Java)

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

Page 5: STRUTS (MVC e Java)

J2EEJ2EE

Page 6: STRUTS (MVC e Java)

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• ...

Page 7: STRUTS (MVC e Java)

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

Page 8: STRUTS (MVC e Java)

MVCMVC

MODELO I (MVC1)

Page 9: STRUTS (MVC e Java)

MVCMVC

MODEL II (MVC2)

Page 10: STRUTS (MVC e Java)

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

Page 11: STRUTS (MVC e Java)

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

struts­config.xml.➢  “A intelixencia do Controlador”

Page 12: STRUTS (MVC e Java)

STRUTSSTRUTS

FUNCIONAMENTO

Page 13: STRUTS (MVC e Java)

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

Page 14: STRUTS (MVC e Java)

STRUTS: MODELOSTRUTS: MODELO

Beans 'ActionForm'

● Herdan da clase org.apache.struts.action.ActionForm● Non lóxica de negocio● Validación automática: validate()● No struts­config.xml:

<form­beans>           <form­bean name="loginForm" type="com.empresa.LoginForm"/>           <form­beans>

<action path="/slogin" type="com.empresa.LoginAction"name="loginForm"scope="request" validate="true"input="/jsp/login.jsp">

                      ...                </action>

Page 15: STRUTS (MVC e Java)

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)

Page 16: STRUTS (MVC e Java)

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.

Page 17: STRUTS (MVC e Java)

STRUTS: MODELOSTRUTS: MODELO

Pool de conexións de Struts• No struts­config.xml:

<data­sources> <data­source  type="org.apache.commons.dbcp.BasicDataSource"> <set­property property="driverClassName" value="com.mysql.jdbc.Driver" /> <set­property property="url" value="jdbc:mysql://localhost/carrito" />

<set­property property="username" value="root" /><set­property property="password" value="" /><set­property property="maxActive" value="10" /><set­property property="maxWait" value="5000" /><set­property property="defaultAutoCommit" value="false" /><set­property property="defaultReadOnly" value="false" /><set­property property="validationQuery" value="SELECT COUNT(*) FROM 

producto" /> </data­source></data­sources>

Page 18: STRUTS (MVC e Java)

STRUTS: MODELOSTRUTS: MODELO

Pool de conexións con Struts.● Librerías que precisamos:

• commons­pool1.2.1.jar• mysql­connector­java­5.0.3­bin.jar• commons­dbcp1.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 < ?");...

Page 19: STRUTS (MVC e Java)

STURTS: VISTASTURTS: VISTA

●JSP's●Mensaxes internacionalizados●Librerías de Etiquetas personalizadas de JSP●Maquetación Tiles

Page 20: STRUTS (MVC e Java)

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. •

Page 21: STRUTS (MVC e Java)

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>    <init­param>

        <param­name>application</param­name>        <param­value>com.mycompany.mypackage.MyResources</param­value>

     </init­param>      <.../>   </servlet>

Page 22: STRUTS (MVC e Java)

STRUTS: VISTASTRUTS: VISTA

Librerías de Etiquetas Personalizadas de JSP

<input type=”text” name=”username” value=”<%= loginBean.getUsername() %>”/>

vs

<html:text property=”username”>

● struts­html: formularios, mesaxes de erro, visualización de mensaxes● struts­bean: traballar e definir beans ● struts­logic: manexar a xeración condicional de saída de texto, bucles, ...● struts­tiles: maquetación mediante plantillas

Page 23: STRUTS (MVC e Java)

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: tiles­def.xml

<tiles­definitions>  <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>

<tiles­definitions>

• A páxina real que utiliza a plantilla insertando textos e outras porcións dinámicamente

• Porcións particulares reutilizables

Page 24: STRUTS (MVC e Java)

STRUT: CONROLADORSTRUT: CONROLADOR

● Único controlador: ActionServlet que a través do struts­config mapea unha URI a unha Action● Escribir a Action● Configurar o ActionMapping(en XML) no struts­conf.xml● Configurar o ficheiro descriptor de despregue: web.xml

Page 25: STRUTS (MVC e Java)

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()

Page 26: STRUTS (MVC e Java)

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

Page 27: STRUTS (MVC e Java)

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>...

Page 28: STRUTS (MVC e Java)

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”/>

Page 29: STRUTS (MVC e Java)

STRUTS: CONTROLADORSTRUTS: CONTROLADOR

Implementación do ActionMapping en struts­config.xml

Page 30: STRUTS (MVC e Java)

STRUTS: CONTROLADORSTRUTS: CONTROLADOR

Configurar o ficheiro descriptor de despregue: web.xmlObxectivo. Indicar os compoñentes Struts que vamos utilizar:

● ServletAction<servlet>

  <servlet­name>action</servlet­name>  <servlet­class>    org.apache.struts.action.ActionServlet  </servlet­class>  <init­param>    <param­name>config</param­name>    <param­value>      /WEB­INF/struts­config.xml    </param­value>  </init­param>  <init­param>    <param­name>debug</param­name>    <param­value>2</param­value>  </init­param>  <init­param>    <param­name>mapping</param­name>    <param­value>      org.apache.struts.example.ApplicationMapping    </param­value>  </init­param>

</servlet>

Page 31: STRUTS (MVC e Java)

CONTROLADOR: STRUTSCONTROLADOR: STRUTS

Configurar o ficheiro descriptor de despregue: web.xml

Mapeo do ServletAction: Define as URL's a ser procesadas polo ActionServlet

a)   <servlet­mapping>     <servlet­name>action</servlet­name>      <url­pattern>/execute/*</url­pattern>      

</servlet­mapping>

 URI: /logon    URL: www.mycompany.com/myApplication/execute/logon

b)  <servlet­mapping>     <servlet­name>action</servlet­name>          <url­pattern>*.do</url­pattern>      

</servlet­mapping>

URI: /logon     URL:www.mycompany.com/myApplication/logon.do

Page 32: STRUTS (MVC e Java)

CONTROLADOR: STRUTSCONTROLADOR: STRUTSConfigurar o ficheiro descriptor de despregue: web.xml

Librería e etiquetas de Struts:

<taglib>

      <taglib­uri>/WEB­INF/struts­bean.tld </taglib­uri>   <taglib­location>/WEB­INF/struts­bean.tld</taglib­location></taglib><taglib>     <taglib­uri>/WEB­INF/struts­html.tld</taglib­uri>     <taglib­location>/WEB­INF/struts­html.tld</taglib­location></taglib><taglib>    <taglib­uri>/WEB­INF/struts­logic.tld</taglib­uri>    <taglib­location>/WEB­INF/struts­logic.tld</taglib­location></taglib><taglib>     <taglib­uri>/WEB­INF/struts­template.tld</taglib­uri>     <taglib­location>WEB­INF/struts­template.tld</taglib­location></taglib>

Page 33: STRUTS (MVC e Java)

STRUTSSTRUTS

¿É STRUTS A MELLOR OPCIÓN PARA TÓDOLOS PROXECTOS?

DEPENDE...

Page 34: STRUTS (MVC e Java)

Gracias pola atención!!Gracias pola atención!!

PROGRAMACIÓN WEB CO FRAMEWORK STRUTS

Beatriz Montero Fernández ­ http://ousli.org