Environment: Windows 8.1, Java 1.8.0, apache-tomcat-9.0.0.M17
The servlet program is going to make a servlet page displaying the ticking time(auto page refresh must be used). The HTML page used <select>
to make user able to choose the certain region, while the region is sent to servlet file.
But HTTP Status 500 error occurs.
The error information:
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
Here are my codes:
<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>
and
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);
}
}
The problem may relate to, when the servlet page refreshed, the parameter lost. But I do not know how to solve it, could anyone help check?