Socorro - servlet nÃo funciona

14 respostas
B

Pessoal,

Sou iniciante nesta maravilhosa linguagem e estou com uma dificuldade de iniciante.
NÃO ESTOU CONSEGUINDO FAZER MEUS SERVLETS RODAREM.
Estou colocando abaixo a descrição do que estou fazendo para ver se alguma alma caridosa me ajude.

Estou usando o jdk1.3.1_06, j2sdkee1.3.1e Tomcat 4.0.3

1)No SERVER CONFIGURATION estou adicionando o seguinte contexto :
<!-- testes Context -->
<Context path=“testes” docBase=“testes” debug=“0”
reloadable=“true” crossContext=“true”/>

2)Criei o diretório web-inf na mesma pasta da minha aplicação (root/testes), dentro de web-inf criei a pasta classes.
Na pasta web-inf criei o arquivo web.xml com o seguinte 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>

<servlet>

<servlet-name> HelloWorldExample </servlet-name>

<display-name> HelloWorldExample </display-name>

<description> Teste para apresentação de servlet </description>

<servlet-class>servlets. HelloWorldExample </servlet-class>

</servlet>

</web-app>

3)Em seguida aproveitei o arquivo HelloWorldExample da pasta examples, coloquei o .class na pasta /web-inf/classes, o conteudo é o seguinte :

import <a href="http://java.io">java.io</a>.<em>;

import java.text.</em>;

import java.util.<em>;

import javax.servlet.</em>;

import javax.servlet.http.*;

/**

  • The simplest possible servlet.
  • @author James Duncan Davidson
    */

public class HelloWorldExample extends HttpServlet {

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws IOException, ServletException
{
    ResourceBundle rb =
        ResourceBundle.getBundle("LocalStrings",request.getLocale());
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.println("&lt;html&gt;");
    out.println("&lt;head&gt;");

    String title = rb.getString("helloworld.title");

    out.println("&lt;title&gt;" + title + "&lt;/title&gt;");
    out.println("&lt;/head&gt;");
    out.println("&lt;body bgcolor="white"&gt;");

// note that all links are created to be relative. this
// ensures that we can move the web application that this
// servlet belongs to to a different place in the url
// tree and not have any harmful side effects.

    // XXX
    // making these absolute till we work out the
    // addition of a PathInfo issue

    out.println("&lt;a href="/examples/servlets/helloworld.html"&gt;");
    out.println("&lt;img src="/examples/images/code.gif" height=24 " +
                "width=24 align=right border=0 alt="view code"&gt;&lt;/a&gt;");
    out.println("&lt;a href="/examples/servlets/index.html"&gt;");
    out.println("&lt;img src="/examples/images/return.gif" height=24 " +
                "width=24 align=right border=0 alt="return"&gt;&lt;/a&gt;");
    out.println("&lt;h1&gt;" + title + "&lt;/h1&gt;");
    out.println("legal, funciona!!!!");
    out.println("&lt;/body&gt;");
    out.println("&lt;/html&gt;");
}

}

4)criei um arquivo HTML e fiz a chamada para a servlet da seguinte maneira :
<a href="…/servlet/HelloWorldExample"

POR FAVOR, O QUE É QUE ESTOU FAZENDO DE ERRADO ?

Espero que alguém me ajude.

Um abraço,
:frowning:

14 Respostas

D

Você criou o diretório testes dentro da pasta ROOT?
Assim:
webappsROOT estes

Isso funciona, mas você estará utilizando o contexto ROOT.

Parece que está tudo correto no que fez. Só que o diretório testes tem que estar dentro do diretório webapps para que você tenha o seu próprio contexto (Isso separa sua aplicação das outras).

Para o Tomcat, coloque o seu diretório testes dentro do seu diretório webapps e inicie o Tomcat novamente.
Tente isso…

[]s

B

testei fazer isso, agora aparece a mensagem “The requested resource (/testes/teste.htm) is not available.”

D

Tente chamar o seu servlet… ( testes/servlets/HelloWorldExample )

[]s

B

Diogo,

tentei, mas ele continuar com o mesmo problema. Se eu colocar o diretório testes dentro de ROOT ele acha os arquivos, caso contrário não.
Mas de nenhum jeito ele acha o servlet.

Rafael_Steil

No server.xml, o atribudo “path” do contexto tem q ser “/teste” e nao “teste” ( note que tem uma barra na frente ).
O diretorio da tua aplicacao ( que vc especifica pelo atributo “docBase” ) tem que estar dentro do diretorio “webapps” do tomcat. Depois de alterar o server.xml, vc precisa restartar o tomcat.

Pelo web.xml que voce passou, existem espacos em branco dentro das tags, remova elas ( por exemplo, entre “servlet-class” e o nome do servlet tem um espaco ).

Adicione uma outra tag chamada “servlet-mapping”:

&lt;servlet-mapping&gt;
    &lt;servlet-name&gt;HelloWorldExample&lt;/servlet-name&gt;
    &lt;url-pattern&gt;/HelloWorldExample&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;

E levando em consideracao que o nome da aplicacao eh “testes”, acesse via

http://host:porta/testes/HelloWorldExample

Rafael

B

quando clico no link para acessar a servlet aparece a mensagem :
The requested resource (/servlet/HelloWorldExample) is not available.

Rafael_Steil

Vc esta acessando /servlet/HelloWorldExample. Este endereco existe? Faca como mostrei antes

Rafael

B

Rafael,

eu tinha digitado errado. Fiz aquilo que você orientou. A mensagem de erro agora mudou para :
The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

estou chegando lá ?

Rafael_Steil

Agora deu erro na tua aplicacao. Verifique o servlet, se esta tudo ok. Caso ainda nao funcionar, coloque aqui a mensagem de erro.

Rafael

B

O erro é : The requested resource (/servlets/helloworld.html) is not available.

Rafael_Steil

/servlets/helloworld.html existe?? que arquivo eh este? a aplicacao “servlets” existe?

Rafael

D

Pois é… não estou entendendo o porque de chamar o arquivo .html

Você não tem nenhum arquivo html… só tem o seu servlet lá…

C

Ele chega a mostrar a tela do seu servlet??
No código que você postou na primeira montagem notei que ele monta um link que faz referencia à este arquivo…

A

Olá estou com um problema semelhante, só que no meu caso estou usando o glassfish e não o tomcat, vamos lá:

tenho um conjunto de pacotes em minha aplicação que eu já testei e estão funcionando, dentre eles eu tenho um que se chama MecanismosCooperacao que esta dentro de WEB-INF/classes conforme manda o padrão.

O código do jsp que chama o servlet eh seguinte:

<form action="egrupo.faq" method=GET target=frame2 onSubmit=getTituloFaq() id=form2 name=form2>
<%
	if(session.getValue("codigo_trabalho")!=null){
%>	
		<input type=hidden name=codigo_trabalho value=<%=session.getValue("codigo_trabalho")%>>	
<%		
	}
%>			
	<td height="20"><input type=image src="images/a_06.gif" border="0" WIDTH="24" HEIGHT="35" ALT="FAQ" NAME="FAQ"></td>
</form>

Tirando os detalhes da implementação ele tenta chamar um alias chamado egrupo.faq, o meu web.xml é o seguinte:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<display-name>E-Grupo</display-name>
	<description>
		Ferramenta de apoio a aprendizagem colaborativa
	</description>
	<servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
         org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
 
     </servlet>
    <servlet>
        <description>Servlet que coordena o faq</description>
        <servlet-name>ServletFaq</servlet-name>
        <servlet-class>MecanismosCooperacao.faq</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ServletFaq</servlet-name>
        <url-pattern>egrupo.faq</url-pattern>
    </servlet-mapping>
    </web-app>

No glassfish existe outro arquivo de configuração que é o sun-web.xml, o qual está o seguinte:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
  <context-root>/egrupo</context-root>
  <servlet>
    <servlet-name>ServletFaq</servlet-name>
  </servlet>
  <class-loader delegate="true"/>
  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class' java code.</description>
    </property>
  </jsp-config>
</sun-web-app>

Quando eu chamo a página web dentro do navegar ele da a seguinte mensagem de erro:

HTTP Status 404 -

type Status report

message

descriptionThe requested resource () is not available.
Sun Java System Application Server 9.1_01

Estou precisando muito fazer este negócio rodar se alguém poder me ajudar eu agradeço muito!

Criado 7 de fevereiro de 2003
Ultima resposta 16 de jul. de 2008
Respostas 14
Participantes 5