viernes, 27 de febrero de 2009
Struts Basico
probar jetty y comparar con tomcat
en foro, pagina que explica funcionamiento de struts básico
ActionForm, Action,
Navegacion se evalua en función del resultado del controlador (separación de papeles)
i18n
validadación y envío de errores y mensajes a usuario
Etiquetas de struts:
maven con struts: creación de proyectos
Maven y TestNG
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
</configuration>
</plugin>
</plugins>
</build>
Y después añadir la dependencia (la libreria) de TestNG
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.8</version>
<classifier>jdk15</classifier>
</dependency>
al final el pom.xml tendrá más o menos esta forma.
jueves, 26 de febrero de 2009
Maven Basico Practica
crear un proyecto maven con eclipse
creacion de proyecto/servicio (cada proyecto tendrá solamente una clase en el caso de las implementaciones y una interfaz en el caso de las apis):
- servicioCalculadoraAPI: contiene interfaz con metodo multiplica 2 long y devuelve String con tipo de moneda
- servicioCalculadoraImplEuropea
- servicioCalculadoraImplAmericana
- servicioTraduccionAPI: contiene interfaz con metodo traduce que recibe una clave: ej: welcome
- servicioTraduccionAndaluz
- servicioTraduccionVasco
- servicioTraduccionCatalan
- servicioAleatorioAPI: contiene interfaz con metodo que recibe un numero (x) y devuelve un numero aleatorio de 0 a x
- servicioAleatorioImpl
Creamos una aplicación web (web01) con maven y eclipse y utilizamos las dependencias anteriormente instaladas para su uso desde este proyecto
Creamos otra aplicación web (web02) con maven y eclipse con las mismas dependencias pero la inicialización o instanciación de los servicios los realizamos en listeners de aplicación que activamos o desactivamos selectivamente en el web.xml. Y desde nuestros controladores, unicamente accedemos a estos servicios a través del servletContext.getAttribute("servicioCalculadora") o servletContext.getAttribute("servicioTraduccion")
Maven Basico
>> cd workspace
>> mvn archetype:create -DgroupId=es.cea -DartifactId=EjemploMaven
>> cd EjemploMaven
http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
Comandos básicos:
- >>mvn clean
- >>mvn compile
- >>mvn package
Para abrirlo en eclipse
- >>mvn eclipse:eclipse
Crear un proyecto java web básico:
- >> cd workspace
- >> >> mvn archetype:create -DgroupId=es.cea -DartifactId=web00 -DarchetypeArtifactId=maven-archetype-webapp
- >> cd web00
- >> mvn tomcat:run-war
- http://localhost:8080/web00
martes, 24 de febrero de 2009
Proyectos servlet corregidos
PD: parece que tenéis muy buena base de Servlets
lunes, 23 de febrero de 2009
Instalar MAVEN
Instalar maven
(en server/java/apache-maven-2.0.9) o bajarse el zip de maven, desempaquetarlo y poner su directorio bin en el path de busqueda de ejecutables.
En mi caso lo he desempaquetado en C:\, con lo que se me ha creado el directorio C:\maven-2.0.9
Para meter el subdirectorio bin en el path de ejecutables, le doy con el botón derecho del ratón sobre el icono de "Mi PC" y elijo "Propiedades", "Avanzado" y "Variables de Entorno". Busco "Path" y le doy a "Editar". Añado al final ";C:\maven-2.0.9\bin" (con punto y coma delante, para separarlo de lo que ya haya escrito)
En el caso de windows hay que abrir una ventana de comandos nueva después de haber realizado los cambios y para probar que todo va bien, podemos ejecutar
>> mvn --versionMaven version: 2.0.9
>> mvn archetype:create -DgroupId=es.cea -DartifactId=EjemploMaven
Implementacion MYSQL
Primero instalamos MYSQL y MySQLTools con la ayuda de los videos
SQL: INTRODUCCIÓN
http://es.wikipedia.org/wiki/SQL
tutorial en español:
http://www.desarrolloweb.com/manuales/9/
Java y SQL-> JDBC Java Database Connectivity
http://es.wikipedia.org/wiki/JDBC
Ejemplo:
http://www.chuidiang.com/chuwiki/index.php?title=Conectar_java_con_mysql
http://www.chuidiang.com/java/mysql/mysql-java-basico.php
http://www.chuidiang.com/java/mysql/EjemploJava.php
Instalar proyecto: mysqlcea desde repo (mysql+testng+tdd+maven)
vincular proyectos en eclipse, exportar jar y wars
Implementacion de DaoBibliotecaMYSQL
Pasar a session el DAO y a listener de evento abrir y cerrar conexion!
viernes, 20 de febrero de 2009
martes, 17 de febrero de 2009
lunes, 16 de febrero de 2009
jueves, 12 de febrero de 2009
miércoles, 11 de febrero de 2009
Proyecto Biblioteca MVC
El proyecto se desarrollará con las siguientes tecnologías
- Patrón de desarrollo MVC (Modelo Vista Controlador)
- Servlets: Listener, Filters, Servlets
- JSP
- JSTL (tags implicitos en JSP, tags de JSTL y tags personalizados)
- Pruebas
Especial atención a:
- modularización de la vista con uso de la etiqueta jsp:include
- paquetes separando aspectos/finalidades/roles de las clases java
- aislamiento de acceso a datos en una sola clase con una interfaz
- nomenclatura
- características standars de proyecto web java.
Plazo y forma de desarrollo:
Forma de desarrollo: equipo
Inicio: 12 febrero
Fin: 20febrero (ambos días incluidos!)
Publicación en el mismo repositorio svn de equipo
Total horas por persona: 24 Horas
Total horas por equipo: 24x4= 96 Horas
JSTL: continuacion
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSTL.html
La etiqueta tag en el tld puede contener las siguientes porpiedades
- name
- tagclass: clase java que implementa javax.servlet.jsp.tagext.Tag
- bodycontent: jsp, tagdependent, empty
- atributes: los atributos que puede recibir, especificando su name, required y rtexprvalue
Etiquetas implicitas en jsp:
(fuente wikipedia en español)
Son las etiquetas pertenecientes a la especificación JSP. Proporcionan una funcionalidad básica.
Un primer grupo de etiquetas proporciona funcionalidad a nivel de la página de una manera muy simple:
- * <jsp:forward>, redirige la request a otra URL
- * <jsp:include>, incluye el texto de un fichero dentro de la página
- * <jsp:plugin>, descarga un plugin de Java (una applet o un Bean).
Un segundo grupo permite manipular componentes JavaBean sin conocimientos de Java.
- * <jsp:useBean>, permite manipular un Bean (si no existe, se creará el Bean), especificando su ámbito (scope), la clase y el tipo.
- * <jsp:getProperty>, obtiene la propiedad especificada de un bean previamente declarado y la escribe en el objeto response.
- * <jsp:setProperty>, establece el valor de una propiedad de un bean previamente declarado.
libreria de funciones para aplicar en EL JSTL: functions
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSTL8.html
http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html
lunes, 9 de febrero de 2009
JSTL: la especificacion de JSPs trae JSTL
JSP = Java Server Pages
JSTL = Java Standard Tag Library
http://jakarta.apache.org/taglibs/site/tutorial.html
Tutorial de SUN: http://java.sun.com/j2ee/1.3/docs/tutorial/doc/JSTL.html
La especificación JSP viene acompañada de la especificación JSTL, cuyo finalidad es no escribir codigo java en la vista (codigo HTML) para seguir utilizando una pseudosintaxis HTML.
proyecto jsps+jstls en repo
Instalación:
- incluir librerias en WEB-INF/lib incluidas en jakarta-taglibs-standard-1.0.6/lib
- incluir documentos descriptores de librerías (tlds*) desde jakarta-taglibs-standard-1.0.6/tld hasta nuestroProyecto/WebContent/tld
- definir en web.xml los tlds que vamos a utilizar en nuestro jsp
Novedades incluidas:
- expressionLanguage http://java.sun.com/j2ee/1.3/docs/tutorial/doc/JSTL4.html
- métodos getter/setter imprescindibles para acceso desde vista
- nomenclatura de objetos implicitos -> cambia!
Implicit Objects
The JSTL expression language defines a set of implicit objects:
pageContext
- thePageContext
objectpageScope
- aMap
that maps page-scoped attribute names to their valuesrequestScope
- aMap
that maps request-scoped attribute names to their valuessessionScope
- aMap
that maps session-scoped attribute names to their valuesapplicationScope
- aMap
that maps application-scoped attribute names to their valuesparam
- aMap
that maps parameter names to a singleString
parameter value (obtained by callingServletRequest.getParameter(String)
)paramValues
- aMap
that maps parameter names to aString[ ]
of all values for that parameter (obtained by callingServletRequest.getParameterValues(String))
header
- aMap
that maps header names to a singleString
header value (obtained by callingServletRequest.getheader(String)
)headerValues
- aMap
that maps header names to aString[ ]
of all values for that parameter (obtained by callingServletRequest.getHeaders(String))
cookie
- aMap
that maps cookie names to a singleCookie
(obtained by callingHttpServletRequest.getCookie(String)
)initParam
- aMap
that maps a parameter names to a singleString
parameter value (obtained by callingServletRequest.getInitParameter(String)
)
** el uri es el identificativo: http://code.google.com/p/cursoj2ee/source/detail?r=88
JSTL -> especificación extensible->herencia->etiquetas personalizadas..
pasos a seguir para realizar una etiqueta o librería de etiquetas personalizadas...
- crear la clase java que hereda de tag
- crear (si no existe el tld) e incluir el tag recien creado
- incluir el tld en el web.xml
- incluir el tld en el jsp
- usar el tag en el jsp
ejemplo c:foreach
viernes, 6 de febrero de 2009
Pruebas a colecciones y diseño en capas de una aplicacion
Separación de los diferentes
Comprobar con pruebas, la ordenacion de listas y la utilización de objetos como claves en mapas
jueves, 5 de febrero de 2009
TestNG
Antes de empezar necesitamos...
Directorios source folders simetricos:
src
---es.cea
test
---es.cea
¿cómo instalo la libreria (no el plugin, sino la libreria) de testng?
boton derecho sobre el nombre del proyecto>Build Path>configure build path>pestaña librerias>add external jars>seleccionaren nuestro disco duro: testng-5.8-jdk15.jar
¿dónde me creo la clase de prueba?
En el source folder "test" en el mismo paquete que la clase a probar
¿qué nombre le pongo?
El mismo nombre que la clase a probar más el sufijo "Test". Ejemplo: si voy a probar el ServicioCalendarios me hago la clase ServicioCalendariosTest
¿cómo hago un método de prueba?
Un método de prueba es un método publico que no devuelve nada y que no recibe parametros. Además lleva la anotación @Test, para lo cual hay que importar la clase org.testng.annotations.Test
¿qué escribo dentro del método de prueba?
el escenario de pruebas
la invocación del "programa"
las aserciones/confirmaciones correspondientes
¿cómo lanzo la prueba?
boton derecho sobre la clase en el package explorer> run as...>testng test
Esencial en Proyecto Java
- log4j.jar
- commons-logging.jar
- testng.jar
En código:
- protected final Log logger = LogFactory.getLog(getClass());
- src
- resources
- test
- definición de clases
- métodos y párametros que reciben o devuelven
logging y colecciones
seguir el funcionamiento de nuestro programa en consola con la herramienta:
commons-logging de apache
colecciones
http://groups.google.com/group/eticom-master-java/web/colecciones-de-objetos
http://java.sun.com/j2se/1.4.2/docs/api/java/util/package-summary.html
miércoles, 4 de febrero de 2009
Aplicacion en capas
--------------------
SERVICIOS
--------------------
DAO
--------------------
DATABASE
Aislar significa centralizar en un paquete y una o varias clases el código correspondiente
JSPs
http://code.google.com/p/cursoj2ee/source/browse/trunk/jspEjemplo/
- imports de clases
- acceso a aplication
- acceso a request
- scripts
- <%=%>
- includes
- ...
POO y Servlets
- ¿en que objetos nos apoyamos para realizar el desarrollo de las funcionalidades (a parte de los objetos implicitos del framework y del modelo)?
- ¿quien invoca los news filters, servlets, listeners?
Proyecto Final Conclusiones:
- ¿qué logica se ha implementado en los listeners?
- ¿qué logica se ha implementado en los servlets?
- ¿qué logica se ha implementado en los filtros?
- ¿qué tienen en común los objetos almacenados en el SevletContext (setAttribute y getAttribute)?
- ¿qué tienen en común los objetos almacenados en el Session(setAttribute y getAttribute)?
- ¿qué tienen en común los objetos almacenados en el Request (setAttribute y getAttribute)?
Refactorizacion:
- eliminar redundancia
- mejorar nombres de clases y metodos y parametros
- encapsular objetos
martes, 3 de febrero de 2009
Controlador Frontal - Front Controller
Patrón Controlador Frontal:
- que consiste en utilizar un único punto de entrada a cada aplicación. Concretamente, todas las peticiones que realiza el usuario se controlan mediante un único servlet (solo un servlet en web.xml), que se encarga de redirigir las peticiones a los servicios implicados
http://www.programacion.com/java/articulo/corej2ee_patterns/
REPO:
http://code.google.com/p/cursoj2ee/source/browse/trunk/controladorFrontal#controladorFrontal/src
Crear un servicio para calculo de intervalo entre dos fechas
A través de TDD generar un ServicioCalendarios que contenga funcionalidad relacionada con fechas y tratamiento de estas, incluyendo la comprobacion del intervalo entre dos fechas (necesario para funcionlidad de reserva en biblioteca)
lunes, 2 de febrero de 2009
TDD: Desarrollo Orientado a Pruebas - Test Driven Development
http://es.wikipedia.org/wiki/Tdd
Pruebas con TestNG
instalación de plugin para eclipse
- Select Help / Software updates / Find and Install.
- Search for new features to install.
- New remote site.
- Enter http://beust.com/eclipse in the URL and whatever description you want.
- Make sure the check box next to http://beust.com/eclipse is checked and click Next.
- Eclipse will then guide you through the process.
funcionamiento del plugin para eclipse
http://testng.org/doc/eclipse.html
Ciclo de desarrollo orientado a pruebas:
http://es.wikipedia.org/wiki/Tdd#Ciclo_De_Desarrollo_Conducido_por_Pruebas
Consecuencias del TDD
- Las pruebas pueden llegar a sustituir a la documentación.