【发布时间】:2016-03-11 06:04:20
【问题描述】:
我正在尝试在使用 NetBeans 创建的 Web 项目中测试以下 servlet。它构成了一个简单的表单,允许用户从列表中选择区域设置和时区,并相应地显示相关信息。
这里是servlet代码:
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
}
}
这是 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>
当我通过 NetBeans 运行项目时,代码似乎可以正常编译,并且我可以选择语言环境和时区。但是当我点击提交时,我收到以下错误:
有人可以向我解释为什么会发生这种情况以及如何解决它吗?
【问题讨论】:
-
网址将与
http://localhost:8080/projectname/TimeForm类似 -
根据您向我展示的内容,我不相信您的项目曾经部署在 Tomcat 上。这很可能是因为您从未生成要部署的 WAR 或 EAR。查找使用 Maven 生成 WAR,因为这将朝着正确的方向前进。
-
项目编译下有一个压缩WAR的选项,我一开始没有勾选。这样做会在项目根文件夹的 dist 子目录中生成一个 TestTimeForm.war。当我运行项目时,我得到了以下控制台输出(请看截图)。那么项目实际部署了吗?
-
我将 WAR 复制到 webapps 文件夹并使用 Tomcat 的管理器 gui 部署它。但是当我单击提交时,我仍然遇到 404 错误。有什么想法是什么原因造成的吗?
标签: tomcat servlets netbeans forms