0

I'm trying to test the following servlet in a web project created with NetBeans. It constitutes a simple form which allows users to select locale and timezone from a list and display relevant information accordingly.

Here is the servlet code:

public class TimeForm extends HttpServlet {
  private static final String CONTENT_TYPE = "text/html";
  private Locale[] allLocale = Locale.getAvailableLocales();
  private String[] allTimeZone = TimeZone.getAvailableIDs();

  /** Process the HTTP Get request */
  public void doGet(HttpServletRequest request, HttpServletResponse
      response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<h3>Choose locale and time zone</h3>");
    out.println("<form method=\"post\" action=" +
      "/localhost:8080/TimeForm>");
    out.println("Locale <select size=\"1\" name=\"locale\">");

    // Fill in all locales
    for (int i = 0; i < allLocale.length; i++) {
      out.println("<option value=\"" + i +"\">" +
        allLocale[i].getDisplayName() + "</option>");
    }
    out.println("</select>");

    // Fill in all time zones
    out.println("<p>Time Zone<select size=\"1\" name=\"timezone\">");
    for (int i = 0; i < allTimeZone.length; i++) {
      out.println("<option value=\"" + allTimeZone[i] +"\">" +
        allTimeZone[i] + "</option>");
    }
    out.println("</select>");
    out.println("<p><input type=\"submit\" value=\"Submit\" >");
    out.println("<input type=\"reset\" value=\"Reset\"></p>");
    out.println("</form>");
    out.close(); // Close stream
  }

  /** Process the HTTP Post request */
  public void doPost(HttpServletRequest request, HttpServletResponse
      response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    int localeIndex = Integer.parseInt(
      request.getParameter("locale"));
    String timeZoneID = request.getParameter("timezone");
    out.println("<head><title>Current Time</title></head>");
    out.println("<body>");
    Calendar calendar =
      new GregorianCalendar(allLocale[localeIndex]);
    TimeZone timeZone = TimeZone.getTimeZone(timeZoneID);
    DateFormat dateFormat = DateFormat.getDateTimeInstance(
      DateFormat.FULL, DateFormat.FULL, allLocale[localeIndex]);
    dateFormat.setTimeZone(timeZone);
    out.println("Current time is " +
      dateFormat.format(calendar.getTime()) + "</p>");
    out.println("</body></html>");
    out.close(); // Close stream
  }
}

And this is the web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <servlet>
        <servlet-name>TimeForm</servlet-name>
        <servlet-class>hw5.TimeForm</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TimeForm</servlet-name>
        <url-pattern>/TimeForm</url-pattern>
    </servlet-mapping>
</web-app>

When I run the project through NetBeans, the code seems to compile fine and I get to select the locale and timezone. But when I click Submit, I get the following error:

enter image description here

Could someone explain to me why this is happening and how to go about fixing it?

enter image description here enter image description hereenter image description here

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • The url is will be along the lines of `http://localhost:8080/projectname/TimeForm` – Scary Wombat Mar 11 '16 at 06:09
  • Based on what you showed me, I don't believe that your project was ever deployed on Tomcat. This is likely because you never generated a WAR or EAR to be deployed. Look up using Maven to generate WAR, as this will get headed in the right direction. – Tim Biegeleisen Mar 11 '16 at 06:37
  • There is an option under project compilation to compress WAR, which I initially didn't check. Doing so generates a TestTimeForm.war in the dist subdirectory of the project root folder. And when I run the project, I got the following console output (Please see screenshot). So is the project actually deployed? – sircactus77 Mar 11 '16 at 06:43
  • I copied the WAR to the webapps folder and deployed it using Tomcat's manager gui. But I'm still encountering the 404 error when I click Submit. Any ideas what's causing this? – sircactus77 Mar 11 '16 at 07:10

1 Answers1

0

After fiddling with this for another couple hours, I finally figured out that the problem lies in the fact that I wrote the wrong path in the form tag in the servlet's doGet method.

Instead of

out.println("<form method=\"post\" action=" +
      "/localhost:8080/TimeForm>");

It should be

out.println("<form method=\"post\" action=" +
      "/TestTimeForm/TimeForm>");

Now when I run the servlet and click the submit button, there is no more HTTP status 404.