Desenvolvimento - Java

Utilizando as bibliotecas do Java usando o Jython

Neste tutorial, iremos aprender como implementar um HttpServlets utilizando o Jython (Python), dentro de um container do Tomcat. Também aprenderemos como utilizar as bibliotecas nativas do Java dentro do Jython, trabalhando seus atributos, utilizando exemplos explicativos.

por Fábio Rizzo Matos



1 - Introdução

Neste tutorial, iremos aprender como implementar um HttpServlets utilizando o Jython (Python), dentro de um container do Tomcat. Também aprenderemos como utilizar as bibliotecas nativas do Java dentro do Jython, trabalhando seus atributos, utilizando exemplos explicativos.

É necessário para a realização deste artigo que se tenha instalado o Java Development Kit, Instalado o Jython (no apêndice A1 ensino a instalar o Jython), tenha instalado o Tomcat 5 (Informações no apêndice A2) e que se tenha noções de uso do Python.

2 - Trabalhando Bibliotecas Java

No Jython é possível nos trabalharmos com class nativas do Java. Podemos utilizar as class das mais variadas formas. Vou mostrar alguns exemplos de uso de algumas class.

2.1 - Uso de java.lang.String

Neste exemplo, vamos aprender como utilizarmos a class String do package java.lang. Para maiores detalhes/propriedades de uso desta class acesse:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html

Vamos Iniciar o uso do Jython. Digite jython em sua console(prompt no Windows). Você deverá ver algo semelhante ao abaixo:


Jython 2.1 on java1.5.0 (JIT: null)
Type "copyright", "credits" or "license" for more information.
>>>

A mensagem acima indica que estamos dentro do Jython Interativo, onde podemos digitar os comandos do Jython e ter a sua execução em tempo real. Vamos importar o package java.lang e a classe String, dando a eles o alias de jls (um acrônimo de java.lang.String)

>>> import java.lang.String as jls

Agora vamos definir uma variável texto que irá conter uma string utilizando o java.lang.String.

>>> texto = jls("Bem Vindo ao Jython Usando Uma Biblioteca Java")

Vamos utilizar a função da class String toUpperCase(), que converte a String para caixa alta.

>>> texto = texto.toUpperCase()

Veja que temos a variável texto, e vamos armazenar dentro dela o seu valor mais a utilização da função sobre ela .toUpperCase(). Agora vamos imprimir o conteúdo da variável texto:


>>> print texto
BEM VINDO AO JYTHON USANDO UMA BIBLIOTECA JAVA

Usando o comando print, temos visualizado na tela o conteúdo da variável texto. Este é apenas um dos exemplos que podemos fazer utilizando as class do Java dentro do Jython, trabalhando a linguagem Python.

Podemos visualizar todas as funções que determinada class do Java tem utilizando o comando dir(pacoteimportado). Veja exemplo abaixo:


>>> dir (jls)
["CASE_INSENSITIVE_ORDER", "__init__", "bytes", "codePointAt", "codePointBefore"
, "codePointCount", "compareTo", "compareToIgnoreCase", "concat", "contains", "c
ontentEquals", "copyValueOf", "endsWith", "equalsIgnoreCase", "format", "getByte
s", "getChars", "indexOf", "intern", "lastIndexOf", "matches", "offsetByCodePoin
ts", "regionMatches", "replace", "replaceAll", "replaceFirst", "split", "startsW
ith", "substring", "toCharArray", "toLowerCase", "toUpperCase", "trim", "valueOf
"]

Nesse caso, nós vimos o conteúdo do package jls que importamos no inicio do exemplo, e pudemos ver todas as funções que podem ser usadas em conjunto com o Jython. Outro exemplo é o da função .split() da class String:


>>> texto.split()
["BEM", "VINDO", "AO", "JYTHON", "USANDO", "UMA", "BIBLIOTECA", "JAVA"]

Esta função retorna para nós uma lista de valores extraidos de uma String. E outro exemplo que podemos citar é o uso da função .substring(x,y). Veja exemplo:


>>> texto2 = jls("Utilizando a Biblioteca String do Java Lang")
>>> texto2.substring(2,3)
"i"
>>> texto2.substring(2)
"ilizando a Biblioteca String do Java Lang"
>>> texto2.substring(1)
"tilizando a Biblioteca String do Java Lang"
>>> texto2.substring(0)
"Utilizando a Biblioteca String do Java Lang"
>>> texto2.substring(0,11)
"Utilizando "
Exemplo Completo de uso de java.lang.String.
>>> import java.lang.String as jls
>>> texto = jls("Bem Vindo ao Jython Usando Uma Biblioteca Java")
>>> texto = texto.toUpperCase()
>>> print texto
BEM VINDO AO JYTHON USANDO UMA BIBLIOTECA JAVA
>>>
>>> dir (jls)
["CASE_INSENSITIVE_ORDER", "__init__", "bytes", "codePointAt", "codePointBefore"
, "codePointCount", "compareTo", "compareToIgnoreCase", "concat", "contains", "c
ontentEquals", "copyValueOf", "endsWith", "equalsIgnoreCase", "format", "getByte
s", "getChars", "indexOf", "intern", "lastIndexOf", "matches", "offsetByCodePoin
ts", "regionMatches", "replace", "replaceAll", "replaceFirst", "split", "startsW
ith", "substring", "toCharArray", "toLowerCase", "toUpperCase", "trim", "valueOf
"]
>>> texto.split()
["BEM", "VINDO", "AO", "JYTHON", "USANDO", "UMA", "BIBLIOTECA", "JAVA"]
>>> texto2 = jls("Utilizando a Biblioteca String do Java Lang")
>>> texto2.substring(2,3)
"i"
>>> texto2.substring(2)
"ilizando a Biblioteca String do Java Lang"
>>> texto2.substring(1)
"tilizando a Biblioteca String do Java Lang"
>>> texto2.substring(0)
"Utilizando a Biblioteca String do Java Lang"
>>> texto2.substring(0,11)
"Utilizando "

2.2 - Uso de javax.swing

Podemos trabalhar outras bibliotecas do Java. Vamos ver um exemplo de uso da biblioteca javax.swing, que tem sua documentação no endereço:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/package-frame.html

Vamos Iniciar o uso do Jython. Digite jython em sua console(prompt no Windows). Você deverá ver algo semelhante ao abaixo:


Jython 2.1 on java1.5.0 (JIT: null)
Type "copyright", "credits" or "license" for more information.
>>>

Esse porém é o modo interativo do Jython, onde se tem a resposta do comando on-the-fly. Porém em alguns casos esse tipo de interação pode atrapalhar. Podemos colocar os códigos dentro de arquivos textos comuns com a extensão .py. Para executarmos o comando fazermos em sua console(prompt no Windows) o comando:

jython nomedoarquivo.py

Esse procedimento inicia o seu programa em Jython. Vamos agora fazer um pequeno programa utilizando as bibliotecas do javax.swing. Crie um arquivo chamado soma.py. Dentro desse arquivo digite o seguinte código:


import javax.swing as libswing
pnumero = libswing.JOptionPane.showInputDialog("Digite um Numero Inteiro: ")
snumero = libswing.JOptionPane.showInputDialog("Digite um Numero Inteiro: ")
soma = int(pnumero) + int(snumero)
libswing.JOptionPane.showMessageDialog(None, "A soma eh %d " % soma)

Salve o código acima e rode:

$ jython soma.py 
O resultado seria:


Ilustração 1 - Digitando o valor de 15


Ilustração 2 - Digitando o valor de 30


Ilustração 3 - Caixa de Mensagem da Soma Este é um pequeno exemplo de como podemos trabalhar as bibliotecas gráficas do swing dentro do Jython utilizando o Python. Vamos entender o código:

import javax.swing as libswing
Importa as bibliotecas do swing

pnumero = libswing.JOptionPane.showInputDialog("Digite um Numero Inteiro: ")
snumero = libswing.JOptionPane.showInputDialog("Digite um Numero Inteiro: ")

Define as variáveis, chamando a função JoptionPane.showInputDialog("mensagem") da biblioteca swing e armazenando a resposta do utilizador.

soma = int(pnumero) + int(snumero)

Soma o valor das duas variáveis. O int(pnumero) e o int(snumero) é utilizado para converter o valor da variável em inteiro para realizarmos a soma. Por padrão o valor armazenado fica no formato String, e se não fosse feita a conversão teriamos o seguinte resultado:


Ilustração 4 - Resultado da Soma Concatenado

O valor da soma seria a concatenação dos dois valores e não a soma em sí. Por isso a importância da conversão.

libswing.JOptionPane.showMessageDialog(None, "A soma eh %d " % soma)
Este trecho do código mostra na tela através do componente JOptionPane.showMessageDialog(None, "mensagem") o valor da variável soma. Como podem ver, o código é simples de se entender e muito simples.

2.3 - Uso do javax.servlet.http

Um recurso muito utilizado para quem trabalha com Java são os Servlets. Segundo o site GUJ (www.guj.com.br) no link (http://www.guj.com.br/java.artigo.9.1.guj) a definição de Servlets é:

"Servlets são modulos que ampliam a funcionalidade de servidores baseados em requisições/respostas. Web servers são o exemplo típico, para o qual são usado um tipo especializado de Servlets, os HttpServlets. Um Servlet, por exemplo, pode receber dados em um form HTML por meio de uma requisição HTTP, processar os dados, atualizar a base de dados de uma empresa, e gerar alguma resposta dinamicamente para o cliente que fez a requisição."

Porém esse tipo de módulo era de utilização no JDK da Sun (Java), porém com a chegada do Jython, tudo mudou. Para a realização desta parte do artigo, temos que ter instalado o Tomcat. (Maiores Informações no apêndice A2).

Para iniciarmos o desenvolvimento do httpServlets em Jython, vamos primeiro mostrar um httpServlets feito em java, para podermos ilustrar a facilidade de se criar um Servlet em Jython (Python). Antes, vamos criar dentro do %CATALINA_HOME%\webapps um diretorio chamado tutorialjython. E dentro do diretório tutorialjython crie um sub-diretório WEB-INF. Dentro dele crie um diretório chamado classes e outro chamado lib. A Estrutura de diretórios vai ficar assim:

Crie um arquivo chamado ServletJava.java dentro da pasta classes com o seguinte conteúdo:


Código Java

import java.io.*;
import javax.servlet.*; 
import javax.servlet.http.*;

public class ServletJava extends HttpServlet { 
	public void doGet (HttpServletRequest request, 
		HttpServletResponse response) throws ServletException, IOException { 
			doPost(request, response); 
	} 
	public void doPost (HttpServletRequest request, 
		HttpServletResponse response) 
		throws ServletException, IOException { 
		response.setContentType ("text/html"); 
		PrintWriter toClient = response.getWriter(); 
		toClient.println ("<html><head><title>ServletJava</title>" + 
					"<body><h1>Este  eh um Servlet feito em 
Java</h1></body></html>");
		
	} 
} 

Defina a variável de ambiente CATALINA_HOME. Veja:

1 - Linux
a. - CATALINA_HOME=%CATALINA_HOME%\common\lib\servlet-api.jar
b. - export CATALINA_HOME

2 - Windows XP
a. - Clique com o Botão direito do mouse no ícone do Meu Computador Propriedades;
b. - Em Propriedades do Sistema clique em Avançado;
c. - Em Variáveis do Ambiente, clique em Nova;
d. - Adicione C:\Programas\Tomcat 5.5\common\lib\servlet-api.jar ou o diretório onde você instalou o tomcat.

Compile o seu class utilizando:

javac ServletJava.java

Agora, dentro do diretório tutorialjython\WEB-INF crie um arquivo chamado web.xml com o seguinte conteúdo:

- <web-app>
- <servlet>
  <servlet-name>ServletJava</servlet-name> 
  <servlet-class>ServletJava</servlet-class> 
  </servlet>
- <servlet-mapping>
  <servlet-name>ServletJava</servlet-name> 
  <url-pattern>/ServletJava</url-pattern> 
  </servlet-mapping>
  </web-app>
Salve o arquivo. Reinicie o Tomcat. Para visualizar o Servlet Criado acesse:

http://localhost:8080/tutorialjython/ServletJava

Veja abaixo a saída deste Servlet:

A Criação de Servlets usando o Jython se resume a uma biblioteca chamada PyServlet (http://www.jython.org/docs/javadoc/org/python/util/PyServlet.html), que realiza as chamadas de Servlet.

No diretório onde você instalou o Jython, existe um arquivo chamado jython.jar. Vamos copia-lo para dentro do diretório tutorialjython\WEB-INF\lib .Agora vamos fazer um adendo no conteúdo do arquivo web.xml, instruindo-o sobre como o Tomcat invocar a biblioteca PyServlet ao receber chamadas para arquivos *.py.

O arquivo web.xml vai ficar assim:

- <web-app>
- <servlet>
  <servlet-name>ServletJava</servlet-name> 
  <servlet-class>ServletJava</servlet-class> 
  </servlet>
- <servlet>
  <servlet-name>ServletJython</servlet-name> 
  <servlet-class>org.python.util.PyServlet</servlet-class> 
  <load-on-startup>1</load-on-startup> 
  </servlet>
- <servlet-mapping>
  <servlet-name>ServletJava</servlet-name> 
  <url-pattern>/ServletJava</url-pattern> 
  </servlet-mapping>
- <servlet-mapping>
  <servlet-name>ServletJython</servlet-name> 
  <url-pattern>*.py</url-pattern> 
  </servlet-mapping>
  </web-app>

Salve o arquivo. Criaremos agora um Servlet equivalente ao Servlet que utilizamos no primeiro exemplo. Crie um arquivo dentro do diretório tutorialjython chamado ServletJython.py com o seguinte conteúdo:


from javax.servlet.http import HttpServlet 
class ServletJython (HttpServlet): 
   def doGet(self,request,response): 
      self.doPost (request,response) 
   def doPost(self,request,response): 
      toClient = response.getWriter() 
      response.setContentType ("text/html") 
      toClient.println ("<html><head><title>ServletJython</title>" +
                        "<body><h1>Este  eh um Servlet feito em 
Jython</h1></body></html>") 

Salve o arquivo. Reinicie o Tomcat. Para visualizar o Servlet Criado acesse:

http://localhost:8080/tutorialjython/ServletJython.py

3 - Conclusão

Como vimos no artigo, é muito fácil trabalhar as bibliotecas Java no Jython, podendo desenvolver muitas das tecnologias Java com a facilidade do Python. Fique sempre de olho no site www.jython.org, pois ele sempre tem muita novidade a respeito.

Precisando tirar dúvidas, entre em contato comigo através de:

fabiorizzo@gmail.com
www.fabiorizzo.tk

Até mais

Fabio Rizzo Matos Apêndices

A1 - Instalando o Jython

Jython é uma implementação de alto nível do Python escrito 100% em Java. Isso permite que você escreva códigos em Python e os faça rodar dentro de qualquer JVM (Java Virtual Machine).

Ele ainda permite que você escreva código Java utilizando recursos do Python, se integrando perfeitamente.

O Jython nada mais é que um arquivo .class do Java. Essa é uma vantagem quando queremos rodar aplicativos Python em lugares onde não existe o Python instalado, somente um JVM e ainda por cima, permite popularizar a distribuição de aplicativos Python.

A página do Jython é http://www.jython.org e é uma excelente fonte de informação.

Para instalarmos o Jython é necessário ter o JSDK, pois o Jython utiliza o javac para compilar os programas em Python para Java.

1 - O endereço para a instalação esta em:
http://java.sun.com/j2se/1.5.0/download.jsp

2 - Depois acesse o site do Jython e baixe o Jython-21 que está disponível em:
http://sourceforge.net/project/showfiles.php?group_id=12867&release_id=67726

3 - Você terá em mão um arquivo jython_21.class.

4 - Entre em sua console , ou no prompt do Windows, digite:

$ java jython_21 (sem colocar no final o .class)

5 - Vai aparecer um wizard pedindo algumas opções, se ele não detectar automaticamente o seu SO, selecione-o na lista, selecione a opção "all" para instalar todos os pacotes e clique em "go" para realizar a instalação.

É uma instalação muito simples, bem nos moldes do Windows, estilo NNF (next, next, finish). Depois de instalado, basta acessar o o diretório onde foi instalado o seu Jython e executar na console:

$ jython

Você deverá ver uma janela como esta abaixo:

Jython 2.1 on java1.5.0 (JIT: null)
Type "copyright", "credits" or "license" for more information.
>>>

Para testarmos o uso do Jython podemos fazer o seguinte no console:

>>> print "Olá Jython"
Olá Jython

Você pode setar o PATH para o jython. Veja:

1 - Linux
a. - PATH=$PATH:$HOME/bin:/path/para/jython
b. - export PATH

2 - Windows XP
a. - Clique com o Botão direito do mouse no ícone do Meu Computador Propriedades;
b. - Em Propriedades do Sistema clique em Avançado;
c. - Em Variáveis do Ambiente, clique em Path;
d. - Adicione ao final do Path o caminho para o diretório do Jython.


Ilustração 5 - Editando as variáveis do sistema

A2 - Instalando o Tomcat

Para se Trabalhar com Servlets e JSP (Java Server Pages), é necessário que se tenha o software Tomcat instalado. Segundo o site www.portaljava.com.br a descrição do Tomcat é:

"O software Tomcat, desenvolvido pela Fundação Apache, permite a execução de aplicações para web. Sua principal característica técnica é estar centrada na linguagem de programação Java, mais especificamente nas tecnologias de Servlets e de Java Server Pages (JSP). Esta abordagem rivaliza, por exemplo, com a usada pela Microsoft com o ASP (baseada na linguagem Visual Basic). A Fundação Apache, mais conhecida pelo seu servidor web de mesmo nome, permite, como no caso do servidor Apache, que o Tomcat seja usado livremente, seja para fins comerciais ou não. O Tomcat está escrito em Java e, por isso, necessita que a versão Java 2 Standard Edition (J2SE) esteja instalada no mesmo computador onde ele será executado. No entanto, não basta ter a versão runtime de Java instalada, pois o Tomcat necessita compilar (e não apenas executar) programas escritos em Java. O projeto Jakarta da Fundação Apache, do qual o subprojeto Tomcat é o representante mais ilustre, tem como objetivo o desenvolvimento de soluções código aberto baseadas na plataforma Java."

A instalação do Tomcat pode ser visualizada nos seguinte endereço:

http://www.mhavila.com.br/topicos/java/tomcat.html

Página muito completa, onde é possível encontrar muita informação sobre o Tomcat.

Fábio Rizzo Matos

Fábio Rizzo Matos - Membro ativo da Comunidade Python/Zope e Plone, para qual escreve diversos artigos. Arquiteto de Software e Desenvolvedor, trabalha atualmente na ThreePointsWeb (contato@threepointsweb.com), empresa especializada em desenvolvimento e treinamentos Python, Zope e Plone, realizando treinamentos e consultorias em Plone. Mantenedor do site http://www.fabiorizzo.com além de responsável pela tradução de conteúdo.