java - GuiceConfig 和 JSP_TEMPLATES_BASE_PATH

标签 java google-app-engine jersey jetty guice

我有一个 GuiceConfig:

public class GuiceConfig extends GuiceServletContextListener

...使用 configureServlets() 方法执行以下操作:

params.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, "true");
params.put(ServletContainer.JSP_TEMPLATES_BASE_PATH, "/WEB-INF/jsp");

serve("/*").with(GuiceContainer.class, params);

此类使用 @Path("/admin/index") 将请求提供给资源,它只返回一个可查看的 JSP 资源:

return new Viewable( "/admin/index" ) ;

当我运行此源并访问本地 URL localhost:8046/admin/index 时,我成功检索了所需的 JSP 资源。

但是,我不想服务("/*").with(GuiceContainer.class)。这样做会干扰我的服务器上运行的其他模块。我只想处理以/rest 开头的请求。如果我将上面的源码修改为以下内容:

params.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, "true");
params.put(ServletContainer.JSP_TEMPLATES_BASE_PATH, "/WEB-INF/jsp");

serve("/rest/*").with(GuiceContainer.class, params);

我现在可以成功访问本地 URL localhost:8046/rest/admin/index.html。然而,虽然该页面成功返回,但 JSP 无法正确显示。控制台日志表明 JSP 资源 new Viewable("/admin/index") 已正确解析...但页面的输出如下:

Error 404 /WEB-INF/jsp/admin/index.jsp

我一直在挖掘,但无法找到解释此问题的答案。任何帮助将不胜感激。

最佳答案

根据 servlet 规范,正常请求无法访问整个 /WEB-INF/ 树。

但是,它可以通过各种调度技术在内部引用。

错误 404/WEB-INF/jsp/admin/index.jsp 似乎表明某些东西试图直接引用该路径。

如果您点击 http://localhost/admin/indexhttp://localhost/admin/index.jsp 会发生什么?

关于java - GuiceConfig 和 JSP_TEMPLATES_BASE_PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624416/

相关文章:

java - 在 Rest 服务中返回动态 Json

java - 在 Google App Engine, Java 中从 URL 抓取图像

java - Jersey 服务器缺少依赖项

java - 如何避免转义 WebTarget 查询参数?

java - 我如何才能获得使用 Grizzly/Jersey 进行日志记录的客户端地址?

Java 泛型类型推断困惑

java - 如何在Java中使用未知的KEY和IV解密AES?

java - 如何处理selenium中的自动建议

python - 计算 Google AppEngine 中的子查询数

python - Unity3d - 在 Google App Engine 上托管