tworzę wejście CAPTCHA za pomocą SimpleCaptcha i zrobił walidacji wejścia Captcha. Zostało utworzone wejście captcha z następującymi kodami.Captcha serwlet powoduje java.lang.IllegalStateException: PWC3999: Nie można utworzyć sesji po odpowiedź zostało popełnione
HTML kod:
<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>
Kod 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);
}
Jednak Ciągle otrzymuję ten błąd:
StandardWrapperValve[Captcha]: PWC1406: Servlet.service() for servlet Captcha threw exception
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed
Jak mogę utworzyć sesji na moim serwletu? Jak mogę rozwiązać ten problem?
Dziękuję bardzo.
skąd masz sesję? czy brakuje niektórych ważnych elementów twojej metody? Gdzie jest 'HttpSession session = request.getSession();' lub podobne wyrażenie? jak zdobywasz obiekt sesji? – WildWezyr
@WildWezyr: Myślę, że przypadkowo usunąłem to po testowaniu, dodałem do kodu, HttpSession session = request.getSession (true); –