Hello
In Pax Web before 8, org.ops4j.pax.web.jsp.JspServletWrapper wraps original
org.apache.jasper.servlet.JspServlet - the reasons are: special
org.ops4j.pax.web.jsp.JasperClassLoader to scan bundles (this is done much
better and more consistently in Pax Web 8) and special handling of "jsp
files" (these are handled in standard way in Pax Web 8).
In Pax Web 8, org.ops4j.pax.web.jsp.JspServlet extends
org.apache.jasper.servlet.JspServlet - the main (only) reason is that TCCL
is set to proper OSGi classloader around init() and service() calls.
org.apache.jasper.servlet.JspServletWrapper is repackaged both in Pax Web 8
and Pax Web 7 - this is simply because pax-web-jsp bundle adds
`org.apache.jasper.servlet` as exported package without import.
Generally JSP handling was a bit tricky (both in Pax Web 7 and 8) because
there was a conflict between modular OSGi philosophy and JavaEE consistency
(taglib scanning for example).
If you want to instantiate "jsp servlet" it's better to do it with
org.ops4j.pax.web.jsp.JspServlet class from pax-web-jsp. However - for
WABs/WARs, this servlet is instantiated automatically if pax-web-jsp bundle
is installed and your JSPs will just work.
For HttpService / Whiteboard approach, you can use these examples/snippets:
HttpService:
org.ops4j.pax.web.service.WebContainer service = ...; // obtain OSGi
service of org.ops4j.pax.web.service.WebContainer class
(org.osgi.service.http.HttpService extension)
wc.registerJsps(new String[] { "*.jsp", "*.JSP", ... }, null, null);
Whiteboard:
org.ops4j.pax.web.extender.whiteboard.runtime.DefaultJspMapping mapping =
new org.ops4j.pax.web.extender.whiteboard.runtime.DefaultJspMapping();
mapping.setUrlPatterns(new String[] { "*.jsp", "*.JSP", ... });
ServiceReference<org.ops4j.pax.web.service.whiteboard.JspMapping> ref =
context.registerService(org.ops4j.pax.web.service.whiteboard.JspMapping.class,
mapping, null);
org.ops4j.pax.web.extender.whiteboard.runtime.DefaultJspMapping Whiteboard
service has setJspFile() setter that could be used to implement "jsp files"
in the meaning of web.xml's:
<!--
This servlet doesn't have a class, only a JSP file. It'll be converted
to use real JSP servlet with jspFile init parameter
-->
<servlet>
<servlet-name>jsp-info</servlet-name>
<jsp-file>/jsp-info.jsp</jsp-file>
</servlet>
(see:
https://github.com/ops4j/org.ops4j.pax.web/blob/web-8.0.20/samples/samples-war/war-most-complex/the-wab-jar/src/main/resources/META-INF/web-fragment.xml
)
regards
Grzegorz Grzybek
wt., 25 kwi 2023 o 12:33 Alain Picard <[email protected]>
napisaĆ(a):
> I'm currently working to migrated from 7.2.26 to 8.0.20 and I get a
> compile error with the import of "org.ops4j.pax.web.jsp.JspServletWrapper"
>
> From what I can see, pax-web now packages
> "org.apache.jasper.servlet.JspServletWrapper" in the pax-web-jsp bundle.
>
> First, maybe since it is referencing apache code, the source bundle is
> missing this part of the code.
>
> Secondly, should we replace one for the other or should we use the new
> org.ops4j.pax.web.jsp.JspServlet that seems to be a wrapper in itself and
> if so how do we instantiate it.
>
> Here is what we currently have (which I've inherited and has no real
> explanation with it) as to why this was required
>
> JspServletWrapper servletWrapper = new
> JspServletWrapper(ViewerPlugin.getDefault().getBundle(), _jspPath);
> servletWrapper.init(servletConfig);
> ServletResponse serviceResponse = response;
>
> AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
> @Override
> public Boolean run() {
> try {
> servletWrapper.service(baseRequest, serviceResponse);
> }
> catch (Exception e) {
> LOG.debug("Error serving jsp page", e); //$NON-NLS-1$
> }
> return true;
> }
> });
>
> Thanks
> Alain
>
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ops4j/046e0384-e2c4-40b5-afe7-cee65366d063n%40googlegroups.com
> <https://groups.google.com/d/msgid/ops4j/046e0384-e2c4-40b5-afe7-cee65366d063n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
--
--
------------------
OPS4J - http://www.ops4j.org - [email protected]
---
You received this message because you are subscribed to the Google Groups
"OPS4J" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ops4j/CAAdXmhreCYkkVoz_eni4oQrSUoCdhE248x0mne37RHV32G82pg%40mail.gmail.com.