【问题标题】:Servlet not loading in the browserServlet 未在浏览器中加载
【发布时间】:2012-10-04 14:04:42
【问题描述】:

我刚刚开始研究 servlet,我是新手。 我开发了一个带有下拉菜单的 html 页面,用户可以从中选择啤酒的颜色,并且有一个调用 servlet 的提交按钮。这是它的 html 代码。

<html>
<head>
<title>Beer Selection</title>
</head>
<body>
<h2>Beer Selection Page</h2>
<p>Select beer charecteristics:</p>
<hr>
<form method="POST" action="SelectBeer.do">
    <b>Color :</b><!--Keeping it outside the form unnecessarily creates a line break between color and Drop-down menu-->
    <select name="color">
        <option>Light</option>
        <option>Brown</option>
        <option>Amber</option>
        <option>Dark</option>
    </select><br>
    <input type="SUBMIT" value="SUBMIT">
</form>
</body>
</html>

我创建了以下部署描述符

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>MyBeer</servlet-name>
<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyBeer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>
</web-app>

我还成功编译了 BeerSelect.java servlet,其代码如下所示

package com.example.web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class BeerSelect extends HttpServlet
{
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    out.println("Beer Selection Advice<br>");
    String c=request.getParameter("color");
    out.println("<br>Got Beer color"+c);
}
}

我使用的是 tomcat 7.0.21,我创建的目录如下: tomcat/webapps/learning/Beer-v1/form.html 和
tomcat/webapps/learning/Beer-v1/WEB-INF/web.xml 和
tomcat/webapps/learning/Beer-v1/WEB-INF/classes/com/example/web/BeerSelect.class
(学习只是一个文件夹,我将所有的小型 servlet 和 jsp 项目保存在 webapps 中 内部学习我有我的不同项目,例如 Beer-v1、DateDisplay、HotelMgmt 等)

现在,当我在 tomcat 中运行 form.html 时,它会正确显示,但是当我点击提交时,它会显示

HTTP Status 404 - /learning/Beer-v1/SelectBeer.do

type Status report

message /learning/Beer-v1/SelectBeer.do

description The requested resource (/learning/Beer-v1/SelectBeer.do) is not available.
Apache Tomcat/7.0.21

我做错了什么。请帮忙。

【问题讨论】:

  • 我似乎看不到任何错误。您是否尝试过重新启动服务器?编辑配置文件和创建新类时,您需要重新启动服务器。
  • 我已经重新启动了将近 6-7 次,但仍然收到相同的错误消息

标签: java jakarta-ee


【解决方案1】:

如果您将 Beer-v1 作为 Tomcat 的 webapp 文件夹的直接子文件夹,它应该可以工作。
然后尝试访问[tomcaturl]/Beer-v1/[yourhtmlform].html。

因为您将 servlet 映射到上下文根(即/),所以没有/learning/Beer-v1/SelectBeer.do 的映射。

恕我直言,让您的工作区文件夹结构 Tomcat 的 webapp 文件夹中不是一个好主意。这是一个用于部署 webapps 的特殊文件夹,Tomcat 期望该文件夹具有一种标准结构(例如根目录中的 WEB-INF)。

我认为最好使用 Eclipse 或自动将您的应用程序(从您的文件系统)部署到 Tomcat 的工具。通过这种方式,您可以随心所欲地管理您的工作区。

Eclipse 维护着一个所谓的“工作区”,它存储您使用它创建的所有项目。第一次启动 Eclipse 时,它​​会询问您将哪个文件夹用作工作区。然后,您可以在使用时命名您的“学习”文件夹。

当您将服务器执行环境添加到 Eclipse(例如 Tomcat 安装)时,您可以配置 Eclipse 的部署方式。默认配置是将 webapp 复制到 Eclipse 特定的工作区子文件夹。

【讨论】:

  • 日食如何工作?我们创建了一个保存文件的工作区。它是在 webapp 中永久部署应用程序(因此在工作区中创建 2 个副本,在 tomcat/webapps 中创建一个)还是临时部署它们(从而保留一个副本)?或者 Eclipse 是否能够像我试图做的那样维护文件夹层次结构?只需要一个小概述。
【解决方案2】:

尝试在表单操作中添加斜线

action="SelectBeer.do"

action="/SelectBeer.do"

【讨论】:

  • 嘿 Russell Gutierrez,您建议的方法不起作用,但令人惊讶的是,现在我没有收到任何错误消息,而是得到了一个空白页。 Mulmoth 提出了一种可行的方法,但如果可能的话,我想保留“Learning”文件夹并仍然使应用程序运行。我可以在部署描述符 web.xml 中进行哪些更改
猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多