Servlet返回“HTTP状态404请求的资源(/Servlet)不可用”

nwlqm0z1  于 2022-09-21  发布在  Eclipse
关注(0)|答案(19)|浏览(373)

我的WebContent/jsps文件夹中的一个JSp文件中有一个HTML表单。我在src文件夹的默认包中有一个Servlet类servlet.java。在我的web.xml中,它被Map为/servlet

我在HTML表单的action属性中尝试了几个URL:

<form action="/servlet">
<form action="/servlet.java">
<form action="/src/servlet.java">
<form action="../servlet.java">

但这些都不管用。在Tomcat 6/7/8中,它们都一直返回如下所示的HTTP404错误:

HTTP状态404--/Servlet

  • 说明*:请求的资源(/Servlet)不可用。

或在Tomcat 8.5/9中如下所示:

HTTP状态404-未找到

  • Message*:/Servlet

  • Description*:源站没有找到目标资源的当前表示,或者不愿意透露存在

或者在Tomcat 10中如下所示:

HTTP状态404-未找到

  • 类型*:状态报告

  • 消息*:请求的资源(/Servlet)不可用

  • Description*:源站没有找到目标资源的当前表示,或者不愿意透露存在

为什么它不起作用?

2admgd59

2admgd5916#

NetBeans IDE中HTTP Status 404的解决方案:右键单击您的项目并转到您的项目属性,然后单击Run,然后输入您的项目相对URL,如index.jsp

1.项目->属性
1.点击Run
1.相对URL:/index.jsp(选择您的项目根URL)

kqhtkvqz

kqhtkvqz17#

如果你使用的是IntelliJ,以下是为我修复的方法:

转到Tomcat配置:

配置>部署选项卡

向下滚动并将/添加到应用程序上下文下拉菜单

ma8fv8wu

ma8fv8wu18#

检查您是否输入了Web.xml中指定的正确URLMap

例如:

在web.xml中,您的Servlet声明可能是:

<servlet>
        <servlet-name>ControllerA</servlet-name>
        <servlet-class>PackageName.ControllerA</servlet-class>
</servlet>

<servlet-mapping>
        <servlet-name>ControllerA</servlet-name>
        <url-pattern>/theController</url-pattern>
</servlet-mapping>

这段代码的作用是<url-pattern>/theController</url-pattern>将设置将用于通过URL从前端(例如:Form)调用Servlet的名称。因此,当您在前端引用Servlet时,为了确保请求到达Servlet“ControllerA”,它应该从表单引用指定的URL模式“theControlerA”。

例如:

<form action="theController" method="POST">
</form>
eqzww0vc

eqzww0vc19#

场景#1:在Tomcat已经运行时,意外地从命令行重新部署

**简答:**停止Tomcat,删除目标文件夹,MVN包,然后重新部署

**场景#2:**request.getRequestDispatcher(“MIS_SPELLED_FILE_NAME.jsp”)

简短回答:检查文件名拼写,确保大小写正确。

场景#3:类未发现异常(答案放在此处是因为:问题#17982240)(java.lang.ClassNotFoundException for servlet in tomcat with eclipse)(被标记为重复,并将我定向到此处)

简单回答#3.1:web.xml在Servlet类标记中有错误的包路径。

简单回答#3.2:Java文件有错误的导入语句。

以下是场景1的详细信息:

第一集:阻止汤姆猫

  • 方案一:在终端通过CTRL+C。
  • 选项2:(终端关闭,Tomcat仍在运行)
  • -2.1:按:Windows+R-->类型:“services.msc
  • -2.2:在列表的名称栏中找到“apache Tomcat#.#Tomcat#”。
  • -2.3:右击-->“停止

2:删除目标文件夹。(MVN CLEAN在这里帮不上忙)

3:MVN套餐

4:您的部署命令_此处

(我的:Java-jar目标/依赖关系/webapp-runner.jar--端口5190目标/*.war)

后卫故事:

意外地打开了一个新的git-bash窗口,并试图通过以下方式为我的Heroku项目部署.war文件:

Java-jar目标/依赖关系/webapp-runner.jar--端口5190目标/*.war

在一次部署失败后,我意识到我打开了两个git-bash窗口,并且没有使用ctlr+C停止之前的部署

我遇到了这样一个人:
HTTP状态404-未找到类型状态报告

Message/If-Student-Test.jsp

描述源服务器没有找到目标资源的当前表示形式,或者不愿意透露存在一个表示形式。

ApacheTomcat/8.5.31

以下是场景#3的更多详细信息:

场景3.1:您的web.xml文件中的Servlet类包路径错误。

它应该与Java Servlet类顶部的Package语句匹配。

文件:My_Stuff/MyClass.java

package my_stuff;

文件:PRJ_ROOT/src/main/webapp/WEB-INF/web.xml

<servlet-class>
   my_stuff.MyClass
   </servlet-class>

场景3.2:

您在myClass.java文件的顶部放置了错误的“Package”语句。

例如:

文件位于:“/My_Stuff”文件夹中

你错误地写下了:

package com.my_stuff

这很棘手,因为:

1:maven版本(MVN包)不会在这里报告任何错误。

2:web.xml中的Servlet类行可以有正确的包路径。例如:

<servlet-class>
my_stuff.MyClass
</servlet-class>

使用的堆栈:记事本+++GitBash+Maven+Heroku Web App Runner+Tomcat9+Windows10

相关问题