Artículos
HTML

Notación sexagesimal en HTML

Creado: 31/Dic/2007 Actualizado: 16/May/2015

Un grado sexagesimal es la nonagésima parte de un angulo recto (90º). A su vez un grado sexagesimal se puede dividir en 60 minutos sexagesimales y cada uno de estos, a su vez, en 60 segundos sexagesimales.

De esta forma podríamos tener la siguiente notación sexagesimal:

13°30′238″

Si estamos componiendo una página HTML tendremos que saber como tratar los símbolos del minuto y segundo sexagesimal.

Los símbolos que utilizan para representarlos son la prima (‘) para el minuto sexagesimal y la doble prima (») para el segundo sexagesimal. Para realizar esta representación, el lenguaje HTML cuenta con dos entidades ′ para la prima y ″ para la doble prima. Hay que tener cuidado, ya que solo les diferencia la P mayúscula.

Recordar que las entidades van entre un ampersand (&) y un punto y coma (;).

De esta forma, si queremos representar el anterior valor sexagesimal, tendríamos el siguiente código HTML.

23º27′30″

Podéis leer más sobre el grado sexagesimal en la WIKI.

Código Fuente

Descárgate el código fuente de Notación sexagesimal en HTML
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star

Vídeos sobre HTML

Disfruta también de nuestros artículos sobre HTML en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test HTML

¿Te atreves a probar tus habilidades y conocimiento en HTML con nuestro test?

Test HTML
SVG

Dibujar una línea en SVG

Creado: 30/Dic/2007 Actualizado: 16/Dic/2025

Este es uno de los ejemplos más sencillos de SVG. Consiste en dibujar una línea dentro de un lienzo. Es para ello que explicaremos cómo poner una línea de color rojo que vaya de las coordenadas (10,10) a las (100,100).

Para poderlo llevar a cabo tendremos que utilizar la etiqueta <LINE/>. La cual no tiene mucho misterio ya que sus atributos representas las coordenadas x1,y1 e x2,y2 origen y destino de la línea. Quedándonos el siguiente código:

<LINE x1="10" y1="10" x2="100" y2="100"/>

Una última cosa que haremos será el dotar a la línea de un ancho mayor. En este caso utilizamos el atributo stroke-width y stroke para indicarle su color (el rojo).

<LINE stroke-width="5" stroke="red"/>

Visualizar el ejemplo | Descargar el código

Artículos
Java

SingleThreadModel, concurrencia en servlet obsoleta

Creado: 29/Dic/2007 Actualizado: 09/Ene/2015

Podríamos describir el ciclo de vida de un Servlet, someramente, de la siguiente forma

Si el Servlet sobre el que se ha realizado una petición no está cargado en el contenedor web, este crea una instancia de la clase Servlet, ejecuta su método init y posteriormente dará servicio con alguno de los métodos de servicio: doGet, doPost, doPut,…

En el caso que el Servlet esté cargado en el contenedor, cuando llega la petición, simplemente se encamina dicha petición a los métodos de servicio: doGet, doPost, doPut,…

Como podemos ver la diferencia es que en el segundo caso no se ejecuta el método de inicialización.

Los métodos de servicio de los Servlet se ejecutaran de forma concurrente por cada petición que llegue al contenedor web. Esto implica que, en el caso de existir recursos compartidos, como por ejemplo las variables de sesión, estos podrán ser accedidos al mismo instante.

Hasta el API Servlet 2.4 existía el interface SingleThreadModel. Dicho interface aseguraba que solo existiría una instancia en un momento concreto gestionando una petición. De tal manera que, si llegaba otra petición en ese momento, esta era encolada y procesada posteriormente.

public class ServletNoConcurrente extends HttpServlet implements SingleThreadModel{
...
}

Si bien, este interface ha sido declarado obsoleto debido a varios puntos:

  1. Producía degradamiento del sistema.
  2. No evitaba el tener que realizar controles de concurrencia sobre los recursos compartidos, ya que aunque en la petición se aseguraba un solo hilo, no implicaba que en otro punto se estuviese accediendo al mismo recurso.

Podéis leer más sobre el interface SingleThreadModel en el API de Java.

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
SVG

Círculos con borde en SVG

Creado: 28/Dic/2007 Actualizado: 16/Dic/2025

Lo primero que tendremos que hacer será dibujar un circulo. Para ello utilizamos la etiqueta <CIRCLE/>. Es bastante interesante que le eches un vistazo al ejemplo Dibujar un círculo en SVG para poder acometer la tarea.

Una vez tengamos nuestro circulo, simplemente tendremos que «abusar» de dos atributos:

  • stroke: indica el color del borde.
  • stroke-width: indica el ancho del borde.

Al final tendremos el siguiente código:

<circle cx="100" cy="100" r="50" stroke="blue"
   stroke-width="10" style="fill:cyan;"/>

Visualizar el ejemplo | Descargar el código

Artículos
Java

Mi primer servlet

Creado: 27/Dic/2007 Actualizado: 09/Ene/2015

En este ejemplo vamos a desarrollar nuestro primer Servlet, el cual nos de como respuesta la frase «Este es mi primer Servlet«.

Crear el Servlet

La clase Java que implemente el Servlet deberá de extender la clase javax.servlet.HttpServlet.

public class MiPrimerServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
  ...  	  	    
}

Dentro de esta clase tenemos que codificar, al menos, un método. El método doGet. Este método es el que se ejecuta cuando el Servlet recibe una petición del tipo GET (las más normales en Internet).

public class MiPrimerServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	...
	}  	  	    
}

El método método doGet recibe dos parámetros: HttpServletRequest y HttpServletResponse. Estos dos parámetros representan el stream de petición y el stream de respuesta. Y ambos llevan los datos intrínsecos a la petición o respuesta.

Por ejemplo, si la petición viene con parámetros, estos los encontraremos en el objeto HttpServletRequest. De igual manera, si queremos establecer el tipo de contenido de respuesta, lo podremos hacer manipulando el objeto HttpServletResponse.

Para nuestro ejemplo de Mi primer Servlet, vamos a centrarnos en el objeto HttpServletResponse. Y es que lo que vamos a realizar será un volcado de datos sobre el flujo de salida.

Lo primero que haremos será el definir una clase PrintWriter a la que asociar el flujo de salida.

PrintWriter out;
out = response.getWriter();

Una vez establecida esta relación, lo primero que haremos será indicar el tipo de contenido que queremos volcar. En este caso, será una página web. Es por ello que el contenido será “text/html”. En otros casos podremos devolver otros mime-types como “images/jpeg” para las imágenes JPEG o “application/x-gzip” para los ficheros ZIP.

response.setContentType("text/html");

Ahora solo nos quedará ir invocando al método .println con el texto que conforme la página web.

out.println("<html>");
out.println("<head><title>Mi Primer Servlet </title></head>");
out.println("<body>");
out.println("<h1>Este es mi Primer Servlet</h1>");
out.println("</body></html>");

Como se puede ver en el código, se vuelcan todas las etiquetas que conforman la página web HTML, body, title,… y nuestro texto.

Configurar el descriptor de despliegue

Una vez desarrollado y compilado nuestro servlet, tendremos que configurar el descriptor de despliegue. Este es el fichero web.xml. Dicho fichero indicará los servlets que hay desplegados en nuestra aplicación web y bajo que URL van a atender las peticiones.

Tendremos que definir dos etiquetas. La primera es la etiqueta servlet. Esta etiqueta sirve para definir el servlet. Tiene las siguientes etiquetas anidadas:

  • description, descripción del servlet
  • display-name, nome del servlet
  • servlet-class, clase del servlet. Con el nombre del paquete por delante.
<servlet>
  <description>Mi primer Servlet</description>
  <display-name>MiPrimerServlet</display-name>
  <servlet-name>MiPrimerServlet</servlet-name>
  <servlet-class> aulambra.com.lineadecodigo.j2ee.servlets.MiPrimerServlet </servlet-class>
</servlet>

Una vez definido el servlet, solo nos quedará realizar la asociación entre la URL que atenderá las peticiones del servlet y el servlet definido. Esto lo hacemos mediante la etiqueta servlet-mapping.

En ella encontramos dos etiquetas anidadas:

  • servlet-name, que es el nombre definido anteriormente.
  • url-pattern, que es el patrón de URL al que atenderá las petciones. En nuestro caso será /MiPrimerServlet.
<servlet-mapping>
  <servlet-name>MiPrimerServlet</servlet-name>
  <url-pattern>/MiPrimerServlet</url-pattern>
</servlet-mapping>

De esta manera, una vez desplegada la aplicación en un contenedor web, podremos acceder al servlet de la siguiente manera:

http://servidor:8080/nombre_app_web/MiPrimerServlet

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
SVG

Dibujar un círculo en SVG

Creado: 26/Dic/2007 Actualizado: 16/Dic/2025

Para completar esta sencilla tarea nos valdremos de la etiqueta SVG <CIRCLE/>. Vamos, que para pintar un circulo en SVG no nos tenemos que comer mucho la cabeza.

Y aprendernos una propiedad que es el atributo r. El cual viene a indicarnos el radio que va a tener el circulo.

<CIRCLE r=10/>

Otras tres propiedades que nos vendrán bien serán:

  • cx: coordenada X de la posición del circulo.
  • cy: coordenada Y de la posición del círculo.
  • fill: nos permitirá darle un color a nuestro circulo.
<CIRCLE cx="100" cy="100" fill="green"/>

O, para los más puristas, utilizaremos el style para darle el color al circulo:

<CIRCLE cx="100" cy="100" style="fill:green;"/>

Y recuerda que para poner el circulo necesitamos de un lienzo. Y, este, su tamaño y color lo delimita la propia etiqueta SVG.

<SVG width="300" height="300"> ... </SVG>

Visualizar el ejemplo | Descargar el código

Artículos
Java

Recibir parámetros en un Servlet

Creado: 25/Dic/2007 Actualizado: 09/Ene/2015

A la hora de enviar información a un Servlet tenemos dos formas: mediante el método GET y mediante el método POST. Existen una serie de diferencias entre pasarlos de una forma u otra:

Metodo POST. Este método solo esta accesible desde los formularios. Se envían los parámetros de forma implícita junto a la página, es decir, al pasar los parámetros, nosotros no vemos reflejado en ningún sitio qué parámetros son y cual es su valor.

Método GET. Este método envía los parámetros de forma explicita junto a la página, mostrando en la barra de navegación los parámetros y sus valores. Son esas largas cadenas que aparecen en algunas páginas en nuestra barra de navegación, del estilo: buscar?id=1806&valor=0987&texto=todo&…

Las cadenas toman el aspecto parametro1=valor1&parametro2=valor2&….&parametroN=valorN. Es decir es una concatenación a través de & de pares parámetro-valor.

Preparando la página de envío

La página de envío será una simple página HTML. Lo primero que tenemos que hacer es montar las URL de envío. La URL está compuesta por el nombre del servidor, en nuestro caso localhost, el puerto (8080), el nombre de la aplicación web, en nuestro caso «lineadecodigo_j2ee» y el nombre del servlet.

Así la URL quedará de la siguiente forma:

http://localhost:8080/lineadecodigo_j2ee/RecibirParametros

La URL la montaremos en un formulario:

<form action="http://localhost:8080/lineadecodigo_j2ee
       /RecibirParametros" method="post">
  <label for="texto1">Texto 1</label><input type="text" id="texto1" name="texto1" size=20><br>
  <label for="texto2">Texto 2</label><input type="text" id="texto2" name="texto2" size=20>
  <input type="submit" value="Enviar">
</form>

y en un enlace:

<a href="http://localhost:8080/lineadecodigo_j2ee/RecibirParametros?texto1=lineadecodigo&texto2=imagen">Mandar parametros por GET</a>

Codificando el Servlet

Lo primero que hay que saber es que la clase que implemente el Servlet extiende de HttpServlet. Así el código será el siguiente:

public class RecibirParametros extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
 ...
}

Dentro del Servlet hay dos métodos importantes: doGet y doPost. Estos métodos son los que atienden las peticiones POST y GET de la página, respectivamente.

public class RecibirParametros extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	...
	}  	
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	...			
	}   	  	    
}

Ambos métodos reciben como parámetros los datos de la petición HttpServletRequest y el flujo de la salida de respuesta HttpServletResponse.

Podemos codificar los dos métodos para hacer cosas diferentes si viene una petición POST u otra GET. O bien, como en nuestro caso, encaminar una petición a la otra para tratarlas de una misma forma.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	doPost(request,response);
}

Para recibir los parámetros nos vamos a apoyar en el objeto HttpServletRequest y en concreto en el método .getParameter(). En este método indicaremos el nombre del parámetro que queremos recuperar.

String parametro1 = request.getParameter("texto1");
String parametro2 = request.getParameter("texto2");		      	  	    

En este caso los parámetros se llaman texto1 y texto2.

Lo siguiente que haremos será montar la respuesta. Ahora nos apoyaremos en el objeto HttpServletResponse. Mediante el método .getWriter() obtendremos el stream de salida. Esto lo manejamos mediante el objeto PrintWriter.

PrintWriter out;
out = response.getWriter();

Antes de empezar a volcar texto en el flujo de salida tenemos que indicar el tipo de contenido que se vuelca. En este caso es «text/html». Es lo que se denomina content-type.

 response.setContentType("text/html");

Ahora solo quedará el ir volcando información mediante métodos .println(). El cual tiene como parámetro el texto a volcar a la página.

out.println("<html>");
out.println("<head><title>Enviar parametros a un Servlet</title></head>");
out.println("<body>");
out.println("<h1>Enviar parametros a un Servlet</h1>");
out.println("La primera palabra pasada como parámetro es <strong>" + parametro1 + "</strong><br>");
out.println("La segunda palabra pasada como parámetro es <strong>" + parametro2 + "</strong>");
out.println("</body></html>");

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
SVG

Rectángulo redondeado en SVG

Creado: 24/Dic/2007 Actualizado: 16/Dic/2025

Este ejemplo muestra cómo redondear los bordes de un rectángulo con el lenguaje SVG. La tarea es sencilla, ya que en la etiqueta básica RECT, que nos sirve para el dibujo de rectángulos, tenemos dos propiedades: rx y ry.

Ambas propiedades permiten redondear los bordes de la coordenadas X y las coordenadas Y.

Así podríamos tener el siguiente código:

<rect width="200" height="100" rx="20" ry="20"/>

Todos los bordes se redonderarian 20 pixels.

Ahora que tendríamos un efecto muy curioso si redondeásemos tanto los bordes cómo el ancho y alto del rectángulo. Consiguiendo círculos y elipses……

Circulo

<rect x="50" y="50" rx="100" ry="100" width="100" height="100"/>

Elipse

<rect x="50" y="50" rx="100" ry="200" width="200" height="100"/>

Visualizar el ejemplo | Descargar el código

Artículos
Java

Modificar valores de un fichero Properties

Creado: 23/Dic/2007 Actualizado: 02/Jun/2015

Los ficheros de propiedades nos sirven para guardar pares clave/valor que normalmente contienen información variable utilizada por nuestro programa. Estaríamos hablando de ficheros de configuración.

Así, a bote pronto, se me ocurren cosas como URLs a las que acudir por información, datos sobre el usuario/password, números que representen límites de nuestras ejecuciones,…

Los ficheros de propiedades se cargan en los arranques de las aplicaciones y es en este momento cuando pasamos a tener un objeto Properties, el cual contendrá los pares clave/valor.

Para realizar la carga de un fichero de propiedades haríamos lo siguiente:

try {
  is=new FileInputStream("fichero.prop");
  prop.load(is);
} catch(IOException ioe) {ioe.printStackTrace();}

Lo más normal es leer el contenido de los pares clave/valor, si bien, también podemos modificar el valor de las claves. Para modificar el valor de las claves simplemente tendremos que utilizar el método .setProperty sobre el objeto objeto Properties.

prop.setProperty("nombre", "ayudaenlaweb");
prop.setProperty("web", "http://ayudaenlaweb.blogspot.com");

Los parámetros del método son la clave y el valor de la clave. Así, en nuestro código las claves son nombre y email.

Es muy importante saber que al utilizar el método .setProperty no se modifica el valor que está almacenado en el fichero de propiedades.

Para ver la utilidad de los métodos podemos listar el valor de las claves antes y después de la modificación. El código final sería el siguiente:

// Listamos las propiedades
System.out.println("PROPIEDADES POR DEFECTO");
for (Enumeration e = prop.keys(); e.hasMoreElements(); ) {		 
  Object obj = e.nextElement();
   System.out.println(obj + ": "
    + prop.getProperty(obj.toString()));
}
		 
// Modificamos los valores
prop.setProperty("nombre", "ayudaenlaweb");
prop.setProperty("web", "http://ayudaenlaweb.blogspot.com");
		 
// Volvemos a listar los valores
System.out.println("PROPIEDADES MODIFICADAS");
for (Enumeration e = prop.keys(); e.hasMoreElements(); ) {		 
   Object obj = e.nextElement();
   System.out.println(obj + ": "
     + prop.getProperty(obj.toString()));
}

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
Artículos
Java

Cerrar un frame en AWT

Creado: 16/Dic/2007 Actualizado: 10/Ene/2015

Crear un frame con AWT es muy sencillo, simplemente tendremos que crear una instancia de la clase Frame y con un par de líneas más tendremos visible nuestra ventana.

Si todavía no has creado un frame en AWT te recomiendo que te leas «Crear un Frame con AWT».

Uno de los inconvenientes que tiene el crear un Frame sin más, es que este no atiende a ningún evento. Es por ello que por mucho que le demos en el aspa de cierre, el Frame no se va a cerrar. Claro está que esto no haría nuestra aplicación viable.

Es por ello que lo que vamos a hacer es controlar el evento windowClosing, para declarar que hay que hacer en la aplicación, dada esta situación.

Lo primero que tenemos que saber es que hay que utilizar la librería java.awt.event. Que es la que nos permite controlar estos eventos. A si que tendremos que importarla:

import java.awt.event.*;

Por otro lado tenemos que crear una clase del tipo WindowAdapter, en la cual crearemos el método que controla el evento windowClosing. Esto lo haremos dentro de nuestro método main, ya que no vamos a reutilizar esta clase en otro sitio, aunque podríamos hacerlo.

new WindowAdapter(){
  public void windowClosing(WindowEvent we){
    ...
  }
}

En el caso de que se produzca el evento windowClosing, lo que haremos será finalizar la aplicación, es por ello que utilizamos el objeto del sistema y su método exit.

System.exit(0);

Finalmente el código que controle el evento windowClosing quedará de la siguiente forma:

new WindowAdapter(){
  public void windowClosing(WindowEvent we){
    System.exit(0);
  }
}

La instancia de la clase WindowAdapter se la tenemos que asignar al Frame. Para ello utilizamos el método addWindowListener.

miFrame.addWindowListener(new WindowAdapter(){
  public void windowClosing(WindowEvent we){
    System.exit(0);
  }
});

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java