TomCat, Mysql e... *bum*

6 respostas
B

Olá gente,

Estou começando a aprender sobre a tecnologia servlet e de lambuja sobre a tecnologia JDBC.

Bom, em meus estudos, fiz alguns servlets pequenos que só imprimiam coisas simples na tela, sem acesso a banco de dados.

Mas ai, eu dei um passo a frente e comecei a estudar JDBC.

Ai eu to lá, todo feliz programando meu servlet com conexao ao Mysql (uuhhhh!) e quando vou mandar rodar a minha belezinha, o que acontece??? Nada, fala que o servidor não existe. Ai eu olho e o que vejo? Nada, o Tomcat fechou. Fiz de novo, abri tudo lindamente e mandei executar as outras servlets antes, funcionaram que é uma beleza. Ai eu fui pra minha ultima obra e… fechou de novo. Isso mesmo gente, o Tomcat esta fechando, terminando sem dar nem um ai.

Alguém sabe o que pode ser?
Estou usando a versao 5.0 do Tomcat e a versão 3.23 do Mysql (sei que tem versões mais novas, mas é que eu esqueci de puxar e no momento eu estou com net discada. Não me diga que o problema é esse né?)

Como provavelmente o errado sou eu, vai o código que eu fiz. Acho que não vai sair identado, mas vcs entendem né? Html eh uma jonça…

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class Teste3 extends HttpServlet
{
	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException
		{
			PrintWriter out = response.getWriter();
			try
        	{
				Class.forName("org.gjt.mm.mysql.Driver");
            
                Connection conex = DriverManager.getConnection("jdbc:mysql///localhost/testes","root", "root");
                Statement state = conex.createStatement();
                ResultSet result = state.executeQuery("SELECT * FROM teste");
                            
                while(result.next())
                {
                  	out.println("Campo 1: " + result.getString(1));
                        out.println("Campo 2: " + result.getString(2));
                }
                result.close();
                state.close();
                conex.close();
             }
             catch(SQLException e)
             {
             	out.println(e.getStackTrace());
             	out.println("

Fechando sistema");
             	System.exit(0);
             }
             catch (ClassNotFoundException e) 
			 {
             	out.println(e.getStackTrace());
             	out.println("

Fechando sistema");
             	System.exit(0);
			 }
		}
}

Bom, isso tudo é muito estranho, pq por mais que eu tenha errado, eu nunca pensei que podia derrubar um servidor com meus erros, pensei que no máximo seria disparado um erro. Cade a robustez? :s

Bom, é isso, brigadão.

Pilot.

6 Respostas

Rafael_Steil

hehehehe… erro basico qdo vc comeca com web :smiley:

Voce nao pode dar System.exit(0) em aplicacoes web, pois isso derruba o servidor.

Rafael

B

“Rafael Steil”:
hehehehe… erro basico qdo vc comeca com web :smiley:

Voce nao pode dar System.exit(0) em aplicacoes web, pois isso derruba o servidor.

Rafael

ai… :roll:

É tão bom usar isso as vezes… Mas isso quer dizer q se eu colocar um System.exit no meu servidor de hospedagem eu derrupo ele? Bom, eles devem ter alguma medida de proteção.

Existe alguma outra forma de eu interromper o processamento?


Aproveitando o tópico (já que foi solicionado rapido de mais, vamos dar uma vida mais longa pra ele), uma nova pergunta.

No livro que eu estou lendo sobre Servlets, ele usa as servlets de uma maneira bem modularizada. Basicamente ele cria uma servlet pra cada pequena funcionalidade do site.

Eu, desde que tomei conhecimento das servlets (sou programador php, mas deliro com java na faculdade) eu tenho imaginado um modelo de um sistema inteiro rodando numa única servlet. Ou seja, diversas classes, poll de banco de dados, sistemas de noticias, etc etc… Tudo dentro de uma unica servlet, algumas coisas armazenadas em memoria (como as ultimas noticias, por exemplo) e outras em bancos de dados.

Conforme meu estudo progredia, eu imaginei que essa servlet teria um grande switch para saber o que o usuário estava requerendo em determinado momento.

Então eu queria saber, qual é o “certo”? Modularizar em várias servlets ou ter uma servlet “faz tudo”?

Obrigado Rafael e obrigado desde já o pessoal que eu espero q vai responder isto :roll:

Rafael_Steil

“Black_Pilot”:
“Rafael Steil”:
hehehehe… erro basico qdo vc comeca com web :smiley:

Voce nao pode dar System.exit(0) em aplicacoes web, pois isso derruba o servidor.

Rafael

ai… :roll:

É tão bom usar isso as vezes… Mas isso quer dizer q se eu colocar um System.exit no meu servidor de hospedagem eu derrupo ele? Bom, eles devem ter alguma medida de proteção.

Sim, ha maneiras de prevenir isso. Basta o administrador configurar algumas regras de seguranca.

Lance uma exception.

Bom, isso voce ira pegar com o tempo. Ao contraio de PHP, voce nao deve colocar codigo html no teu servlet, pois isso dificulta muito a manutencao do sistema.
Em relacao a quantidae de servelts, voce pode separar eles por funcionalidade. Indo mais a fundo, ha um bixinho chamado MVC ( de Model View Controller ), que se encaixa nessa tua questao.
MVC, alias, eh um dos Design Patterns que voce deve se familiarizar. De uma procurada no forum do GUJ, ha MUITO material sobre o assunto ( especialmente no topico “Entao voce gostaria de aprender MVC?” ).

Se encaixa na questao / resposta anterior.

Rafael

B

Bom, eu dei uma lidinha e vi até que o tema MVC é meio conflitante no meio Web. Basicamente o MVC é o que a gente aprende na faculdade mesmo, nas aulas de oo.

Vou tentar destrinchar melhor o que eu quero dizer. Utilizando o mvc mesmo.

O cliente faria uma requisição, essa requisição seria capturada por uma servlet (essa servlet implementaria tanto a parte control quanto a parte model, sendo que uma única classe estaria responsável pela parte control, e ela teria conhecimento de todas as outras classes necessárias para o seu funcionamento (praticamente uma façade também).

Eu teria um sistema todo rodando dentro dessa servlet: usuários on line, controle de sessão (penso em fazer algo manual, nao usar as classes já prontas, tenho meus motivos) sendo que a classe controller seria a responsável por capturar os dados certos de alguma forma.

Depois a apresentação seria feita usando o velocity ou mesmo jsp (como não conheco EJB, estou evitando ele).

Então, basicamente, o que eu queria saber se é viável manter uma única servlet para todo o sistema ou se existe alguma restrição/limitação que, devido a minha ignorancia no assunto, eu não estou vendo?

Obrigado ^^

Pilot - Que não sabe se esta falando m*** ou nao :roll:

Rafael_Steil

Voce nao deve misturar o controller e o model. O teu model tem que ser desacoplado de ambiente, ou seja, ele nao tem que saber que esta rodando em uma aplicacao web ou desktop ( pelo menos o mais proximo disso que voce conseguir ).

O teu servlet somente processa a requisicao e delega para a classe resposavel o trabalho ( que, digamos, pode ser uma ViewHelper ou Action ).

Voce pode ter uma unica servlet sim, desde que esta unica servlet seja um controller, e nada alem disso. O teu controller poderia ter metodos para acessar algum facade de controle de sessao e afins, embora voce possa manter isso desacoplado tambem, sem muito esforco.

Rafael

luis.txt

olá pessoal,

Eu sou novato em TomCat, mysql &cia. Eu estou tentado aprender alguma coisa sozinho, já consegui rodar servlets pelo browser e conversar com o mysql pelo java, uso o eclipse. O problema é que quando tento unir as duas coisas(mysql e servlet) acontece exceptions. No java o my sql reponde certinho, mas quando rodo um servlet, no momento que ele chama uma conexão com o banco acontece um java.lang.NullPointerException.

Eu estava pensando que talvez tivesse de referenciar o mySQL no TomCat de alguma forma, para ele poder encontrar o conector.

Se vocês puderem me ajudar eu agradeço!
Teh mais…

Criado 12 de julho de 2004
Ultima resposta 11 de jun. de 2008
Respostas 6
Participantes 3