Re: cadastro em JSP

cara, é so na action do form do seu jsp vc mandar p/ o servlet…
de uma olhada nesse artigo, talves te ajude:
http://www.guj.com.br/java.artigo.9.1.guj

[]'s

Na execução do teu servlet, após ter recebido os dados do formulário e processado-os, defina a mensagem de sucesso ou erro e repasse-a para a jsp dando um forward para a mesma.

Eh justamente com o retorno booleano que vc irá definir qual mensagem mandará para sua jsp.

Por exemplo, a validação de um cadastro de usuário, (no servlet), poderia ser feita assim:

String msg;

//Usuário já existe, nao posso cadastrar...
if(loginBean.consulta(usuario, senha)){
 msg = "Este usuário já está cadastrado na base!"; 

}else{
//Salvo o novo usuario e defino a mensagem de retorno
...
msg = "Cadastro efetuado com sucesso!";
}

request.setAttribute("mensagem", msg);
request.getRequestDispatcher("/minhaJsp.jsp").forward(request, response);

Dessa maneira vc tira a responsabilidade pelo fluxo a ser seguido de sua jsp, e a passa para o servlet…assim, sua jsp possuirá somente a responsábilidade de exibir as informações, não de controla-las…

Tem certeza que logar.LoginBeanX eh um Servlet???
Na verdade seu Servlet deve ser outra classe, pq o LoginBeanX q vc colocou acima, pelo visto, soh eh responsável pelo acesso a base de dados, com o método consulta

Pessoal,
estou há dias tentando fazer um simples cadastro em JSP dentro do eclipse. Tento fazer uma página com os campos pro user preencher, e quando ele clica no botão submit executa um servlet que pega os dados, valida e joga pro banco via jdbc, e depois devolve a confirmação de sucesso(ou erro) pra mesma página jsp.

Até então consegui fazer usando uma página jsp que chama outra jsp que chama o servlet que executa e devolve pra primeira página.;…ou seja, tem página jsp demais pra um cadastro, não?

Já pesquisei, olhei livros do Mark Kolb, do Kurniawan…mas tudo que acho inicia em um servlet controlador que chama o jsp…acho que é o tal modelo MVC…alguma idéia para iniciar com a página jsp, chamar servlet, e voltar pra página???

Obrigado.

Perfeito. Entretanto no exemplo do tutorial ele escreve o html dentro do servlet e eu gostaria de ter isso dissociado. Uma página JSP que chama o servlet HelloServlet retorna para a página jsp…

Tenho uma que quase isso, mas acho que dá para melhorar muito. Olha só:

Página LOGIN.JSP

<%@ page session = “false”%>
<jsp:useBean id=“loginBean” scope=“page” class=“logar.LoginBeanX”/>

Login.jsp

<%if (request.getParameter(“error”)!=null){%>
O Login falhou. Tente novamente.



<% } %>

<%
if (request.getParameter(“userX”) != null && request.getParameter(“passX”) !=null)
if (loginBean.consulta(request.getParameter(“userX”), request.getParameter(“passX”)))
request.getRequestDispatcher(“Index.jsp”).forward(request, response);
else
response.sendRedirect(“Login.jsp?error=yes”);
%>


SERVLET LOGINBEANX

package logar;

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

public class LoginBeanX {

private Connection con;
private Statement s;
private ResultSet rs;

public boolean consulta(String userX, String passX) {

	try {
		String driverName = "net.sourceforge.jtds.jdbc.Driver";
		String serverName = "VFE05";
		String portNumber = "1433";
		String BD 		  = "VFE05:1433";
		String BASE       = "IMAGEONE";
		String Url 		  = "jdbc:jtds:sqlserver://"+ BD + "/" + BASE;
		String username   = "sa";
		String password   = "senha";

		Class.forName(driverName);
		con = DriverManager.getConnection(Url, username, password);
		System.out.println("Conectado ao BD ImageOne \n");
		
		
		Statement s = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
		String SQL = "SELECT LOGIN FROM A1_USUARIOS WHERE LOGIN = '"+userX+"' AND SENHA ='" + passX+"'";
		ResultSet rs = s.executeQuery(SQL);
		System.out.println("Executou select no BD \n");
		
		if (rs.next()){
			rs.close();
			s.close();
			con.close();
			return true;
		}
		rs.close();
		s.close();
		con.close();
		System.out.println("Fechou conexão ao BD ImageOne \n");
		
	} catch (ClassNotFoundException e) {
		System.out.println("Erro ao carregar o Drive p/conectar a BD ImageOne \n\n");
		e.printStackTrace();
		
	} catch (SQLException e) {
		System.out.println("Erro conectar no banco ImageOne \n\n");
		System.out.println("DataBase.DataBase() --> " + e.toString());			
		e.printStackTrace();			
	}
	return false;
}

}


ISSO FUNCIONA BEM, MAS ACHO QUE HÁ OUTRAS MANEIRAS USANDO A ACTION QUE VC FALOU E DOGET / DOSET…O QUE VC ACHA?

Login:

Senha:

Interessante diogenes. Mas desta maneira não irei matar o retorno boolean da classe public boolean consulta(String userX, String passX)??
Não deveria fazer um request.getRequestDispatcher(“MESMAPAGINA.jsp”).forward(request, response); dentro da pagina JSP ao invés de colocar no servlet??

Obrigado.

Certo.

Logo acredito que minha página JSP deva apenas chamar o meu servlet logar.LoginBeanX via action do form…poderei excluir o code abaixo:

<%
if (request.getParameter(“userX”) != null && request.getParameter(“passX”) !=null)
if (loginBean.consulta(request.getParameter(“userX”), request.getParameter(“passX”)))
request.getRequestDispatcher(“Index.jsp”).forward(request, response);
else
response.sendRedirect(“Login.jsp?error=yes”);
%>

e finalmente pegar os campos no servlet com request.getParameterName(NomedoCampo)

Basicamente isso, não?

Obrigado.

Tem razão…o nome servlet saiu meio forçado mesmo.