STRUTS (MVC e Java)

Preview:

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

struts­config.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 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>

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

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 < ?");...

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

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

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

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

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

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

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 struts­config.xml

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>

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

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>

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

Recommended