标题很不言自明。 当我在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 -
尝试以下提示,我尝试缩小错误源的范围:
/*
映射会有所帮助? localhost:8080/GraphQuery-1.0-SNAPSHOT/views/
/
映射到index.jsp
或访问URL时要执行的servlet。 为了映射到JSP文件,可以在web.xml的servlet-mapping
元素中使用jsp-file
元素。 原来问题出在我在web.xml文件中的过滤器类。 最初,我是为了照顾Tomcat中的静态文件服务而设置的,但似乎使Tomcat感到困惑,并且没有日志显示重定向或异常。 它之所以在Netbeans中工作,是因为Netbeans始终将要调试的应用程序部署在ROOT文件夹中。 与tomcat生产服务器不同,它没有上下文目录可解释,例如
http://localhost:8084/myapp,
myapp是上下文。
更改了web.xml文件并为静态文件使用默认的servlet之后,我开始使用相对映射-有时有点hacker,但它可以工作。
我必须在项目中更改一些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>