1

我正在尝试为 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.jspwebapp/test.jsp(我使用 Maven)。

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

SEVERE: PWC6117: File XXX not found

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

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

4

2 回答 2

4

看来这是一个已知的错误

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

request.setAttribute(org.apache.jasper.Constants.JSP_FILE, "/test.jsp");

在转发也有效之前。

但是我必须运行更多的测试才能看到我将使用什么,直到 Guice 在公开版本中得到修复。

于 2012-12-11T20:25:24.717 回答
0

You need to override Bootstrap#getModule() to return a new BootstrapModule().

@Override
protected Module getModule() {
    return new BootstrapModule();
}
于 2012-12-11T11:25:51.753 回答