Hi Sergey,
I don't get it. It does not work... What am I doing wrong?
<servlet>
<servlet-name>RestfulApp</servlet-name>
<servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
<init-param>
<param-name>jaxrs.serviceClasses</param-name>
<param-value>
org.foo.bar.MyServiceImpl
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<display-name>Redirect CXF Servlet</display-name>
<servlet-name>RedirectCXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFNonSpringServlet</servlet-class>
<init-param>
<param-name>redirects-list</param-name>
<param-value>/rest/Styles/(\w)+.css</param-value>
</init-param>
<init-param>
<param-name>redirect-servlet-path</param-name>
<param-value>/Styles</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RedirectCXFServlet</servlet-name>
<url-pattern>/Styles/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>RestfulApp</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
So we have the MyServiceImpl, which performs a forwarding (via
RequestDispatcher) to a JSP page. This JSP does call a stylesheet like so:
<link rel="StyleSheet" type="text/css" href="Styles/default.css"/>
This ends up in a request like this:
http://server:port/appcontext/rest/Styles/default.css
Now, I would expect the RedirectCXFServlet to catch this request and forward it
to
http://server:port/appcontext/Styles/default.css
But nothing like this happens. I still get a 404 on
http://server:port/appcontext/rest/Styles/default.css.
:-/
Thank you and best regards,
Marko
-----Ursprüngliche Nachricht-----
Von: Sergey Beryozkin [mailto:[email protected]]
Gesendet: Mittwoch, 29. April 2015 13:46
An: [email protected]
Betreff: Re: AW: AW: AW: AW: AW: AW: How to forward requests to a JSP page when
using CXFNonSpringJaxrsServlet
np, thanks for experimenting with the redirection code :-)
Let me know please if it works
Sergey
On 29/04/15 12:43, Voss, Marko wrote:
> Thank you Sergey, I will test this as soon as I can continue working
> on this again. :)
>
> Cheers,
> Marko
>
> -----Ursprüngliche Nachricht-----
> Von: Sergey Beryozkin [mailto:[email protected]]
> Gesendet: Mittwoch, 29. April 2015 13:29
> An: [email protected]
> Betreff: Re: AW: AW: AW: AW: AW: How to forward requests to a JSP page
> when using CXFNonSpringJaxrsServlet
>
> <init-param>
> <param-name>redirects-list</param-name>
> <param-value>
> /(\w)+.css
> </param-value>
> </init-param>
> <init-param>
> <param-name>redirect-servlet-name</param-name>
> <param-value>default</param-value>
> </init-param>
>
> or even
>
> <init-param>
> <param-name>static-resources-list</param-name>
> <param-value>/(\w)+.css</param-value>
> </init-param>
>
>
> though the latter option is limited...
>
> HTH, Sergey
>
> On 29/04/15 12:22, Sergey Beryozkin wrote:
>> LOL, it has 3 such servlet declarations, not 2. I'm confused :-)
>> Still the examples are straightforward IMHO. Check the example
>> showing a redirect for all the html pages...
>>
>> Sergey
>> On 29/04/15 12:18, Sergey Beryozkin wrote:
>>> Well, I've mentioned which servlet parameters need to be checked.
>>> The web.xml has 4 servlet declarations, only 2 of them have these
>>> parameters. What exactly is confusing ?
>>>
>>>
>>> On 29/04/15 12:06, Voss, Marko wrote:
>>>> Hi Sergey,
>>>>
>>>> to be honest, those are multiple examples at once, aren't they?
>>>> This is confusing for me...
>>>>
>>>>
>>>> -----Ursprüngliche Nachricht-----
>>>> Von: Sergey Beryozkin [mailto:[email protected]]
>>>> Gesendet: Mittwoch, 29. April 2015 12:28
>>>> An: [email protected]
>>>> Betreff: Re: AW: AW: AW: AW: How to forward requests to a JSP page
>>>> when using CXFNonSpringJaxrsServlet
>>>>
>>>> Hi Marko
>>>> On 29/04/15 10:44, Voss, Marko wrote:
>>>>> Hi Sergey,
>>>>>
>>>>>> You can control by configuring CXFServlet with init parameters
>>>>>> that would let it know that a default servlet needs to take care
>>>>>> of all of .css files, set a redirect init parameter there Does it help ?
>>>>>
>>>>> Well, I do not know, how to set this up for the
>>>>> CXFNonSpringJaxrsServlet. I can see a parameter named
>>>>> 'jaxrs.static.subresources' in that class, but I highly doubt,
>>>>> that this is the same. Can you show me an example, of how to do
>>>>> this, please?
>>>>>
>>>> See for example
>>>>
>>>> https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=systests
>>>> /
>>>> jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml;h=a2212337b
>>>> d 6a9ed7a212b21a6826850581601121;hb=HEAD
>>>>
>>>>
>>>>
>>>> (redirect-list, redirect-servlet-name parameters) - redirect to a
>>>> 'default' or other servlet name representing a default servlet.
>>>>
>>>> It is only needed if you have a wildcard URL pattern for CXFServlet
>>>> because it obviously catches all the requests...
>>>>
>>>> Cheers, Sergey
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>> Thank you very much.
>>>>>
>>>>> Best regards,
>>>>> Marko
>>>>>
>>>>> -----Ursprüngliche Nachricht-----
>>>>> Von: Sergey Beryozkin [mailto:[email protected]]
>>>>> Gesendet: Donnerstag, 23. April 2015 13:55
>>>>> An: [email protected]
>>>>> Betreff: Re: AW: AW: AW: How to forward requests to a JSP page
>>>>> when using CXFNonSpringJaxrsServlet
>>>>>
>>>>> Hi Marko
>>>>>
>>>>> On 23/04/15 07:48, Voss, Marko wrote:
>>>>>> Hi Sergey,
>>>>>>
>>>>>> I am running into a different issue with this. The forwarding
>>>>>> calls a JSP, which requires a stylesheet.
>>>>>>
>>>>>> The JAXRS service, which is performing the forwarding is located at:
>>>>>>
>>>>>> /appcontext/rest/service
>>>>>>
>>>>>> The JSP is located at:
>>>>>>
>>>>>> /appcontext/foo.jsp
>>>>>>
>>>>>> The stylesheet will be loaded from:
>>>>>>
>>>>>> /appcontext/rest/css/stylesheet.css
>>>>>>
>>>>>> Instead of:
>>>>>>
>>>>>> /appcontext/css/stylesheet.css
>>>>>
>>>>> What entity loads this stylesheet, JSP ? Using a "/css/stylesheet.css"
>>>>> relative to a base HTTP address ?
>>>>> So CXF endpoint is at "/appcontext/rest" base address and I think
>>>>> this base address is used when forwarding. CXF does not know that
>>>>> given a JSP reference such as "/appcontext/css/stylesheet.css" it
>>>>> needs to use "/appcontext" only as a base address.
>>>>> Well, JSP can just use a context value only, instead of the base
>>>>> HTTP address that CXF sets up. I.e, use Servlet API in JSP to get
>>>>> the context and + "css/stylesheet.css" to it.
>>>>>
>>>>>>
>>>>>> Even if I put the stylesheet into a rest folder, it does not
>>>>>> work, because the JAXRS servlet, "thinks" it has to handle a rest
>>>>>> service request.
>>>>>
>>>>> You can control by configuring CXFServlet with init parameters
>>>>> that would let it know that a default servlet needs to take care
>>>>> of all of .css files, set a redirect init parameter there
>>>>>
>>>>>
>>>>> Does it help ?
>>>>>
>>>>> Cheers, Sergey
>>>>>>
>>>>>> Why is the stylesheet loaded like this? How can I avoid this behavior?
>>>>>>
>>>>>>
>>>>>> Thank you in advance and best regards,
>>>>>>
>>>>>> Marko
>>>>>>
>>>>
>>>
>>
>>
>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com
>
--
Sergey Beryozkin
Talend Community Coders
http://coders.talend.com/
Blog: http://sberyozkin.blogspot.com