我知道这是一个非常常见的问题,因为我在几个论坛中发现了许多与此相关的问题,包括SO。但我还没有找到解决方案 我的web.xml(位于WEB-INF中)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SMSProjectNew</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>ReceiveMessagesServlet</display-name>
<servlet-name>ReceiveMessagesServlet</servlet-name>
<servlet-class>com.sendreceive.ReceiveMessagesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ReceiveMessagesServlet</servlet-name>
<url-pattern>/ReceiveMessagesServlet</url-pattern>
</servlet-mapping>
</web-app>
html page index.html,位于WebContent文件夹
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
The application started successfully version 1:27
<form action="/ReceiveMessagesServlet" method="post">
<input type="text" name="number"/>
<input type="text" name="message"/>
<input type="submit" name="submit"/>
</form>
</body>
</html>
最后是位于src \ com.sendreceive中的servlet,ReceiveMessagesServlet 包com.sendreceive;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ReceiveMessagesServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ReceiveMessagesServlet() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request,response);
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) {
String responseMessage = request.getParameter("message");
String responseNumber = request.getParameter("number");
System.out.println(responseMessage+responseNumber);
}
}
我在eclipse中安装了tomcat插件。当我右键单击项目然后单击在服务器上运行项目时。 tomcat服务器在eclipse中启动并显示index.html页面。但是当我在字段中输入一些值并单击submit..it给出了404错误..我从过去的2小时起一直在苦苦挣扎...请帮助..也....fyi,我正在使用本教程 http://www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html
答案 0 :(得分:11)
由于action =“/ ReceiveMessagesServlet”,您收到404错误,请删除斜杠。尝试使用action =“ReceiveMessagesServlet”。
当您向URL模式添加斜杠时,容器将查找部署名称为“ReceiveMessagesServlet”的Web应用程序。由于这不存在,您将收到404错误。
答案 1 :(得分:7)
当您将应用程序部署到servlet容器中时,您的URL可能会被标识您的应用程序的上下文路径作为该容器中其他应用程序的前缀(即/ReceiveMessagesServlet
变为/MyApp/ReceiveMessagesServlet
)。
因此,您应该考虑这种可能性并相应地修改您的网址,例如,使用JSTL的<c:url>
:
<form action="<c:url = value = '/ReceiveMessagesServlet' />" method="post">
或者,没有JSTL:
<form action="${pageContext.request.contextPath}/ReceiveMessagesServlet" method="post">
答案 2 :(得分:0)
servlet中的错误可能导致Tomcat将其标记为不可用,因为我进入了服务器日志:
06/02/2013 13:32:43 org.apache.catalina.core.ApplicationContext log 信息:将servlet Imager标记为不可用06/02/2013 13:32:43 org.apache.catalina.core.StandardWrapperValve调用SEVERE:分配 servlet Imager的异常java.lang.ClassNotFoundException com.project.test.ImageThumber
您应该查看日志以了解原因。 在我的情况下,丢失的jar包含一些测试类。