Я использую tomcat 6, jersey 1.8 с jersey guice и guice 3. У меня проблемы с использованием JSP с моими настройками.У меня есть сервлет «Состояние», служащий простым сервлетом, настроенным с помощью web.xml, сервлета-джерси, настроенного с помощью GuiceFilter, который возвращает ответ на просмотр jsp (jsp - это /diff/index.jsp) для отображения результата как:
Viewable view = new Viewable("/diff/index.jsp", null);
Response response = Response.ok().entity(view).build();
return response;
Все это прекрасно работает с простым Джерси, когда я пытаюсь получить его с интеграцией с Guice, JSP дает сбой, и я получаю ответ 404 с «Запрошенный ресурс (/diff/index.jsp)недоступен."
Используя отладчик, я вижу, что вызываемый JSPTemplateProcessor получил RequestDispatcher со StandardWrapper, который имеет «isJspServlet = true» и «jspFile = null».
Файл 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 сервлеты доставляются из ИнтернетаОшибка XMLДобавление сервлета jsp в web.xml не принесло много пользы.
Кстати, я прочитал ветку от 25 июля 2010 года в списке рассылки о джерси , но у меня это не сработало.
Помощь оценена Спасибо, Eishay
- Приложение. Я вызываю JSP из кода бизнес-логики.Некрасиво но работает:
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();
}