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.jspがあります(Mavenを使用しwebapp/test.jspいます)。

動作しません!私はいつも次のようなエラーで終わります:

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

Bootstrap#getModule()を返すにはオーバーライドする必要がありますnew BootstrapModule()

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