Conexao - JSP

9 respostas
_DyLeR_

Bom dia pessoal, sou novo em JAVA e estou tendo umas dificuldades… Estou estudando usando o Eclipse.

Fiz uma classe de conexão, e funciona perfeitamente, como segue abaixo:

package br.com.treinaweb.parte3;

public class TesteConexao {

public static void main(String[] args) {
	
	Usuario c = new Usuario();
	String login = "[email removido]";
	String senha = "0000";
	String idusuario = c.verificaUsuario(login, senha);
	System.out.println("IdUsuario: " + idusuario);

}

}

Isso funciona eh ele traz do banco o id do usuario, mas quando quero colocar isso no JSP ele da erro… segue o codigo abaixo:

<% Usuario c = new Usuario(); String login = request.getParameter("login"); String senha = request.getParameter("senha");
String nome = c.verificaUsuario(login, senha);

out.println("Login Correto. Nome: " + nome);

%>

Erro:

SEVERE: Servlet.service() for servlet jsp threw exception

java.lang.NullPointerException

at br.com.treinaweb.parte3.Usuario.verificaUsuario(Usuario.java:20)

at org.apache.jsp.verificalogin_jsp._jspService(verificalogin_jsp.java:69)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Unknown Source)
a Linha 20 da Class Usuario é:

public String verificaUsuario(String login, String senha){

String idusuario = “”;
String q = "";
	q += " SELECT nome FROM usuario ";
	q += " WHERE login = '"+login+"' ";
	q += " AND senha = '"+senha+"'";
	
	Connection con = Conexao.getConnection();
	try{
		Statement st = (Statement) con.createStatement();
		ResultSet rs = st.executeQuery(q);
		if(rs.next()){
			idusuario = rs.getString("nome");
		}
	} catch (SQLException e) {
		System.out.println(e.getMessage());
	}
	return idusuario;
}

Alguém poderia me ajudar?

9 Respostas

Luiz_Aguiar

Não use scriptlets (código Java dentro de JSP) JAMAIS, por nada no mundo.

Coloque código dentro das tags CODE por favor.

[]s

_DyLeR_

Luiz Aguiar,

Obrigado pela dica, mais estou seguindo o curso basico de J2EE… devem está ensinando o basico, pra depois vim pro avançado, entendeu? vc consegue sanar minha duvida? obrigado!

_DyLeR_

Alguem me ajuda? parece ser simples esse problema ai :frowning:

A

cara, coloca o código da tua clase usuário pra gente poder dar uma olhada melhor

esse código que você escreveu acima, coloca ele no formato para código do guj, para tanto, coloque [code]pra iniciar e [/code] para finalizar, é como se fosse o tag (remove o * antes do code e do /code)

e posta completo tua conexão, teu jsp e a classe Usuário que fica bem mais fácil para te ajudarmos

_DyLeR_

Andre,

Segue abaixo

Obs: estou seguindo um cursinho online…

Vamos la

Conexão:

package br.com.treinaweb.parte3;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {
	public static String status = "";
	
	public static Connection getConnection(){
		Connection con = null;
		try{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			String url = "jdbc:mysql://localhost/loja?user=root&password=";
			con = DriverManager.getConnection(url);
			status = "Conexão Aberta";
		} catch (SQLException e) {
			status = e.getMessage();
		} catch (ClassNotFoundException e) {
			status = e.getMessage();
		} catch (Exception e) {
			status = e.getMessage();
		}
		return con;
	}
}

Classe Usuario:

package br.com.treinaweb.parte3;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Statement;

public class Usuario {
	public String verificaUsuario(String login, String senha){
		String idusuario = "";
		
		String q = "";
		q += " SELECT nome FROM usuario ";
		q += " WHERE login = '"+login+"' ";
		q += " AND senha = '"+senha+"'";
		
		Connection con = Conexao.getConnection();
		try{
			Statement st = (Statement) con.createStatement();
			ResultSet rs = st.executeQuery(q);
			if(rs.next()){
				idusuario = rs.getString("nome");
			}
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
		return idusuario;
	}
}

Classe TestaUusuario (essa classe funciona e faz conexao com o banco normal)

package br.com.treinaweb.parte3;

public class TesteConexao {

	public static void main(String[] args) {
		
		Usuario c = new Usuario();
		String login = "[email removido]";
		String senha = "0000";
		String idusuario = c.verificaUsuario(login, senha);
		System.out.println("IdUsuario: " + idusuario);

	}

}

E a pagina JSP: Essa nao funciona

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="br.com.treinaweb.parte3.Usuario"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login</title>
</head>
<body>
<%
	Usuario c = new Usuario();
	String login = request.getParameter("login");
	String senha = request.getParameter("senha");
	
	String nome = c.verificaUsuario(login, senha);
	
	out.println("Login Correto. Nome: " + nome);
	//if(nome.isEmpty()){
		//out.println("Login Correto. Nome: " + nome);
	//} else {
		//out.println("Login incorreto");
	//}
%>
</body>
</html>
A

Primeiro de tudo, não desmerecendo o curso que você está fazendo, mas está meio que uma zona o que você está criando, mesmo que o curso seja online e esteja no início, isso é um tanto bagunçado. Aproveita que o primeiro passo você já deu, que é acessar o fórum do guj ( :lol: ) o segundo passo é iniciar a apostila do FJ21 que você terá algo bem mais estruturado e ganhará uma noção maior de como renderizar o seu código e aplicá-lo melhor.

Voltando ao seu problema:

no seu jsp, você está solicitando algo que você não passou em momento nenhum.

eu tenho esta URL = http://…/pagina.jsp?nome=André

String nome = request.getParameter("nome"); 
//isso irá capturar o parâmetro que vem depois da ? que no 
//caso é o parâmetro nome com o valor André

out.println(nome);
//ele irá imprimir André

no que você está passando no seu jsp:

String login = request.getParameter("login");
//você está solicitando da sua URL o parâmetro login que
//não existe (Entra na exceção NullPointerException)

String senha = request.getParameter("senha");
//você está solicitando da sua URL o parâmetro senha que também 
//não existe (Entra na exceção NullPointerException)

deu pra ver?

Guevara

A conexão na sua jsp pode ser feita assim:
Exemplo:

<%-- Cria conexão com banco de dados --%>   
    
    <sql:setDataSource 
         driver="org.postgresql.Driver"
         url="jdbc:postgresql://localhost:5432/scaweb"
         user="aluno"
         password="12345"
         var="dataSource" />
         
    <%--  Fim da conexão  --%>

 <%--  Consulta ao banco  --%>
<sql:query var="cursos" dataSource="${ dataSource }">
        select * from  curso order by descricao
    </sql:query>
<%--  Fim da consulta ao banco  --%>

<%--  Inicio do Form para pegar os dados vindo do banco  --%>

<div id="grid">
    <table align="center">     
    <tr> 
    <th width="400">Descri&ccedil;&atilde;o</th>
    <th width="115">Carga Hor&aacute;ria</th>
    <th width="60">Per&iacute;odos</th>
    <th width="50">Alterar</th>
    <th width="50">Excluir</th>
    </tr>
        
    <c:forEach var="linha" items="${ cursos.rows }">
    <tr>
        <td class="esquerda">${ linha.descricao }</td>
        <td>${ linha.carga_horaria }</td>
        <td>${ linha.num_periodos }</td>
        <td><button
            onclick="javascript:atualizar('${linha.cod_curso}',
                      '${linha.descricao}',
                      '${linha.carga_horaria}',
                      '${linha.num_periodos}',
                      'alt');"><img 
             src="imagens/alterar.jpg"
             alt="alterar curso: ${linha.descricao}"></button></td>
        <td><button
            onclick="javascript:atualizar('${linha.cod_curso}',
                    '${linha.descricao}',
                    '${linha.carga_horaria}',
                    '${linha.num_periodos}',
                    'exc');"><img 
             src="imagens/excluir.jpg"
             alt="excluir curso: ${linha.descricao}"></button></td>
    </tr>        
    </c:forEach>           
    </table>    
    </div>  
<!-- fim da div grid -->
<%--  Fim do form  --%>

Troque os dados pelos seus e tente usar.
Eu tb aprendi scriplets na faculdade, isso era usado na década de 90 e já está condenado, não deve ser mais usado. Assim que puder pare de usar scriplets e passa a usar algum framework, tipo Struts 2 ou VRaptor 3, que usam o padrão MVC.

_DyLeR_

andre.froes ,

Tudo bem, concordo que o curso é fraco hehehehe

Agora estou passando os parametro certo sim…

String login = request.getParameter(“login”);
String senha = request.getParameter(“senha”);

Estou enviando de um fomulario via POST… e teste no lado servidor e ele imprimiu os valores:

out.println(login);
out.println(senha);

Creio que o erro, pode está em outro lugar nao ai, concorda?

F

Parece que con está null.
Se for isto, quer dizer que a conexão não foi estabelecida com o banco de dados.
E ao tentar usar con (que está null), vc gera a Exception.
Vê aí se o valor de conn é null após a chamada ao getConnection.

Criado 25 de maio de 2010
Ultima resposta 25 de mai. de 2010
Respostas 9
Participantes 5