Você está na página 1de 22

0.

Introduccin

Nuestro objetivo es desarrollar herramientas (aplicaciones web) con el diseo de MVC model-
vista-controlador.
Teora mvc

1. Configuracin herramientas (Entorno de trabajo)

Primero tenemos que adaptar nuestro entorno para poder empezar. Necesitamos instalarnos:
JDK (Java Development Kit)
Eclipse
SQL developer

Tomcat
Struts 2
Hibernate

2. Struts 2

Action
Interceptors: alias, logger, timer, params (Buscar opcions de utilitat)
View
Configuration Files
Struts-config: (View-Model)
Struts-config, form-beans, global forwards, action-mappings, controller, plug-in
Value Stack + OGNL: acceder valores formulario
SUBIR ARCHIVOS:
Cuando un formulario es enviado tambien se guarda temporalmente en un directorio y
despus es procesado o movido en el actionclass a un directorio donde asegure que la
informacin no se pierda. FileUpload es un interceptor de esta informacin(defaultStack). Se
usa en el struts.xml para ver varios parmetros.
ACCEDER A LA DATABASE (STRUTS2-HIBERNATE):
La action class tiene las propiedades de las columnas en la tabla de la bases de datos (como
atributos).
Para comparar si el user y la contrasea son correctas (previamente guardadas en la base de
datos) utilizamos un try{ para acceder con sesin a la bbdd. Catch{ devuelve el error si son
incorrectas.

VALIDATION:
Hay dos maneras de hacer la validacin:
1) Con el framework struts podemos validar antes de que el mtodo del action sea
ejecutado.
Introducimos los inputs en los <s:textfield y el botn para enviar el output ser el
<s:submit.
En el actionClass definimos un mtodo donde nos indicar cuales sern los errores. Con
un if ponemos las condiciones necesarias y con addFieldError Nos imprimir los errores
del formulario justo encima de los textfields.
Por tanto, tendremos dos mtodos: el void validate() y el String execute().
Struts automticamente primero leer el validate(),gracias a poner <result name=input,
si sus condiciones son falsas (el usuario introduce los datos correctamente) entonces
ejectura execute() y posteriormente entrar en el .jsp correspondiente.
En cambio una vez que entra en el validate() y se cumplen sus condiciones, ya no entrar
en el mtodo execute() e imprimir en .jsp actual encima dels textfields el error que le
pongamos gracias al addFieldError (name, The name is required);
2) XML Based Validation:
Permite ms opciones de validacin como: email validacin, integer range validation,
form etc.
De esta manera creamos un .xml donde har la comparacin y no ser necesario hacer
un mtodo validate().

Creamos un action-class-validation.xml donde encima del xml tenemos que poner la
class file.
<validators>
<field> <field-validator type=required/int>
<param name=min> 29</param>
Param name=max> 64</param><message> asdasd


INTERNATIONALIZATION (i18n):
Struts tambien nos permite la internacionalizacin de sus pginas web, es decir, nos permite
cambiar el lenguaje en la que est escrita la pgina segn el usuario. Podemos cambiar con
struts: paquetes, interceptores y libreras de etiquetas en los siguientes lugares: UI Tags,
Messages and Errors, Dentro de los actions classes.
bundlename(action,global)_languagecountry.properties global.properties (English),
global_es.properties (Spanish)
Para acceder a los mensajes, hay diferentes maneras se hacerlo (siempre primero accediendo
a struts con la etiqueta <s):
- <s:property value=getText(some.key) /> - UI Tags devuelve el valor en nueva
pgina, resultado de success de un botn.
Tendr dos actions: para el submit y para devolver la pgina.

En Struts.xml le tendremos que pasar <result name=input> para devolver los inputs
de los textfields y el <result name=success> para devolver la nueva pgina despus
del submit.

- <s:text name=some.key /> - Text tag <h1> header
- <s: i18n name=some.package.bundle>
<s:text name=some.key/>
<s:i18n>- varios nombres
- <s:textfield key=some.key name=textfieldName /> en un textfield

I18n - DisplayTag: Nos permite crear generar una lista guardada en una tabla HTML.
Si utilizamos <display:table> (DISPLAYTAGS) titleKey no nos permitir acceder a
global.properties, necesitamos crear displaytag.properties donde accederemos all.
Configuracin:
1) Primero de todo creamos displaytag.properties y tambin displaytag_ES.properties
(espaol) displaytag_DE.properties (alemn) en el directorio WEB-INF.

2) Aadir: locale.resolver=org.desplaytag.localization.I18nStrutsAdapter
Locale.provider=org.displaytag.localization.I18nStrutsAdapter

3) Aadir en web.xml:
<context-param>
<param-name>displaytag.properties</param-name>
<param-value>WEB-INF/displaytag.properties</param-value>
</context-param>

4) Entonces en estos archivos solo nos faltara traducir, por ejemplo:
paging.banner.one_item_found=One item found
paging.banner.one_item_found=Un solo elemento trovato (si hubiera
italiano)

5) titleKey="cualquiercosa"

Hay tres maneras que podran funcionar:
1) En el title
2) Aadiendo titleKey
3) Utilizando un Container que soporte jstl y standard.jar


- Si no funciona, propongo tablas con el iterador de STRUTS2!
- Una posible solucin encontrada:

http://osdir.com/ml/java.displaytag.general/2005-01/msg00134.html
Encoding en <s:FORM:

Cuando queremos editar algn objeto y modificamos con FORM, al acceder a la bases de datos
parece que no nos coje el Charset definido al principio de cada pgina y nos guarda y devuelve
caracteres cuando escribimos una tilde o la .
Para poder guardar correctamente estas modificaciones con Struts2 hay dos posibles maneras:

1) Utilizar Spring y aadir un filtro en el web.xml
2) Aadir en <form name=form accept-charset= UTF-8/ ISO-8859-1> para forzar
que se envie con esta codificacin (SOLO FUNCIONA EN CHROME Y FIREFOX,
INTERNET EXPLORER NO!)

3) <s:submit type="image" onclick="document.charset='UTF-8'" name="submit"
src="images/save.png" width='32' height='32'/> FUNCIONA EN INTERNET
EXPLORER!!






THEMES AND TEMPLATES

Tag: Pequeo trozo de cdigo que se ejecute en el JSP
Template: Trozo de cdigo que est representado per ciertos tags.
Theme: Coleccin de templates en un mismo paquete que proporcionan una funcionabilidad.


Themes del Struts2 que aparecen con sus tags <s:submit>, <s:textfield>:

- Simple: minimal pex: textfield
- Xhtml: para las dos columnas de la capa HTML, Validation, error
- Css_xhtml: en <div>

(*) Si no especificamos el tema, se pone por defecto el xhtml. <s:textfield theme=xhtml/>

(*) Si queremos que siempre sea as, lo especificamos en un file:
En struts.properties file en struts-default.properties:
Struts.ui.theme= xhtml (name_newtheme)
Struts.ui.templateDir=template
Struts.ui.templateSuffix=ftl

Todos los struts tienen asociado el template de s:textfield text.ftl etc.
Para disear un Template utilizando un JSP y configurarlo en struts.properties utilizando:
struts.ui.templateSuffix y struts.ui.templateDir.

Si por ejemplo queremos aadir un recuadro en el form de logging, modificamos el control.ftl
aadiendo un border en la tabla.

EXCEPTION HANDLING:

Direccionar diferentes pginas segn los diferentes errores. Esto lo podemos hacer utilizando
exception, un interceptor.

NullPointer Exception.
En Struts.xml poner dentro del action:
<exception-mapping exception=java.lang.NullPointerException result=error />
<result name=error>/Error.jsp</result>

As cuando detecta este error (porque struts por defecto detecta los campos vacos) puedes
devolver una pgina de error por sta excepcin.

Hay muchas excepciones de Logging en Struts2

Si son unas cuantas pginas con la misma excepcin podemos poner en struts.xml:
<global-exception-mappings>
<exception-mapping exception=java.lang.Null result=error/> </global-exc-mapp>






ANNOTATIONS:

Intro.: Primero que nada, tenemos que definir que es el Framework Validations.
Este framework nos indica si permite validacin antes de que el mtodo execute() del action se
ejecute.
En el action.java tenemos un mtodo que se llama validate() con una condicin y en struts.xml
le pasamos como input.

Creamos los .jsp(s) igual que siempre, pero en el action.java aadiremos las anotaciones.
Primero ponemos antes de iniciar la clase, public class:
@Results({
@Result(name=success, location=/success.jsp),@Result(name=input,
location=/index.jsp)})

@Result es una coleccin de resultados. Tenemos que tener 2 anotaciones de result y tiene
que tener el output de execute=SUCCESS y la localizacin donde enviaran el result del
execute().

Antes del mtodo execute(): @Action (value=/name_formulario)

@Action Esta anotacin es para decorar el mtodo. Coge el valor del formulario y enva a la
URL donde el action est invocado del @Result del inicio.

Antes del getName(): @RequiredFieldValidator (message=The name is required)
Al final del todo creamos los mtodos de la condicin, getAge() y setAge() y no hacemos el
validate()
Antes del getAge(): @IntRangeFieldValidator (message= el ao debe estar entre x,y min=x,
max=y)

No tenemos el struts.xml porque ya lo hace todo en el action.java, pero tendremos que
modificar el fichero web.xml <param-name> struts.devMode </param-name>

CONTROL TAGS:

- If and else tags ex:<s:if test=%{false}> <div> Will not be</div></s:if>
- Iterator tags: <s:iterator value=days><p> day is <s:property/></p></s:it>: devuelve el
valor de un getDays()
- Merge tags: Coge como parmetro dos o ms listas i las une.
- Append tags: Liga/Junta dos listas
- Generator tags: genera un iterador basado en el valor del atributo aadido.

DATA TAGS:

- Actions tag:
Permite llamar actions des del JSP.
Ej) <s:action name=actionTagAction executeResult=true />

- Include tag:
Aadir un JSP en otro JSP.
Ej) <s:include value=myJsp.jsp>
<s:param name=param1 value=value2/> </s:inc>
Podemos definer que parametro aadir del JSP.
- Bean tags: <s:bean
Estas etiquetas bean crea una instancia de la clase que se ajusta a la especificacin
JavaBeans. Esta etiqueta tiene un cuerpo que puede contener una serie de elementos
Param para establecer algn mtodo de mutador en esa clase. Si el atributo var se
encuentra en la BeanTag, colocar el bean instancia en Contexto.

- Date tags: <s:date name=person.birthday format=dd/MM/yyy o
%{getText(some.i18n.key)}/>

- Param tags:
Para parametrizar otros tags. Tiene dos parmetros: name(String), value (Object)

- Property tag:
Devolver el valor <s:property value

- Push tags:
Devolver valores dela columna del objeto, en push pones objeto y en property
especificas la columna<s:push> <s:property />

- Set tags: available application, sesin, request, page and action. Definimos una nueva
variable myenv= environment.name <s:property value=myenv/> as devuelve
todos los nombres.

- Text tags:
Se utilizan para mostrar los I18n text message.
En el JSP:
<s:i18n name=name.action> (que ser success)
<s:text name=global.name/>
<s:text name=global.msg.param><s:param>Hola</s:param>
</s:>

Struts.xml:
<constant name=struts.devModei18nresources
value=trueApplicationResources
<action (normal)>

- Url tags:
FORM TAGS:
3 tipos de tags:
- Simple UI Tags:

- Group UI Tags:
- Select UI Tags: ARMA- Es interesante porque depende de la opcin que escojas en el
primer select te aparecern distintas opciones en el siguiente SELECT.
<s:select label=asd namedsa value=%{Opcion1} list=%{#{Opcion1.1:
Opcion1.1, Opcion1.2:Opcion1.2}}/>
<s:optgroup label=name list=%{#{

()

AJAX TAGS: (struts2-dojo-plugin-2.2.3.jar) Librera de AJAX
Aadimos <s:head> y <sx:head>
Tenemos muchas opciones de esta librera muy visuales.

SPRING INTEGRATION: (?Necesario??)

Spring es un framework de web que ofrece muchas mejoras que no estn disponibles en
Struts2. Por ejemplo la dependencia.
Tenemos que aadir varias libreras en WEB-INF/lib. En eclipse hay errores de
ClassNotFoundException pero se arregla yendo a la pestaa de Marker y con el botn
derecho aadir las clases dependentes -> Quick fix.

En web.xml: aadimos ContextLoaderListener. El archivo de configuracin es:
applicationContext.xml y tiene que estar al mismo nivel que web.xml.

<beans>
<beans id=userClass class=packege.name_action(java)>
<property name=firstName value=Maria />

Name y value podemos utilizar en el .jsp: <s:textfield namefirstName label= Primer
nombre/> igualmente.

En struts.xml: <action name=nameAction class=userClass success>
Esto significa que estamos usando spring para hacer la injeccin de dependencia de la class
User.

(mirar MUCHA mas informacin)


TILES INTEGRATION:

Es un framwork de plantillas para el desarrollo de interfcies de aplicaciones web.
Primero tenemos que aadir diferentes archivos a nuestro classpath WEB-INF/lib.

1) En web.xml tenemos que aadir dos puntos importantes. Decir dnde encontrar la
configuracin tiles.xml en /WEB-INF. E inicializar las Tiles listeners que vienen con
struts2.

2) Definir el TEMPLATE en un .jsp
Ex.
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<html>
<head>
<title><tiles:getAsString name="title"/></title>
</head>
<body>
<table>
<tr>
<td colspan="2">
<tiles:insertAttribute name="header" />
</td>
</tr>
<tr>
<td>
<tiles:insertAttribute name="menu" />
</td>
<td>
<tiles:insertAttribute name="body" />
</td>
</tr>
<tr>
<td colspan="2">
<tiles:insertAttribute name="footer" />
</td>
</tr>
</table>
</body>
</html>

3) Crear un las paginas correspondientes: header, men, body, footer que sern los
atributos que utilizaremos despus en el Template.

4) Crear una definicin en WEB-INF/tiles.xml:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="myapp.homepage" template="/layouts/classic.jsp">
<put-attribute name="title" value="Tiles tutorial homepage" />
<put-attribute name="header" value="/tiles/banner.jsp" />
<put-attribute name="menu" value="/tiles/common_menu.jsp" />
<put-attribute name="body" value="/tiles/home_body.jsp" />
<put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>
</tiles-definitions>

5) Hacer Render de la definicin:

- Utilizando <tiles:insertDefinition/> tag, insertarlo en la pgina JSP:
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="myapp.homepage" />





LOGIN:

http://javatutions.blogspot.co.uk/2013/05/before-we-starts-with-our-first-hello.html
http://www.roseindia.net/struts/struts2/struts2login.shtml

Loggins libraries para Spring y Hibernate: Log4j, SLF4J(Hibernate), Apache Commons
Loggig(Spring)

Libreras necesarias en WEB-INF/lib:



- Podemos definir nuestra pagina de welcome como la de Login.jsp:
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>

- Necesitaremos la entrada de: org.apache.struts2.dispatcher.FilterDispatcher en
web.xml.
Si no funciona porque tenemos una versin de Struts > 2.1.3 usamos mejor esta
entrada: StrutsPrepareAndExecuteFilter

<filter>
<filter-name>struts2</filter-name>
<filter-
class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndEx
ecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


Configuramos Hibernate:

- Creando el hibernate.cfg.xml declarando el JDBC por conectar a la database que
haremos ms adelante.
- Se crea el modelo LOGIN.JAVA & el LOGINDAO
- Entonces creamos un LoginAction usando package net.deepak.struts2:
Donde:
LoginDAO dao = new LoginDAO();
Login login=new Login();
public String execute() {
if (dao.checkUser(login.getUserName(),login.getPassword())!==null) {
return "success";
} else {
return "error";
}
}

En el if nos comprobar si el UserName se corresponde a la Password.
- Creamos un archivo ApplicationResources.properties en WEB-INF/clases en un
nuevo Source Folder, donde tendr mensajes staticos como Username y Password y
nos ayudar para (I18N).

Y aadimos esto:
label.username= Username
label.password= Password
label.login= Login

- Creamos el Login.jsp en el WebContent:
<s:actionerror /> para detectar error antes
<s:form action="login.action" method="post">
<s:textfield name="userName" key="label.username" size="20" />
<s:password name="password" key="label.password" size="20" />
<s:submit method="execute" key="label.login" align="center" />
</s:form>

- Y en la Welcome.jsp (la siguiente pgina despus de poner Username y password
correctos).

- En la pgina de Struts.xml conectamos las pginas:

<struts>
()

<action name="login"
class="net.deepak.struts2.LoginAction">
<result name="success">Welcome.jsp</result>
<result name="error">Login.jsp</result>
</action>












Oracle SQL Developer:

-COMO CREAR USUARIO PARA CONEXIN PARA BASES DE DATOS- ORACLE DEVELOPER:
1) Primero entramos en la consola cmd y ponemos con espacios para acceder como
admin en sql:

$ sqlplus / as sysdba
2.1)
DROP user username cascade;

2) Creamos el user con su contrasea:
$ CREATE USER username IDENTIFIED BY password;
Tiene que aparecer: User created.

3) Damos todos los privilegios:
$ Grant all privileges to username;
4) Nos connectamos:
$ CONNECT; user + psw;
5) Comprovamos el usuario
$ SHOW USER;

Vamos al Oracle SQL:
- Creamos una nueva conexion con el Usuario y contrasea que hemos puesto en la
consola y Conectamos; Hemos creado la base de datos.

- Abrimos el export.sql, si tenemos, y lo copiamos a la nueva bases de datos
apretando F5 o ejecutar script.
Hibernate (Consola):

http://www.javacodegeeks.com/2013/10/step-by-step-auto-code-generation-for-pojo-
domain-java-classes-and-hbm-using-eclipse-hibernate-plugin.html
Hibernate es un pluggin que est incluido dentro el JBoss Tools y por tanto no es necesario
descargar nada.

1) Para instalar JBoss-Hibernate en Eclipse
Vamos a la pestaa Help -> Install New Software
Ponemos la url que buscamos por la pgina web de JBoss y con nuestra versin de Eclipse.

Entonces nos aparecer un listado con todos los Softwares disponibles, buscamos Hibernate y
nos descargamos las herramientas.

2) Crear Hibernate Mapping File

File -> New -> Hibernate Console Configuration

Window -> Open Perspective -> hibernate
Se abre una pestaa en eclipse, le damos botn derecho -> Add Configuration

- Database connection -> new:

- SID: xe, Host: localhost, Port: 1521, User name: username, Password: psw.

- Probamos el Test Connection hasta que ponga PING SUCCESS.



3) Hibernate Configuration File (cfg.xml)

Ahora hacemos el Configuration File -> Create new ->creem al src
Y hacemos Get values from connection para conectarlo tambin a la base de datos
hecha anteriormente.
Si funciona Get values from Connection perfecto. Le damos a OK y nos genera el
hibernate.cfg.xml file.



Sino, creamos una nueva conexin de bases de datos. En Database dialect -> New -> Oracle ->
Drivers
En Drivers -> New Driver Definition -> JAR List: Si nos sale error, borramos el que hay y
volvemos a aadir el Nuevo ojdbc14.jar y en Name/Type cogemos la versin 10. Cuando el
driver esta OK aadimos el SID, host, port todo definido en nuestra bases de datos. Vamos a
la Bases de datos Silvia en OracleSQL y ponemos propiedades y vemos las caractersticas.

En Eclipse:
En la pestaa de la izquierda nos aparecern las tablas de la bases de datos.



Vamos a Run -> Hibernate Code Generation -> Hibernate Code Generation Configuration.
Le damos a nuestra configuracin:

- El output le ponemos en src y clicamos en Reverse engineer from JDBC Connection,
en Exporters escojemos los 3 primeros.
- En Exporters indicamos los ficheros que queramos, en nuestro caso HBL y JAVA (POJO)
y los DAO.

Si nos da el error: jdbcbinderexception duplicate class name sys

- Cuando hagamos el export aunque no lo pida, aadir una propiedad con un directorio.
http://stackoverflow.com/questions/17593672/hibernate-tools-duplicate-class-error-
on-reverse-engineering
Sitemesh vs Tiles:

Para poder diferenciar las diferentes regiones con diferentes estilos marcados, podemos
utilizer dos tipos de Aplicaciones web de java, frameworks desenvolupados. Podemos hacerlo
con un Composition (Tiles) en patterns o con un Decorator (Sitemesh).
Hace aos que se ha utilizado Tiles, pero des de hace relativamente poco est el Decorator.
Con los dos aconseguimos la mismo funcionalidad, pero en Sitemesh sin cabeceras.
Pros de Sitemesh:
1) Configuracin: solo tenemos un archivo (decorators.xml) para la configuracin
2) Patterns: Aadir definiciones en el .xml para aplicarlo en la pgina
3) Flexibilidad/Sencillez: Solo utiliza 6 tags en total
4) Tags
5) Capas separadas
6) JSPs: no es necesario hacer fragments y juntarlos.
CONFIGURACIN TILES:
http://viralpatel.net/blogs/struts-2-tiles-plugin-tutorial-with-example-in-eclipse/
1) Aadir los archivo files necesarios en la carpeta WEB-INF/folder
2) Configurar Tiles en web.xml aadiendo el listener



3) Configurar tiles.xml:
Tenemos que definir un baselayout plantilla. Este diseo contiene atributos como
Cabecera, Ttulo, Cuerpo, men y pie de pgina. El diseo ser luego ampliada y se
aadirn nuevas.

<definition name=baseLayout template=/BaseLayout.jsp>
<put-attribute name=header value=/Header.jsp/>


4) Creamos los JSPs correspondientes (BaseLayout, Header, Menu, Footer)
Tiles:instertAttribute en jsp


Por ejemplo en menu.jsp:
o Aadimos second.jsp que ser para la segunda pgina clicando el segundo link
y third.jsp
o Y en men: <a href= <s:url action=secondTiles/> SecondLink </a>

En struts:
<action name=*Tiles method (1) class=action.TilesAction>
<result name=welcome type=tiles> home>/result>
<result name=second type=tiles> secondlink</result>

En Tiles.Action:
Tiene los mtodos que devuelven el string, siempreb:
Public String second(){ return second;}

Struts.xml



SPRING Framework:

Es un framework de inyeccin de dependencias y programacin orientada a aspectos. Se utiliza
para evitar modificaciones, hace que sea ms fcil desarrollar y utiliza separacin de capas.
Inyeccin de dependencias: El objetivo es lograr un bajo acoplamiento entre los objetos de
nuestra aplicacin. Con este patrn de diseo, los objetos no buscan o crean sus dependencias
sino que stas son dadas al objeto. El contenedor es el encargado de realizar este trabajo al
momento de instanciar el objeto. As los objetos conocen sus dependencias por su interfaz. As
la dependencia puede ser intercambiada por distintas implementaciones.
En resumen, se programa orientado a interfaces e inyectamos las implementaciones a travs
del contenedor.
Programacin orientada a aspectos: Es un paradigma de programacin que intenta separar las
funcionalidades secundarias de la lgica de negocios (Cross-cutting concerns).
Por ejemplo los loggers, la seguridad son funcionalidades abstractas y corremos el riesgo de
caer en la repeticin de cdigo.



Core: se encuentra el BeanFactory el contenedor fundamental de Spring y quien se encarga
de la inyeccin de dependencias. El contenedor ApplicationContext se basa en BeanFactory y
extiende su funcionalidad con soporte para i18n, eventos de ciclo de vida, validacin y mejor
integracin con AOP.
AOP permite desarrollar interceptores de mtodo y puntos de corte para desacoplar el cdigo
de las funcionabilidades transversales.
http://code.google.com/p/struts2-spring-plugin/wiki/UserGuide
http://www.dineshonjava.com/2013/08/struts-2-hibernate-3-integration.html#.UzLEM_TuKGc
(Struts2 hibernate 3 integration example with spring3)
Primer mirar struts2 con spring3
Mirar struts2 con tiles2

Você também pode gostar