我使用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
这是如何引起的?如何解决?
答案 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”
我有同样的问题,这对我有用