私はtomcat 6、ジャージー1.8、ジャージーguiceとguice 3を使用しています。 セットアップでJSPを使用する際に問題があります。 jspビュー応答(jspは/diff/index.jsp)を返すGuiceFilterによって構成されたjerseyサーブレットweb.xmlによって構成された単純なサーブレットとして「Status」サーブレットが提供されています。ジャージーGuice JSPにする方法?
Viewable view = new Viewable("/diff/index.jsp", null);
Response response = Response.ok().entity(view).build();
return response;
私は単純にジャージーで完璧に動作しますが、Guiceとの統合に失敗するとJSPが失敗し、「要求されたリソース(/diff/index.jsp)はありません。利用可能です。
デバッガを使用すると、JSPTemplateProcessorが呼び出され、「isJspServlet = true」および「jspFile = null」を持つStandardWrapperでRequestDispatcherが取得されていることがわかります。
のweb.xmlは次のようになります。
<servlet>
<display-name>Status Page</display-name>
<servlet-name>Status</servlet-name>
<servlet-class>my.BaseStatusPage</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Status</servlet-name>
<url-pattern>/Status/*</url-pattern>
</servlet-mapping>
<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>/REST/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>my.GuiceServletConfig</listener-class>
</listener>
=====================
GuiceServletConfig:
public class GuiceServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new JerseyServletModule() {
@Override
protected void configureServlets() {
bind(DiffPage.class);// the jersey servlet
Map<String, String> params = new HashMap<String, String>();
params.put(PROPERTY_PACKAGES, "my");
params.put(PROPERTY_WEB_PAGE_CONTENT_REGEX, ".*\\.jsp");
params.put(FEATURE_REDIRECT, "true");
params.put(FEATURE_IMPLICIT_VIEWABLES, "true");
params.put(RESOURCE_CONFIG_CLASS, "com.sun.jersey.api.core.PackagesResourceConfig");
serve("/REST/*").with(GuiceContainer.class, params);
}
});
}
GuiceContainerをフィルタとして使用すると、web.xmlからサービスされるサーブレットが失敗します。 web.xmlにjspサーブレットを追加してもあまり効果がありませんでした。
Btw、私はこのスレッドを2010年7月25日からthe jersey mailing listから読んだが、うまくいかなかった。付録 - - 私は自分自身がビジネスロジックコードからJSPを呼び出す見つける
ヘルプは、Eishay
を 感謝を感謝しています。醜いが、作品:
protected Response renderJsp(HttpServletRequest request,
HttpServletResponse response, ServletConfig servletConfig) {
request.setAttribute("org.apache.catalina.jsp_file", "/diff/index.jsp");
Class jspServletClazz;
try {
jspServletClazz = forName("org.apache.jasper.servlet.JspServlet");
Object jspServlet = jspServletClazz.getConstructor().newInstance();
jspServletClazz.getMethod("init", ServletConfig.class).invoke(jspServlet,
servletConfig);
jspServletClazz.getMethod("service", HttpServletRequest.class,
HttpServletResponse.class).invoke(jspServlet, request, response);
} catch (Exception e) {
throw new RuntimeException(e);
}
return Response.ok().build();
}
こんにちは、この問題の運は何ですか? –
いいえ、私はコードからJSPを呼び出すのが醜いですが、動作します。 "回答"として追加されます –
私はJSPを捨ててしまい、Freemarkerと一緒に行きました。 –