App Engine上未调用Servlet过滤器

时间:2014-01-25 20:45:28

标签: java google-app-engine guice servlet-filters

我正在使用Guice设置过滤器来处理AppEngine上的所有请求。 Guice设置如下:

public void configureServlets() {
    filter("*").through(RedirectFilter.class);
}

过滤器:

@Singleton
public class RedirectFilter implements Filter {
    private static final Logger logger = Logger.getLogger(RedirectFilter.class.getName());

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        URL url = new URL(request.getRequestURL().toString());
        String domain = url.getHost();

        logger.info("host: " + domain + " path: " + url.getPath());

        if (!domain.startsWith("www")) {
            if (domain.startsWith("en")) {
                response.sendRedirect("http://www.mysite.com/en" + url.getPath());
            }
        }
        chain.doFilter(req, res);
    }
    ...
}

但是,没有为任何请求调用过滤器。

关于为何可能不会被调用的任何想法?

更新:似乎使用http://en.mysite.com/xxx等网址调用过滤器,但http://en.mysite.com

1 个答案:

答案 0 :(得分:3)

来自AppEngine documentation on static files

  

在许多情况下,您希望直接向其提供静态文件   网络浏览器。图像,CSS样式表,JavaScript代码,电影和   Flash动画通常都直接提供给浏览器。对于   效率,App Engine提供来自不同服务器的静态文件   那些调用servlet的人。

     

默认情况下,App Engine会将WAR中的所有文件作为静态文件提供   WEB-INF /中的JSP和文件除外的文件。对URL的任何请求   path匹配一个静态文件直接将文件提供给   浏览器 - 即使路径也匹配servlet或过滤器映射。您   可以配置App Engine将哪些文件视为静态文件   appengine-web.xml文件。

有关此主题的更多信息at this link

要在请求静态HTML文件时调用过滤器,请将以下内容放在appengine-web.xml文件中:

<static-files>
  <include path="/**.png" />
  <!-- other includes go here -->
  <exclude path="/**.html" />
</static-files>

有关AppEngine在this link的静态文件配置的更多信息。