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.
Parte 4: 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:
(código Java)
"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>");
}
}
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
- CATALINA_HOME=%CATALINA_HOME%\common\lib\servlet-api.jar
- export CATALINA_HOME
Windows XP
- Clique com o Botão direito do mouse no ícone do Meu Computador Propriedades;
- Em Propriedades do Sistema clique em Avançado;
- Em Variáveis do Ambiente, clique em Nova;
- 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>
<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>
<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>")
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áginas do artigo
1. Introdução2. 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
Customizando o layout do plone
Criando formulários no Zope/Plone utilizando o banco de dados MySQL
Leitura recomendada
Introdução ao Python (parte 2)
Instalando o MySQL no Zope/Plone e criando uma pequena aplicação
FreeBSD + Zope/Plone, uma idéia frustrante?
Solução de Intranet Vindula 1.1 - Instalação no Ubuntu 10.04 LTS
Comentários
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?
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?
Poxa já tem um mês que postei as minhas dúvidas e nínguém respondeu, isso é que é querer ajudar hein!!!???
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.