Tomcat不提供简单HTML页面(HTTP 404)

时间:2019-06-08 13:03:24

标签: java tomcat config

我仍然遇到这里已经讨论过的一些问题,但是我仍然不知道自己在做什么错。

我的应用程序结构是:

/usr/share/tomcat/webapps/greeting
        --index.html
        --src
        --META-INF
        --WEB-INF
             --web.xml
             --classes
                   --sk
                      --simo
                          --Greeting.class

请求http://localhost:8080/greeting/时,我收到HTTP 404的回复。

请求http://localhost:8080/greeting/hi时,我收到HTTP 405的回复。这不是问题,因为Servlet仅处理POST个请求。

我的问题是:如何使Tomcat服务器提供index.html文件。

这是我的web.xml文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
      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_3_0.xsd"
      version="3.0">

        <display-name>Hello, World Application</display-name>
        <description>
            This is a simple web application with a source code organization
           based on the recommendations of the Application Developer's Guide.
        </description>

        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>/greeting/*</url-pattern>
        </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
</welcome-file-list>

</web-app>

服务器上的某些信息:

[miso@edubox conf]$ /sbin/tomcat version
Server version: Apache Tomcat/7.0.76
Server built:   Mar 12 2019 10:11:36 UTC
Server number:  7.0.76.0
OS Name:        Linux
OS Version:     3.10.0-957.1.3.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_212-b04
JVM Vendor:     Oracle Corporation

2 个答案:

答案 0 :(得分:0)

1)每个servlet的定义都包括两个部分:1)servlet类与逻辑名的绑定; 2)将此逻辑名映射到URL。  在web.xml中,您仅定义了第二部分。现在,您还应该在其中添加servlet类名称。如果您保留逻辑名称“默认”,则添加以下代码:

<servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>sk.simo.Greeting</servlet-class>
</servlet>

2)或者,使用@WebServlet(value="/greeting")。但是,然后从web.xml中删除servlet映射。

3)独立于以上答案,文件夹到上下文根的映射很重要。如果您没有更改它(我想您没有更改,这很好),那么路径“ / usr / share / tomcat / webapps / greeting”表示可以通过URL使用您的应用程序中的所有内容具有上下文根“ / greeting”的文件。这意味着,如果要通过“ / greeting / hi”调用servlet,则应将servlet映射到“ / hi”,而不是“ / greeting”而不是“ / greeting / hi”。因此,请在您的servlet中使用以下命令:@WebServlet(value="/hi")。您可以通过“ ... / greeting / hi”来调用它。

答案 1 :(得分:0)

主要问题是错误的重新部署。删除应用程序的顶层目录“ greeting”并恢复其内容后,index.html终于出现了。

servlet映射现在遵循Tomcat 7“示例”应用程序的示例:

web.xml:

<servlet>
    <servlet-name>Greeting</servlet-name>
    <servlet-class>sk.simo.Greeting</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Greeting</servlet-name>
    <url-pattern>/hi</url-pattern>
</servlet-mapping>

我通过以下方式引用它:

<form action="hi" method="POST"> 

这很好。