環境:のWindows 8.1、Javaの1.8.0は、Apache-Tomcatは、9.0.0.M17Javaサーブレット "HTTPステータス500" リフレッシュ
は、サーブレットプログラムは、サーブレットのページを作るために起こっています(自動ページリフレッシュを使用する必要があります)を表示します。 HTMLページでは、<select>
を使用して、ユーザーが特定の地域を選択できるようにし、地域はサーブレット・ファイルに送信されました。 ただし、HTTPステータス500エラーが発生します。 エラー情報:ここでは
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
java.util.TimeZone.parseCustomTimeZone(TimeZone.java:783)
java.util.TimeZone.getTimeZone(TimeZone.java:562)
java.util.TimeZone.getTimeZone(TimeZone.java:516)
AJprog2.doGet(AJprog2.java:20)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
note The full stack trace of the root cause is available in the Apache Tomcat/9.0.0.M17 logs.
Apache Tomcat/9.0.0.M17
は私のコードです:
<html>
<body>
<center>
<form method = "post"
action = "http://localhost:8080/examples/servlets/servlet/AJprog2">
<p3> Select the timezone to display </p3> <br />
<select name = "sel_table" name = "sel_table">
<option value = "IST">India</option>
<option value = "GMT+8">China</option>
</select>
<input type = submit value = "GO" />
</form>
</body>
</html>
と
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.Locale;
import javax.servlet.*;
import javax.servlet.http.*;
public class AJprog2 extends HttpServlet
{
public void doGet(HttpServletRequest req, HttpServletResponse rsp)
throws ServletException, IOException
{
final String tz = (String)req.getParameter("sel_table");
rsp.setIntHeader("Refresh", 1);
PrintWriter pan = rsp.getWriter();
rsp.setContentType("text/html");
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone(tz));
String time_str = sdf.format(date);
pan.println("<html>" +
"<body>" +
"<br />" +
time_str +
"</body></html>");
// pan.close();
}
public void doPost(HttpServletRequest req, HttpServletResponse rsp)
throws ServletException, IOException
{
doGet(req, rsp);
}
}
問題サーブレットのページが更新する際に関係することができる、パラメータが失われました。しかし、私はそれを解決する方法を知らない、誰でもチェックを助けることができる?
を助けることができると思います:)言ったことを忘れます
[NullPointerExceptionとは何ですか?どうすれば修正できますか?](http://stackoverflow.com/q/218384/5221149)を参照してください。 'tz'がnullであるため、これを取得します。 'tz'はHTTPの' Refresh'ヘッダが 'POST'ではなく' GET'を行うため、あなたの 'sel_table'値はリフレッシュ時に提出されないのでnullです。 'Refresh'ヘッダ値の一部としてクエリパラメータとして' sel_table'値をURL *に明示的に与えることで解決します。 rsp.setHeader( "リフレッシュ"、 "1; url = http:// localhost:8080/examples/servlets/servlet/AJprog2?sel_table =" + tz); – Andreas
@Andreas sry、それは私が作った間違いです – fryingPan