quarta-feira, 16 de fevereiro de 2011

web.xml – Alguns conceitos e exemplos…


Em várias postagens deste blog este arquivo foi mencionado, bem como algumas configurações, mas o que é este arquivo? Pra que serve?
O arquivo web.xml está presente praticamente em todas as aplicações web – Java, não importa se você utiliza o framework A, B ou C, sempre terá um arquivo chamado web.xml dentro da pasta WEB-INF, isso por que este arquivo contém todas as informações do seu projeto. Este arquivo é lido diretamente pelo seu servidor, e é através dele que o servidor fica sabendo qual framework você está utilizando, quais os níveis de segurança que ele deve utilizar, qual o tempo de vida de seus servlets, até mesmo qual será sua página inicial.
Nota: O arquivo web.xml é case-sensitive, ou seja AAA é diferente de aaa, então cuidado ao escrever. Por padrão, todas as tags são escrita com letras minúsculas, e hífens (-) são utilizados para separar palavras (Exemplos: error-code,web-app, param-name, etç.)
O arquivo web.xml precisa de uma inicialização, um cabeçalho padrão que define como o servidor fará a leitura do arquivo.
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE web-app  PUBLIC “-/Sun Microsystems,  Inc.//DTD Web Application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd”>
Agora que o servidor sabe como interpretar este arquivo, ele precisa de um começo e de um fim, todas as tags de configuração do arquivo web.xml devem obrigatoriamente ser inseridas entre as tags <web-app> e </web-app>.
Outra tag muito utilizada é a tag display-name, que define o título padrão do seu projeto, a mensagem informada dentro desta tag será utilizada por todas as páginas da aplicação.
Exemplo: <display-name>Meu projeto!!!</display-name>
É possível também definir alguns parâmetros universais para seu projeto, por exemplo, queremos definir uma variável global para armazenar o nome do site, e em qualquer página podemos capturar e exibir este valor. Para isso utilizamos a seguinte configuração no web-xml:
<context-param>
<param-name>nomeSite</param-name>
<param-value>Meu Projeto!</param-value>
</context-param>
Onde param-name guarda o nome do parâmetro, é esta informação que devemos solicitar em nossas páginas, eparam-value é o valor que esta variável irá nos retornar sempre que à chamarmos.
Para recuperar esta variável em qualquer lugar da aplicação, basta utilizar o seguinte comando (retorna String):getServletContext().getInitParameter(“nomeSite“);
Uma coisa muito importante é a configuração dos servlets no web.xml!
Calma, não é preciso configurar cada jsp, somente as classes que irão trabalhar de forma visual, diretamente na tela do usuário, jsps apesar de serem servlets não precisam ser configurados.
Para configurar um servlet temos as seguintes tags:
<servlet>
<servlet-name>meuServlet</servlet-name>
<description></description>
<servlet-class>com.meu.pacote.ServletTal</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Aqui funciona mais ou menos assim:
As tags <servlet> e </servlet> indicam que entre elas está a configuração de um servlet.
A tag servlet-name contém o apelido que iremos dar ao nosso servlet, e é este apelido que será invocado pela aplicação quando formos utilizar este servlet, é uma tag obrigatória.
A tag description é apelas ilustrativa, ela não é funcional, serve para escrevermos uma breve descrição desta servlet, muito importante para futuras manutenções, porém não é obrigatória, coloca quem quer.
A tag servlet-class também é obrigatória, ela indica onde está a classe propriamente dita, aqui devemos informar o caminho completo do servlet, com pacote e tudo mais.
A tag load-on-startup não é obrigatória, mas se você colocá-la, estará informando ao servidor que este servlet deve ser carregado sempre que o projeto for iniciado, e o número que informamos dentro desta tag indica a ordem em que ele deve ser carregado, se na aplicação quisermos que 10 servlets sejam carregadas durante a inicialização do projeto, então devemos colocar esta tag load-on-startup na configuração de todas as 10 servlets, e em cada uma definimos a ordem de inicialização com números inteiros. Não precisa ser exatamente na sequencia, nem começar do 1, mas tem que ser inteiros! Se várias servlets possuirem o mesmo número, o servidor carrega alguma aleatóriamente.
É possível também chamar algum servlet diretamente pela URL, por exemplohttp://localhost:8080/Projeto/Chamandoservlet. Mas para isso é necessário uma pequena configuraçãozinha…
<servlet-mapping>
<servlet-name>meuServlet</servlet-name>
<url-pattern>/ChamandoServlet</url-pattern>
</servlet-mapping>
A tag url-pattern indica qual url deve ser informada para ativarmos nossa servlet.
A tag servlet-name indica o nome da servlet que deve ser chamada, aqui devemos informar o nome de alguma servlet mapeada no passo anterior.
É possível também determinar o tempo de vida das sessões de sua aplicação, muito útil quando se tem uma aplicação que transporta na sessão dados importantes.
<session-config>
<session-timeout>10</session-timeout>
</session-config>
Neste caso estamos configurando o tempo das sessões em 10 minutos, ou seja, se a aplicação ficar parada por 10 minutos, as sessões são eliminadas na memória!
Outra configuração interessante é a configuração dos arquivos iniciais, estes arquivos são procurados sempre que alguem acessa algum diretório da sua aplicação, sem informar um arquivo, por exemplo, para acessar algum site você informa apenas www.site.com.br e não www.site.com.br/paginaInicial.jsp, se os arquivos de inicialização estiverem configurados, digitando apenas www.site.com.br o servidor saberá que tem que mostrar a páginapaginaInicial.jsp.
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>paginaInicial.jsp</welcome-file>
</welcome-file-list>
Com estas tags, sempre que um diretório da sua aplicação for chamado o servidor vai procurar dentro deste diretório um arquivo index.jsp ou um arquivo paginaInicial.jsp e exibi-los.
Estas são as principais tags genéricas do arquivo web.xml, existem trocentas outras tags para este arquivo, porém da pra se virar com estas dicas por enquanto!

Nenhum comentário:

Postar um comentário