quinta-feira, 19 de junho de 2008

Tomcat/ JSP + Servlets (No Linux)

Tomcat/ JSP + Servlets (No Linux)

Introdução
Este material foi criado para além de reforçar alguns conceitos, ajudar no momento em que for necessário configurar novamente um ambiente no TomCat, pois toda vez que volto a estudar Java p/ web, acabo apanhando um pouco para configurar o ambiente, definir contextos, deployment applications, invokers e etc.
Agora com tudo que preciso neste blog, não terei mais este tipo de problema. Espero que além disso possa ajudar alguns iniciantes no desenvolvimento web com java. Caso alguém tenha algo a acrescentar neste post, fiquem a vontade para inserir comentários e eu posso melhorar um pouco esse tutorial.

Instalando o TomCat
Para a instalação do Tomcat, basta baixar a versão desejada do tomcat e descompactar em alguma pasta. Uma vez que o tomcat foi descompactado, o serviço pode ser iniciado através de scripts disponíveis no diretório bin do tomcat.

No exemplo que será mostrado, foi utilizada a versão 6 do tomcat que implementa as JSRs JSP 2.1 e Servlet 2.5. Para maiores informações a respeito das especificações implementadas pelas versões do TomCat disponíveis, siga este link.

Uma vez instalado o tomcat, para poder iniciar o serviço, é necessário configurar algumas variáveis de ambiente conforme descrito abaixo:


# configuracoes para o java
JAVA_HOME=/usr/java/jdk1.5.0_15

# configuracoes para o tomcat
CATALINA_HOME=/tomcat/apache-tomcat-6.0.16


Neste caso, as variáveis acima foram configuradas no /etc/profile para que as variáveis estejam disponíveis para todos os usuários da máquina.

Abaixo segue um exemplo de execução do script para iniciar o tomcat e o resultado produzido:


[root@tofux bin]# ./catalina.sh start
Using CATALINA_BASE: /tomcat/apache-tomcat-6.0.16
Using CATALINA_HOME: /tomcat/apache-tomcat-6.0.16
Using CATALINA_TMPDIR: /tomcat/apache-tomcat-6.0.16/temp
Using JRE_HOME: /usr/java/jdk1.5.0_15


Obs.: Irei referenciar o diretório root do catalina através da váriavel $CATALINA_HOME ao longo deste tutorial.

Agora que o tomcat foi iniciado, pode-se acessar através do browser a seguinte url:
http://localhost:8080

A página abaixo deverá aparecer:


Caso a imagem não aparecer, deve-se verificar se não existe algum firewal bloqueando a porta 8080, e também é importante verificar se as variáveis de ambiente foram configuradas corretamente. Caso ainda não funcionar, vale a pena dar uma verificada no arquivo de log, localizado em logs/catalina.out

Estrutura básica do TomCat
Abaixo vamos conhecer o básico da estrutura do TomCat através da sua organização de diretórios:


[root@tofux apache-tomcat-6.0.16]# ll
total 88
drwxr-xr-x 2 root root 4096 2008-06-18 08:44 bin
drwxr-xr-x 2 root root 4096 2008-06-18 09:03 conf
drwxr-xr-x 2 root root 4096 2008-06-18 08:44 lib
-rw-r--r-- 1 root root 37951 2008-01-28 20:39 LICENSE
drwxr-xr-x 2 root root 4096 2008-06-18 09:03 logs
-rw-r--r-- 1 root root 556 2008-01-28 20:39 NOTICE
-rw-r--r-- 1 root root 7508 2008-01-28 20:39 RELEASE-NOTES
-rw-r--r-- 1 root root 6681 2008-01-28 20:39 RUNNING.txt
drwxr-xr-x 2 root root 4096 2008-06-18 08:44 temp
drwxr-xr-x 7 root root 4096 2008-01-28 20:39 webapps
drwxr-xr-x 3 root root 4096 2008-06-18 09:03 work


/bin - scripts para iniciar ou parar o serviço do tomcat
/conf - arquivos de configuração e um dos principais arquivos: server.xml
/logs - logs do servidor
/webapps - aplicações

Obs.: No TomCat6 tive que criar um diretório dentro do conf para configuração de contextos de aplicação.
O diretório criado foi o seguinte ( conf/Catalina/localhost )
Colocar uma configuração de contexto dentro do webapps, não funcionou para mim. Não gerou nem log!

Aplicação WEB no TomCat

Uma aplicação web no TomCat é definida como uma hierarquia de diretórios e arquivos num formato padrão que podem ser distribuídos normalmente (com arquivos soltos), ou empacotado em um WAR (Web Archive). O war geralmente é utilizado quando sua aplicação vai ser instalada em algum servidor. A opção sem war é a mais utilizadas para o desenvolvimento.

A raíz da sua estrutura de diretórios é o seu Document Root. Para distribuir sua aplicação, será necessário configurar um contexto (definindo um Context path), de modo que o context path que for atribuído, irá determinar a URI utilizada para acessar o sistema.
Conforme o próprio exemplo da página oficial do Tomcat, caso um context path for definido como /catalog, a uri para acessar o sistema será /catalog/index.html.

Caso estivermos utilizando a configuração padral (localhost:8080), poderíamos acessar com a seguinte url: http://localhost:8080/catalog/index.html

Criando uma aplicação no TomCat

Independente da forma que o contexto for criado, é importante seguir o layout padrão de diretórios do Tomcat. Este padrão é o mesmo utilizado para os arquivos WAR, já descritos anteriormente. O TomCat usa esta estrutura para executar sua aplicação. Abaixo segue o modelo de diretórios:

src/ [local para organizar os fontes da aplicação. arquivos .java]
web/ [arquivos web]
WEB-INF/web.xml [descritor da aplicação]
WEB-INF/classes/ [local dos binários da aplicação - classes geradas]
WEB-INF/lib/ [local para os pacotes externos]
*.html, *.jsp e etc [estes arquivos devem ser visíveis para o client]

Obs.: crie um arquivo index.html dentro de web, e digite alguma coisa como um Hello World para testarmos a aplicação posteriormente.
Obs II: o conteúdo do diretório WEB-INF não é visível para o cliente, portanto, páginas html, jsp e etc, não devem ser colocadas neste diretório.

Para o exemplo que será estudado, criei toda a estrutura da aplicação web descrita acima, dentro de um diretório chamado /openfinance (que é o nome do projeto que estou desenvolvendo).

Configurando um contexto de aplicação no TomCat

As aplicações no TomCat podem ser criadas de maneiras distintas, conforme exibido abaixo:

1 - criação do contexto diretamente no arquivo conf/server.xml:
Este não é o modo mais recomendado por misturar as configurações da aplicação com as configurações do servidor, além de não oferecer o recurso de deployment automático. Isso inviabiliza este modo de configuração, uma vez que a cada alteração realizada no server.xml, o TomCat deverá ser reiniciado.

2 - utilizar o recurso de Deployment Automático [ Este será abordado neste tutorial ]:
Esta é uma forma que oferece vantagens como separar as configurações da aplicação das configurações do servidor, além de oferecer o deployment automático, não implicando em ter que reiniciar o servidor a cada alteração na aplicação.

3 - utilização do Web Application Archive(WAR):
Esta forma também é bastante flexível, permitindo deployment automático da aplicação, além de oferecer modularidade. Uma vez criada a aplicação, a mesma (seguindo a padronização de diretórios necessária) pode ser compactada junto com o arquivo META-INF/context.xml que descreverá a aplicação, e ser distribuída livremente entre servidores TomCat (Somente a partir da versão 5). Criado o war, basta copiar o mesmo para o diretório de aplicações padrão do TomCat (app).

Neste documento, vou demonstrar a criação de um contexto utilizando-se do deployment automático da aplicação, que é o melhor modo para se desenvolver a aplicação. Para distribuir a aplicação acredito que o melhor é gerar um WAR(será visto no final).

Edite um arquivo com o nome de sua aplicação (no meu caso chamei de openfinance.xml)

<context path="/openfinance" docbase="/devel/openfinance/web" reloadable="true" crosscontext="true" debug="3" privileged="true">
</context>


Após criar o arquivo, basta colocar o mesmo no diretório $CATALINA_HOME/conf/Catalina/localhost e tentar acessar sua aplicação através do browser conforme o exemplo abaixo:

http://localhost:8080/openfinance (no caso do meu projeto - repare no context path)

Recebeu um erro não é mesmo?!!?!?!?

Pois é, falta descrever sua aplicação através de um deployment descriptor que criamos anteriormente (WEB-INF/web.xml)
Abra este arquivo e digite o seguinte conteúdo descrito abaixo (isso é o mínimo que um deployment descriptor precisa):


<web-app xmlns="http://java.sun.com/xml/ns/javaee" xsi="http://www.w3.org/2001/XMLSchema-instance" schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>Desenvolvimento</display-name>
&ltdescription>
Descritor do contexto de desenvolvimento.
</description>
</web-app>


Pronto... agora salve o arquivo e tente acessar novamente, e seu teste deverá funcionar.

Agora o ambiente está pronto e basta começar a programar os servlets, scriptlets, classes, taglibs e etc!!!!


Glossário
<host>
appBase => diretório base para a aplicação (Virtual Host)
a configuração do appBase dentro do server.xml, é o diretório
webapps (descrito de modo relativo).

<context>
docBase => caminho da aplicação web. Pode ser relativo ou absoluto e pode
ser também um caminho para um WAR. Este campo não precisa ser preenchido
quando se utiliza o processo de automatic deployment (META-INF/context.xml)


Referências:
http://spider-ir.spaces.live.com/blog/cns!A64CDB5DA99DB483!483.entry
http://tomcat.apache.org/tomcat-6.0-doc/index.html

Nenhum comentário:

Postar um comentário