Sto creando un input CAPTCHA utilizzando SimpleCaptcha e ho convalidato l'input Captcha. Sono stato creato un captcha con i seguenti codici.Il servlet Captcha causa java.lang.IllegalStateException: PWC3999: Impossibile creare una sessione dopo che la risposta è stata commessa
codice HTML:
<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>
Codice JavaServlet:
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 the correct Captcha value.");
}
} catch (RuntimeException e) {
errorMsgs.add("An unexpected error: " + e.getMessage());
RequestDispatcher view = request.getRequestDispatcher("/error.view");
view.forward(request, response);
}
Tuttavia ho continuato a questo errore:
StandardWrapperValve[Captcha]: PWC1406: Servlet.service() for servlet Captcha threw exception
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed
Come si crea una sessione sul mio servlet? Come posso risolvere questo problema?
Grazie mille.
da dove riceve la sessione? ci sono alcune parti importanti del tuo metodo mancanti? Dov'è 'HttpSession session = request.getSession();' o dichiarazione simile? come acquisisci l'oggetto della sessione? – WildWezyr
@WildWezyr: Penso di averlo eliminato per errore dopo il test, aggiunto al codice, HttpSession session = request.getSession (true); –