quel est le problème avec mon servlet-obtenir java.lang.IllegalStateException


Je suis nouveau sur les servlets java et j'essaie d'ouvrir ma page de connexion. Voici la méthode de service de la servlet:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();

    getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
}

Voici mon identifiant.fichier jsp:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</head>
<body>


<form action="servletexample" method="post">
    <table border="0">
        <tr>
            <td>User Name:</td><td><input type="text" name="firstname" /></td>
        </tr>
        <tr>
            <td>Password:</td><td><input type="password" name="lastname" /></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" name="submit" value="Submit" /></td>
        </tr>
    </table>
    </form>

</body>
</html>

Quand je lance le projet, j'obtiens l'erreur suivante:

HTTP Status 500 - Cannot forward after response has been committed

--------------------------------------------------------------------------------

type Exception report

message Cannot forward after response has been committed

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

java.lang.IllegalStateException: Cannot forward after response has been committed
com.exaple.tutorial.ServletExample.service(ServletExample.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet.java:723)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.37 logs.

Et voici la capture d'écran du dossier WebContent:

entrez la description de l'image ici

Et enfin le web.fichier xml:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ServletsJSPExample</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>ServletExample</display-name>
    <servlet-name>ServletExample</servlet-name>
   <servlet-class>com.exaple.tutorial.ServletExample</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletExample</servlet-name>
    <url-pattern>/servletexample</url-pattern>
  </servlet-mapping>
</web-app>

Quelqu'un peut-il aider? Merci

Author: yrazlik, 2013-06-30

1 answers

Je ne sais pas pourquoi initialisez-vous PrintWriter dans votre méthode de service. Cela peut être la raison de l'obtention d'une erreur interne 500 car dès que vous quittez votre méthode de service, writer sera vidé/fermé. Et lorsque vous essayez de rendre le jsp après avoir transféré la demande, il lancera une réponse déjà validée serveur 500 erreur. Commentez donc votre instance printwriter, puis essayez de transférer la demande de connexion.JSP.

Cette forme, la javadocs :

Forward doit être appelé avant que la réponse n'ait été validée client (avant que la sortie du corps de réponse n'ait été vidée). Si la réponse a déjà été commis, cette méthode lance un IllegalStateException. La sortie non validée dans le tampon de réponse est automatiquement effacé avant l'avant.

Une Autre chose importante :

Vous ne retournez pas après la méthode forward() car cette méthode ne termine pas le code comme par magie exécution et saute hors de la méthode . Vous devez revenir de la méthode et arrêter vous-même l'exécution du reste du code.

 1
Author: Juned Ahsan, 2013-06-30 00:31:19