Problema com Conexão - SQL SERVER 2000

Quando vou executar o arquivo GlobalServlet e/ou Manager para a conexão com o banco de dados dá esse erro: Exception in thread “main” java.lang.NoSuchMethodError: main

Parece que eu teria que ter uma classe main, mas como estou fazendo em jsp também, não sei onde onde se encaixa isso.

Qual seria a solução deste problema?

Abraços
Chorus

Salve,

como você está fazendo essa conexão? Poste o código aí, dê uma olhada nestes links pode te ajudar, http://download.microsoft.com/download/4/1/d/41d3e9c0-64d1-451e-947b-7a4cba273b2d/JDBC_FAQ_SP3.txt e http://support.microsoft.com/default.aspx?scid=kb;en-us;313100 neste último acredito que possa sanar tuas dúvidas.

Qualquer dúvida, post-as!

:okok:

Chorus,

você não pode executar um Servlet como uma clase normal. Você deve testá-la dentro de um contaienr web como Tomcat.

Franklin, e como eu faço isso?

Na realidade cara, estou desesperado pois parece que estou dando voltas em círculo, e nada de progresso. Esse é um trabalho de conclusão de curso e estou literalmente sem saber como dar continuidade, preciso muito da ajuda de vocês, pouco que seja, qualquer ajuda é uma ajuda para mim.

Para quem programa em Java com certeza o que eu quero é simples, mas como sou iniciante - fiz um curso uma certa vez, mas nada de praticar. Após a conexão com o banco de dados, o que irei fazer é o seguinte: Criar um código para validação de login e senha, que no caso e matrícula e senha, isso estará na página jsp - login.jsp e chamará o arquivo .java, só que a princípio eu não sei como se faz essa ligação. Após a validação do usuário, eu iria pegar na tabela disciplinas apenas as disciplinas que este usuário que logou está cursando, e mostraria essas disciplinas como link na tela. (Seria no caso adaptar a tela para o usuário de acordo com a matéria que ele está cursando).

Na segunda parte, dentro da página do professor, assim dizendo - a partir daquele link gerado que o aluno iria chegar a esta página, Teria um agente que em tempo em tempo iria checar a tabela de material, iria dar um refresh no site disponibilizando o link do material para o aluno baixar.
Quanto ao agente, estava com uma idéia simples, ele não será de nenhum SDP nem ao menos de uma SMA, apenas um agente, simples agentes, que eu iria definir o tempo que ele iria “acordar” e checar a tabela do banco, se tiver algo, ele exibe, se o nome ou conteúdo for igual, ele não exibe, por que neste caso já está no site.

Bom, não sei se deu para entender bem a minha idéia, mas mesmo assim agradeço pela atenção de todos, está muito complicado para mim, mas conseguirei de alguma forma, tenho que conseguir!

Keep Walking

Abraços
Chorus

Você pode começar fazendo o que o Marcos lhe falou, postar o código aqui.
Se você não sabe como rodar um Servlet, certamente não foi você quem escreveu ele. Onde você conseguiu este código?

Se você tem urgência é melhor falar pessoalmente com uma pessoa que entenda. Aqui no fórum as pessoas vão te responder conforme forem lendo as perguntas.

Segue os arquivos embaixo:

------------------------------GlobalServlet.java--------

/*
 * GlobalServlet.java
 * Created on 13 de Fevereiro de 2001, 18:47
 */

package Iacnet.Servlet;

import java.io.PrintWriter;
import java.util.Enumeration;
//import javax.*;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Properties;
import Iacnet.Conexao.Manager;

/**
 * Define um servlet que tem por função apenas efetuar as inicializações 
 * necessárias ao funcionamento do sistema. Em particular esse servlet
 * cria um gerenciador de persistencia global, que será acessado por todas
 * as páginas da aplicação.
 * @author  Jefferson Oliveira Andrade
 * @version 
 */
public class GlobalServlet extends HttpServlet {
	
	public void init(ServletConfig conf) throws ServletException {
		System.out.println("Construtor do Servlet");	
		super.init(conf);
		createMgr(conf);
		configDefaults(conf);
	}
	
	protected void createMgr(ServletConfig conf) {
		
		System.err.println("Criando Manager");
		
		String strUrl = null;
		String strUsr = null;
		String strPwd = null;
		String strDrv = null;
		
	/* pega usuario, senha, etc do arquivo web.xml */	
		strUrl = (String)conf.getInitParameter("Iacnet.jdbc.url");
		strUsr = (String)conf.getInitParameter("Iacnet.jdbc.usr");
		strPwd = (String)conf.getInitParameter("Iacnet.jdbc.pwd");
		strDrv = (String)conf.getInitParameter("Iacnet.jdbc.drv");
		
		// Debug:
		System.err.println("Iacnet.jdbc.url=" + strUrl);
		System.err.println("Iacnet.jdbc.usr=" + strUsr);
		System.err.println("Iacnet.jdbc.pwd=" + strPwd);
		
		Properties props = new Properties();
		props.setProperty("user",strUsr);
		props.setProperty("password",strPwd);
		props.setProperty("url",strUrl);
		props.setProperty("driver",strDrv);
		
		Manager mgr = new Manager(props);
		/* faz o objeto manager instanciado acima ficar global para a aplicacao TomCat*/
		conf.getServletContext().setAttribute("mgr", mgr);
	}
	
	protected void configDefaults(ServletConfig conf) {
		ServletContext ctx = conf.getServletContext();
		Enumeration inits = conf.getInitParameterNames();
		while (inits.hasMoreElements()) {
			String strParam = (String)inits.nextElement();
			if (strParam.startsWith("global.")) {
				String strValue = conf.getInitParameter(strParam);
				ctx.setAttribute(strParam, strValue);
			}
		}
	}
	
	public void destroy() {
		System.err.println("Finalizando servlet global da ferramenta!");
	}
	
	public void doGet(HttpServletRequest req, HttpServletResponse resp) 
	throws ServletException, java.io.IOException {
		handle(req, resp);
	}

	public void doPost(HttpServletRequest req, HttpServletResponse resp) 
	throws ServletException, java.io.IOException {
		handle(req, resp);
	}

	protected void handle(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, java.io.IOException {
	
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Configurações do Sistema</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>Configurações do Sistema</h1>");
		out.println("<hr>");
		
		printServletInfo(out);
		printManagerInfo(out);		
		printRequestInfo(out, request);
		printContextInfo(out);
		
		out.println("</body>");
		out.println("</html>");
		out.flush();
	}
	
	protected void printServletInfo(PrintWriter out) {
		out.println("<h2>Informações do Servlet</h2>");
		out.println("<table border>");
		out.println("<tr>");
		out.println("<td>Servlet class</td>");
		out.println("<td><tt>" + getClass().getName() + "</tt></td>");
		out.println("</tr>");
		out.println("</table>");
	}
	
	protected void printManagerInfo(PrintWriter out) {
		out.println("<h2>Informações do Gerenciador de Persistência</h2>");
		
		ServletContext ctx = getServletContext();
		Manager mgr = (Manager)ctx.getAttribute("mgr");

		if (mgr == null) {
			out.println("<p>O gerenciador de persistência não foi");
			out.println("corretamente criado!</p>");
		}
		else {
			out.println("<table border>");
			out.println("<tr>");
			out.println("<td>Nome</td>");
			out.println("<td><tt>mgr</tt></td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>JDBC.URL</td>");
			out.println("<td><tt>" + "" + "</tt></td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>Classes no cache</td>");
			out.println("<td><tt>" + "" + "</tt></td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>Objetos no cache</td>");
			out.println("<td><tt>" + "" + "</tt></td>");
			out.println("</tr>");
			out.println("</table>");
		}
	}
	
	protected void printRequestInfo(PrintWriter out, HttpServletRequest request) {
		out.println("<h2>Informações da Requisição</h2>");
		out.println("<table border>");
		out.println("<tr>");
		out.println("<td>Método</td>");
		out.println("<td><tt>" + request.getMethod() + "</tt></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>URI</td>");
		out.println("<td><tt>" + request.getRequestURI() + "</tt></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>Protocolo</td>");
		out.println("<td><tt>" + request.getProtocol() + "</tt></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>PathInfo</td>");
		out.println("<td><tt>" + request.getPathInfo() + "</tt></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>Endereço Remoto</td>");
		out.println("<td><tt>" + request.getRemoteAddr() + "</tt></td>");
		out.println("</tr>");
		out.println("</table>");
	}
	
	protected void printContextInfo(PrintWriter out) {
		out.println("<h2>Informações do Contexto da Aplicação</h2>");
		out.println("<table border>");
		
		ServletContext ctx = getServletContext();
		Enumeration attribs = ctx.getAttributeNames();
		while (attribs.hasMoreElements()) {
			String strAttrib = (String)attribs.nextElement();
			String strValue = String.valueOf(ctx.getAttribute(strAttrib));
			out.println("<tr>");
			out.println("<td>" + strAttrib + "</td>");
			out.println("<td><tt>" + strValue + "</tt></td>");
			out.println("</tr>");
		}
		
		out.println("</table>");
	}	
}

-------Manager.java-----------------------------

/*
 * Manager.java
 *
 * Created on 15 de Novembro de 2003, 16:07
 */

package Iacnet.Conexao;

/*
Classe: Manager
Autor: Diego Rodrigues Sanches
Data Criação: 19/11/2001

Esta classe armazena as informações sobre a forma de conexão ao
database/usuário/senha/driver.

Forma de Conexão:

public Connection openConnection() throws ClassNotFoundException, SQLException {
	String strDriver = "com.thinweb.tds.Driver";
	String strUrl = "jdbc:twtds:sqlserver://taka:1433/Biblish";
	String strUser = "biblish";
	String strPassword = "biblish";
	
  Class.forName(strDriver);
  Connection con = DriverManager.getConnection(strUrl, strUser, strPassword);
  return con;
} 

*/
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.Properties;

public class Manager{
	
	private String url = null;
	private String strdrv = null;
	private Properties propsConn = new Properties();
	protected Connection conn = null;
	protected boolean createForMgr;
		
	public void setUser(String usr) {
        
        // usuario padrao do SQL Server
        usr = "sa";
		propsConn.setProperty("user",usr);
	}	

	public String getUser() {
		return this.propsConn.getProperty("user");
	}	
	
	public void setPassword(String pwd) {
        
        // senha padrao do SQL Server
        pwd = "";
		propsConn.setProperty("password",pwd);
	}	

	public String getPassword() {
		return this.propsConn.getProperty("password");
	}	
	
	public void setUrl(String url) {
		this.url = url;
	}	

	public String getUrl() {
		return this.url;
	}	
	
	public void setDriver(String drv) {
		this.strdrv = drv;
	}	

	public String getDriver() {
		return this.strdrv;
	}	
	
	/*
	Construtores da Classe
	*/
	public Manager() {
	
		this.setUser("sa");
		this.setPassword("");
		this.setUrl("jdbc:odbc:IACNET");
		this.setDriver("sun.jdbc.odbc.JdbcOdbcDriver");		
	
	}
	
	public Manager(Properties props) {
		this.setUser(props.getProperty("user"));
		this.setPassword(props.getProperty("password"));
		this.setUrl(props.getProperty("url"));
		this.setDriver(props.getProperty("driver"));
	}
	
	public Connection getNewConnection() throws ClassNotFoundException, SQLException {
		Connection conn = null;
		Class.forName(this.strdrv);
		conn = DriverManager.getConnection(this.getUrl(), this.getUser(), this.getPassword());
		return conn;	
	}


	/*
	Este método verifica se a conexão esta criada, caso não esteja
	cria uma e retorna true, caso esteja retorna apenas true
	*/
	protected boolean validateConn() throws ClassNotFoundException, SQLException {
		if (this.conn == null) {
			this.conn = this.getNewConnection();
			return true;
		} else { 
			return true;
		}

	};
	
	/*
		Este método verifica a forma na qual a conexão foi criada
		e de acordo com isto fecha ou não a conexao.
		
		Se a conexão foi passada como parâmetro pelo construtor 
		da classe ela não pode ser fechada pelo método se foi 
		criada pela própria classe ela pode ser fechada e 
		destruida.
	*/
	protected void validateCloseConnect() throws SQLException {
		if (this.createForMgr) {
			this.conn.close();
			this.conn = null;
		}
	}
	
	public Manager getManager() {
		return this;
	}
	
	public Connection getConnection() {
		return this.conn;
	}
	
	public boolean isCreateForConn() {
		if (createForMgr) {
			return false;
		} else {
			return true;
		}
	}
}

Eu gostaria de saber pelo menos como eu posso fazer a conexão com o banco. Quanto aos arquivos, estou postando aqui, e já tenho o j2sdk, e rodando, já configurei o ODBC com o nome certo.

Abraços
Chorus

Primeiro alguams boas práticas:

  1. nome de pacotes devem ser semrpe com letras minúsculas.
  2. Não é mais necessário escrever HTML dentro deservlet.s Você pode usar JSP e/ou Templates engines para isto.
  3. Nomes como isCreateForConn são imcompreensíveis. Procure escrever algo mais legível.

Se você já etm o Java instalado e conmfigurado e apenas quer testar a conexão com o BD, adicione este método à classe Manager:

public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Manager me = new Manager();
        System.out.println("Conexão estabelecida: " + me.validateConn());
        System.out.println(me.getConnection());                
    }

Rode a classe como uma aplicação Java normal:

Para fazer este tipo de testes o certo mesmo era usar JUnit, mas não quero colocar nada aqui q te confunda mais ainda.

Para rodar as págians web tu tens que instalar um Servlet Container como o Tomcat (google for it) e instalar a plicação dentro dele.

Quem te forneceu este código não te explicou isti? Ele não forneceu um arquivo chamado web.xml?

Sim, eu tenho o arquivo web.xml, mas não estou conseguindo postar eles aqui, fica dando erro dizendo que eu não posso postá-los.

Abraços e Obrigado
Chorus

p.s: verificarei sobre o que vc colocou em cima!

Cara, uma boa notícia. Compilei e executei o código conforme vc me falou, adicionei aquele método e rodou, exibindo "conexão estabelecida: True"
Então agora sabemos que o banco está conectado!
Qual deve ser o meu próximo passo?

Obrigado
Chorus

Cara, tudo bem? Agora que está conectando - de acordo com o seu código, como eu poderei fazer uma consulta no banco para exibir certos dados?
Cara, estou fazendo as telas em jsp, tenho o código do login.jsp:

<%@ page contentType=“text/html; charset=iso-8859-1” language=“java” import=“java.sql.*” errorPage="" %>
<%@ page import = “Login” %>

<%
if (request.getParameter(“verificarLogin”) != null)
{
//se o verificarLogin for != null, significa que a página foi reenviada. Logo, faz-se a autenticação

 //recuperando dados do form enviado
 String usuario = request.getParameter("tbxLogin");
 String senha = request.getParameter("tbxPassword");

 Login objetoLogin = new Login();   //instancia o objeto de login para verificação.
 if (objetoLogin.verificaLogin(usuario, senha))
 {
    //Se o login for valido, redireciona o cara pra onde vc quer (para uma pagina inicial, por exemplo);
    response.sendRedirect("paginaPrincipal.jsp");
 }
 else
 {
    //Se o login não for valido, redireciona o cara pra onde vc quer (para uma pagina de erro, por exemplo);
    response.sendRedirect("http://www.disney.com");
 }

}

%>

<html>
<head>
<title>Login</title>
<meta http-equiv=“Content-Type” content=“text/html; charset=iso-8859-1”>
</head>

<body>
<table width=“386” border=“0” align=“center”>
<tr>
<td width=“380”><img src=“Site/images/logon.jpg” width=“380” height=“204”>
<table width=“3” border=“0” align=“center”>
<tr>
<td><table bgcolor="#FFFFFF">
<br>
<br>
<br>
<form name=“formLogin” method=“post” action=“login.jsp?verificarLogin=true”>
<input type=“text” value="" name=“tbxLogin” id=“tbxLogin”>
<input type=“password” value="" name=“tbxPassword” id=“tbxPassword”>
<input type=“submit” value=“VERIFICA” id=“btnVerifica”>

            &lt;tr&gt; 
              &lt;td&gt;&lt;font color="#000000"&gt;Matr&amp;iacute;cula:&lt;strong&gt; &lt;/strong&gt;&lt;/font&gt; 
              &lt;td&gt;&lt;input type="text" name="matricula"&gt; &lt;/tr&gt;
            &lt;tr&gt; 
              &lt;td&gt;&lt;font color="#000000"&gt;Senha:&lt;/font&gt; 
              &lt;td&gt;&lt;input type="password" name="senha"&gt; &lt;/tr&gt;
            &lt;tr&gt; 
              &lt;td&gt;&lt;input type="submit" name="Entrar" value="Entrar"&gt; &lt;/tr&gt;
          &lt;/form&gt;
        &lt;/table&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;&lt;/td&gt;

</tr>
</table>
</body>
</html>

Estava pensando em fazer essa tela para simplesmente validar o login e senha (matrícula e senha ) do usuário, e se fosse válida passaria para a segunda página, senão ficaria nela mesmo.

Obrigado

Chorus