Tomcat servlet映射错误404

Tomcat servlet映射错误404,tomcat,servlets,Tomcat,Servlets,抱歉,如果这是一个常见的问题,但我会发疯的。 我从JSP开发开始,使用运行在Ubuntu服务器上的Tomcat。我正在尝试运行我的第一个“Hello World”servlet,但没有成功 我在服务器上有以下内容: webapps目录是:/var/lib/tomcat6/webapps/ 在webapps中,我创建了上下文根hello/目录 hello/包含index.html和WEB-INF/ WEB-INF包含WEB.xml和classes/HelloServlet.class 这是in

抱歉,如果这是一个常见的问题,但我会发疯的。 我从JSP开发开始,使用运行在Ubuntu服务器上的Tomcat。我正在尝试运行我的第一个“Hello World”servlet,但没有成功

我在服务器上有以下内容:

  • webapps
    目录是:
    /var/lib/tomcat6/webapps/
  • webapps
    中,我创建了上下文根
    hello/
    目录
  • hello/
    包含
    index.html
    WEB-INF/
  • WEB-INF
    包含
    WEB.xml
    classes/HelloServlet.class
这是
index.html

<html>
        <body>
                Click to request the HelloServlet.

                <form action = "/hello/helloworld" method = "get" >
                        <input type = "submit" value = "REQUEST" />
                </form>
        </body>
</html>
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">

        <servlet>
                <servlet-name>test</servlet-name>
                <servlet-class>HelloServlet</servlet-class>
        </servlet>

        <servlet-mapping>
                <servlet-name>test</servlet-name>
                <url-pattern>/hello/helloworld</url-pattern>
        </servlet-mapping>

</web-app>
最后,这是HelloServlet的源文件:

// HelloServlet.java, a simple Hello World servlet.

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

public class HelloServlet extends HttpServlet
{
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
                response.setContentType("text/html");
                PrintWriter outputStream = response.getWriter();

                outputStream.println("<html>");

                outputStream.println("<head>");
                outputStream.println("<title>Hello, World!</title>");
                outputStream.println("</head>");

                outputStream.println("<body>");
                outputStream.println("Hello, world! This is my first servlet!");
                outputStream.println("</body>");

                outputStream.println("</html>");

                outputStream.close();
        }
}
//HelloServlet.java,一个简单的Hello World servlet。
导入javax.servlet.*;
导入javax.servlet.http.*;
导入java.io.*;
公共类HelloServlet扩展了HttpServlet
{
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException
{
response.setContentType(“text/html”);
PrintWriter outputStream=response.getWriter();
outputStream.println(“”);
outputStream.println(“”);
println(“你好,世界!”);
outputStream.println(“”);
outputStream.println(“”);
println(“你好,世界!这是我的第一个servlet!”);
outputStream.println(“”);
outputStream.println(“”);
outputStream.close();
}
}
问题是,在客户端,只有
http://localhost/hello/
(即
index.html
页面)工作正常。如果我单击表单提交按钮,我会得到HTTP404错误(资源不可用)


servlet映射中的表单和/或
web.xml
中可能存在错误,但我确实需要帮助来发现它。

将上下文根添加到jsp操作,下面的更改可能对您有用

<form action = "/hello/hello/helloworld" method = "get" >
  <input type = "submit" value = "REQUEST" />
</form>

/hello/helloworld
您不应该在servlet的URL模式中包含上下文路径。它已经相对于上下文根

摆脱它

<url-pattern>/helloworld</url-pattern>
/helloworld

与具体问题无关,在servlet中编写HTML代码是一种非常糟糕的做法。为此,应该使用JSP。另请参见。

404可能是由于:

  • 错误的映射场景(您可能包含了上面回答的额外上下文或误用了通配符架构)
  • servlet尚未启动(请参阅控制台或catalina文件中的启动日志堆栈,您应该找到servlet失败异常跟踪)

  • 我花了很长时间才弄明白这一点。在我的例子中,我得到了404,因为我没有意识到TomcatURL是区分大小写的

    e、 g:

    …404

    http://server:8080/acme.myPackage/DoStuff
    
    …好的


    疯狂。

    在标签ex.
    org.firstservletapp.HelloServlet
    中包含包的名称,不幸的是,没有。我总是收到一个404错误。@在将您的url模式更改为BalusC所说的内容后,我会尝试使用
    action=“/helloworld”
    。不幸的是,没有。我总是收到一个404错误。也许我会在几分钟内使用JSP,无论如何谢谢你的提示。
    http://server:8080/acme.MyPackage/DoStuff
    
    http://server:8080/acme.myPackage/DoStuff