Arquitetura Servlet

Boa noite!

Estava testando acessos ao Servlet e estou com a seguinte dúvida
IDE Eclipse 3.3

Criei os seguintes pacotes:

com.exemplo.model
com.exemplo.web

criei mais 3 páginas na Raiz do projeto:
index.jsp, erro.html, sucesso.html

No web.xml configurei da seguinte forma:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>ControllerUsuario</servlet-name>
        <servlet-class>com.exemplo.web.ControllerUsuario</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ControllerUsuario</servlet-name>
        <url-pattern>/Controller.do</url-pattern>
    </servlet-mapping>
    
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
	<welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>
</web-app>

A aplicação funcionou perfeitamente.

O problema é:

Quando crio diretórios na raiz do projeto e tento fazer uma ligação de um .html com um Servlet ele não encontra o Servlet.

Porque???

No caso do sucesso que obtive acima quando criei uma pasta teste no diretório raiz e coloquei os arquivos index.jsp, erro.html, sucesso.html não deu certo deu erro 404.

Porque ele não encontra o Servlet, sendo que só o coloquei dentro de uma pasta e o DD esta funcionando perfeitamente?

Obrigado

como vc escreveu seu html? como fez o link? cuidado pra no escrever links absolutos no html e esquecer do nome do contexto :slight_smile:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Autenticar</title>
<link href="css/estilo1.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table width="300" height="200" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><fieldset><legend class="titulo">Autenticação</legend>
        <form id="form1" name="form1" method="post" action="Controller.do">
          <table border="0" align="center" cellpadding="2" cellspacing="2">
            <tr>
              <td><div align="right">Login:</div></td>
              <td><label>
                <input name="textfieldLogin" type="text" id="textfieldLogin" maxlength="15" />
              </label></td>
              <td>&nbsp;</td>
            </tr>
            <tr>
              <td><div align="right">Password:</div></td>
              <td><label>
                <input name="textfieldPassword" type="text" id="textfieldPassword" maxlength="6" />
              </label></td>
              <td><label>
                <input type="submit" name="Submit" value="Ok" />
              </label></td>
            </tr>
          </table>
      </form>
        </fieldset></td>
  </tr>
</table>
</body>
</html>

Eu consigo ver a interação MVC no primeiro caso que citei.

Mas quando crio um diretório e este arquivo precisa chamar um servlet é aí que ocorre o insucesso.

Estou testando aqui.

Apaguei o .class que o jsp gera.

recompilei

E o erro permanece

O link está correto…

O problema deve ser na localização dos arquivos. Como está a estrutura de pastas do seu projeto? Tá usando que ferramenta (Eclipse? plugins?)?

Normalmente um projeto web tem a pasta src e uma pasta chamada de raiz da aplicação (não é a raiz do projeto normalmente). É a pasta onde colocamos o WEB-INF e os JSPs/HTMLs.

No WTP a pasta costuma chamar WebContent, aqui na Caelum chamamos de web nos cursos mas pode ser qualquer nome. O importante é colocar seus JSPs na mesma pasta onde está seu WEB-INF.

Sérgio,

Acesse esse endereço por 1 minuto e verá a estrutura de diretórios que estou usando

http://www.abrades.org.br/erro/error.html

Obrigado

Não consigo entender porque um arquivo .html dentro de um diretório não consegue encontrar um Servlet???

Tenho o seguinte livro em mãos

USE A CABEÇA
Servlets e Jsp

E não encontrei a resposta p/ minha dúvida.

Caso tenham algum Artigo agradeço

o problema do segundo caso é que voce esta colocando os jsps em uma pasta. entao o seu link deve levar em conta isso.
na pratica, basta descer um nivel na hierarquia de classes qdo for fazer o link (ou form, tanto faz):

<a href="…/minhaServlet">minha servlet</a>

agora só uma opiniao: a estrutura de pastas que voce esta usando nao é a que eu prefiro mais :slight_smile:
prefiro separar o src numa pasta (e nao coloca-lo dentro do WEB-INF) e todos os outros recursos na pasta raiz do projeto (pasta web que falei antes). se interessar dar uma olhada nisso, veja o capitulo 5 desta nossa apostila:

editado: o forum come as tags html!! coloquei o link de novo

Ok Sergio, vou estudar o que me indicou.

Obrigado

acabei de ver q o jforum zuou o codigo q eu tinha postado. ve la de novo :slight_smile:

Olá sergiousp, bom como você está chamando este servlet por um link em outra página??

Seria desta forma: http://localhost:8080/nomeProjeto/Controller.do ?

Flww

não entendi a sua duvida…
o problema é que ele queria criar um html normal q linka pra servlet. e como ele usou pastas, precisa tomar cuidado pra descer um nivel no link

Opa Somma, estou com a mesma dúvida que vc neste livro!!!

Eu só consigo rodar a minha aplicação se eu puzer na raiz do src (posso até separar pelos packages) e se eu por os forms.html e os jsp´s na raiz do WebContent !!

Vc conseguiu resolver o problema ?

Abraços.