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.

[ Hits: 44.175 ]

Por: Fabio Rizzo Matos em 19/11/2004 | Blog: http://www.vindula.com.br


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 módulos 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 diretório 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:
   tutorialjython
      WEB-INF
         classes
         lib

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:

Linux

  1. CATALINA_HOME=%CATALINA_HOME%\common\lib\servlet-api.jar
  2. export CATALINA_HOME

Windows XP

  1. Clique com o Botão direito do mouse no ícone do Meu Computador Propriedades;
  2. Em Propriedades do Sistema clique em Avançado;
  3. Em Variáveis do Ambiente, clique em Nova;
  4. 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, que realiza as chamadas de Servlet:
No diretório onde você instalou o Jython, existe um arquivo chamado "jython.jar". Vamos copiá-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

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Uso de java.lang.String
   3. Uso de javax.swing
   4. Uso do javax.servlet.http
   5. Conclusão
   6. Apêndice A1 - Instalando o Jython
   7. Apêndice A2 - Instalando o Tomcat
Outros artigos deste autor

ZPT - Zope Pages Templates

Customizando o layout do plone

Instalando o MySQL no Zope/Plone e criando uma pequena aplicação

Introdução ao Python (parte 1)

Criando formulários no Zope/Plone utilizando o banco de dados MySQL

Leitura recomendada

Introdução ao Python (parte 2)

Customizando o layout do plone

ZPT - Zope Pages Templates

Instalação básica do Plone 3 com Buildout no Linux

wxPython, uma biblioteca GUI multi-plataforma (parte 1)

  
Comentários
[1] Comentário enviado por leandro_hamid em 07/11/2007 - 11:53h

De ante mão quero agradecer e parabenizar por este artigo e por todos os outros artigos que tive a oportunidade de ler já que estou me iniciando na tecnologia Python e afins.

Mas, eu queria dizer que ao rodar script/exemplo soma.py foi exibido os seguintes erros:

Execução no Shell:

File "C:\jython2.2.1\Curso\soma.py", line 2
SyntaxError: Non-ASCII character '\xfa' in file C:\jython2.2.1\Curso\soma.py on
line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html f
or details

Execução via IDLE:


Traceback (most recent call last):
File "C:\jython2.2.1\Curso\soma.py", line 1, in <module>
import javax.swing as libswing
ImportError: No module named javax.swing

Execução via DOS:

File "C:\jython2.2.1\Curso\soma.py", line 2
SyntaxError: Non-ASCII character '\xfa' in file C:\jython2.2.1\Curso\soma.py on
line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html f
or details

Gostaria de saber o que pode ter acontecido, seria algo relacionado à configuração do Jython?Aguardo retorno.

PS: O jsdk e o jython estão devidamente instalados e rodando perfeiramente.

[2] Comentário enviado por leandro_hamid em 07/11/2007 - 14:04h

Boa tarde.

Para fechar esta questão de erros ao executar todo o código através do console o que eu notei é de alguam maneira o módulo não esta sendo importado, ou seka, erro an importação do módulo.

Isso ficou evidente a partir da execução do seguinte código:

>>> import java.lang.String as jls
>>> texto = jls("Bem Vindo ao Jython Usando Uma Biblioteca Java")
>>> texto = texto.toUpperCase()
>>> print texto

ao char o código no console (Dos e Shell) é exibido o seguinte erro:


C:\jython2.2.1\Curso>boasvindas.py
Traceback (most recent call last):
File "C:\jython2.2.1\Curso\boasvindas.py", line 1, in <module>
import java.lang.String as jls
ImportError: No module named java.lang.String

O que devo fazer para resolver este problema?

[3] Comentário enviado por leandro_hamid em 05/12/2007 - 11:11h

Poxa já tem um mês que postei as minhas dúvidas e nínguém respondeu, isso é que é querer ajudar hein!!!???


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts