我仍然遇到这里已经讨论过的一些问题,但是我仍然不知道自己在做什么错。
我的应用程序结构是:
/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
答案 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">
这很好。