0

我使用 ecrise 创建一个这样的 servlet:

package hello;
public class NewServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("doPost");

    String name = request.getParameter("textField");

    response.setContentType("text/html");
    PrintWriter pw = response.getWriter();
    pw.print("<html><head></head><body><center>");
    pw.print("Hello " + name + "!");
    pw.print("</center></body></html>");
 }
}

和一个 html 文件,如:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="NewServlet">
    <p align="center">
        <font>Input some text</font> <br> <input type="text"
            name="textFiled"> <br> <input type="submit"
            value="submit"> <br>
    </p>
</form>
</body>
</html>

当我运行 servlet 时,遇到了一个错误:

HTTP Status 404 - Servlet NewServlet is not available

--------------------------------------------------------------------------------

type Status report

message Servlet NewServlet is not available

description The requested resource (Servlet NewServlet is not available) is not available.

我检查了文件夹:WEB-INF 或其他任何文件夹,但看不到文件 .class

这是如何引起的,我该如何解决?

4

4 回答 4

1

您应该检查 IDE 中的 web-inf 文件夹并将您的 servlet 映射到 web.xml 文件中

      <servlet>
              <servlet-name>NewServlet</servlet-name>
               <servlet-class>NewServlet</servlet-class>
      </servlet>
       <servlet-mapping>
               <servlet-name>NewServlet</servlet-name>
               <url-pattern>/NewServlet</url-pattern>
        </servlet-mapping>

确保此映射正确完成,并且您的 servlet 不在任何包或文件夹中,如果是,则在 servlet 标记中写入该类名,后跟 . 和你的 servlet 名称。

如果问题仍然存在,请确保删除 servlet 的 .class 文件并再次构建项目。(Net beans 有一个 clean and build 然后运行选项)没有使用 eclipse,但我相信它有类似的选项以及

于 2012-10-19T04:49:03.807 回答
0

Servlet 需要注册并映射到特定的 URL 模式,以便能够通过 HTTP 请求执行它们。鉴于您的 HTML 代码,您似乎希望 servlet 侦听/NewServlet.

如果您使用的是 Tomcat 7,那么只需将@WebServlet注释放在具有该 URL 模式的类上:

@WebServlet("/NewServlet")
public class NewServlet extends HttpServlet {
    // ...
}

如果由于某种原因您仍在使用 Tomcat 6 或更早版本,那么您需要以老式的web.xml方式进行操作。一个具体的例子可以在我们的 servlets wiki 页面中找到。

Eclipse 不会.class在项目资源管理器中显示文件。它只会在导航器中的/build文件夹中显示它们。但这不应该是现在担心的事情。

于 2012-06-16T04:20:21.187 回答
0

web.xml 中的格式应该是这样的。

          <servlet-name>NewServlet</servlet-name>
           <servlet-class>PackageName.JavaClass</servlet-class>

在你的情况下是

          <servlet-name>NewServlet</servlet-name>
           <servlet-class>Hello.NewServlet</servlet-class>
于 2014-03-25T07:52:09.943 回答
0

编辑这个:form method="post" action="NewServlet"

to this
form method="post" action="/ (你的项目名称) /NewServlet"

我有同样的问题,这对我有用

于 2015-08-22T03:10:20.477 回答