Ajuda com Login em JSP

Ola,

sou um iniciante em materia de JAVA e precisava de uma ajudinha. Tenho uma arquitectura com multiplos componentes JAVA para desenvolver, entre os quais JSP.
Numa das partes da arquitectura, preciso fazer um site JSP com Login do utilizador, e não sei bem como o fazer. Preciso ainda de ir a um BD MS-Access de modo a confirmar se os dados estão correctos.

Alguém me pode ajudar nisso? Agradecia toda a ajuda :razz:

Correia

opa… blz?

vc ta tendo problemas em compilar/executar o JSP? ou nao ta conseguindo fazer a lógica do Login?

o seu JSP ja está conectado corretamente ao banco de dados?
o q vc ja tem pronto?

:grin: flw!

Tudo beleza!!

Ora bem, o que eu ja tenho feito é o design do site com os componentes pra efectuar login (textboxes, Labels e botao OK)!! E estou agora parado na lógica de como efectuar o login, pois os exemplos que tenho são muito básicos e não efectuam a conexão à BD.
O que eu precisava mesmo era de uma forma (se possivel com código para entender melhor os conceitos) simples de efectuar isso, visto que sou um iniciante em JAVA.

Seria possivel uma ajuda?

Off-Topic - Desculpa ai a linguagem, mas eu sou de Portugal e por vezes há palavras que podemos não entender à primeira, mas com vontade tudo se percebe :smiley:

Obrigado pela ajuda prestada,

Correia

wepa!

sim! nao é dificil!
mas depende de como vc vai fazer isso…

vc prentede usar só JSP? ou vai usar Servlets, Beans e outras coisas??

aconselho a construir pelo menos Beans…
vc cria q uma classe q só faz a conexao. e outra classe q contem os métodos dos usuário… como por exemplo usuario.fazLogin() ou usuario.cadastrar() fica mais organizado e inteligível…

mas nao tem nada q te empessa de usar só JSP…
o q vc tem q fazer é criar um JSP q faz a conexao…
e em todas as paginas JSP vc der um <%@ include file="…" %> q ele ja vai entrar conectado no banco…

aí vc escolhe aí qual das 2 opções (só JSP… ou JSP+Servlets + Beans) q vc quer usar, q eu te falo como fazer!
bele?

e mais um usuário internacional!! :grin: :grin: :grin: :grin:
seja mto bem vindo! :grin:

flw!

Oi,

pelo que vejo, fica mais inteligivel então organizar as coisas por classes, e será isso que irei fazer.

Quanto à questão de usar só JSP ou JSP+Servlets+Beans prefiro esta última, pode ser?!

Poderia pedir-te que fosses explicando tudinho passo a passo?! É q isto de ser novo em qq coisa requer habituação e sobretudo alguma paciência de um expert como voçe!

Obrigado de novo pela ajuda, valeu!

Correia

opa! certinho!
vamos la!

primeiramente, eu nao sou expert… hehehe
em segundo, parabéns por optar em escolher JSP + Servlets + Beans… sempre q possível, é mto bom usar Orientação a Objetos… se tiver duvidas como isso funciona, aconselho primeiramente a vc a ler um tutorial (de minha autoria :grin: ) sobre OO… está em Artigos e Tutoriais > Iniciantes e Conceitos.

bom… mas vamos a explicação…
vc deve criar primeiro a classe Conecta… onde os Beans se conectar ao banco pra poder realizar os seus métodos.
vou passar uns códigos básicos, uma vez q o código depente do tipo e necessidades da sua aplicação.

Conecta.java

package app.beans;

import java.sql.*;


public class Conecta
&#123;

protected String url=&quot;jdbc&#58;mysql&#58;//.....&quot;;
protected String user=&quot;.....&quot;;
protected String pwd=&quot;.....&quot;;


private static Connection connection=null;
private static Conecta conecta=null;


/**
 * Faz a conexao.
 * verifica se já não está conectado, e se não estiver, conecta.
 * @return conecta - objeto do tipo Conecta dessa mesma classe
 */
public static Conecta getConecta&#40;&#41;&#123;
	if&#40;conecta == null&#41;&#123;
	  conecta=new Conecta&#40;&#41;;
	&#125;
	return conecta;
  &#125;

/**
 * Construtor da classe.
 * ja chama o método @link setConnection para fazer a conexão ao BD
 *
 */
public Conecta&#40;&#41; &#123; this.setConnection&#40;&#41;;&#125;

/**
 * método sincronizado que faz a conexão com o BD
 * @return true ou false, dependendo se a conexão foi feita ou não
 */
public synchronized boolean setConnection&#40;&#41;
&#123;
 try
  &#123; if&#40;connection == null&#41;&#123;
	Class.forName&#40;&quot;org.gjt.mm.mysql.Driver&quot;&#41;;
	connection = DriverManager.getConnection&#40;url,user,pwd&#41;;
	&#125;
	return true;
   &#125; catch&#40;Exception ex&#41; &#123;ex.printStackTrace&#40;&#41;;return false;&#125;
&#125;

/**
 * Pega a conexão com o BD.
 * @return a conexão.
 */
public Connection getConnection&#40;&#41;
&#123;
 try &#123; return connection;
	 &#125; catch&#40;Exception ex&#41;
&#123;ex.printStackTrace&#40;&#41;; return null;&#125;
&#125;


&#125;//fim da classe Conecta

agora um bean do Usuário
Usuario.java

package app.beans;

import java.sql.*;

public class Usuario &#123;

  private String usuario;
  private String senha;
  
  private Vector usuarios = null;

  private PreparedStatement ps=null;
  private ResultSet rs=null;
  private Conecta c1= null;
  private Connection connection = null;


  public Usuario&#40;&#41; &#123; &#125;


  public Usuario&#40;String usuario,String senha&#41;
  &#123;
  	this.usuario = usuario;
  	this.senha = senha;
  &#125;
 
  

  /**
   * Método sincronizado que permite fazer login no sistema.
   * @return &lt;b&gt;true&lt;/b&gt; ou &lt;b&gt;false&lt;/b&gt; caso encontre ou não o usuário no BD
   */
  public synchronized boolean fazLogin&#40;&#41;
  &#123;
  	try
  	&#123;
  		if&#40;connection == null&#41; conectar&#40;&#41;;
		ps = connection.prepareStatement&#40;&quot;select * from tbl_usuarios where usuario = ? and senha = ?&quot;&#41;;
		ps.setString&#40;1,this.usuario&#41;;
		ps.setString&#40;2,this.senha&#41;;
		rs = ps.executeQuery&#40;&#41;;
		if&#40;rs.isBeforeFirst&#40;&#41;&#41;
		&#123;
			return true;
		&#125;
		else
		&#123;
			return false;
		&#125;
  	&#125;
  	catch&#40;Exception ex&#41;
  	&#123;
  		ex.printStackTrace&#40;&#41;;
  		return false;
  	&#125;
  &#125;
  
    
  
  

/**
 * Liga-se com o bean Conecta para fazer a conexão com o BD
 *
 */
public void conectar&#40;&#41;&#123;
  try
  &#123;
	if&#40;c1==null&#41; c1= Conecta.getConecta&#40;&#41;;
	connection = c1.getConnection&#40;&#41;;
  &#125;
  catch&#40;Exception e&#41;
  &#123;
	System.out.println&#40;&quot;Erro em Conectar!!&quot;&#41;;
  &#125;
&#125;


&#125;

aí vc faz um Servlet q importa o bean…
e usa ele assim… usuario.fazLogin
caso retornar true ele passa pra frente, senao, nao…

espero ter ajudado!

flw!

DanielBadawi, nao fica mais melhor se usarmos struts?

Fica bem mais organizado, nao é?

eu tb sou iniciante em JAVA e estou tentando fazer um login de usuarios, e nao estou conseguindo.

o meu sistema o visual é em html e o banco é em postgreSQL. estou desenvolvendo em eclipse e dreanweaver, no servidor linux.

Chari

Ora bem,

ao passar o seu codigo para o IDE (Netbeans) ele passou bem na classe Conecta, apenas mudei os dados do acesso à BD e o tipo de driver (visto que estou a usar Ms-Access e voce indicou mysql).

Ao passar a classe Usuario ele dá erro (Cannot Resolve symbol) na declaração da variavel “private Conecta c1= null;”

Aparentemente ele não consegue “ver” a classe conecta. Só uma questão de algibeira, ao referir o package app.beans é um package que eu tenho de criar ou já existe este package no Java?! Se tiver de criar um package como faço isso?

Por fim, uma duvida em relação ao Servlet, tenho de o criar como se de uma classe se tratasse certo?! E dps indico a sua utilizaçao no Login.jsp nao é? Mas como faço isso?!

Correia

[color=“darkblue”]Olá!!
Qnd vc criou o ambiente de sua aplicação todas as classes ficam no diretorio /WEB-INF/lib da mesma, então vc deve colocar suas classes lá!
Os packages funcionam como os imports, porém se vc colocou ele em algum sub-diretorio vc terá que colocar a separação deles atravez de “.”…
Nisso eu espero ter te ajudado, porém parte de criar servlets eu nunca testei!

[]'s[/color]

Oi,

fiz como voce indicou e colocei as classes Conecta e Usuario dentro da pasta WEB-INF/lib…e qd tento compilar a classe Usuario ele dá o “Cannot Resolve Symbol” na linha que indiquei à pouco.

Obrigado pela ajuda na mesma, mas continuo com problemas aqui ainda!

Correia

[color=“darkblue”]Vc pode colocar como ficaram os seus códigos para gente conferir??

:wink: [/color]

<%
Amigao to presisando de um material desse ae se alguem te der uma resposta me da um toque flws! valheu !

Leozzyguitar@hotmail.com(MSN)
GUITAR_HEROr0x(Brasnet #internautaz)

                                                  :twisted: %&gt;

Oi,

graças à ajuda incansavél de um user aqui do Forum (riqueneil) consegui já ter algumas noções do que preciso, e ele até me ajudou com código e tudo, 5 estrelas [;)]

Acontece que agora, tenho uma classe Login dentro de WEB-INF/lib que faz o acesso à BD e tem os métodos para validar o Login. Depois, deveria fazer o import dela no Login.Jsp e dai passar os valores das textfields (username e password) para os metodos dessa classe.

O Problema está que não consigo fazer o Compile no Netbeans do file Login.jsp e apenas fiz o import assim:

&lt;%@ page import=&quot;Login&quot;%&gt;

Alguem me pode ajudar?!
Mais uma vez, obrigado pela ajuda já prestada,

Correia

Boas,

alguem me pode então dar umas luzes nesta questão de login em JSP, por favor?! Estou a entrar na fase do desespero, e na volta é algo bastante simples.

Grato desde já por toda a ajuda possivel,

cumprimentos,
Correia

Cara,

 O problema do netbeans se resolve dando um BUILD ALL no diretório. e o netbeans não compila JSP... o JSP deve ser rodado pelo ie...

espero ter ajudado...

Valeu

Fvilella

Boas,

pessoal, depois de muita investigação na net, e tutoriais de jsp, la consegui solucionar o meu problema com o Login do JSP.
Criei um Servlet que trata das ligaçoes à bd e controla os dados inseridos pelo user.

Agora o meu problema é o seguinte, tenho uma nova pagina JSP onde faço o Registo (Cadastro) de um novo user, e a minha questão é, onde é que eu devo incluir codigo de tratamento desse caso, no JSP ou no Servlet?!
Vou deixar ai o codigo do meu Servlet para voces terem uma ideia do q esta feito:

[code]import java.io.;
import java.util.
;
import javax.servlet.http.;
import javax.servlet.
;
import java.sql.*;

public class LoginServlet extends HttpServlet
{
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
doGet(request,response);
}

public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session = request.getSession(true);

PrintWriter out = response.getWriter();
try
{
String driverName="sun.jdbc.odbc.JdbcOdbcDriver";
String dbUrl="jdbc:odbc:BDTrabalho";
Class.forName(driverName);
java.sql.Connection db =DriverManager.getConnection(dbUrl,"","");
if ((session.getAttribute("user") == null) || (!session.getAttribute("ip").equals(request.getRemoteAddr())))
{
java.sql.PreparedStatement pStmt = db.prepareStatement("SELECT * FROM cliente WHERE Nome =? AND Password=? ");
pStmt.setString(1, request.getParameter("txtUsername"));
pStmt.setString(2, request.getParameter("txtPassword"));
java.sql.ResultSet rs = pStmt.executeQuery();
if(!rs.next())
{
System.out.println("Username is not valid.");
request.setAttribute("msg", "Username is not valid.");
RequestDispatcher rd = request.getRequestDispatcher("…/login_ondesign.jsp");
rd.forward(request, response);
}
else do
{
int id = rs.getInt(1);
String account = rs.getString(2);
session.setAttribute("user", new Integer(id));
session.setAttribute("account", account);
session.setAttribute("ip", request.getRemoteAddr());
System.out.println("User " + session.getAttribute("user") +" has logged on.");
request.setAttribute("msg", "User has logged on.");
RequestDispatcher rd = request.getRequestDispatcher("…/Welcome.jsp");
rd.forward(request, response);
}
while(rs.next());
rs.close();
}
else
{
System.out.println("User has already logged on.");
request.setAttribute("msg", "User has already logged on.");
RequestDispatcher rd = request.getRequestDispatcher("…/Welcome.jsp");
rd.forward(request, response);
}
db.close();
}
catch(Exception exp)
{
System.out.println("Exception: "+ exp);
}
out.close();
}
}[/code]

Obrigado por toda a ajuda já prestada
Correia