[解決済み] サーブレットがおかしい - java.lang.IllegalStateExceptionが発生する
質問
私はjava servletsの初心者で、ログインページを開こうとしています。以下は、サーブレットのサービスメソッドです。
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
}
以下は、私のlogin.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>
プロジェクトを実行すると、以下のエラーが表示されます。
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.
そして、これがWebContent Folderのスクリーンショットです。
そして最後にweb.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>
どなたか助けてください。ありがとうございます。
解決方法は?
サービスメソッドでPrintWriterを初期化している理由はよくわかりません。サービスメソッドを終了すると同時にライターがフラッシュ/クローズされるため、これが500内部エラーの原因である可能性があります。そして、リクエストを転送した後、jspをレンダリングしようとすると、response already committed server 500 errorを投げます。そのため、printwriterインスタンスをコメントアウトしてから、login.jspにリクエストを転送してみてください。
このフォームは javadocs :
forward は、レスポンスがコミットされる前に呼び出される必要があります。 クライアントに送信されます(レスポンスボディ出力がフラッシュされる前)。もし、レスポンス 既にコミットされている場合、このメソッドは IllegalStateExceptionが発生します。 レスポンスバッファ内のコミットされていない出力は は転送前に自動的にクリアされます。
もうひとつの大切なこと :
forward()メソッドが魔法のようにコードの実行を終了してメソッドから飛び出すわけではないので、forward()メソッドの後に戻っていないのです。メソッドから戻り、コードの残りの部分の実行を自分で停止する必要があります。
関連
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] JSP/Servletを使用してサーバーにファイルをアップロードするにはどうすればよいですか?
-
[解決済み] Javaサーブレットとは?
-
[解決済み】JSF、Servlet、JSPの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ORA-00933: SQL コマンドが正しく終了していません。
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] ボタンでTextFieldをクリアする(Java)
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] javax.mail.MessagingException: SMTPホストに接続できませんでしたか?
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] Javaでdoubleをfloatに変換する
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について