Archive for June, 2008
June 10, 2008 a las 5:55 pm por Edwin Plauchu · Archivado en Programacion
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;
June 10, 2008 a las 5:06 pm por Edwin Plauchu · Archivado en Programacion
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
June 8, 2008 a las 8:59 pm por Edwin Plauchu · Archivado en Programacion
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
June 8, 2008 a las 3:05 pm por Edwin Plauchu · Archivado en Programacion
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.
June 8, 2008 a las 11:13 am por Edwin Plauchu · Archivado en Programacion
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]