Captcha servlet causes java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed -


i creating captcha input using simplecaptcha, , did validation of captcha input. created captcha input following codes.

html code:

<form action="submit_proceed.do" method="post"> <img src="captchaimg" /><input type="text" name="captcha" value=""><br /> <input type="submit" value="submit" name="submit" /> </form> 

javaservlet code :

import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import java.util.list; import java.util.iterator; import nl.captcha.captcha;  protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { response.setcontenttype("text/html;charset=utf-8"); printwriter out = response.getwriter();  list errormsgs = new linkedlist(); try{     // validate captcha     httpsession session = request.getsession(true);     string usercaptcha = request.getparameter("captcha");     captcha captcha = (captcha) session.getattribute(captcha.name);     if (!captcha.iscorrect(usercaptcha)) {         errormsgs.add("please input correct captcha value.");     } } catch (runtimeexception e) {     errormsgs.add("an unexpected error: " + e.getmessage());     requestdispatcher view = request.getrequestdispatcher("/error.view");     view.forward(request, response); } 

however kept getting error:

standardwrappervalve[captcha]: pwc1406: servlet.service() servlet captcha threw exception java.lang.illegalstateexception: pwc3999: cannot create session after response has been committed 

how create session on servlet? how can resolve issue?

thank much.

cannot create session after response has been committed

the exception message pretty clear. there's means of illegal state. cannot set/change response headers anymore when response been committed. response committed when headers been sent client side. point of no return.

the response committed whenever outputstream has been flushed (in)directly. can happen when write more 2k response (depends on server config however), or did flush() manually, or did sendredirect() call.

whenever session needs created, server needs set cookie in response header can identify particular client , associate httpsession instance in server memory. that's not possible if response committed, hence exception.

back root cause of problem:

servlet.service() servlet captcha threw exception

it servlet servlet-name of captcha caused problem. need check/debug entire request-response chain see servlets/filters invoked , of them might have committed response before captcha servlet able create session. can't more further information missing in topicstart.

at least, in far given code example, see you're unnecessarily calling response.getwriter(). not sure how real world code like, maybe you've stripped lines, chances you're writing , might root cause of problem. if write or did flush on it, resopnse committed. not write response inside servlet supposed controller. there use jsp for. or if debugging purposes, use stdout (system.out.println()) or logger.


Comments

Popular posts from this blog

unicode - Are email addresses allowed to contain non-alphanumeric characters? -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

c++ - Convert big endian to little endian when reading from a binary file -