You could approach the problem from the client side by using Javascript to only
allow the page to be submitted once. e.g. within the form tag call a method to
check if the form has already been submitted.

    <script language="javascript">
    var sent = false;

    function checkOkToSend() {
        if(sent) return false;
        sent = true;
        return true;
    }
    </script>

    <form method=POST action"yourservlet?form=myform"
onSubmit="checkOkToSend()">
    .
    .
    .
    </form>

This does of course rely on the browser being script-capable (most) and not
having scripting turned off. Oh and I've never tested it...

Alternatively, synchronise the relevant part of code?

- simon



Mageshkumar Maruthapillai wrote:

> Hi,
>
>     I hope somebody can help me with a resolution to this issue.
> Basically, if an impatient user happens to submit multiple times to the same
> servlet, then
> obviously threading problems will occur. For example the code snippet below
> from Jason Hunter's book. Multple threads from the same user can arise
> when he presses the submit button multiple times.
> Threading switching  occurrs after the execution of the
>
> statement 'if(holder==null)' in the code below, then
>
> there is a possibility for a null pointer exception when holder
>
> is used.
>
> How can this be prevented? ASP , I think only allows
>
> one user thread per asp script. I think using synchronization
>
> blocks within the servlet will be kill performance. How can I get
>
> over this problem.
>
> Any help on this matter is appreciated.
>
> Thanks,
>
> mmp.
>
> ----------------------------------------------------------------------------
> -----
>
> page 271 [ Chapter 9: Database Connectivity - Connections as Part of
> Session]
>
> public void doGet(HttpServletRequest request, HttpServletResponse response)
> throws ServletException, IOException
>
> {
>
>     response.setContentType("text/html");
>
>     PrintWriter out = response.getWriter();
>
>     HttpSession session = request.getSession(true);
>
>     ConnectionHolder holder = (ConnectionHolder)
> session.getValue("servletapp.connection");
>
>     if(holder==null) {
>
>     try
>
>     {
>
>         holder = new ConnectionHolder
> (DriverManager.getConnection("jdbc:oracle:oci7:ordersdb","user","password"))
> ;
>
>         session.putValue("servletapp.connection",holder);
>
>     }
>
>     catch (SQLException e)
>
>     {
>
>         getServletContext().log(e, "Could not get db connection");
>
>     }
>
>     }
>
>     Connection con = holder.getConnection();
>
>     try
>
>         Statement stmt = con.createStatement();
>
>         // transactions using con
>
>     }
>
>    // ...................
>
> }
>

___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".

Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

Reply via email to