Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

Archive for June, 2008

Convertir un String a un tipo Document (xml data type) en java java dooooo

Anexo el siguiente codigo… que no es la gran cosa… pero estoy seguro que algun amigo sobre la red… dara tarde o temprano con esto… y lo mas seguro es que le sea de utilidad…

public Document Convert2Xml(String xml){
	Document document = null;

        try {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             DocumentBuilder builder = factory.newDocumentBuilder();
             document = builder.parse(new InputSource(new StringReader(xml)));
        }
        catch (Exception e) { Logger.log(Logger.DEBUG,"Imposible convertir cadena a tipo de dato XML: " + e.getMessage()); }
            return document;
        }

Los imports utilizados fueron los siguientes:

import tid.sms.util.Logger;
import tid.sms.bd.*;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import org.xml.sax.InputSource;
import java.util.regex.*;
import java.util.Hashtable;
import java.util.ArrayList;
import java.net.*;
import java.io.IOException;

Recibiendo XML mediante un Metodo POST

En algunas App sobre servidores de aplicacion suele existir la necesidad de una API XML, es decir una Interfaz XML que reciba y realice las acciones necesarias en la App que corre sobre el servidor. Esta API debera ser capaz de recibir peticiones XML por protocolo http en algún puerto, las peticiones seran por método POST. El servidor deberá realizar todas las acciones pertinentes y responder de forma SINCRONICA a la petición.

He implementado una interface asi mediante el siguiente jsp:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="java.net.*"%>
<%@page import="tid.sme.scl.SCL"%>
<%@page import="tid.sms.util.Logger"%>

<%
    // Aqui se lee el flujo de datos recibidos en el POST request
    BufferedReader in = request.getReader();
    String requestLine = in.readLine();

    if (requestLine == null) {
        out.println("No se ha ingresado una Peticion XML");
        Logger.log(Logger.ERROR, "No se ha ingresado una Peticion XML");

    } else {
       // Codigo que hara... algo con el flujo XML recibido
        String cadena_solicitud =  requestLine;

        SCL soul = new SCL();

        soul.AnalizeXmlFromServlet( soul.Convert2Xml(cadena_solicitud) );

        String cadena_retorno = soul.Response2Petit();

        // Lo que nos respondera nuestro servidor en base
        // al XML que le hemos mandado
        out.println( cadena_retorno );

    }
%>

Asi le he mandado el flujo XML de peticion a mi jsp ( tambien esto podria hacerce en un servlet.. )

curl -d @/home/envio/xmlprueba.xml http://rome/envioSMS/scl.jsp

Curl es algo asi como un navegador en linea de comandos… pero sin ser un navegador :p

Escribir un Java Servlet… de la manera mas elemental

Para escribir un java servlet no requieres herramientas como netbeans o eclipse… aunque debemos de aceptar que estan ayudan bastante…..

Aqui el codigo de un java Servlet explicado por partes:

import java.io.*;
import java.util.*;

// Paquetes javax requeridos
import javax.servlet.*;
import javax.servlet.http.*;

// Para implementar un servlet es requerido
// el hacer una clase que
// herede sus metodos de la clase HttpServlet,
// si queremos que nuestro
// Servlet tenga algun comportamiento caprichoso..
// entonces bastara con
// sobreescribir metodos de la clase heredada.

public class TestingServlet extends HttpServlet {
  public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {

// Las instancias de  PrintWriter nos ofrecen
// metodos para mandar flujos de texto a
// Clientes HTTP
    PrintWriter out = response.getWriter();

// Esto se imprimira en el navegador que consulte
// al servlet... este funcionara como STDOUT ahora!
    out.println("HTML tag");
    out.println("HTML tag");
    out.println("HTML tag");
    out.println("Welcome to the Servlet Testing Center");
    out.println("HTML tag");
// Aqui finaliza las lineas que se escriben
// sobre la navegador cliente

  }
}

Compilando el Servlet
Para esto solo bastara indicarle al compilador de java, la ruta en que se encuentran las clases requeridas para implementar un servlet

/usr/jvm/j2sdk1.4/bin/javac -classpath /opt/tomcat/common/lib/servlet.jar TestingServlet.java

Ahora el producto de esto es un servlet que podras deployar(este verbo no existe… son pendejadas mias), esta compilacion te ha generado un fichero TestingServlet.class que has de meter sobre el directorio de clases de una app web declarada en tu servidor Tomcat.

Nota adicional: Si deseas ahorrarte el parametro classpath a la hora de la compilacion… puedes optar por agregar tu directorio de librerias de tomcat al classpath como lo dicen aqui en Sonido libre

Que son las HTTP Requests y HTTP Responses?

Me he visto en la necesidad de meterme mas a java java do con Tomcat y JBOSS… por lo que empezare a documentar todas mis allasgos. Algunos de ustedes ya usan java… pero muchos de ustedes no la han usado para el desarrollo web. Empezaremos entonces por lo mas elemental…

Que son las HTTP Requests ?

Una transaccion inicia con una solicitud realizada por el cliente http (internet explorer, mozilla o curl) y finaliza con l respuesta del servidor HTTP. Una solicitud HTTP consiste de 3 componentes:

     •   Metodo——URI—Protocol/Version
     •   Encabezados de Solicitud (Request headers)
     •   El cuerpo del documento html (Entity body)

Un ejemplo de solicitud HTTP es la siguiente:

GET /servlet/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/ch8/SendDetails.htm
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
LastName=Franks&FirstName=Michael

El metodo —URI—version de protocolo aparece sobre la primera linea de la solicitud.

GET /servlet/default.jsp HTTP/1.1

Donde GET es el metodo de solicitud, /servlet/default.jsp representa la URI y la version de protocolo es HTTP/1.1

La URI especificara un recurso de Internet. Una URI es usualmente interpretedo en base al root relativo del directorio del sevirdor.

Y los encabezados de solicitud serian lo siguiente:

Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/ch8/SendDetails.htm
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate

Y finalmente… la entidad cuerpo de nuestra solicitud HTTP:

LastName=Franks&FirstName=Michael

Existen mas metodos para request HTTP… cada uno con un peculiar proposito… puedes ver mas info de ellos en esta liga –> http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

En un munto utopico toda solicitud tiene una Response — HTTP Responses
Similar a la solicitud HTTP, una respuesta HTTP consite de tres partes:

    •    Protocolo—Codigo de Estado——Descripcion
    •    Encabezados de respues (Response headers)
    •    Un Cuerpo (Entity body)

El siguiente es un ejemplo de respuesta HTTP:

HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 1998 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
Content-Length: 112

Welcome to Brainy Software y aqui algo de html tags si lo deseas...

La primera linea del encabezado de respuesta es similar al encabezado de solicitud. Y los encabezados de respuesta contiene similar a los encabezados de solicitud.

La entidad Cuerpo sera el texto o la respueta HTML que se da en base a la solicitud. Los encabezados y el cuerpo son separados por una secuenia de CRLFs.

Maximo numero de fibonacci de 20 digitos

JAJAJA la pregunta de los 64,000

Resolve correctamente este problema y tendrás la oportunidad de formar parte de nuestros proyectos on site para las compañías de las mejores ligas. “Sea X el máximo número de Fibonacci con exactamente 20 dígitos” Envíanos tu CV a mexico@globant.com; cuéntanos como encontraste X.

pianodaemon@mayte:~$ python fib.py
83621143489848422977

Aqui el programita en python que hace la maravilla (de 5 a 10 minutos tomo hacerlo… mientras mi esposa preparaba el desayuno..).

#!/usr/bin/python
def fib(n):    # write Fibonacci series up to n
	"""Print a Fibonacci series up to n."""
	lista_resultados=[]
	a, b = 0, 1
	while b < n:
		lista_resultados.append(b)
		a, b = b, a+b
	return lista_resultados

lista_numero_veinte_digitos = [ ]
for numero in fib(999999999999999999999999999999999):
	numero_cadena = str(numero)
	if len(numero_cadena) == 20:
		lista_numero_veinte_digitos.append(numero_cadena)
print lista_numero_veinte_digitos[-1]
Entradas mas recientes »