You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Si...@planalto.gov.br on 2006/06/30 16:51:28 UTC

problem with doPost method - executed twice

Dear all,

I have developed a web application that is running under tomcat 5.5.17 that
is under windows XP.

I have a servlet that retrieves data from a html form, creates an object and
passes this object to a manager class that inserts the data into Oracle.

Everything works fine except that I noticed that my doPost method executes
twice each command. It is incrementing twice the Oracle sequence and
inserting twice the same record. 

Does anyone have a clue on what is going on?

When I look into the table this is what I get:

SQL> select * from marcapropriedade;

IDMARCAPROPRIEDADE DESCRICAO
------------------ ------------------------------
                 1 Acordos Internacionais
                 2 Adm Pública Federal
                 3 Defesa
                 4 Mercosul
		    45 lalalala
                46 lalalala
                47 papapapapapa
                48 papapapapapa
                49 another test
                50 another test               

10 linhas selecionadas.

============================================================================
================
This is my servlet:

//package servlets;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

import objeto.MarcaPropriedade;
import objeto.MarcaPropriedadeGestor;

public class RegistraMarcaPropriedade extends HttpServlet {

  /**
   * Process the HTTP Post request
   */
  public void doPost(HttpServletRequest request, HttpServletResponse
response)
              throws ServletException, IOException {

System.out.println("I am here 1");

    // Create object to store information from previous form
    MarcaPropriedade marcaPropriedade = new MarcaPropriedade();
    marcaPropriedade.setDescricao(request.getParameter("txtDescricao"));
    System.out.println(marcaPropriedade.getDescricao());

System.out.println("I am here 2");
 
    // Create a MarcaPropriedadeGestor to add marcaPropriedade to the
database
    MarcaPropriedadeGestor marcaPropriedadeGestor = new
MarcaPropriedadeGestor();
    marcaPropriedadeGestor.add(marcaPropriedade);

System.out.println("I am here 3");
    
    // Release resources
	marcaPropriedadeGestor.releaseResources();      
   
	// Here the registration is complete.
    // Now send the user to the 'Relação de Marcas de Propriedades' page
    RequestDispatcher dispatcher =
 
this.getServletContext().getRequestDispatcher("//Sisc/exibeMarcaPropriedade.
htm");
    dispatcher.forward(request, response);
  }
}

============================================================================
====
this is what I get from LOG:

I am here 1
I am here 1
papapapapapa
papapapapapa
I am here 2
I am here 2
[Fri Jun 30 11:21:12 BRT 2006]  info: PoolManager: registered JDBC driver
oracle.jdbc.driver.OracleDriver
10
[Fri Jun 30 11:21:12 BRT 2006]  info: oracle: New pool created
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Opened a new connection
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Delivered connection from pool
dentro do add -inicio
Select MarcaPropriedadeIdSeq.NEXTVAL from DUAL
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Opened a new connection
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Delivered connection from pool
dentro do add -inicio
Select MarcaPropriedadeIdSeq.NEXTVAL from DUAL
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Opened a new connection
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Delivered connection from pool
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Opened a new connection
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Delivered connection from pool
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Returned connection to pool
47
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Returned connection to pool
48
insert into MARCAPROPRIEDADE values (?, ?)
insert into MARCAPROPRIEDADE values (?, ?)
I am here 3
I am here 3
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Returned connection to pool
[Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Returned connection to pool
I am here 1
another test
I am here 2
[Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Delivered connection from pool
dentro do add -inicio
Select MarcaPropriedadeIdSeq.NEXTVAL from DUAL
[Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Delivered connection from pool
[Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Returned connection to pool
49
insert into MARCAPROPRIEDADE values (?, ?)
I am here 1
another test
I am here 2
[Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Delivered connection from pool
dentro do add -inicio
Select MarcaPropriedadeIdSeq.NEXTVAL from DUAL
[Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Delivered connection from pool
I am here 3
[Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Returned connection to pool
[Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Returned connection to pool
50
insert into MARCAPROPRIEDADE values (?, ?)
I am here 3
[Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Returned connection to pool 

============================================================================
============
This is the htm form that calls the servlet:

<html>

<head>

<title>Inclui/Altera Marca Propriedade</title>

<script language="javascript">
////////////////////////////////////////////////////////////////////////////
/
// Set focus to the first form element
//
function focusFirst()
{
	document.all("txtDescricao").focus();
}

////////////////////////////////////////////////////////////////////////////
///
// Validate fields and submit form elements to servlet
RegistraMarcaPropriedade
//
function doFormSubmit()
{
	objfrm=document.incluiAlteraMarcaPropriedade;
	//Store the file path of the next servlet/jsp to be called
	strFilePath = "/Sisc/servlet/RegistraMarcaPropriedade"
  
	strDescricao=objfrm.txtDescricao.value;
	if(isSpecialChar(strDescricao) || !isChar(strDescricao))
	{
    	alert("Favor entrar com uma descrição válida.");
		objfrm.txtDescricao.focus();
		return false;
	}

	if(isEmpty(strDescricao))
	{
    	alert("Campo obrigatório");
		objfrm.TxtNumber.focus();
		return false;
	}

	objfrm.method="post";
	objfrm.action=strFilePath;
	objfrm.submit();
}

////////////////////////////////////////////////////////////////////////////
///
// Clean all the fields
//
function doClearForm()
{
  for(i=0;i<document.inputFormSearch.elements.length-1;i++)
  {
    if(document.inputFormSearch.elements[i].type=="text")
		document.inputFormSearch.elements[i].value="";
	}
	document.all("txtDescricao").focus();
	return false;
}

////////////////////////////////////////////////////////////////////////////
///
// Checks whether the form input element is empty
//
function isEmpty(formelem)
{
  expisEmpty=/[^ ]/
  return ! expisEmpty.test(formelem);
}

////////////////////////////////////////////////////////////////////////////
///
// Checks whether the form input element is numeric
//
function isNumeric(formelem)
{
  	var expisNumeric=/[a-zA-Z\*\~|@\$\%\^\&\*\(\)\#\!\`\-\+\=\.\,\?]/
  	return ! expisNumeric.test(formelem)
}

////////////////////////////////////////////////////////////////////////////
///
// Checks whether the form input element is a String
//
function isChar(formelem)
{
  	var expisChar=/[0-9]/;
  	return ! expisChar.test(formelem);
}

////////////////////////////////////////////////////////////////////////////
///
//Checks whether the form input element contains any Special Characters or
not.
//
function isSpecialChar(formelem)
{
	var expisSpecialChar=/[\&\;\"\*\~\|\@\$\%\^\#\!\`\_\<\>\\\+\=\?]/
	return expisSpecialChar.test(formelem)
}
</script>

</head>

<body onload="javascript:focusfirst()">

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse:
collapse" bordercolor="#111111" width="100%">
  <tr>
    <td width="100%" colspan="3">
    <img border="0" src="images/bannerPR.jpg" width="763" height="21"></td>
  </tr>
  <tr>
    <td width="18%">
    <b>
    <font color="#008080" size="5">SISNAC</font><font color="#008000"
size="5"> </font>
    </b></td>
    <td width="59%">
    <p align="center"><font size="4"><b>Cadastramento de Nova Marca de 
    Propriedade</b></font></td>
    <td width="23%">
    &nbsp;</td>
  </tr>
  <tr>
    <td width="18%">
    &nbsp;</td>
    <td width="82%" colspan="2" align="right">
    &nbsp;</td>
  </tr>
  <tr>
    <td width="100%" colspan="3">
    <p align="center">&nbsp;</p>
    <form name="incluiAlteraMarcaPropriedade">
      <p align="left"> Marca de Propriedade: 
      	<input type="text" name="txtDescricao" size="66"></p>
      <p align="center">
      	<input type="submit" value="Enviar" name="btnSubmit" onclick="
javascript:return
doFormSubmit()">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      	<input type="reset" value="Apagar" name="btnApagar"></p>
    </form>
    <p align="center">&nbsp;</p>
    <p align="center">&nbsp;</p>
    </td>
  </tr>
  <tr>
    <td width="100%" colspan="3">&nbsp;</td>
  </tr>
</table>

</body>

</html>
=============================================

any help is welcome!!!

thanks

PS: I have tried different tomcats but the problem persists.

apache-tomcat-5.5.17.exe
jakarta-tomcat-4.1.31.exe
jakarta-tomcat-5.0.30.exe
jakarta-tomcat-5.0.28.exe

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: problem with doPost method - executed twice

Posted by Jon Wingfield <jo...@mkodo.com>.
You need to look at your access logs. You'll probably see two requests.

Your form submit button calls javascript which also calls form.submit().
I think, if you don't return false from the javascript you will get two 
form submissions. Try removing the form.submit() from the javascript.

HTH,

Jon

Siomara@planalto.gov.br wrote:
> Dear all,
> 
> I have developed a web application that is running under tomcat 5.5.17 that
> is under windows XP.
> 
> I have a servlet that retrieves data from a html form, creates an object and
> passes this object to a manager class that inserts the data into Oracle.
> 
> Everything works fine except that I noticed that my doPost method executes
> twice each command. It is incrementing twice the Oracle sequence and
> inserting twice the same record. 
> 
> Does anyone have a clue on what is going on?
> 
> When I look into the table this is what I get:
> 
> SQL> select * from marcapropriedade;
> 
> IDMARCAPROPRIEDADE DESCRICAO
> ------------------ ------------------------------
>                  1 Acordos Internacionais
>                  2 Adm Pública Federal
>                  3 Defesa
>                  4 Mercosul
> 		    45 lalalala
>                 46 lalalala
>                 47 papapapapapa
>                 48 papapapapapa
>                 49 another test
>                 50 another test               
> 
> 10 linhas selecionadas.
> 
> ============================================================================
> ================
> This is my servlet:
> 
> //package servlets;
> 
> import javax.servlet.*;
> import javax.servlet.http.*;
> import java.io.*;
> 
> import objeto.MarcaPropriedade;
> import objeto.MarcaPropriedadeGestor;
> 
> public class RegistraMarcaPropriedade extends HttpServlet {
> 
>   /**
>    * Process the HTTP Post request
>    */
>   public void doPost(HttpServletRequest request, HttpServletResponse
> response)
>               throws ServletException, IOException {
> 
> System.out.println("I am here 1");
> 
>     // Create object to store information from previous form
>     MarcaPropriedade marcaPropriedade = new MarcaPropriedade();
>     marcaPropriedade.setDescricao(request.getParameter("txtDescricao"));
>     System.out.println(marcaPropriedade.getDescricao());
> 
> System.out.println("I am here 2");
>  
>     // Create a MarcaPropriedadeGestor to add marcaPropriedade to the
> database
>     MarcaPropriedadeGestor marcaPropriedadeGestor = new
> MarcaPropriedadeGestor();
>     marcaPropriedadeGestor.add(marcaPropriedade);
> 
> System.out.println("I am here 3");
>     
>     // Release resources
> 	marcaPropriedadeGestor.releaseResources();      
>    
> 	// Here the registration is complete.
>     // Now send the user to the 'Relação de Marcas de Propriedades' page
>     RequestDispatcher dispatcher =
>  
> this.getServletContext().getRequestDispatcher("//Sisc/exibeMarcaPropriedade.
> htm");
>     dispatcher.forward(request, response);
>   }
> }
> 
> ============================================================================
> ====
> this is what I get from LOG:
> 
> I am here 1
> I am here 1
> papapapapapa
> papapapapapa
> I am here 2
> I am here 2
> [Fri Jun 30 11:21:12 BRT 2006]  info: PoolManager: registered JDBC driver
> oracle.jdbc.driver.OracleDriver
> 10
> [Fri Jun 30 11:21:12 BRT 2006]  info: oracle: New pool created
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Opened a new connection
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Delivered connection from pool
> dentro do add -inicio
> Select MarcaPropriedadeIdSeq.NEXTVAL from DUAL
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Opened a new connection
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Delivered connection from pool
> dentro do add -inicio
> Select MarcaPropriedadeIdSeq.NEXTVAL from DUAL
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Opened a new connection
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Delivered connection from pool
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Opened a new connection
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Delivered connection from pool
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Returned connection to pool
> 47
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Returned connection to pool
> 48
> insert into MARCAPROPRIEDADE values (?, ?)
> insert into MARCAPROPRIEDADE values (?, ?)
> I am here 3
> I am here 3
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Returned connection to pool
> [Fri Jun 30 11:21:13 BRT 2006]  info: oracle: Returned connection to pool
> I am here 1
> another test
> I am here 2
> [Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Delivered connection from pool
> dentro do add -inicio
> Select MarcaPropriedadeIdSeq.NEXTVAL from DUAL
> [Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Delivered connection from pool
> [Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Returned connection to pool
> 49
> insert into MARCAPROPRIEDADE values (?, ?)
> I am here 1
> another test
> I am here 2
> [Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Delivered connection from pool
> dentro do add -inicio
> Select MarcaPropriedadeIdSeq.NEXTVAL from DUAL
> [Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Delivered connection from pool
> I am here 3
> [Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Returned connection to pool
> [Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Returned connection to pool
> 50
> insert into MARCAPROPRIEDADE values (?, ?)
> I am here 3
> [Fri Jun 30 11:22:19 BRT 2006]  info: oracle: Returned connection to pool 
> 
> ============================================================================
> ============
> This is the htm form that calls the servlet:
> 
> <html>
> 
> <head>
> 
> <title>Inclui/Altera Marca Propriedade</title>
> 
> <script language="javascript">
> ////////////////////////////////////////////////////////////////////////////
> /
> // Set focus to the first form element
> //
> function focusFirst()
> {
> 	document.all("txtDescricao").focus();
> }
> 
> ////////////////////////////////////////////////////////////////////////////
> ///
> // Validate fields and submit form elements to servlet
> RegistraMarcaPropriedade
> //
> function doFormSubmit()
> {
> 	objfrm=document.incluiAlteraMarcaPropriedade;
> 	//Store the file path of the next servlet/jsp to be called
> 	strFilePath = "/Sisc/servlet/RegistraMarcaPropriedade"
>   
> 	strDescricao=objfrm.txtDescricao.value;
> 	if(isSpecialChar(strDescricao) || !isChar(strDescricao))
> 	{
>     	alert("Favor entrar com uma descrição válida.");
> 		objfrm.txtDescricao.focus();
> 		return false;
> 	}
> 
> 	if(isEmpty(strDescricao))
> 	{
>     	alert("Campo obrigatório");
> 		objfrm.TxtNumber.focus();
> 		return false;
> 	}
> 
> 	objfrm.method="post";
> 	objfrm.action=strFilePath;
> 	objfrm.submit();
> }
> 
> ////////////////////////////////////////////////////////////////////////////
> ///
> // Clean all the fields
> //
> function doClearForm()
> {
>   for(i=0;i<document.inputFormSearch.elements.length-1;i++)
>   {
>     if(document.inputFormSearch.elements[i].type=="text")
> 		document.inputFormSearch.elements[i].value="";
> 	}
> 	document.all("txtDescricao").focus();
> 	return false;
> }
> 
> ////////////////////////////////////////////////////////////////////////////
> ///
> // Checks whether the form input element is empty
> //
> function isEmpty(formelem)
> {
>   expisEmpty=/[^ ]/
>   return ! expisEmpty.test(formelem);
> }
> 
> ////////////////////////////////////////////////////////////////////////////
> ///
> // Checks whether the form input element is numeric
> //
> function isNumeric(formelem)
> {
>   	var expisNumeric=/[a-zA-Z\*\~|@\$\%\^\&\*\(\)\#\!\`\-\+\=\.\,\?]/
>   	return ! expisNumeric.test(formelem)
> }
> 
> ////////////////////////////////////////////////////////////////////////////
> ///
> // Checks whether the form input element is a String
> //
> function isChar(formelem)
> {
>   	var expisChar=/[0-9]/;
>   	return ! expisChar.test(formelem);
> }
> 
> ////////////////////////////////////////////////////////////////////////////
> ///
> //Checks whether the form input element contains any Special Characters or
> not.
> //
> function isSpecialChar(formelem)
> {
> 	var expisSpecialChar=/[\&\;\"\*\~\|\@\$\%\^\#\!\`\_\<\>\\\+\=\?]/
> 	return expisSpecialChar.test(formelem)
> }
> </script>
> 
> </head>
> 
> <body onload="javascript:focusfirst()">
> 
> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse:
> collapse" bordercolor="#111111" width="100%">
>   <tr>
>     <td width="100%" colspan="3">
>     <img border="0" src="images/bannerPR.jpg" width="763" height="21"></td>
>   </tr>
>   <tr>
>     <td width="18%">
>     <b>
>     <font color="#008080" size="5">SISNAC</font><font color="#008000"
> size="5"> </font>
>     </b></td>
>     <td width="59%">
>     <p align="center"><font size="4"><b>Cadastramento de Nova Marca de 
>     Propriedade</b></font></td>
>     <td width="23%">
>     &nbsp;</td>
>   </tr>
>   <tr>
>     <td width="18%">
>     &nbsp;</td>
>     <td width="82%" colspan="2" align="right">
>     &nbsp;</td>
>   </tr>
>   <tr>
>     <td width="100%" colspan="3">
>     <p align="center">&nbsp;</p>
>     <form name="incluiAlteraMarcaPropriedade">
>       <p align="left"> Marca de Propriedade: 
>       	<input type="text" name="txtDescricao" size="66"></p>
>       <p align="center">
>       	<input type="submit" value="Enviar" name="btnSubmit" onclick="
> javascript:return
> doFormSubmit()">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
>       	<input type="reset" value="Apagar" name="btnApagar"></p>
>     </form>
>     <p align="center">&nbsp;</p>
>     <p align="center">&nbsp;</p>
>     </td>
>   </tr>
>   <tr>
>     <td width="100%" colspan="3">&nbsp;</td>
>   </tr>
> </table>
> 
> </body>
> 
> </html>
> =============================================
> 
> any help is welcome!!!
> 
> thanks
> 
> PS: I have tried different tomcats but the problem persists.
> 
> apache-tomcat-5.5.17.exe
> jakarta-tomcat-4.1.31.exe
> jakarta-tomcat-5.0.30.exe
> jakarta-tomcat-5.0.28.exe
> 
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 
> 



---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org