Login em JSP

14 respostas
S

Olá. Aproveitando os outros tópicos aqui já discutidos, estou implementando um login. Porém ta complicado.

Vou colocar os arquivos que ja implementei e minhas perguntas referentes a eles. Sou iniciante em java e principalmnete jsp.

arquivo index.jsp

<html>
    <head><title>JSP Page</title></head>
    <body>

        <CENTER>        
            <h1>Projeto Votorantin</h1><BR><BR><BR><BR>
            <form name="login" action="/LoginServlet" method="post">
                Usuário: <input type="text" name="username"/>
                <br/>
                Senha: <input type="password" name="password"/>
            <imput type="submit" value="Logar">
            </form> 
        </CENTER>        
    </body>
</html>

arquivo LoginServlet.java

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {
    
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
    }
    
    public void destroy() {
        
    }
    

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.close();
    }
    

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        String username = request.getParameter( "username" );
        String password = request.getParameter( "password" );
        
        if ( login(username, password) ) {
            
            request.getSession().setAttribute( "user", username );
            request.getServletDispatcher( "/projetos.jsp" ).
                    forward( request, respose );
            
        } else { // dados de login inválido
            
            request.getServletDispatcher( "/index.jsp" ).
                    forward( request, respose );
        }
    }
    
    public boolean login( String nome, String senha) {
        try {
            Class.forName("org.postgresql.Driver").newInstance(); // carrega o driver
        } catch ( ClassNotFoundException e ) {
            System.out.println( e.toString() );
        } catch (InstantiationException e) {
            System.out.println( e.toString() );
        } catch (IllegalAccessException e) {
            System.out.println( e.toString() );
        }
        
        Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost","strelow","MinhaSenha" );
        
        Statement stm = con.createStatement();
        try {
            Connection con = DriverManager.getConnection( "testebd" );
            
            Statement stm = con.createStatement();
            String sql = "SELECT nome_users, password_users FROM users " +
                    "WHERE nome_users = " + rn.devStr( nome ) +
                    " AND password_users = " + rn.devStr( senha ) ;
            PreparedStatement stmt_at = con.prepareStatement(sql);
            ResultSet res = stmt_at.executeQuery();
            if ( res.next() ) // se resultSet possuir registros então usuário foi reconhecido
            {
                res.close();
                stm.close();
                con.close();
                return true;
            }
            res.close();
            stm.close();
            con.close();
        } catch ( SQLException e ) {
            System.out.println( e.toString() );
        } catch ( Exception e ) {
            System.out.println( e.toString() );
        }
        return false;
    }
    
    

    public String getServletInfo() {
        return "Short description";
    }
    
}

arquivo projetos.jsp

<html>
    <head><title>JSP Page</title></head>
    <body>

        <%
            if ( session.getAttribute( "user" ) == null ) {
                // o usuario nao esta logado
                // redirecionar para login.jsp
            }
        %>
        
        Escolha o Projeto !!!
        
    </body>
</html>

Minhas dúvidas são a seguinte:

No arquivo LoginServlet eu editei o método doPost. Isso ta certo? É dessa maneira?

Tambem adicionei aquele mesmo servlet o método login, mas não sei se não deveria ter criado outro servlet…

Tipo, tudo o que se refere ao acesso ao banco de dados tem o seguinte erro:

C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.5\webapps\ROOT\Votorantin\src\com\foo\LoginServlet.java:99: cannot find symbol
symbol : class Connection
location: class com.foo.LoginServlet
Connection con = DriverManager.getConnection( “jdbc:postgresql://localhost”,“strelow”,“minhaSenha” );

Outra coisa que ta com erro é o seguinte:

request.getServletDispatcher( "/projetos.jsp" ). forward( request, respose );

erro:
C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.5\webapps\ROOT\Votorantin\src\com\foo\LoginServlet.java:79: cannot find symbol
symbol : variable respose
location: class com.foo.LoginServlet
forward( request, respose );

Agradeço se puderem me dar um help. Valeu pessoal.

14 Respostas

M

Bem, será da maneira q tu achar necessário :roll:

O ideal seria tu ter alguma classe de negócio com um método de login… e não atirar tudo num servlet

certifique-se de q esteja importando os pacotes necessários =p

é response e não respose champz :joia:

S

Opa!!! Ta indo o trosso aqui.

Mais uma pergunta:

no meu arquivo index.jsp

<html>
    <head><title>JSP Page</title></head>
    <body>

        <CENTER>        
            <h1>Projeto Votorantin</h1><BR><BR><BR><BR>
            <form name="login" action="/LoginServlet" method="post">
                Usuário: <input type="text" name="username"/>
                <BR>
                Senha: <input type="password" name="password"/><BR><BR>
                <input type="submit" value="Logar">
            </form>           
        </CENTER>        
    </body>
</html>

eu coloquei um action="/LoginServlet"

só que quando executei deu a seguinte mensagem:

HTTP Status 404 - /LoginServlet

type Status report

message /LoginServlet

description The requested resource (/LoginServlet) is not available.
Apache Tomcat/5.0.28

Tenque de alguma forma chamar o servlet na pagina jsp acima ? Ou ele já fica configurado no web.xml ?

PS: to lendo o tutorial ainda.

Abraços.

M

pra vc chamar o seu servlet por “/LoginServlet”, certifique-se de q ele esteja mapeado com o url-pattern no web.xml com o mesmo valor…

<url-pattern>/LoginServlet</url-pattern>

note a “/” no início…

S

Opa galera.

if ( login(username, password) ) {
            
            request.getSession().setAttribute( "user", username );
            System.out.println("OK!!");
            request.getServletDispatcher( "/projetos.jsp" ).forward( request, response );
            
        } else { // dados de login inválido
            
            System.out.println("ERRO!!");
            request.getServletDispatcher( "/index.jsp" ).forward( request, response );
        }
    }

Eu peguei esse exemplo e não sei o que é esse código, foi o único que não entendi:

request.getServletDispatcher( "/index.jsp" ).forward( request, response );

Aparentemente ele ta com erro? Esse código faz o que?

É que agora to executando e não aparece nada na tela depois que mando executar… não aparece nem erro.

Podem ver no endereço strelow.no-ip.org:8084/Votorantin/index.jsp

S

Consegui pessoal. Problema resolvido.

Assim que surgir vou incomodar vocês dinovo.

Abraços.

M

esse código basicamente redireciona a requisição pra index.jsp

S

Galera. Não sei mais o que fazer.

Alguns até disseram pra mim mudar pro php. :frowning:

Vou colar os codigos do que eu fiz… Se alguem puder me ajudar…

<html>
    <head><title>JSP Page</title></head>
    <body>
        <CENTER>        
            <h1>Projeto Votorantin</h1><BR><BR><BR><BR>
            <form name="login" action="LoginServlet" method="post">
                Usuário: <input type="text" name="username"/>
                <BR>
                Senha: <input type="password" name="password"/><BR><BR>
                <input type="submit" value="Logar">
            </form>           
        </CENTER>        
    </body>
</html>
package com.foo;

import java.io.*;
import java.net.*;
import java.sql.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
 *
 * @author LSZ
 * @version
 */
public class LoginServlet extends HttpServlet {
    
    /** Initializes the servlet.
     */
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
    }
    
    /** Destroys the servlet.
     */
    public void destroy() {
        
    }
    
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        /* TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet</title>");
        out.println("</head>");
        out.println("<body>");
         
        out.println("</body>");
        out.println("</html>");
         */
        
        out.close();
        
    }
    
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String username = request.getParameter( "username" );
        String password = request.getParameter( "password" );
        
        if ( login(username, password) == true ) {
            
            request.getSession().setAttribute( "user", username );
            request.getRequestDispatcher( "/projetos.jsp" ).forward( request, response );
            
        } else { // dados de login inválido
            
            request.getRequestDispatcher( "/login.jsp" ).forward( request, response );
        }
    }
    
    public boolean login( String nome, String senha) {
        try {
            Class.forName("org.postgresql.Driver").newInstance(); // carrega o driver
        } catch ( ClassNotFoundException e ) {
            System.out.println( e.toString() );
        } catch (InstantiationException e) {
            System.out.println( e.toString() );
        } catch (IllegalAccessException e) {
            System.out.println( e.toString() );
        }
        
        Connection con = null;
        try {
            con = DriverManager.getConnection("jdbc:postgresql://localhost/testebd","strelow","MinhaSenha");
        } catch ( Exception e ) {
            e.printStackTrace();
        }
                
        
        try {
            String sql = "SELECT nome_users, password_users FROM users " +
                    "WHERE nome_users = \'" + nome + "\' " +
                    "AND password_users = \'" + senha + "\';";
            
            PreparedStatement stmt_at = con.prepareStatement(sql);
            ResultSet res = stmt_at.executeQuery();
            if ( res.next() ) // se resultSet possuir registros então usuário foi reconhecido
            {
                res.close();
                stmt_at.close();
                con.close();
                return true;
            }
            res.close();
            stmt_at.close();
            con.close();
        } catch ( SQLException e ) {
            System.out.println( e.toString() );
        } catch ( Exception e ) {
            System.out.println( e.toString() );
        }
        return false;
    }
    
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    
}
<html>
    <head><title>JSP Page</title></head>
    <body>

        <%
            if ( session.getAttribute( "user" ) == null ) {
                // o usuario nao esta logado
                // redirecionar para login.jsp
                request.getRequestDispatcher( "/login.jsp" ).forward( request, response );
            }
        %>
        
        Escolha o Projeto !!!        
    </body>
</html>
<html>
    <head><title>JSP Page</title></head>
    <body>
        <CENTER>        
            <h1>Faça seu Login</h1><BR><BR><BR><BR>
            <form name="login" action="LoginServlet" method="post">
                Usuário: <input type="text" name="username"/>
                <BR>
                Senha: <input type="password" name="password"/><BR><BR>
                <input type="submit" value="Logar">
            </form>           
        </CENTER>        
    </body>
</html>

Acho que ta chamando o servlet blz. Porque eu entro na pagina digito um user e senha… mas sempre vai pra página de login. Derrepente o problema ta no acesso a base… mas nào acho qual é o problema.

Se alguem puder ajudar eu agradeço.

Abraços.

S

Aew pessoal.

Não sei se alguem ainda tava quebrando a cabeça pra tentar me ajudar… mas vim dizer aqui que funcionou.

O problema é que não tinha setado o patch para conexão com o banco…

Que coisa né???

Bom, próxima dúvida: Sempre que eu tiver que executar uma consulta, alteração, cadastro, exclusão… no banco de dados. Preciso criar uma nova conexão ou é só mandar executar a query ?

Abraços.

M

É interessante vc fazer uso de um datasource implementado pelo seu container… Dê uma pesquisada sobre :joia:, aqui no Portal Java tem muitos tópicos sobre isto.

S

Blz Matheus. Vou procurar… muito obrigado pela dica.

Tipo. Ontem eu mandava executar pelo NetBeans e abria a página jsp tudo blz. Hoje eu mando o NetBeans executar e ele não abre… da um erro muito loco. Mas quando eu executo via browser localhost:8084/… ele funciona.

Peguei um erro mas não sei se da pra analizar por aqui:

init: deps-jar: compile: compile-jsps: run-deploy: Starting server Bundled Tomcat (5.0.28) Starting Tomcat process... Tomcat server started. In-place deployment at C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.5\webapps\ROOT\Votorantin\build\web deploy?config=file:/C:/Arquivos%20de%20programas/Apache%20Software%20Foundation/Tomcat%205.5/webapps/ROOT/Votorantin/build/web/META-INF/context.xml&war=file:/C:/Arquivos%20de%20programas/Apache%20Software%20Foundation/Tomcat%205.5/webapps/ROOT/Votorantin/build/web/ Server returned HTTP response code: 403 for URL: http://localhost:8084/manager/deploy?config=file:/C:/Arquivos%20de%20programas/Apache%20Software%20Foundation/Tomcat%205.5/webapps/ROOT/Votorantin/build/web/META-INF/context.xml&war=file:/C:/Arquivos%20de%20programas/Apache%20Software%20Foundation/Tomcat%205.5/webapps/ROOT/Votorantin/build/web/ C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.5\webapps\ROOT\Votorantin\nbproject\build-impl.xml:280: org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment$DeploymentException: Deployment failed. BUILD FAILED (total time: 46 seconds)

Como se pode ver ele inicia o tomcat, porem não envia pro browser executar.

Abraços.

S

matheus, deixa eu ver se entendi…

Se eu criar um datasource no meu container eu não preciso estabelecer a conexão com a base sempre?

Eu crio a conexão dentro do container e então só chamo uma conexão do pool de conexões e executo o comando que quero? É isso ou to viajando?

Olhei no tópico: http://www.portaljava.com.br/home/modules.php?name=Forums&file=viewtopic&t=6336&highlight=datasource+container&sid=f95c39146a045633e06284b38a1b68fd

É isso? É só mudar no arquivo xml como mostra no exemplo do tópico que postei acima?

Abraços.

M

Exatamente, deixe q o container gerencie essas conexões pra ti, só lembre de devolver a referencia da conexão q vc for adquirir dando um connection.close() nos seus catch … Sobre o XML, fique atento para a versão do Tomcat q vc estiver usando, o melhor q tens a fazer é consultar a documentação da sua versão e ver os exemplos de criação de DataSource para esta versão. :joia:

S

Tipo, então eu não precisaria ter feito o login que estava fazendo no servlet acima né?

Outra coisa, podes me mandar endereços de sites feito em jsp. Algo que você fez derrepente.

Abraços.

M

“Strelow”:
Tipo, então eu não precisaria ter feito o login que estava fazendo no servlet acima né?

Bem, o legal seria tu ter um componente no teu negócio q fizesse esse login, e usá-lo a partir de uma action.

Não tenho nenhum trabalho disponível publicamente, os sistemas q faço são todos pra serem acessados internamente de empresas, como aplicações financeiras, etc… :roll:

Criado 23 de junho de 2005
Ultima resposta 27 de jun. de 2005
Respostas 14
Participantes 2