我在
文件夹下的JSP文件中有一个HTML表单。我有一个servlet类
WebContent/jsps
,在
servlet.java
文件夹的默认包中。在我的
src
中,它被映射为
web.xml
。
/servlet
我已经在HTML表格的
属性中尝试了几个URL。
action
<form action="/servlet">
<form action="/servlet.java">
<form action="/src/servlet.java">
<form action="../servlet.java">
但这些都不起作用。在Tomcat 6/7/8中,它们都一直返回一个HTTP 404错误,如下图所示。
HTTP状态404 - /servlet
描述。请求的资源(/servlet)不可用。
或者在Tomcat 8.5/9中如下所示。
HTTP状态404 - 未找到
信息。/servlet
描述。起源服务器没有找到目标资源的当前表示,或者不愿意透露存在这样的表示。
或者在Tomcat 10中如下所示。
HTTP状态404 - 未找到
类型。状态报告
信息。请求的资源(/servlet)不可用
描述。起源服务器没有找到目标资源的当前表示,或者不愿意透露存在这样的表示。
为什么它不工作?
这可能有很多原因,在下面的章节中会详细说明。
package
url-pattern
@WebServlet
javax.servlet.*
*.class
把servlet类放在
里
package
首先,把servlet类放在一个Java
。你应该 总是 把可公开重复使用的Java类放在一个包里,否则它们对那些在包里的类是看不见的,比如服务器本身。这样你就消除了潜在的特定环境问题。无包的servlet只在特定的Tomcat+JDK组合中工作,这一点绝对不能依赖。
package
如果是一个 "普通 "的 IDE 项目,该类需要放在其包结构中的 "Java Sources "文件夹中,而 不是 放在 "Web Content "文件夹中,后者是用来存放 JSP 等网络文件的。下面是在 Navigator 视图中看到的默认 Eclipse 动态 Web 项目 的文件夹结构示例("Java Sources "文件夹在此类项目中默认由
文件夹表示)。
src
EclipseProjectName |-- src | `-- com | `-- example | `-- YourServlet.java |-- WebContent | |-- WEB-INF | | `-- web.xml | `-- jsps | `-- page.jsp
如果是Maven项目,该类需要放在其包结构中的
中,而不是main/java
中,这是针对非类文件的,也绝对不是main/resources
,这是针对web文件的。下面是一个默认Maven webapp项目的文件夹结构示例,在Eclipse的Navigator视图中可以看到。main/webapp