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
Post a Comment