我正在使用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
答案 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的静态文件配置的更多信息。