viernes, 22 de noviembre de 2013

Más de Servlets - Upload, Image or Binary Resource, Servlet 3 new Features

Más de Servlets

En la clase de hoy veremos un poco más de Servlets
  • Hacer un post/upload de un Archivo al Servidor con Servlet 3 (Guardar en BD)
  • Descargar un recurso o página en binario del Servidor (aprovechar la Cabecera HTTP para informar que es una imagen, reglas de Cache) (Descargar de un BLOB de BD)
  • Manejar Páginas de Error
  • Manejar Excepciones Personalizadas en Páginas
También veremos algunas cosas nuevas que trae la Especificación 3 de Servlets
  • Agregar Programaticamente Servlets al Contenedor con su respectivo Mapping.
  • Incluir y crear un Proyecto con WEB-FRAGMENT para modularizar Proyectos.
Para ver los ejemplos Descargar los Siguientes 2 Proyectos, Para Probar el Web-Fragment incluir el proyecto en WEB-INF/lib como un JAR.

https://www.dropbox.com/s/g0njamzipjuclnj/tutorial-web-fragment.zip
https://www.dropbox.com/s/btxjsur01dj9xoy/tutorial-servlets-3.zip

viernes, 15 de noviembre de 2013

JSP - Servlets - MVC

Patrón MVC


Guía de Trabajo
https://www.dropbox.com/s/l94xcnzgb8hdcrk/example-jdbc-derby.zip
https://www.dropbox.com/s/88z3zcz0gl1bpow/tutorial-mvc-jstl-el.zip

Buena Suerte!

JSP - JSTL y Librerías de Etiquetas

JSTL

Etiquetas JSP que contienen Bibliotecas, con funciones comunes en el desarrollo WEB, como formato de números y fechas, impresión de Variables, manejo de flujos, etc.

La tecnología JavaServer Pages Standard Tag Library (JSTL) es un componente de Java EE. Extiende las ya conocidasJavaServer Pages (JSP) proporcionando cuatro bibliotecas de etiquetas (Tag Libraries) con utilidades ampliamente utilizadas en el desarrollo de páginas web dinámicas.
Estas bibliotecas de etiquetas extienden de la especificación de JSP (la cual a su vez extiende de la especificación de Servlet). Su API nos permite además desarrollar nuestras propias bibliotecas de etiquetas.

Custom Tags[editar · editar código]

Las bibliotecas englobadas en JSTL son:
  • core, iteraciones, condicionales, manipulación de URL y otras funciones generales.
  • xml, para la manipulación de XML y para XML-Transformation.
  • sql, para gestionar conexiones a bases de datos.
  • fmt, para la internacionalización y formateo de las cadenas de caracteres como cifras.

Core

Tag Summary
catchAtrapar Exception
chooseControl de Flujo
ifCondicional Simple
importRetrieves an absolute or relative URL and exposes its contents to either the page, a String in 'var', or a Reader in 'varReader'.
forEachIterador
forTokensIterates over tokens, separated by the supplied delimeters
outSalida
otherwiseSubtag of <choose> that follows <when> tags and runs only if all of the prior conditions evaluated to 'false'
paramAdds a parameter to a containing 'import' tag's URL.
redirectRedirects to a new URL.
removeBorrar Variable
setAsignar Variable
urlCreates a URL with optional query parameters.
whenSubtag of <choose> that includes its body if its condition evalutes to 'true'
FMT (Formateador)

Tag Summary
requestEncodingSets the request character encoding
setLocaleStores the given locale in the locale configuration variable
timeZoneSpecifies the time zone for any time formatting or parsing actions nested in its body
setTimeZoneStores the given time zone in the time zone configuration variable
bundleLoads a resource bundle to be used by its tag body
setBundleLoads a resource bundle and stores it in the named scoped variable or the bundle configuration variable
messageMaps key to localized message and performs parametric replacement
paramSupplies an argument for parametric replacement to a containing <message> tag
formatNumberFormats a numeric value as a number, currency, or percentage
parseNumberParses the string representation of a number, currency, or percentage
formatDateFormats a date and/or time using the supplied styles and pattern
parseDateParses the string representation of a date and/or time


JSP - Expressión Language

Expression Language  2.0

Lenguaje de expresión utilizado principalmente en los JSP para acceder a información de los Java Beans, que pueden estar en algún Ambiente(Aplicación, Sesión, Petición o Página),

Se utilizan como atributos de Etiquetas JSP.


<c:if test="${sessionScope.cart.numberOfItems > 0}"> 
  ...
</c:if> 

<c:if test="${a.nombre == 'Juan'}" >
...
</c:if> 

Variables


Objetos Implícitos

The JSP expression language defines a set of implicit objects:

  • pageContext: The context for the JSP page. Provides access to various objects including:

    • servletContext: The context for the JSP page's servlet and any web components contained in the same application. See Accessing the Web Context.

    • session: The session object for the client. See Maintaining Client State.

    • request: The request triggering the execution of the JSP page. See Getting Information from Requests.

    • response: The response returned by the JSP page. See Constructing Responses.
    • In addition, several implicit objects are available that allow easy access to the following objects:

      • param: Maps a request parameter name to a single value

      • paramValues: Maps a request parameter name to an array of values

      • header: Maps a request header name to a single value

      • headerValues: Maps a request header name to an array of values

      • cookie: Maps a cookie name to a single cookie

      • initParam: Maps a context initialization parameter name to a single value
      Finally, there are objects that allow access to the various scoped variables described in Using Scope Objects.

      • pageScope: Maps page-scoped variable names to their values

      • requestScope: Maps request-scoped variable names to their values

      • sessionScope: Maps session-scoped variable names to their values

      • applicationScope: Maps application-scoped variable names to their values

Literales


The JSP expression language defines the following literals:

  • Boolean: true and false

  • Integer: as in Java

  • Floating point: as in Java

  • String: with single and double quotes; " is escaped as \", ' is escaped as \', and \ is escaped as \\.

  • Null: null

Operators


In addition to the . and [] operators discussed in Variables, the JSP expression language provides the following operators:

  • Arithmetic: +(binary), */ and div% and mod- (unary)

  • Logical: and&&or||not!

  • Relational: ==eq!=ne<lt>gt<=ge>=le. Comparisons can be made against other values, or against boolean, string, integer, or floating point literals.

  • Empty: The empty operator is a prefix operation that can be used to determine whether a value is null or empty.

  • Conditional: A ? B : C. Evaluate B or C, depending on the result of the evaluation of A.
The precedence of operators highest to lowest, left to right is as follows:

  • [] .

  • () - Used to change the precedence of operators.

  • (unary) not ! empty

  • * / div % mod

  • + - (binary)

  • < > <= >= lt gt le ge

  • == != eq ne

  • && and

  • || or

  • ? :

Reserved Words


The following words are reserved for the JSP expression language and should not be used as identifiers.
and   eq   gt   true   instanceof
or    ne   le   false  empty
not   lt   ge   null   div   mod 

EL Expression

Result

${1 > (4/2)}

false

${4.0 >= 3}

true

${100.0 == 100}

true

${(10*10) ne 100}

false

${'a' < 'b'}

true

${'hip' gt 'hit'}

false

${4 > 3}

true

${1.2E4 + 1.4}

12001.4

${3 div 4}

0.75

${10 mod 4}

2

${empty param.Add}

True if the request parameter named Add is null or an empty string

${pageContext.request.contextPath}

The context path

${sessionScope.cart.numberOfItems}

The value of the numberOfItems property of the session-scoped attribute named cart

${param['mycom.productId']}

The value of the request parameter named mycom.productId

${header["host"]}

The host

${departments[deptName]}

The value of the entry named deptName in the departments map

${requestScope['javax.servlet. forward.servlet_path']}

The value of the request-scoped attribute named javax.servlet. forward.servlet_path

viernes, 8 de noviembre de 2013

Introducción a JQuery y AJAX

Introducción a JQuery

En el curso de Programación Web con JAVA, queremos realizar en nuestras páginas llamadas a JSP o Servlets de manera asíncrona, o actualizar información de la página mientras el usuario está leyendo la página.

Materiales

https://www.dropbox.com/s/l94xcnzgb8hdcrk/example-jdbc-derby.zip
https://www.dropbox.com/s/depy2icizkhj8lv/tutorial-jquery-css.zip

Objetivo:

Veremos como hacer para invocar una petición HTTP a nuestros recursos, y como modificar nuestro HTML de acuerdo a esos eventos.

Definición de AJAX


AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una técnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications). Estas aplicaciones se ejecutan en el cliente, es decir, en el navegador de los usuarios mientras se mantiene la comunicación asíncrona con el servidor en segundo plano. De esta forma es posible realizar cambios sobre las páginas sin necesidad de recargarlas, mejorando la interactividad, velocidad y usabilidad en las aplicaciones.


Ajax es una combinación de cuatro tecnologías ya existentes:
  • XHTML (o HTML) y hojas de estilos en cascada (CSS) para el diseño que acompaña a la información.
  • Document Object Model (DOM) accedido con un lenguaje de scripting por parte del usuario, especialmente implementaciones ECMAScript como JavaScript y JScript, para mostrar e interactuar dinámicamente con la información presentada.
  • El objeto XMLHttpRequest para intercambiar datos de forma asíncrona con el servidor web. En algunos frameworks y en algunas situaciones concretas, se usa un objetoiframe en lugar del XMLHttpRequest para realizar dichos intercambios. PHP es un lenguaje de programación de uso general de script del lado del servidor originalmente diseñado para el desarrollo web de contenido dinámico también utilizado en el método Ajax.
  • XML es el formato usado generalmente para la transferencia de datos solicitados al servidor, aunque cualquier formato puede funcionar, incluyendo HTML preformateado, texto plano, JSON y hasta EBML.

Fuente: Wikipedia

Por qué utilizar JQuery?

Porque es una librería madura que nos facilitará el trabajo de manipular nuestro HTML.

Que necesitamos para utilizar JQuery?

Descargar la librería JavaScript, y utilizar en nuestras páginas.

Descargar de http://jquery.com/download/

Leer el API: http://api.jquery.com/

Al cargar la Librería JQuery, ésta nos crea una función con nombre de Variable jQuery o $ (alias), a quién nosotros le pasamos como parámetro un "Selector", él nos devuelve un resultado para ese selector y nosotros aplicamos una función a ese resultado.

Seleccionando un Elemento por ID

1
$( "#myId" ); // Note IDs must be unique per page.

Seleccionando elementos por clase CSS

1
$( ".myClass" );

Seleccionando elementos que tienen atributo con valor

1
$( "input[name='first_name']" ); // Beware, this can be very slow in older browsers

Seleccionando elementos por patrón 

1
$( "#contents ul.people li" );
JQuery también agiliza el desarrollo y el consumo de librerías de tipo UI o Utilitarios.

Que tipo de Documentos podemos utilizar para transportar con AJAX


Se puede transportar XML, Texto Plano, Java Script a ser ejecutado y JSON.

Introducción a Java Script y HTML DOM

Introducción a Java Script

Después de haber aprendido como funciona un Servlets, JSP, Filters, Web Listeners, acceso a datos con Java. Vamos a aprender a utilizar diferentes tecnologías Web para enriquecer nuestras aplicaciones.

En este Post vamos a ver sobre Java Script utilizando un Tutorial de   W3 Schools.


Introducción

Java script es un lenguaje ligero de utilizar, que se puede colocar en páginas Web y puede ser ejecutado en Navegadores de Internet(Browser), Java Script es Fácil de Aprender.

Como utilizar


Se utiliza  en el HTML con la etiqueta html <script>

<script>
alert("My First JavaScript");
</script>

Se puede hacer referencias de recursos javascript externos, mediante un URL

Example

<!DOCTYPE html>
<html>
<body>
<script src="myScript.js"></script>
</body>
</html>

Probar

Salida

Java Script se utiliza para manipular elementos HTML en una página

Para acceder a los elementos Java Script se utiliza un objeto implicito "document" y el método "getElementById"

document.getElementById(id


Example

Cambiar contenido de un Html específico:
<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>

<p id="demo">My First Paragraph</p>

<script>
document.getElementById("demo").innerHTML="My First JavaScript";
</script>


</body>
</html>

Try it yourself »

Example

Escribir en el HTML
<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>

<script>
document.write("<p>My First JavaScript</p>");
</script>


</body>
</html>

Try it yourself »

Sentencias

Las sentencias javascript son "comandos" para el Browser,  Cada sentencia es una orden de que tiene que hacer el Browser.

document.getElementById("demo").innerHTML="Hello Dolly";


Normalmente, se necesita terminar la sentencia con ";"

Example

document.getElementById("demo").innerHTML="Hello Dolly";
document.getElementById("myDIV").innerHTML="How are you?";

Try it yourself »

Bloques

Los Bloques están marcados por "{" y finaliza con "}" así como en el lenguaje de programación "Java"

Example

function myFunction()
{
document.getElementById("demo").innerHTML="Hello Dolly";
document.getElementById("myDIV").innerHTML="How are you?";
}

Try it yourself »

JavaScript es Sensible a las Mayúsculas

Es importante saber que los nombres de funciones, variables, etc. son sencibles a las Mayúscula.

ejemplo

var hola = null;
Hola = 1;

Hola y hola son nombres de diferentes y hola no es igual 1

Comentarios

Comentario simple

Example

// Write to a heading:
document.getElementById("myH1").innerHTML="Welcome to my Homepage";
// Write to a paragraph:
document.getElementById("myP").innerHTML="This is my first paragraph.";

Try it yourself »
Comentario Multilinea

Example

/*
The code below will write
to a heading and to a paragraph,
and will represent the start of
my homepage:
*/
document.getElementById("myH1").innerHTML="Welcome to my Homepage";
document.getElementById("myP").innerHTML="This is my first paragraph.";

Try it yourself »
Comentarios al finalizar lineas o sentencias

Example

var x=5;    // declare x and assign 5 to it
var y=x+2;  // declare y and assign x+2 to it

Try it yourself »

Variables

Se utiliza la palabra reservada var para declarar una variable, esa variable tendrá un alcance o vida en la misma o dentro de una sentencia o bloque.

Example

<p id="demo"></p>
var carname="Volvo";
document.getElementById("demo").innerHTML=carname;

Try it yourself »

var lastname="Doe", age=30, job="carpenter";



var lastname="Doe",
age=30,
job="carpenter";


var carname; //is undefined


Tipos de Datos

Las variables son de tipo dinámico

Example

var x;               // Ahora x es undefined
var x = 5;           // Ahora x es un Number
var x = "John";      // Ahora x es un String

Declaración de String

Example

var carname="Volvo XC60";
var carname='Volvo XC60';

Example

var answer="It's alright";
var answer="He is called 'Johnny'";
var answer='He is called "Johnny"';

Try it yourself »

Declaración de Números

Example

var x1=34.00;      // con Decimales
var x2=34;         // sin Decimales


Declaración de Booleanos

var x=true;
var y=false;


Arreglos en Java Script

var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";

var cars=new Array("Saab","Volvo","BMW");

Example

var cars=["Saab","Volvo","BMW"];

Try it yourself »

Objetos

var person={firstname:"John", lastname:"Doe", id:5566};

Example

name=person.lastname;//asignar apellido de persona en name
name=person["lastname"];//asignar también apellido en name

Try it yourself »

Undefined y Null

Example

cars=null;
person=null;

Try it yourself »

Objetos

Casi todo en JavaScript puede ser un Object: Strings, Functions, Arrays, Dates.


Creando un Objeto

Example

person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";

Try it yourself »

Acceder a Propiedades de String
var message="Hello World!";
var x=message.length;


Invocar Métodos de Objetos

objectName.methodName()

Funciones

Example

<!DOCTYPE html>
<html>
<head>
<script>
function myFunction()
{
alert("Hello World!");
}

</script>
</head>

<body>
<button onclick="myFunction()">Try it</button>
</body>
</html>

xample

<button onclick="myFunction('Harry Potter','Wizard')">Try it</button>

<script>
function myFunction(name,job)
{
alert("Welcome " + name + ", the " + job);
}
</script>

Try it yourself »

Operadores

Operadores Aritméticos

Given that y=5, the table below explains the arithmetic operators:
OperatorDescriptionExampleResult of xResult of yTry it
+Additionx=y+275Try it »
-Subtractionx=y-235Try it »
*Multiplicationx=y*2105Try it »
/Divisionx=y/22.55Try it »
%Modulus (division remainder)x=y%215Try it »
++Incrementx=++y66Try it »
x=y++56Try it »
--Decrementx=--y44Try it »
x=y--54Try it »

Operadores de Asignación

Given that x=10 and y=5, the table below explains the assignment operators:
OperatorExampleSame AsResultTry it
=x=yx=5Try it »
+=x+=yx=x+yx=15Try it »
-=x-=yx=x-yx=5Try it »
*=x*=yx=x*yx=50Try it »
/=x/=yx=x/yx=2Try it »
%=x%=yx=x%yx=0Try it »


Example

Concatenar 2 o más Cadenas de Texto.
txt1="What a very";
txt2="nice day";
txt3=txt1+txt2;
The result of txt3 will be:
What a verynice day

Try it yourself »

Example

x=5+5;
y="5"+5;
z="Hello"+5;
The result of x,y, and z will be:
10
55
Hello5

Try it yourself »

Condicionantes

Operadores

Given that x=5, the table below explains the comparison operators:
OperatorDescriptionComparingReturnsTry it
==equal tox==8falseTry it »
x==5trueTry it »
===exactly equal to (equal value and equal type)x==="5"falseTry it »
x===5trueTry it »
!= not equalx!=8trueTry it »
!== not equal (different value or different type)x!=="5"trueTry it »
x!==5falseTry it »
> greater thanx>8falseTry it »
< less thanx<8trueTry it »
>= greater than or equal tox>=8falseTry it »
<= less than or equal tox<=8trueTry it »


Operadores Lógicos

Given that x=6 and y=3, the table below explains the logical operators:
OperatorDescriptionExample
&&and(x < 10 && y > 1) is true
||or(x==5 || y==5) is false
!not!(x==y) is true

Operador Condicional

Example

Example

If the variable age is a value below 18, the value of the variable voteable will be "Too young, otherwise the value ofvoteable will be "Old enough":
voteable=(age<18)?"Too young":"Old enough";

Try it yourself »


Sentencia IF


if (condition)
  {
  code to be executed if condition is true
  }

Example

Make a "Good day" greeting if the time is less than 20:00:
if (time<20)
  {
  x="Good day";
  }
The result of x will be:
Good day

Try it yourself »

Sentencia IF ELSE

Example

If the time is less than 20:00, you will get a "Good day" greeting, otherwise you will get a "Good evening" greeting
if (time<20)
  {
  x="Good day";
  }
else
  {
  x="Good evening";
  }
The result of x will be:
Good day

Sentencia IF ELSE ELSE


Example

If the time is less than 10:00, you will get a "Good morning" greeting, if not, but the time is less than 20:00, you will get a "Good day" greeting, otherwise you will get a "Good evening" greeting:
if (time<10)
  {
  x="Good morning";
  }
else if (time<20)
  {
  x="Good day";
  }
else
  {
  x="Good evening";
  }
The result of x will be:
Good day

Try it yourself »


Try it yourself »

Loops o Ciclos

For

You can write:

for (var i=0;i<cars.length;i++)
{
document.write(cars[i] + "<br>");
}

Try it yourself »

FOR IN

The For/In Loop

The JavaScript for/in statement loops through the properties of an object:

Example

var person={fname:"John",lname:"Doe",age:25};

for (x in person)
  {
  txt=txt + person[x];
  }

Try it yourself »


While


Example

while (i<5)
  {
  x=x + "The number is " + i + "<br>";
  i++;
  }

Try it yourself »

Do While


Example

do
  {
  x=x + "The number is " + i + "<br>";
  i++;
  }
while (i<5);

Try it yourself »

Breaks

for (i=0;i<10;i++)
  {
  if (i==3)
    {
    break;
    }
  x=x + "The number is " + i + "<br>";
  }

Try it yourself »


Errores

Manejo de Excepciones


Example

<!DOCTYPE html>
<html>
<head>
<script>
var txt="";
function message()
{
try
  {
  adddlert("Welcome guest!");
  }
catch(err)
  {
  txt="There was an error on this page.\n\n";
  txt+="Error description: " + err.message + "\n\n";
  txt+="Click OK to continue.\n\n";
  alert(txt);
  }
}
</script>
</head>

<body>
<input type="button" value="View message" onclick="message()">
</body>

</html>

Try it yourself »

Validaciones


Ejemplo de Validación


function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
  {
  alert("First name must be filled out");
  return false;
  }
}
The function above could be called when a form is submitted:

Example

<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>

Try it yourself »

HTML DOM

Documento de Referencia de HTML DOM http://www.w3schools.com/jsref/default.asp