HTTP状态404 - Servlet ....不可用

时间:2012-06-16 03:57:00

标签: servlets servletexception

我使用eclise创建一个这样的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 个答案:

答案 0 :(得分: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 bean有清理和构建然后运行的选项)没有使用eclipse但我确定它也有类似的选择

答案 1 :(得分:0)

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

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

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

如果您因某种原因仍然使用Tomcat 6或更早版本,那么您需要采用旧式web.xml方式进行操作。可以在our servlets wiki page中找到具体示例。

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

答案 2 :(得分: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>

答案 3 :(得分:0)

编辑:   form method =“post”action =“NewServlet”

到此       form method =“post”action =“/ (您的项目名称) / NewServlet”

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