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

107 人关注

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

我已经在HTML表格的 action 属性中尝试了几个URL。

<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)不可用

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

为什么它不工作?

java
forms
jsp
servlets
http-status-code-404
pongahead
pongahead
发布于 2012-07-31
19 个回答
BalusC
BalusC
发布于 2019-05-20
0 人赞同

这可能有很多原因,在下面的章节中会详细说明。

  • 把servlet类放在 package
  • url-pattern 中设置servlet URL
  • @WebServlet 仅在Servlet 3.0或更新版本上工作
  • javax.servlet.* 在Servlet 5.0或更新的版本中不再工作了
  • 确保编译的 *.class 文件存在于构建的WAR中。
  • 在没有任何JSP/HTML页面的情况下单独测试Servlet
  • 使用域相关的URL从HTML中引用servlet
  • 在HTML属性中使用直引号
  • 把servlet类放在 package

    首先,把servlet类放在一个Java package 。你应该 总是 把可公开重复使用的Java类放在一个包里,否则它们对那些在包里的类是看不见的,比如服务器本身。这样你就消除了潜在的特定环境问题。无包的servlet只在特定的Tomcat+JDK组合中工作,这一点绝对不能依赖。

    如果是一个 "普通 "的 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中,这是针对非类文件的,也绝对不是 main/webapp,这是针对web文件的。下面是一个默认Maven webapp项目的文件夹结构示例,在Eclipse的Navigator视图中可以看到。

    MavenProjectName
     |-- src
     |    `-- main
     |         |-- java
     |         |    `-- com
     |         |         `-- example
     |         |              `-- YourServlet.java
     |         |-- resources
     |         `-- webapp
     |              |-- WEB-INF
     |              |    `-- web.xml
     |              `-- jsps
     |                   `-- page.jsp
    

    请注意,/jsps子文件夹并不是严格意义上必须的。你甚至可以不这样做,直接把JSP文件放在webcontent/webapp根目录下,但我只是接手了你的问题。

    url-pattern中设置servlet URL

    servlet的URL被指定为servlet映射的 "URL模式"。根据定义,它绝对不是servlet类的类名/文件名。URL模式应被指定为@WebServlet注解的值。

    package com.example; // Use a package!
    import jakarta.servlet.annotation.WebServlet; // or javax.*
    import jakarta.servlet.http.HttpServlet; // or javax.*
    @WebServlet("/servlet") // This is the URL of the servlet.
    public class YourServlet extends HttpServlet { // Must be public and extend HttpServlet.
    // ...
    

    如果你想支持像/servlet/foo/bar这样的路径参数,那么就用/servlet/*的URL模式来代替。参见Servlet和路径参数,如/xyz/{value}/test,如何在web.xml中映射?

    @WebServlet仅在Servlet 3.0或更新版本上工作

    为了使用@WebServlet,你只需要确保你的web.xml文件,如果有的话(从Servlet 3.0开始,它是可选的),声明符合Servlet 3.0+版本,从而符合例如2.5版本或更低版本。下面是一个兼容Servlet 5.0的文件(与Tomcat 10+、WildFly 22+(Preview)、GlassFish/Payara 6+等相匹配)。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
    version="5.0">
    <!-- Config here. -->
    </web-app>
    

    下面是一个与Servlet 4.0兼容的(与Tomcat 9+、WildFly 11+、GlassFish/Payara 5+等匹配)。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0"
    <!-- Config here. -->
    </web-app>
    

    或者,如果你还没有使用Servlet 3.0+(例如Tomcat 6或更老的版本),那么就删除@WebServlet注解。

    package com.example;
    import javax.servlet.http.HttpServlet;
    public class YourServlet extends HttpServlet {
        // ...
    

    而在web.xml中注册servlet,就像这样。

    <servlet>
    <servlet-name>yourServlet</servlet-name>
    <servlet-class>com.example.YourServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>yourServlet</servlet-name>
    <url-pattern>/servlet</url-pattern> <!-- This is the URL of the servlet. -->
    </servlet-mapping>
    

    因此请注意,你不应该同时使用两种方式。使用基于注解的配置或基于XML的配置。当你同时拥有这两种方式时,基于XML的配置将优先于基于注解的配置。

    javax.servlet.*在Servlet 5.0或更新的版本中不再工作了

    自从Jakarta EE 9 / Servlet 5.0 (Tomcat 10, TomEE 9, WildFly 22 Preview, GlassFish 6, Payara 6, Liberty 22等),javax.*包已经更名为jakarta.*包。

    换句话说,请绝对确保你不会仅仅为了让javax.*包编译而随意将不同服务器的JAR文件放在你的WAR项目中,如tomcat-servlet-api-9.x.x.jar。这只会造成麻烦。完全删除它,并编辑你的servlet类的导入,从

    import javax.servlet.*;
    import javax.servlet.annotation.*;
    import javax.servlet.http.*;
    
    import jakarta.servlet.*;
    import jakarta.servlet.annotation.*;
    import jakarta.servlet.http.*;
    

    如果你使用的是Maven,你可以在这个答案中找到Tomcat 10+、Tomcat 9-、JEE 9+和JEE 8-的正确pom.xml声明的例子。Tomcat将servlets投给javax.servlet.Servlet而不是jakarta.servlet.http.HttpServlet。另一种方法是将服务器降级到旧版本,例如从Tomcat 10回到Tomcat 9或更早的版本,但这显然不是推荐的方法。

    确保编译的*.class文件存在于构建的WAR中。

    如果你使用的是Eclipse和/或Maven这样的构建工具,那么你需要绝对确保编译后的Servlet类文件位于所生成的WAR文件的/WEB-INF/classes文件夹的包结构中。如果是package com.example; public class YourServlet,它必须位于/WEB-INF/classes/com/example/YourServlet.class中。否则,在@WebServlet的情况下,你将面临404错误,或者在<servlet>的情况下,面临HTTP 500错误,如下所示。

    HTTP状态500

    在实例化Servlet类com.example.YourServlet时出错

    并在服务器日志中发现一个java.lang.ClassNotFoundException: com.example.YourServlet,接着是一个java.lang.NoClassDefFoundError: com.example.YourServlet,依次是jakarta.servlet.ServletException: Error instantiating servlet class com.example.YourServlet在实例化servlet类com.example.YourServlet时出错

    验证servlet是否被正确编译并放置在classpath中的一个简单方法是让构建工具产生一个WAR文件(例如在Eclipse中右击项目,导出>WAR文件),然后用ZIP工具检查其内容。如果/WEB-INF/classes中缺少servlet类,或者导出时导致错误,那么项目的配置就很糟糕,或者某些IDE/项目配置的默认值被错误地恢复了(例如Eclipse中的Project > Build Automatically被禁用)。

    你还需要确保项目图标上没有表示构建错误的红叉。你可以在Problems视图中找到确切的错误(Window > Show View > Other...)。通常情况下,错误信息在Google上是可以找到的。如果你没有线索,最好从头开始重启,不要碰任何IDE/项目配置的默认值。如果你使用的是Eclipse,你可以在《如何在Eclipse项目中导入javax.servlet/jakarta.servlet API?

    在没有任何JSP/HTML页面的情况下单独测试Servlet

    只要服务器运行在localhost:8080上,WAR成功部署在/contextname(默认为IDE项目名称,区分大小写!)的上下文路径上,并且servlet没有初始化失败(阅读服务器日志,查看任何deploy/servlet成功/失败信息以及实际的上下文路径和servlet映射),那么URL模式为/servlet的servlet就可在http://localhost:8080/contextname/servlet

    你可以直接在浏览器的地址栏中输入它,对其进行单独测试。如果它的doGet()被正确地覆盖和实现,那么你将在浏览器中看到它的输出。如果你没有doGet(),或者它错误地调用了super.doGet(),那么就会出现"HTTP 405: HTTP method GET is not supported by this URL"的错误(这仍然比404好,因为405是证明Servlet本身确实被找到的证据)。

    重写service()是一种不好的做法,除非你在重新发明一个MVC框架--如果你刚刚开始使用servlets,并且对当前问题中描述的问题毫无头绪的话,这种可能性很小;)请参阅设计模式基于Web的应用程序

    不管怎么说,如果servlet在单独测试时已经返回404,那么用HTML表单来代替就完全没有意义。因此,从逻辑上讲,在关于Servlet的404错误的问题中包含任何HTML表单也是完全没有意义的。

    使用域相关的URL从HTML中引用servlet

    一旦你验证了servlet在被单独调用时工作正常,那么你就可以推进到HTML。至于你的HTML表单的具体问题,<form action>的值需要是一个有效的URL。这同样适用于<a href><img src><script src>等。你需要了解绝对/相对的URL是如何工作的。你知道,URL是一个网络地址,因为你可以在网络浏览器的地址栏中输入/看到。如果你指定一个相对的URL作为表单动作,即没有http://方案,那么它就变成了相对于你在网络浏览器地址栏中看到的当前URL。因此,它绝对不是相对于服务器WAR文件夹结构中的JSP/HTML文件的位置,就像许多初学者所认为的那样。

    因此,假设带有HTML表单的JSP页面是由http://localhost:8080/contextname/jsps/page.jsp(因此不是file://....)打开的,而你需要提交给位于http://localhost:8080/contextname/servlet 的servlet这里有几种情况(注意,在这里你可以安全地用<a href><img src><script src>等代替<form action>。)

  • 表单动作提交到一个带斜线的URL。

     <form action="/servlet">
    

    前面的斜线/使URL相对于域名,因此表单将提交到

      http://localhost:8080/servlet
    

    但这很可能会导致404,因为它的上下文是错误的。

  • 表单动作提交到一个没有前导斜线的URL。

     <form action="servlet">
    

    这使得URL是相对于当前URL的文件夹而言的,因此表单将提交到

      http://localhost:8080/contextname/jsps/servlet
    

    但这可能会导致404,因为它在错误的文件夹中。

  • 表单动作提交到一个URL,这个URL是向上的一个文件夹。

     <form action="../servlet">
    

    这将上升一个文件夹(与本地磁盘文件系统的路径完全一样!),因此表单将提交到

      http://localhost:8080/contextname/servlet
    

    这个一定有用!

  • 然而,规范的方法是使URL与域相关,这样,当你碰巧把JSP文件移到另一个文件夹时,你就不需要再次修复URL了。

     <form action="${pageContext.request.contextPath}/servlet">
    
     <form action="/contextname/servlet">
    

    因此,它将始终提交到正确的URL。

    在HTML属性中使用直引号

    你需要绝对确保你在HTML属性中使用直引号,如action="..."action='...',因此不要使用大括号,如action=”...”action=’...’卷曲引号在HTML中不被支持,它们将简单地成为值的一部分。在复制博客中的代码片段时要注意!一些博客引擎,特别是Wordpress,默认使用所谓的 "智能引号",因此也会以这种方式破坏代码片段中的引号。另一方面,与其复制粘贴代码,不如尝试自己简单地输入代码。通过你的大脑和手指实际获得代码的额外好处是,它将使你在长期内更好地记住和理解代码,也使你成为一个更好的开发者。

  • 我们的servlets维基页面- 包含一些hello world的例子
  • 如何从HTML表单中调用servlet类
  • Servlets中的doGet和doPost
  • 如何通过点击JSP页面中的超链接或按钮将当前项目传递给Java方法?
  • HTTP状态404错误的其他情况。

  • HTTP状态404 - Servlet [ServletName]不可用
  • HTTP状态404 - 请求的资源(/项目名称/)不可用
  • HTTP状态404 - 请求的资源(/)不可用
  • /WEB-INF中的JSP返回 "HTTP状态404所请求的资源不可用"
  • 在JSP文件中引用放置在WEB-INF文件夹中的资源,在资源上返回HTTP 404
  • 当调用转发到JSP的Servlet时,浏览器无法访问/找到相关资源,如CSS、图片和链接。
  • web-app version="3.1" 使用 glassfish,当我在 web.xml 中有一个映射和注释的时候,我可以很好地单独测试我的 servlet。因为我有最新的版本,所以我删除了映射,保留了注释,但是我得到了一个404错误?
    如果你把servlet 2.5或更早的库包含在webapp本身,而不是依靠目标运行时自己提供servlet库,就会发生这种情况。
    twitchdotcom slash KANJICODER
    twitchdotcom slash KANJICODER
    发布于 2019-05-20
    0 人赞同

    场景 一: 当tomcat 已经运行 时,你意外地从命令行 重新部署

    简短的回答。 停止Tomcat, 删除目标文件夹 ,mvn包,然后重新部署。

    情景二: request.getRequestDispatcher( "MIS_SPELLED_FILE_NAME .jsp")

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

    情景#3。未找到类的异常情况 (答案放在这里是因为: Question# 17982240 ) (java.lang.ClassNotFoundException for servlet in tomcat with eclipse ) (被标记为重复的,并引导我到这里 )

    简短回答#3.1:web.xml的servlet-class标签中有错误的软件包路径。

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

    以下是方案1的进一步细节。

    1: 停止Tomcat

  • 选项1:通过终端的CTRL+C。
  • 选项2:(终端关闭,而Tomcat仍在运行)。
  • ------------ 2.1: 按 :Windows+R --> 输入: "services.msc "
  • ------------ 2.2:在列表的名称栏中找到 "Apache Tomcat #.# Tomcat#"。
  • ------------ 2.3:右键点击-- >"停止 "
  • 2:删除 "目标 "文件夹。 (mvn clean在这里不会帮助你)

    3: mvn包

    4: 你的部署命令在这里

    (Mine: java -jar target/dependency/webapp-runner.jar --port 5190 target/*.war )

    完整的背景故事。

    意外地打开了一个新的git-bash窗口,并且 试图为我的heroku项目部署一个.war文件,通过。

    java -jar target/dependency/webapp-runner.jar --port 5190 target/*.war

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

    我遇到的是。

    HTTP状态404 - 未找到类型状态报告

    信息/if-student-test.jsp

    描述 源头服务器没有找到目标资源的当前表述 或不愿意披露存在一个目标资源的

    Apache Tomcat/8.5.31

    以下是方案3的进一步细节。

    场景 3.1: servlet-class软件包的路径错误 在你的web.xml文件中。

    它应该与你的java servlet类顶部的包声明相匹配 的包声明。

    文件: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:

    你把错误的"package"声明 在你的myClass.java文件的顶部。

    文件在。"/my_stuff"文件夹

    你错误地写道。

    package com.my_stuff
    

    这是很棘手的,因为。

    1: maven构建(mvn包)不会在这里报告任何错误。

    2:web.xml中的servlet-class行可以有正确的软件包路径。例如。

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

    使用的堆栈。 Notepad+++GitBash+Maven+Heroku Web App Runner+Tomcat9+Windows10

    jla
    你的AppName.war以及因此而爆炸的文件夹名称与你预期的名称不一致,例如,当你的战争文件的版本为AppName-1.0-SNAPSHOT.war,而你正在尝试/AppName/。
    Lakindu Hewawasam
    Lakindu Hewawasam
    发布于 2019-05-20
    0 人赞同

    检查你是否输入了Web.xml中指定的正确的URL Mapping。

    在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调用servlet的名称。因此,当你在前端引用servlet时,为了确保请求被送到servlet "ControllerA",它应该从表单中引用指定的URL模式 "theController"。

    <form action="theController" method="POST">
    </form>
    
    O R Imon
    O R Imon
    发布于 2019-05-20
    0 人赞同

    NetBeans IDE中 HTTP Status 404 的解决方案。 在你的项目上点击右键,进入你的项目属性,然后点击运行,然后输入你的项目相对的URL,如 index.jsp

  • 项目->属性
  • 单击 "运行"。
  • 相关的URL:/index.jsp (选择你的项目根URL)
  • THE_DOM
    THE_DOM
    发布于 2019-05-20
    0 人赞同

    我的问题是,我的方法缺少@RequestBody注解。添加注解后,我不再收到404异常。

    Sajal Saha
    Sajal Saha
    发布于 2019-05-20
    0 人赞同

    做好以下两个步骤。我希望,这将解决在开发java servlet应用程序时在tomcat服务器上出现的 "404 not found "问题。

    第1步: Right click on the server(in the server explorer tab)->Properties->Switch Location from workspace metadata to tomcat server

    第2步: Double Click on the server(in the server explorer tab)->Select Use tomcat installation option inside server location menu

    Saige Zhang
    Saige Zhang
    发布于 2019-05-20
    0 人赞同

    我删除了旧的web库,如spring framework库。并建立了一个新的库的路径。然后它就工作了。

    Chaitanya
    Chaitanya
    发布于 2019-05-20
    0 人赞同

    这是一个老话题,但由于我在其他地方没有找到,这里还有一种可能性。

    如果你使用的是 servlet-api 3.0+ ,那么你的web.xml必须 包括 metadata-complete="true" 属性。

    这告诉tomcat使用 web.xml 中的数据来映射servlets,而不是使用 @WebServlet 注解。

    Selby Khuzwayo
    Selby Khuzwayo
    发布于 2019-05-20
    0 人赞同

    首先,以管理员身份运行你的IDE。之后,右击项目文件夹->项目界面,确保Java版本设置正确。在我的电脑上,(例如1.8)现在它应该可以工作了。

    不要只是用cmd来启动你的服务器,例如Wildfly。它必须在IDE中启动,现在访问你的本地主机URL。例如 :http://localhost:8080/HelloWorldServlet/HelloWorld

    joseph zhao
    joseph zhao
    发布于 2019-05-20
    0 人赞同

    对我有用的修复方法是(如果你使用的是Maven)。右击你的项目,Maven -> 更新项目。这可能会让你在JDK和其他库(在我的例子中是MySQL连接器)方面遇到一些其他错误,但一旦你解决了这些问题,你原来的问题就会得到解决

    matak8s
    matak8s
    发布于 2019-05-20
    0 人赞同

    如果你想用javascript打开一个servlet,而不使用'form'和'submit'按钮,这里有如下代码。

    var button = document.getElementById("<<button-id>>");
    button.addEventListener("click", function() {
      window.location.href= "<<full-servlet-path>>" (eg. http://localhost:8086/xyz/servlet)
    

    1) button-id : 你在html/jsp文件中给你的按钮加上的'id'标签。

    2) full-servlet-path。当你单独运行Servlet时,在浏览器中显示的路径

    Sidharth Jain
    Sidharth Jain
    发布于 2019-05-20
    0 人赞同

    在web.xml中的映射是我所做的 :-

  • 如果有另一个为新程序制作的软件包,那么我们必须提到:-
  • packagename.filename在xml文件中的servlet-class标签的打开和关闭之间。

  • 如果你在xml中映射你的文件,而它们没有工作或显示错误,那么在各自的文件中对注释行的代码进行注释。
  • 这两种方法都不能相互配合,所以我要么使用创建servlet时提到的文件注释方法,要么使用映射的方法,然后删除或注释注释行。例如:"我在创建servlet时,使用了文件的注释方法。

     <servlet>
       <servlet-name>s1</servlet-name>
       <servlet-class>performance.FirstServ</servlet-class>
       </servlet>    
       <servlet-mapping>
       <servlet-name>s1</servlet-name>
       <url-pattern>/FirstServ</url-pattern>
       </servlet-mapping>
       <servlet>
       <servlet-name>s2</servlet-name>
       <servlet-class>performance.SecondServ</servlet-class>
       </servlet>
       <servlet-mapping>
       <servlet-name>s2</servlet-name>
       <url-pattern>/SecondServ</url-pattern>
       </servlet-mapping>
    

    如果在xml中做了映射,就在相应的文件中对代码的注释行进行注释。

    //@WebServlet("/FirstServ")
    //@WebServlet("/SecondServ")
    
    0 人赞同

    如果有人在这里使用MySQL,并且觉得代码前一天还在工作,现在却不工作了,那么我想你必须打开MySQL CLI或MySQL Workbench,只需与数据库建立一次连接。一旦它被连接,那么数据库也会被连接到Java应用程序。我曾经收到过Hibernate Dialect的错误,说com.mysql.jdbc.Driver有问题。我想MySQL在某些计算机上有一个启动问题。这为我解决了问题。

    0 人赞同

    如果你是一个学生,又是第一次接触Java,你的web.xml文件可能有一些问题。

  • 尝试删除web.xml文件。
  • 第二,检查你的路径变量是否被正确设置。
  • 重新启动tomcat服务器或你的电脑。
  • 你的问题肯定会得到解决。

    Mark Bromell
    Mark Bromell
    发布于 2019-05-20
    0 人赞同

    我也面临这个问题,当我访问一个我知道与Servlet有关的URL模式时,我收到了404。原因是我有两个Servlet,它们的@WebServlet name 参数被设置为相同的字符串。

    @WebServlet(name = "ServletName", urlPatterns = {"/path"})
    public class ServletName extends HttpServlet {}
    
    @WebServlet(name = "ServletName", urlPatterns = {"/other-path"})
    public class OtherServletName extends HttpServlet {}
    

    两个name参数都是一样的。如果你使用名称参数,确保它们与你的应用程序上的所有其他Servlet相比是唯一的。

    Yasiru Ops
    Yasiru Ops
    发布于 2019-05-20
    0 人赞同

    我有同样的问题。尝试了所有这些,但都没有帮助。我设法通过在xml文件的开头和结尾添加元素标签来解决这个问题。我把我的xml文件留在下面供参考。

    <?xml version="1.0" encoding="UTF-8"?>
    <element>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    <servlet> 
        <servlet-name>InsertServlet</servlet-name> 
        <servlet-class>com.worklog.InsertServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
        <servlet-name>InsertServlet</servlet-name> 
        <url-pattern>/insert</url-pattern> 
    </servlet-mapping>
    </web-app>
    </element>
    
    0 人赞同

    如果你正在使用IntelliJ,这就是我的解决办法。

    转到Tomcat配置。

    配置 > 部署标签

    向下滚动,在应用程序上下文的下拉菜单中添加 /

    Waqar Detho
    Waqar Detho
    发布于 2019-05-20
    0 人赞同

    我也有同样的问题。我正在开发一个基于mvc的REST API,没有明确的html配置或文件。该API使用Swagger来生成一个用户界面。问题从我引入Swagger版本 "3.0.0 "开始。我恢复到Swagger "2.9.2",这解决了我的问题。

    <!-- Swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>