Servlet não executa

6 respostas
Turbo_Drive

Bom dia a todos.

Estou utilizando o NetBeans 5.5.1 junto com o Tomcat 5.0.28, mas não consigo rodar os servlets que eu crio. Eis os código de um simples servlet de teste:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class AloMundoServ extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException  {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
            out.println("<title>Olá Mundo em Servlet!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Olá Mundo em Servlet!</h1>");
        out.println("</body>");
        out.println("</html>");        
    } 
}
Dentro de Webapps eu criei o diretório AloMundoServ, que por sua vez, possui os diretórios WEB-INF e web-inf\classes. Dentro do diretório classes está o AloMundoServ.java e AloMundoServ.class, mas não consigo executá-lo. Dentro de Web-INF está o web.xml. Eis o código:
<?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> 

    <!-- Indica ao Tomcat as Servlets da nossa aplicacao --> 
    <display-name>Olá Mundo em Servlet!</display-name>   

    <description></description> 

    <servlet> 
        <servlet-name>AloMundoServ</servlet-name> 
        <servlet-class>AloMundoServ</servlet-class> 
    </servlet>      
   <servlet-mapping> 
        <servlet-name>AloMundoServ</servlet-name> 
        <url-pattern>/servlet/AloMundoServ</url-pattern> 
    </servlet-mapping>
    <session-config> 
        <session-timeout>30</session-timeout> <!-- 30 minutes --> 
    </session-config> 
</web-app>

Aqui está o erro ao utilizar a URL:
[url] http://localhost:8080/AloMundoServ/servlet/AloMundoServ[/url]

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error allocating a servlet instance
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
java.lang.Thread.run(Thread.java:536)

root cause

java.lang.UnsupportedClassVersionError: AloMundoServ (Unsupported major.minor version 50.0)
java.lang.ClassLoader.defineClass0(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:502)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1634)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:860)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1307)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
java.lang.Thread.run(Thread.java:536)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.

Por favor, alguém teria alguma idéia do que possa estar ocorrendo ?
OBS:
No NetBeans eu só faço compilar, mas ele sempre chama o Tomcat embutido, por isso estou usando o NetBenas só para compilar. Como faço para o NetBeans chamar o Tomcat que estou utilizando ?

6 Respostas

Pedrosa

A versão que você esta compilando não é suportada pelo Tomcat, por exemplo você pode estar compilando em Java 6 e seu Tomcat suporta Java 1.4.

Turbo_Drive
Muito obrigado Pedrosa, era exatamente isso q estava ocorrendo. fui no site do Tomcat e instalei a versão 5.5 com o windows instaler que ele disponbiliza. O servlet rodou beleza. Tenho este outro servlet para conexão com o mysql:
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class getConnection2 extends HttpServlet {    
    public void init() { }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       
        DataInputStream in = new DataInputStream((InputStream)request.getInputStream());        
        String db = in.readUTF();
        String user = in.readUTF();
        String pwd = in.readUTF();        
        String message ="jdbc:mysql://localhost:3306/"+db+","+user+","+pwd;
        try {            
            connect(db.toLowerCase().trim(),user.toLowerCase().trim(), pwd.toLowerCase().trim());            
            message += "100 ok";            
        } catch (Throwable t) {
            message += "200 " + t.toString();
        }
        response.setContentType("text/plain");
        response.setContentLength(message.length());
        PrintWriter out = response.getWriter();
        out.println(message);
        in.close();
        out.close();
        out.flush();
    }
    
    public void doGet(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException {       
        doPost(request,response);
    }    
    
    private void connect(String db, String user,String pwd) throws Exception {        
        // Establish a JDBC connection to the MYSQL database server.
        //Class.forName("org.gjt.mm.mysql.Driver");
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+db,user,pwd);                
    }
}
Quando tento acessar está dando este erro: HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.io.EOFException
java.io.DataInputStream.readUnsignedShort(Unknown Source)
java.io.DataInputStream.readUTF(Unknown Source)
java.io.DataInputStream.readUTF(Unknown Source)
getConnection2.doPost(getConnection2.java:13)
getConnection2.doGet(getConnection2.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.23 logs.

Pesquisei aqui e no google e vi que precisa de um .jar do Mysql, mas não consigo encontrá-lo ?
O problema é esse mesmo ou está faltando alguma configuração no meu servlet ?

Grato pela atenção.

maquiavelbona

O jar que se referes é o JDBC driver do MySQL. Chegou a procurar no google por “JDBC MYSQL”?

http://www.mysql.com/products/connector-j

Até!

Turbo_Drive

Beleza chefe, eu baixei o conector, acrescentei o diretório lib dentro de WEB-INF, mas continua o mesmo erro.
Existe alguma outra configuração a ser feita ?
Grato pela atenção.

Turbo_Drive

Não tenho certeza, mas acho que o que fiz deu certo, em parte. Adicionei o conector como biblioteca do meu Servlet, compilei e joguei na pasta WEB-INF\lib.
Tentei conectar e deu apenas essa mensagem:
jdbc:mysql://localhost:3306/ljsc,root,200 java.lang.NoClassDefFoundError: org/aspectj/lang/Signature

Alguém sabe onde posso encontrar um conector que possua esse package ?

Grato pela atenção.

Turbo_Drive

Galerinha eu matei a charada. Quando vc descompacta o conector, dentro do diretório …\src\lib existe um arquivo chamado aspectjrt que também deve ser adicionado ao lib do seu servlet.
Obrigado a todos pela força. Ficam os nossos posts para pesquisas futuras.
Um abração.

Criado 20 de julho de 2007
Ultima resposta 21 de jul. de 2007
Respostas 6
Participantes 3