【问题标题】:Tomcat web app works in Netbeans, but blank pages are shown in production serverTomcat Web 应用程序在 Netbeans 中工作,但在生产服务器中显示空白页面
【发布时间】:2012-06-23 13:22:44
【问题描述】:

标题是不言自明的。当我在 Netbeans (Tomcat 7) 上运行我的应用程序时,一切正常(我的 dir 结构中的根 index.jsp 文件显示在浏览器中):

当我将应用部署到我的生产服务器时,它部署成功:

但是,当我尝试访问生产服务器中的页面时,它只显示一个空白页面而不是 index.jsp 文件:

这是我的这个应用程序的 web.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">
<filter>
    <filter-name>filter</filter-name>
    <filter-class>com.dendro.mvc.filters.StaticFilesFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- abstract controller to filter static file requests -->
<servlet>
    <servlet-name>Controller</servlet-name>
    <servlet-class>com.dendro.mvc.filters.Controller</servlet-class>
</servlet>
<!-- servlet names -->
<servlet>
    <servlet-name>PropagatedResults</servlet-name>
    <servlet-class>com.dendro.query.PropagatedResultsServlet</servlet-class>
</servlet>
<servlet>
    <servlet-name>PlainResults</servlet-name>
    <servlet-class>com.dendro.query.PlainResultsServlet</servlet-class>
</servlet>
<servlet>
    <servlet-name>HomeFilter</servlet-name>
    <servlet-class>com.dendro.query.HomeFilterServlet</servlet-class>
</servlet>

<!-- mappings -->
<servlet-mapping>
    <servlet-name>Controller</servlet-name>
    <url-pattern>/views/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>HomeFilter</servlet-name>
    <url-pattern>/views/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>PlainResults</servlet-name>
    <url-pattern>/views/query/plain_results</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>PropagatedResults</servlet-name>
    <url-pattern>/views/query/propagated_results</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list> 

还有我的 context.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path=""/>

tomcat 日志只显示成功的请求(200 ok):

192.168.5.77 - - [23/Jun/2012:14:00:29 +0100] "GET /GraphQuery-1.0-SNAPSHOT/ HTTP/1.1" 200 -
192.168.5.77 - - [23/Jun/2012:14:00:29 +0100] "GET /GraphQuery-1.0-SNAPSHOT/ HTTP/1.1" 200  -
192.168.5.77 - - [23/Jun/2012:14:00:30 +0100] "GET /GraphQuery-1.0-SNAPSHOT/ HTTP/1.1" 200 -
192.168.5.77 - - [23/Jun/2012:14:00:31 +0100] "GET /GraphQuery-1.0-SNAPSHOT/ HTTP/1.1" 200  -

【问题讨论】:

  • 您检查了所有日志吗?
  • 有 catalina.out、localhost..log 文件和 localhost_access_log 文件。它们都没有显示任何部署错误。我认为这与 context.xml 文件有关,可能它没有重定向到正确的根...我试图将 Context 元素(在 context.xml 文件中)的路径属性更改为 /GraphQuery-1.0- SNAPSHOT,无济于事...
  • 他们还显示其他内容吗? Tomcat 可能会感到困惑。
  • 您是否检查了其他方面是否按预期工作,例如直接访问 index.jsp 还是控制器?

标签: jakarta-ee tomcat deployment netbeans


【解决方案1】:

尝试以下提示,我试图缩小错误来源:

  • 检查您是否是使用指定过滤器过滤的对象。也许完善 /* 映射有帮助?
  • 还可以尝试访问您定义的其他一些 URL 映射,例如localhost:8080/GraphQuery-1.0-SNAPSHOT/views/
  • / 显式映射到您的index.jsp 或访问URL 时要执行的servlet。对于到 JSP 文件的映射,您可以在 web.xml 的 servlet-mapping 元素中使用 jsp-file 元素。

【讨论】:

  • 谢谢,这有帮助。不幸的是,我发布了完整的答案,其中涉及代码和 web.xml 的一些相当大的变化。还是非常感谢! :)
【解决方案2】:

原来问题出在 web.xml 文件中的过滤器类。最初我将它用于处理 Tomcat 中的静态文件服务,但它似乎使 Tomcat 感到困惑,并且没有日志显示重定向或异常。它在 Netbeans 中工作,因为 Netbeans 始终将您正在调试的应用程序部署在 ROOT 文件夹中。不像 tomcat 生产服务器,没有上下文目录需要考虑,就像在

http://localhost:8084/myapp,

myapp 是上下文。

在更改 web.xml 文件并为静态文件使用默认 servlet 后,我​​开始使用相对映射——有时有点生硬,但它可以工作。

我不得不更改项目中的一些 url 以应对更改。由于在生产服务器中我在 URL 中有上下文,因此我必须更改 CSS 中的 URL,例如,使用相对路径,例如 ../static/img/myimage.jpg

这是正在运行的 Web.xml 文件的新版本,供进一步参考:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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">

    <!--servlet classes-->
    <servlet>
        <servlet-name>PropagatedResults</servlet-name>
        <servlet-class>com.dendro.query.PropagatedResultsServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>PlainResults</servlet-name>
        <servlet-class>com.dendro.query.PlainResultsServlet</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>Home</servlet-name>
        <servlet-class>com.dendro.query.HomeServlet</servlet-class>
    </servlet>

    <!--serving static files-->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpeg</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.png</url-pattern>
    </servlet-mapping>

    <!--servlets urls-->
    <servlet-mapping>
        <servlet-name>PlainResults</servlet-name>
        <url-pattern>/query/plain_results</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>PropagatedResults</servlet-name>
        <url-pattern>/query/propagated_results</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>Home</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

【讨论】:

    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2020-10-04
    • 2021-05-05
    • 2020-11-30
    相关资源
    最近更新 更多