如何使用Guice 3.0提供JSP?

时间:2012-12-11 01:18:06

标签: java jsp guice guice-servlet

我正在尝试从Guice提供JSP。我没有找到关于如何做到这一点的任何基本例子!

我的设置:

的web.xml

<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>

<listener>
    <listener-class>org.example.Bootstrap</listener-class>
</listener>

org.example.Bootstrap (类似......)

public class Bootstrap extends GuiceServletContextListener 
{
    @Override
    protected Injector getInjector()
    {
        return Guice.createInjector(new org.example.BootstrapModule());
    }

}

org.example.BootstrapModule (类似......)

public class BootstrapModule extends ServletModule
{
    @Override
    protected void configureServlets()
    {
        // serve .JSPs
        bind(org.apache.jasper.servlet.JspServlet.class).in(Scopes.SINGLETON);
        serveRegex("/.*\\.jsp").with(org.apache.jasper.servlet.JspServlet.class);

        // serve my controllers 
        bind(MainServlet.class).in(Scopes.SINGLETON);
        serveRegex("/.*").with(MainServlet.class);
    }
}

MainServlet 中,我执行以下操作:

request.getRequestDispatcher("test.jsp").include(request, response);

request.getRequestDispatcher("test.jsp").forward(request, response);

request.getRequestDispatcher("/test.jsp").include(request, response);

request.getRequestDispatcher("/test.jsp").forward(request, response);

我的 test.jsp 位于webapp/test.jsp(我使用Maven)。

它不起作用!我总是遇到如下错误:

SEVERE: PWC6117: File XXX not found

Guice传递给org.apache.jasper.servlet.JspServlet的信息似乎不是JSP工作所需的信息。

我错过了什么?我是否必须手动指定org.apache.jasper.servlet.JspServlet?从Guice正确提供JSP需要什么?

2 个答案:

答案 0 :(得分:4)

这似乎是known bug

作为一种解决方法,有人说你可以编译Guice的TRUNK。我还发现了设置

request.setAttribute(org.apache.jasper.Constants.JSP_FILE, "/test.jsp");
在转发之前

也有效。

但我必须运行更多测试才能看到我将使用的内容,直到Guice在公开发布中得到修复。

答案 1 :(得分:0)

您需要覆盖Bootstrap#getModule()才能返回new BootstrapModule()

@Override
protected Module getModule() {
    return new BootstrapModule();
}