2

对不起,如果这是一个常见的问题,但我会疯的。我开始使用在 Ubuntu Server 上运行的 Tomcat 进行 JSP 开发。我正在尝试运行我的第一个“Hello World”servlet,但没有成功。

我在服务器上有以下东西:

  • webapps目录是:/var/lib/tomcat6/webapps/
  • webapps我创建了上下文根hello/目录
  • hello/包含index.htmlWEB-INF/
  • WEB-INF包含web.xmlclasses/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>

这是WEB-INF/web.xml

<?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();
        }
}

问题是,在客户端,只有http://localhost/hello/(即index.html页面)有效。如果我单击表单提交按钮,我会收到 http 404 错误(资源不可用)。

servlet-mapping 中可能存在错误,在 form 和/或 in 中web.xml,但我真的需要帮助才能发现它。

4

4 回答 4

4
<url-pattern>/hello/helloworld</url-pattern>

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

摆脱它。

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

与具体问题无关,在 servlet 中编写 HTML 代码是一种非常糟糕的做法。应该使用该 JSP。另请参阅我们自己的 Servlets wiki 页面,其中包含健全的 Hello World 示例

于 2013-03-21T13:59:08.400 回答
1

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

<form action = "/hello/hello/helloworld" method = "get" >
  <input type = "submit" value = "REQUEST" />
</form>
于 2013-03-21T12:09:55.587 回答
1

404 可能导致:

  1. 糟糕的映射场景(您可能包含了上面回答的额外上下文或滥用通配符模式)
  2. servlet 尚未启动(请参阅控制台或 catalina 文件中的启动日志堆栈,您应该会找到您的 servlet 失败异常跟踪)
于 2014-09-18T13:15:04.820 回答
0

我花了很长时间才弄清楚这一点。就我而言,我得到了 404,因为我没有意识到 Tomcat URL区分大小写的!

例如:

http://server:8080/acme.MyPackage/DoStuff

...404!

http://server:8080/acme.myPackage/DoStuff

...美好的。

疯狂。

于 2016-03-07T15:50:08.347 回答