Ordem de passos no arquivo web.xml

6 respostas
ricardospinoza

Gostaria de umas dicas para saber se estou na direção correta.

web-inf\web.xml

conteúdo

<?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"> 
<web-app>   
    <display-name>Minha Aplicacao Web</display-name>   
  
    <servlet>
        <servlet-name>WelcomeServlet</servlet-name>
        <servlet-class>pct.WelcomeServlet</servlet-class>   
        <load-on-startup>5</load-on-startup>   
    </servlet>     
    <servlet-mapping>   
        <servlet-name>WelcomeServlet</servlet-name>   
        <url-pattern>/paginaServlet</url-pattern>   
    </servlet-mapping>   
  
    <session-config>
        <session-timeout>30</session-timeout>   
    </session-config>  
  
    <welcome-file-list>   
        <welcome-file>welcome.jsp</welcome-file>   
        <welcome-file>welcome.html</welcome-file>   
        <welcome-file>welcome.htm</welcome-file>   
    </welcome-file-list>   
</web-app>

web-inf\src\pct\WelcomeServlet.java

package pct;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class WelcomeServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<?xml version=\"1.0\"?>");
		out.printf("%s%s%s", "<!DOCTYPE html PUBLIC",
				" \"-//W3C//DTD XHTML 1.0 Strict//EN\"",
				" \"http://www.w3.org/TR/xhtmll/DTD/xhtmll-strict.dtd\">\n");
		out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
		out.println("<head><title> A simple Servlet Example</title></head>");
		out.println("<body><h1>Welcome to Servlets!!!!</h1> </body>");
		out.println("</html>");
	}
}

e na raiz do contexto

exemplo\welcome.html

Quando digito no browser “http://localhost:8080/exemplo” a interpretação de passo-a-passo do container Web, seria:

Abrir a página welcome.html(definido no web.xml entre as tags <welcome-file-list> e </welcome-file-list>)

Pressionado botão de submit, direciono a action do form para: “paginaServlet”, neste momento o Web container lê
o arquivo web.xml e identifica que “paginaServlet” na verdade é um mapeamento de "<url-pattern>paginaServlet(…)" para “<sevlet-name>WelcomeServlet(…)” definido entre as tags “<servlet-mapping>” e “</servlet-mapping>”.
Identificado (pelo web container) mapeamento do servlet-name “WelcomServlet”, o web container busca entre as tags <servlet></servlet> e acessa a classe pelo seu pacote definido “<servlet-class>pct.WelcomeServlet(…)

Pessoal, gostaria de saber se é assim mesmo que funciona o mapeamento de classes no web.xml?

Obrigado, e desculpem os erros de português

Ricardo Spinoza

6 Respostas

LPJava

olha o arquivo em anexo!!

ricardospinoza

Obrigado pelo exemplo, consegui rodar aqui. Vou tentar entender como a “mágica” ocorre.

Se vc tiver mais algum exemplo, será bem vindo rsrs

LPJava

Nos proximos dias vou está postando algumas aplicacoes no meu blog: http://camilolopes.wordpress.com usando servlets e jsp…

Os dias de atualização: Seg/Quart/Sext.
Essa semana falo sobre Certificação!!

otaviofcs

espinoza,

a welcome file list define a página a ser mostrada quando passarem como url a raiz da aplicação (no seu caso http://localhost:8080/exemplo). Apesar de ser um padrão, já vi muitas implementações diferentes. Por exemplo, já vi implementações que ignoram welcome-file-list’s complementares. Acho até que concordo. Ou seja, você não deve ter 10 possibilidades de welcome. Ela deve ser uma e apenas uma, senão fica confusa.

Quanto ao link na página welcome.html chamar uma url que estará mapeada no web.xml, é isso mesmo. Você definiu no seu web.xml que toda vez que digitarem http://localhost:8080/exemplo/paginaServlet, ela vai chamar a classe java WelcomeServlet. Só uma coisa: url’s com maiúscula e minúscula é feito, opte por pagina_servlet no seu mapeamento, resolvendo para a mesma WelcomeServlet. É mais bonito…

Alternativamente, você poderia definir ao invés de /paginaServlet /*.voce, isso faria com que toda chamada de url’s terminada por .voce fosse resolvida para o servlet WelcomeServlet (exemplos: bem_vindo.voce, obrigado_por_vir.voce).

otaviofcs

outra coisa, determinados servidores (ressalto aqui o Websphere por trauma), possuem uma “ordem de leitura”. antes que você me pergunte, isso obviamente não faz parte da especificação, pois leitura de xml deveria ser feita somente dependente da chave, mas vá la.

Não tenho aqui de cabeça, mas ele só consegue ler (dependendo da versão do servidor), de acordo com uma ordem de aparecimento pré-definida. “ask google” para a resposta da ordem, ok?

ricardospinoza

Muito obrigado, pelas dicas!!! Estou agora mais curioso pelo assunto, vou fuçar mais a respeito, e provavelmente volto com novas dúvidas.

Criado 2 de abril de 2008
Ultima resposta 3 de abr. de 2008
Respostas 6
Participantes 3