Jsp e servlets

7 respostas
netocazuza

Estou fazendo um curso de Jsp e ServLets da Rlsystem e antes de relatar o meu problema já digo que comecei vários outros dessa empresa e não recomendo pra ninguém. Não dão assistência nenhuma, e todo código dá erros, e vc fica com as aulas paradas, sem poder avançar. Vc paga os cursos por um ano, mas no final não termina nada. Assistência zero.
Nesse caso específico, estou na aula 6, e não consigo fazer um projeto do site funcionar pois não conecta ao banco de dados nem a pau. Sei que pode ser um problema com o mysql do meu pc, mas como alguém que está fazendo curso pode resolver um problema tão complexo? O meu formulário salva os dados numa tabela mysql, mas quando clico no botão cadastrar, retorna a seguinte mensagem:
Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
E não salva nada. Já fiz com o meu código, que digitei no eclipse, e com o código fonte que baixei do site, e dá o mesmo erro. O MySQL tá instalado e rodando, o banco de dados foi criado e a tabela também, e aparentemente é algum problema de comunicação, que não consigo descobrir. Abre o formulário no navegador, vc digita os dados, clica em enviar, e retorna esse erro, e não grava nada.
Então gostaria de superar esse problema pra poder avançar com esse projeto, pois já é o terceiro que começo e trava por algum problema desse tipo que fica sem assistência. Segue o código pra que dêem uma olhada, embora eu ache que o problema é só comunicação com o banco.
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class NovoChamadoServlet extends HttpServlet {
	
    

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			PrintWriter out = response.getWriter();
			out.println("<html>");
			out.println("<head>");
			out.println("<title>Novo Chamado</title>");
			out.println("</head>");
			out.println("<body>");
			
			out.println("<h1>Preencha as informações do chamado</h1>");
			out.println("<hr/>");
			out.println("<form method='POST'>");
			out.println("Título: <br><input type = 'text' name='txtTitulo'>");
			out.println("<br>");
			out.println("Conteúdo:<br> <textarea name='txtConteudo' rows='10' cols='40'></textarea>");
			out.println("<br>");
			out.println("<input type='submit' value='Abrir Chamado'>");
			out.println("</form>");
			
			
			out.println("<br>");
			out.println("<a href ='http://localhost:8080/Chamados/ListarChamados'>Listar Chamados</a>");
			out.println("<br>");
			out.println("<a href ='/Logoff'>Sair</a>");
			out.println("</body>");
			out.println("</html>");
		}catch (IOException e) {
			
		}
	
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			PrintWriter out = response.getWriter();
		
			out.println("<hr/>");
			String titulo = request.getParameter("txtTitulo");
			String conteudo = request.getParameter("txtConteudo");
				if(titulo.trim().length() < 4) {
					out.println("Preencha o campo titulo...");
				}else if(conteudo.trim().length() < 4){
					out.println("Preencha o campo Conteudo");
				}else {
					try {
						Class.forName("com.mysql.jdbc.Driver");
						String SQL = "INSERT INTO chamados (titulo, conteudo) VALUES (";
						SQL += " '"+ titulo +"', '"+ conteudo +"') ";
						try {
							Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/chamados_rlsystem", "root", "neto72");
							
							PreparedStatement pstm = conn.prepareStatement(SQL);
							
							//Date dataSQL = new Date(new java.util.Date().getTime());
							
							//SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
							// dt.format(data);
						
							pstm.setString(1, titulo);
							pstm.setString(2, conteudo);
							//pstm.setDate(3, dataSQL);
							
							pstm.execute();
							
							pstm.close();
							
							conn.close();
						}catch (SQLException e) {
							out.println("Problema no banco de dados: " + e.getMessage());
						}
					}catch(ClassNotFoundException ex) {
						out.println("Problema ao carregar o Driver de Conexão!");
					}
				}
		
		
		
		
	}

}

7 Respostas

staroski

Se você usa PreparedStatement, então você precisa usar ? nos parâmetros da String da query.

// com essa query
String SQL = "INSERT INTO chamados (titulo, conteudo) VALUES ( ?, ? )";

// você vai setar os parâmetros assim
pstm.setString(1, titulo);   // valor da primeira interrogação
pstm.setString(2, conteudo); // valor da segunda interrogação
netocazuza

Fiz as alterações, mas dá o mesmo erro. Fica parecendo que não comunica com mysql, e aparentemente ele tá instalado tudo certinho. Tem ficar em algum local específico essa instalação do mysql, ou o java acha, independente de onde estiver?

Daniel_Dias

Voce adicionou o jar do mysql na pasta lib do seu projeto ? ou colocou a dependência no maven ?

netocazuza

Sim, adicionei.

Daniel_Dias

tente isso : “jdbc:mysql://localhost:3306/chamados_rlsystem”, “root”, “neto72” , e verifique se tambem se chamado_rlsystem esta criado.

A porta padrão para mysql é 3306, caso não for, verifique em qual porta o mesmo esta rodando.

netocazuza

Funcionou agora, pessoal, mas gostaria de entender o que aconteceu. Usei a dica do staroski e ainda deu erro, mas funcionou quando eu coloquei a porta na linha de conexão. O problema é que no exemplo da empresa do curso, não tem essa porta e em tese funcionou. Alguém pra explicar? Vejam o código como ficou (só a parte da conexão):
Connection conn = DriverManager.getConnection("jdbc:mysql:/**/localhost:3340/**chamados_rlsystem", "root", "neto72");

Daniel_Dias

Quando voce não informa a porta no na String o mesmo assume que ele este rodando na porta padraõ 3306.
Provavelmente não funcionou na porta padrão, pois algum recurso esta usando essa porta.

Criado 14 de julho de 2017
Ultima resposta 14 de jul. de 2017
Respostas 7
Participantes 3