【问题标题】:Tomcat shows 404Tomcat 显示 404
【发布时间】:2013-08-29 12:48:37
【问题描述】:

我有一个在 Eclipse 中运行良好的 Java EE 项目。但是当我将它部署到具有普通 Tomcat-7 的服务器时,它会在每个 servlet 页面上显示 404 错误(而 .jsp 工作)。

我尝试在那里部署一个 .war 文件并尝试复制整个项目文件夹,包括 WEB-INF 目录。结果是一样的。

web.xml 文件包含以下内容:

<?xml version="1.0" encoding="ASCII"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         version="2.5">
  <display-name>acs</display-name>
  <servlet>
    <display-name>jsp</display-name>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>
    <url-pattern>*.png</url-pattern>
    <url-pattern>*.gif</url-pattern>
    <url-pattern>*.jpg</url-pattern>
    <url-pattern>*.css</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.svg</url-pattern>
    <url-pattern>*.kml</url-pattern>
  </servlet-mapping>
</web-app>

每个 servlet 类都包含这样的注释

@WebServlet("/full") 

那么为什么会这样呢?有没有办法知道 Tomcat 在哪里尝试搜索这些 servlet?或者其他的东西。所以现在我就像站在墙前,它向我显示 404,我不知道出了什么问题......

【问题讨论】:

  • 如果您在 Windows 上开发:文件名不区分大小写。对于 Unix(和 jars),文件路径区分大小写。另一个次要问题:可能服务器具有 UTF-8 编码,而您的 Windows-1252 或类似。如果使用特殊字符,请检查 JSP 源的编码是否正确。 -- 当然你可能已经改变了servlet上下文:http localhost 8080 / servlet / x.jpg vs http my.com / x.jpg。
  • 不,开发机器和服务器都使用 UTF-8 字符集在 GNU/Linux 上运行。
  • 进一步猜测:也许一台服务器解开了战争,另一台没有。可能所有者/权利问题。无论如何,祝你好运。
  • 好吧..实际上我在没有 .war 的情况下开发并部署到服务器也只是文件夹。但是当我尝试部署 .war 时,Tomact 将其解压缩并创建了包含类等的正确文件夹。但没有找到它...
  • 我已经调查了问题出在哪里。它在&lt;url-pattern&gt;*.html&lt;/url-pattern&gt; 中。如果我删除那个字符串,麻烦神秘地就消失了。但为什么???看起来 Tomcat-7 在 URL 中请求的文件夹中查找 index.html,而不是查找正确的 servlet。并为默认 servlet 找到适当的规则 *.html 并搜索此类文件(index.html),但显然找不到它......

标签: java eclipse tomcat servlets


【解决方案1】:

对于每个 servlet,我们添加 2 个主要标签 和 like

   <servlet>
    <display-name>jsp</display-name>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
  </servlet-mapping>

虽然对于“default” servlet,我还没有找到带有 servlet-class 映射的 标记

【讨论】:

  • 好吧,我已经在 org.apache.catalina.servlets.DefaultServlet 类中插入了默认的 servlet 标记,正如它所描述的 here 一样。但什么都没有改变。
猜你喜欢
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2011-05-05
  • 2019-02-27
相关资源
最近更新 更多