【问题标题】:Servlet URL 404'ing, although JSP files work fineServlet URL 404'ing,虽然 JSP 文件工作正常
【发布时间】:2015-09-30 09:32:41
【问题描述】:

设置: Tomcat 7 服务器,Eclipse Mars Milestone 3

问题:当尝试运行 Servlet 文件或连接到文件 404 时。虽然我可以完美地连接到 JSP 文件,但它只是所有 404 的 servlet 文件。下图。

还应该提到这一点影响所有 Servlet,而不仅仅是一两个 ALL。

我认为这是一个本地问题,因为一位同事正在另一台机器上运行下一个相同的设置,尽管已成功找到 servlet。

这是启动时的日志,尽管在启动或加载 servlet url 时没有显示明显的错误。

我在 servlet 中使用 servlet 映射来定义 URL IE @WebServlet("/Sterling")

问题:可能是什么原因造成的,我该如何解决?谢谢。

Sep 30, 2015 10:21:29 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files (x86)/Java/jre6/bin/client;C:/Program Files (x86)/Java/jre6/bin;C:/Program Files (x86)/Java/jre6/lib/i386;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Micro Focus\RUMBA\;C:\Program Files (x86)\Micro Focus\RUMBA\System;C:\Eclipse;
Sep 30, 2015 10:21:30 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:{redacted}' did not find a matching property.
Sep 30, 2015 10:21:30 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-80"]
Sep 30, 2015 10:21:30 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Sep 30, 2015 10:21:30 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1879 ms
Sep 30, 2015 10:21:30 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep 30, 2015 10:21:30 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.34
Sep 30, 2015 10:21:37 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-80"]
Sep 30, 2015 10:21:37 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Sep 30, 2015 10:21:37 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 6704 ms

Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>*****DataManagementTool</display-name>
  <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>

部署程序集设置

【问题讨论】:

  • 请发布您的 web.xml。
  • 区分大小写,应该是urlPatterns={"/sterling"}
  • 该案例在现场环境以及我的同事环境中运行良好。
  • @BalusC 是的,他们都这么说,我只是想保密,但现在已经不存在了。为了澄清它说的编辑位置,它说的是你所说的。
  • /ArgosDataManagementTool/Sterling

标签: java eclipse jsp tomcat servlets


【解决方案1】:

这是一个未找到的错误。您的日志显示没有错误,因此非常简单,您的部署未达到所需的 servlet。

没有足够的信息来确定原因,但由于您可以访问 JSP 文件,我会检查您是否已将 servlet 正确配置到 WEB-INF/web.xml 描述符中。

编辑

由于您刚刚编辑了您的问题,我可以告诉您您的问题是什么。您还没有配置 servlet ...配置所需的 servlet,如下所示:

    <servlet>
            <servlet-name>Servlet Name</servlet-name>
            <servlet-class>path.to.ServletClass</servlet-class>
            <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
            <servlet-name>Servlet Name</servlet-name>
            <url-pattern>URL-PATTERN</url-pattern>
    </servlet-mapping>

编辑 2

在你的版本之后,我没有看到你使用了注解,显然如果你有servlet注解你不需要这个配置。

编辑 3

确保您的 web.xml 具有正确的架构版本,否则可能会使您的应用忽略注释。

<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">

我想你的 servlet 类继承自 HttpServlet,对吧?

【讨论】:

  • 我已经添加了 web.xml,我们将其保留为空白,并在 servlet 中使用 @WebServlet("/Sterling")。
  • 他不需要在web.xml中配置servlet
  • 是的,正如 Neilos 所说,我相信自从 TC7 使用 @WebServlet 声明它们就足够了。两者都这样做会导致冲突错误。
  • 是的,我总是使用 Servlet 3.0 注释,因为我发现 web.xml 方法很麻烦。您可以在没有 web.xml 的情况下在 servlet 类中定义它们
  • 我在编辑答案时正在写答案,但没有看到注释使用...再次编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
相关资源
最近更新 更多