Rede Social usando JSP, Postgres, Glassfish no Netbeans

12 respostas
F

Estou com um projeto da faculdade para criar uma Rede Social voltada ao Ensino, onde poderei usar somente JSP, e claro, Html e Java.
Para Banco de Dados escolhi o Postgres já que tenho um iMac e o SQL Server que posso pegar do MSDN não funciona por razões óbvias no Lion OSX.
O problema é que meu professor de JSP da faculdade não sabe NADA de JSP, ele mesmo diz: “Quem sabe faz, quem não sabe ensina”. Então estou passando por algumas dificuldades nessa parte.
Por enquanto consegui fazer a tela de login e cadastro de um novo usuário com mascaras nos campos, está gravando no banco de dados e conferindo login e senha na tela de login.
Agora gostaria de colocar um campo que irá pedir para que o usuário faça o upload de uma imagem, e gostaria que esta imagem aparecesse ao lado do botão “Choose”, como preview do que ele está mandando.
Peguei 2 links no fórum http://javafree.uol.com.br/artigo/851262/Manipulando-campos-BLOB-e-CLOB-com-JDBC.html e http://www.guj.com.br/java/222462-gravar-e-buscar-imagem-no-banco-de-dados-resolvido#1139030
Lá eles ensinam a mandar a foto e buscá-la no BD quando precisar, então já é uma parte a menos. Só gostaria de saber se é possível fazer esse “Preview” da imagem que o usuário estiver mandando.
Aliás, tem mais uma coisa. Preciso fazer o Layout do Profile do Usuário. Como vocês recomendam eu fazer? Dreamweaver é uma boa ou o código fica muito sujo e é dificil fazer alterações depois?

Qualquer ajuda é bem vinda.
Desde já obrigado à todos.

12 Respostas

P

Olá amigo, esse trabalho é uma boa oportunidade de vc se interar sobre jQuery, para manipular as imagens.
Outra dica é vc usar o struts 2, é simples e vai ajudar bastante, sendo assim eu recomendo vc usar o Spring 3 tb, e na view vc pode até usar jsp.
Pesquise sobre o Maven, gerenciador de dependencias antes de iniciar a configuração do ambiente de desenvolvimento.

Espero ter ajudado
Fallow

F

Beleza, estou dando uma pesquisada.
No momento estou com problema na parte de login do site. O erro que está retornando do servlet de login é o seguinte:

INFO: org.postgresql.util.PSQLException: Can't use query methods that take a query string on a PreparedStatement.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:251)
at Controller.DAO.Check.doPost(Check.java:21)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98 )
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828 )
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:680)

Este é o código utilizado:
package Controller.DAO;

import Controller.Conexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "Check", urlPatterns = "/check")
public class Check extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        String sql = "SELECT * FROM user_register WHERE login = ? and senha = ?";
        
        try {
            PreparedStatement st = Conexao.getConnection().prepareStatement(sql);
            st.setString(1, request.getParameter("login"));
            st.setString(2, request.getParameter("senha"));
            ResultSet rs = st.executeQuery(sql);
            if (rs.next()) {
                System.out.println("Logado");
            } else {
                System.out.println("Nao Funfou");
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

Pelo que eu entendi eu não posso usar um método query quando estou pegando uma String no PreparedStatement.
O login e senha está chegando normalmente do form no html pro Servlet, o problema é na hora de executar a query.
Como tratar este erro?

Obrigado

L
Felipe Cristofalo:
Beleza, estou dando uma pesquisada. No momento estou com problema na parte de login do site. O erro que está retornando do servlet de login é o seguinte:
INFO: org.postgresql.util.PSQLException: Can't use query methods that take a query string on a PreparedStatement. at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:251) at Controller.DAO.Check.doPost(Check.java:21) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98 ) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828 ) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:680)
Este é o código utilizado:
package Controller.DAO;

import Controller.Conexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "Check", urlPatterns = "/check")
public class Check extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        String sql = "SELECT * FROM user_register WHERE login = ? and senha = ?";
        
        try {
            PreparedStatement st = Conexao.getConnection().prepareStatement(sql);
            st.setString(1, request.getParameter("login"));
            st.setString(2, request.getParameter("senha"));
            ResultSet rs = st.executeQuery(sql);
            if (rs.next()) {
                System.out.println("Logado");
            } else {
                System.out.println("Nao Funfou");
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

Pelo que eu entendi eu não posso usar um método query quando estou pegando uma String no PreparedStatement.
O login e senha está chegando normalmente do form no html pro Servlet, o problema é na hora de executar a query.
Como tratar este erro?

Obrigado
Tenta mudar aqui:
PreparedStatement st = Conexao.getConnection().prepareStatement(sql);
por
Statement st = Conexao.getConnection().createStatement();
F

Mudando pra createStatement ele dá os seguintes erros:

L

cara é createStatement sem passar o sql!

Conexao.getConnection().createStatement();

e não

Conexao.getConnection().createStatement(sql);

o sql vc ja passa no executeQuery

F

luistiagos:
cara é createStatement sem passar o sql!

Conexao.getConnection().createStatement();

e não

Conexao.getConnection().createStatement(sql);
o sql vc ja passa no executeQuery</blockquote>

Puts, foi mal, não prestei atenção nisso.

De qualquer forma está com erro nas duas linhas seguintes, no st.setString();

cannot find symbol

symbol: method setString(int,java.lang.String)

location: variable st of type java.sql.Statement

Usando o createStatement() preciso mudar o setString, né?

L

É verdade me esqueci deste detalhe… use isso então:

PreparedStatement st = con.prepareStatement(sql);
    ResultSet res = st.executeQuery();
S

Eu ri para não chorar.

F

É verdade me esqueci deste detalhe… use isso então:

PreparedStatement st = con.prepareStatement(sql); ResultSet res = st.executeQuery();


Funcionou :slight_smile:
Obrigado novamente.

O problema é que meu professor de JSP da faculdade não sabe NADA de JSP, ele mesmo diz: “Quem sabe faz, quem não sabe ensina”.


Eu ri para não chorar.

Pelo menos ele é sincero. :?

F

Galera, consegui fazer o cadastro e a validação do login no banco de dados.
Minha dúvida agora é como fazer um redirecionamento do servlet de checagem do login para uma outra pagina HTML.
O servlet em questão é o seguinte:

package View;

import Controller.DAO.UsuarioDAO;
import Model.Usuario;
import java.sql.Date;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "CadastrarUsuario", urlPatterns = "/cadastrarusuario")
public class CadastrarUsuario extends HttpServlet {

    private static final long serialVersionUID = 2592677531190370632L;

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        Usuario us = new Usuario();
        UsuarioDAO rs = new UsuarioDAO();

        us.setNome(request.getParameter("name"));
        us.setNascimento(Date.valueOf(request.getParameter("birthday")));
        us.setCidade(request.getParameter("city"));
        us.setEmail(request.getParameter("email"));
        us.setExibirCidade(Boolean.parseBoolean(request.getParameter("sCity")));
        us.setExibirNascimento(Boolean.parseBoolean(request.getParameter("sDate")));
        us.setLogin(request.getParameter("login"));
        us.setSenha(request.getParameter("password"));

        boolean result = rs.register(us);

        if (result == true) {
            System.out.println("Cadastro feito com sucesso " + us.getNome() + ".");
        } else {
            System.out.println("Erro ao tentar Cadastrar.");
        }
    }
}

Obrigado

F

Consegui fazer o redirecionamento com o seguinte codigo:

RequestDispatcher dispatcher = request.getRequestDispatcher("home.html"); dispatcher.forward(request, response);

Agora tenho mais 3 dúvidas :roll:
1 - Quando ele faz o “redirecionamento” pra pagina escolhida no url do browser fica mostrando o endereço do servlet e não da página em questão. Tem como mudar isso?
2 - Peguei um código SQL pronto na net que cria as tabelas pais, estado e cidade e faz o include com todos os estados e municipios do Brasil com chave estrangeira e tudo mais. Gostaria de saber como eu faço para que no cadastro de um novo usuário apareça um Dropdown com os estados e a partir do momento que o user selecionar o estado, suas respectivas cidades apareçam no Dropdown abaixo.
3 - No servlet que eu tenho de checagem do login e senha gostaria de colocar um return com o nome da pessoa que está logando, se o login e senha conferirem com o BD, para que eu use o nome no profile desta na página que está sendo redirecionada pelo servlet.

Não sei se as dúvidas ficaram bem claras, qualquer coisa é só perguntar.
Não precisa colocar códigos prontos, como eu disse no começo do tópico meu professor de JSP não conhece a linguagem em questão, eu quero aprender, então podem colocar tutoriais, material que tenha o assunto em questão, qualquer coisa assim.

Obrigado por toda ajuda que me deram.

F

Alguem? :roll:

Criado 13 de outubro de 2011
Ultima resposta 18 de out. de 2011
Respostas 12
Participantes 4