[RESOLVIDO] SERVLETS As vezes funciona , as vezes não!?

11 respostas
pizzolatto

Socorro!

Tenho alguns servlets de cadastro que nem sempre funcionam. As vezes grava na base MySQL e as vezes não.
Mas não dá nenhuma mensagem de erro quando não efetiva o cadastro no banco de dados.
As vezes funciona de primeira, em outras preciso submeter o formulário 2 ou até 3 vezes para que os dados sejam gravados no banco de dados.
O que há de errado?

Vejam um exemplo:

SERVLET:

public class EditarNews extends HttpServlet{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		Noticia noticia = new Noticia();
		noticia.setManchete(request.getParameter("txtManchete").toString());
		noticia.setData(request.getParameter("txtData").toString());
		noticia.setDescricao(request.getParameter("txtDescricao").toString());
		noticia.setLink(request.getParameter("txtLink").toString());
		noticia.setIdgaleria(Integer.parseInt(request.getParameter("txtIdgaleria").toString()));
				
		int id = Integer.parseInt(request.getParameter("txtId").toString());
		
		NoticiasDAO noticiadao = new NoticiasDAO();
		noticiadao.edita(noticia,id);
		noticiadao.fechaConexao();
	}
}

.JSP :

<%
    String SQLEditar = "SELECT * FROM news WHERE id=?";
    NoticiasDAO dao_news = new NoticiasDAO();

    PreparedStatement pstm_edit = dao_news.getConnection().prepareStatement(SQLEditar);
	pstm_edit.setInt(1, Integer.parseInt(request.getParameter("id")));
	ResultSet rs = pstm_edit.executeQuery();
	
	rs.next();
	//Mostrar dados em campos de formulário
	//Chama Servlet Editar News
	%>
	
	<form action="EditarNews" method="get">
		Id.:<br/><input type="text" value="<%=rs.getString("id")%>" name="txtId" size="6" class="input_field" title="id" readonly="readonly"><br/>
		Manchete:<br/><input type="text" value="<%=rs.getString("manchete")%>" name="txtManchete" size="50" class="input_field" title="manchete"><br/>
		Data:<br/> <input type="text" value="<%=rs.getString("data")%>" name="txtData" size="15" class="input_field" title="data" /><br/>
		Descricão:<br/><textarea name="txtDescricao" rows="5" cols="40"> <%=rs.getString("descricao")%> </textarea>  <br/>
		Link Externo:<br/> <input type="text" value="<%=rs.getString("link")%>" name="txtLink" size="15" class="input_field" title="link" /><br/>				
		Galeria:<br/> <input type="text" value="<%=rs.getInt("idgaleria")%>" name="txtIdgaleria" size="15" class="input_field" title="idgaleria" /><br/>
		<input type="submit" name="Salvar" value="Salvar" alt="salvar" id="enviar_btn" title="Salvar" onClick="javascript:self.close()"/>
	</form>
	
	<%
		
	dao_news.fechaConexao();
%>

WEB.XML:

<servlet>
  	<servlet-name>EditarNews</servlet-name>
  	<servlet-class>br.com.pizzolatto.acoes.EditarNews</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>EditarNews</servlet-name>
  	<url-pattern>/EditarNews</url-pattern>
  </servlet-mapping>

11 Respostas

C

Tem certeza que nenhuma exception acontece? O comportamento visual correto da aplicação não necessáriamente significa que não houve exception. Dê uma olhada no log do seu servidor de aplicação se nenhuma exception está sendo lançada mesmo. Eu chutaria em problema de conexões com o banco (conexões pendentes).

rodrigocolasso

Dados de formulário, eu enviaria por POST.

pizzolatto

Caras,

nenhuma excpetion é gerada. E isso acontece tanto na web quanto no localhost. Muito estranho! Troquei de máquina, pensei que pudesse ser algum problema de geração dos .class, sei lá…

Alguns me disseram que pode ter a ver com o

private static final long serialVersionUID = 1L;

Não vi muito sentido.

rodrigocolasso

Você verificou se o id está correto, quer dizer quando você edita uma notícia o id é dessa notícia ?

Olha vou dar um “chutão”, como eu falei eu prefiro enviar via POST, você está enviando via GET e pelo que eu vi você está fechando a tela de editar cada vez que clica no botão salvar, porém ele devia enviar os arquivos para a url e dai sim enviar ao seu Servlet, será que não está dando pau nessa hora, ou seja, será que está realmente chegando a requisição toda hora ?

Coloca um system.out.printl(“Alguma coisa”); para ver se está indo para o código mesmo. Pode ser que eu esteja falando bobagem, mas não custa tentar não é ?

maior_abandonado

você printou/logou no seu dao caso alguma exceção aconteça?

tente debugar seu código… especialmente se você conseguir simular a falha…

pizzolatto

Estou fazendo alguns testes…montei outro projeto menor, um banco de dados só com uma tabela que vou editar com um um único servlet desta minha aplicação teste, vou encher de println pra ver se os dados do formulário estão sendo captados e depois retorno os resultados.
Obrigado, por enquanto.

pizzolatto

Boas notícias, na minha aplicação teste funcionou, tanto com GET quanto com POST.

Logo, deduzo que o problema está na minha aplicação original. Vou refazer alguns servlets e debugá-los pra ver o que aparece.

rodrigocolasso

pizzolatto:
Boas notícias, na minha aplicação teste funcionou, tanto com GET quanto com POST.

Logo, deduzo que o problema está na minha aplicação original. Vou refazer alguns servlets e debugá-los pra ver o que aparece.

Opa, que bom … quer dizer que minha teoria estava furada :lol:

pizzolatto

que loucura… aparentemente o problema estava no form. Como o Rodrigo havia dito. Na linha

<input type="submit" name="Salvar" value="Salvar" alt="salvar" id="enviar_btn" title="Salvar" onClick="javascript:self.close()"/>

eu tirei o OnClick e parece funcionar sem problemas. O mais curioso é que depurando o código passava pelo servlet que edita o registro no banco de dados.
…mas e agora? Alguma sugestão de como fechar a janela do formulário sem usar onClick?

rodrigocolasso

pizzolatto:
que loucura… aparentemente o problema estava no form. Como o Rodrigo havia dito. Na linha

<input type="submit" name="Salvar" value="Salvar" alt="salvar" id="enviar_btn" title="Salvar" onClick="javascript:self.close()"/>

eu tirei o OnClick e parece funcionar sem problemas. O mais curioso é que depurando o código passava pelo servlet que edita o registro no banco de dados.
…mas e agora? Alguma sugestão de como fechar a janela do formulário sem usar onClick?

Ae não estava tão errado :smiley:

Você já pensou em utilizar javascript para fazer essa requisição ?
Assim você podia enviar via ajax, esperar a resposta e em seguida fechar a janela…

Tenta ai, se precisar de ajuda é só berrar. :wink:

pizzolatto

valeu galera,

agora eu me viro. Obrigado.

Criado 25 de julho de 2011
Ultima resposta 26 de jul. de 2011
Respostas 11
Participantes 4