2010-05-05 79 views
3

首先,我使用的是Google AppEngine和Guice,但我怀疑我的问题与这些不相关。如何直接提供HTML页面时应用servlet过滤器?

当用户连接到我的(GWT)web应用程序时,该URL是一个直接的html页面。例如,在开发模式下,它是:http://127.0.0.1:8888/Puzzlebazar.html?gwt.codesvr=127.0.0.1:9997。现在,我安装我的web.xml通过以下方式:

<?xml version="1.0" encoding="UTF-8"?> 
<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_2_5.xsd" 
version="2.5"> 
<display-name>PuzzleBazar</display-name> 

<!-- Default page to serve --> 
<welcome-file-list> 
    <welcome-file>Puzzlebazar.html</welcome-file> 
</welcome-file-list> 


<filter> 
    <filter-name>guiceFilter</filter-name> 
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>guiceFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<!-- 
    This Guice listener hijacks all further filters and servlets. Extra 
    filters and servlets have to be configured in your 
    ServletModule#configureServlets() by calling 
    serve(String).with(Class<? extends HttpServlet>) and 
    filter(String).through(Class<? extends Filter) 
--> 
<listener> 
    <listener-class>com.puzzlebazar.server.guice.MyGuiceServletContextListener 
    </listener-class> 
</listener> 

</web-app> 

而且我appengine-web.xml是:

<?xml version="1.0" encoding="utf-8"?> 
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
    <application>puzzlebazaar</application> 
    <version>1</version> 
    <sessions-enabled>true</sessions-enabled> 

    <!-- Configure java.util.logging --> 
    <system-properties> 
     <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>  
    </system-properties> 

</appengine-web-app> 

由于我使用吉斯,我要在我的servlet配置额外的过滤器,在那里我做这个:

filter("*.html").through(SecurityCookieFilter.class); 

但是我的SecurityCookieFilter.doFilter永远不会被调用。我尝试了诸如"*.html*"<url-pattern>*</url-pattern>之类的东西,但无济于事。任何想法我应该如何做到这一点?

+0

我发现它通过切换到“.jsp”而不是“.html”。 – 2010-05-05 03:44:05

回答

3

您可能已将HTML文件配置为您的appengine-web.xml中的静态内容。静态文件服务根本不涉及您的应用程序,因此您无法过滤输出。

+0

谢谢。我已经在那里添加了appengine-web.xml。有什么遗漏? – 2010-05-05 20:57:05

+0

它看起来像你的HTML被作为一个静态文件,正如我所说,这意味着它根本不会触及你的代码。你需要创建一个servlet来提供你的文件,如果你希望它们是后处理的。 – 2010-05-05 22:35:13

1

如果你的需要刚好是(像我),使GAE添加某些HTTP响应头的静态HTML文件,您可以通过声明为静态资源在AppEngine上-web.xml中这样做:

<static-files> 
    <include path="/my_static-files" > 
    <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> 
    </include> 
</static-files> 

我发现这在GAE documentation

+0

欢呼,因为它可以为人们节省很多麻烦。不幸的是,对我来说,这有点害羞,因为我想301域名的重定向(从www到裸体),所以如果他们支持域属性,就像他们做了一条路径一样,那将是完美的服务位置标题)。但是AFAIK(在阅读了其他文档后),这是不可能的 – 2017-05-08 11:05:55