मैं जर्सी guice और guice के साथ tomcat 6, जर्सी 1.8 का उपयोग कर रहा हूँ 3. मुझे अपने सेटअप के साथ जेएसपी का उपयोग कर समस्या हो रही है। मेरे पास "स्टेटस" सर्वलेट वेब.एक्सएमएल द्वारा कॉन्फ़िगर किया गया एक सरल सर्वलेट के रूप में कार्य करता है, जो गिइसफिल्टर द्वारा कॉन्फ़िगर किया गया एक जर्सी सर्वलेट है जो परिणाम प्रस्तुत करने के लिए एक जेएसपी व्यू प्रतिक्रिया (jsp is /diff/index.jsp) देता है:जर्सी गुइस जेएसपी कैसे करें?
Viewable view = new Viewable("/diff/index.jsp", null);
Response response = Response.ok().entity(view).build();
return response;
यह सब सरल जर्सी के साथ पूरी तरह से काम करता है, एक बार मैं Guice एकीकरण के साथ यह है करने के लिए कोशिश कर रहा हूँ JSP विफल रहता है और मैं "के साथ अनुरोध किया गया संसाधन (/diff/index.jsp) 404 प्रतिक्रिया हो रही है नहीं है उपलब्ध।"
डिबगर का उपयोग करना मैं देख सकता हूँ कि JSPTemplateProcessor के रूप में बुलाया है और एक StandardWrapper है कि "isJspServlet = true" और "jspFile = अशक्त" के साथ एक 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 servlet जोड़ना बहुत अच्छा नहीं था।
Btw, मैं the jersey mailing list पर जुला 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();
}
अरे दोस्त, इस समस्या के साथ किसी भी भाग्य? मैं एक ही बात –
नहीं है, मैं अपने आप को कोड से JSP बुला मिल जाए, बदसूरत लेकिन काम करता है हो रही करने लगते हैं। एक "जवाब" –
के रूप में जोड़ना होगा मैं JSP खुदाई समाप्त हो गया और Freemarker साथ चला गया। –