You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Tony Giaccone <to...@giaccone.org> on 2012/05/15 00:21:44 UTC

Serving Static content...


Hi, my first posting and I have looked over the mailing list and a host of other web sites but 
for the life of me I can't figure out how solve my problem. 


First a general description, I'm creating a Restful Web Service that manages a persistent 
entity (eventually many but for now one).  I'm using Spring, Spring Security, Jackson and 
Apache CXF. I'm using maven for my builds and deploying to jetty. 

I have a servlet that responds to incoming requests and routes them to the correct service 
implementation.  The WebService part works just fine. 


What I want do do now, is include a page of HTML which includes css and javascript in the 
application so that I can use to test the web services.  I want to deploy the service and the 
static html/javascript/css in the same war file. 

Essentially I have this file layout:

	webapp +
			| 
			-----> static - +
			|                       |
			|                       | - MyTestCode.html
                        |                       |
                        |                       | -> css (contains css files)
                        |                       |
                        |                       | -> js (contains javascript included in the MyTestCode.htm file)
			|
			----->WEB-INF -+
			|                            | -- > applicationContext.xml
			|                            |
			|                            |--> web.xml
			|
			|--- index.jsp



Assume I have a servlet named myServlet,  I want all the requests that go to my 

myServlet/service 

to map to a Restful service implementation. 

So for example:

	http://localhost:8080/myServlet/server/user/getAll   - calls a method on the service implementation.

I want this URL

	http://locahost:8080/myServlet/static/MyTestCode.html

To return the data from the file of html 


I'm aware of this page: http://cxf.apache.org/docs/servlet-transport.html

But I've not been able to figure out how to get this to work.  Do I have to use both a 
redirect servlet and a static-resource-list? I've tried every combination I can think of to get this to 
work but had zero success. 

Can someone point me in the right direction? 


Tony Giaccone


Re: Serving Static content...

Posted by Tony Giaccone <to...@giaccone.org>.
Thank you for the clear and concise explanation. Rather than try and get the CXF servlet to serve static content, I instead configured 
jetty to serve the content. This solves the problem, and it's easy because I can easily bifurcate the URL name space with two different initial paths (service, static)

I'm in a bit of a hurry to get something done and put a presentation together, so I'm not going to follow up by looking at how to configure CXF to do the
same thing, but after the presentation, I'll go back and look at that as well


Thanks again for your assistance.


Tony Giaccone


On May 15, 2012, at 6:15 AM, Sergey Beryozkin wrote:

> Hi
> 
> Thanks for the detailed description, I'm forwarding the message to the users list,
> 
> On 14/05/12 23:21, Tony Giaccone wrote:
>> 
>> 
>> Hi, my first posting and I have looked over the mailing list and a host of other web sites but
>> for the life of me I can't figure out how solve my problem.
>> 
>> 
>> First a general description, I'm creating a Restful Web Service that manages a persistent
>> entity (eventually many but for now one).  I'm using Spring, Spring Security, Jackson and
>> Apache CXF. I'm using maven for my builds and deploying to jetty.
>> 
>> I have a servlet that responds to incoming requests and routes them to the correct service
>> implementation.  The WebService part works just fine.
>> 
>> 
>> What I want do do now, is include a page of HTML which includes css and javascript in the
>> application so that I can use to test the web services.  I want to deploy the service and the
>> static html/javascript/css in the same war file.
>> 
>> Essentially I have this file layout:
>> 
>> 	webapp +
>> 			|
>> 			----->  static - +
>> 			|                       |
>> 			|                       | - MyTestCode.html
>>                         |                       |
>>                         |                       | ->  css (contains css files)
>>                         |                       |
>>                         |                       | ->  js (contains javascript included in the MyTestCode.htm file)
>> 			|
>> 			----->WEB-INF -+
>> 			|                            | -->  applicationContext.xml
>> 			|                            |
>> 			|                            |-->  web.xml
>> 			|
>> 			|--- index.jsp
>> 
>> 
>> 
>> Assume I have a servlet named myServlet,  I want all the requests that go to my
>> 
>> myServlet/service
>> 
>> to map to a Restful service implementation.
>> 
>> So for example:
>> 
>> 	http://localhost:8080/myServlet/server/user/getAll   - calls a method on the service implementation.
>> 
>> I want this URL
>> 
>> 	http://locahost:8080/myServlet/static/MyTestCode.html
>> 
>> To return the data from the file of html
>> 
>> 
>> I'm aware of this page: http://cxf.apache.org/docs/servlet-transport.html
>> 
>> But I've not been able to figure out how to get this to work.  Do I have to use both a
>> redirect servlet and a static-resource-list? I've tried every combination I can think of to get this to
>> work but had zero success.
>> 
>> Can someone point me in the right direction?
> 
> The simplest option is to avoid using a wildcard uri pattern. If you can have two servlet declarations, one listening on '/server/*', another one on '/static/*', then it should work without any problems.
> 
> If you do need to use a single CXFServlet also capable of serving the static content, then you need to set up a static-resource-list, the values are reg expressions, so you should probably do something like this:
> 
> <init-param>
> <param-name>static-resources-list</param-name>
> <param-value>/static/(\w)+.[html|css|js]</param-value>
> </init-param>
> 
> or
> 
> <init-param>
> <param-name>static-resources-list</param-name>
> <param-value>
>   /static/Mytest.html
>   /static/My.css
>   /static/My.js
> </param-value>
> </init-param>
> 
> Combining redirect & static configuration won;t work, but it may be worth trying to use the redirect parameters only:
> 
> <init-param>
>            <param-name>redirects-list</param-name>
> 	    	<param-value>/(\w)+.html</param-value>
> 	    </init-param>
> 	    <init-param>
>    		<param-name>reditect-servlet-name</param-name>
> 	    	<param-value>DefaultCXFServlet</param-value>
> 	    </init-param>
> 	
> However I'm not sure how it will work with CXFServlet listening on '*'.
> 
> See also this section:
> http://cxf.apache.org/docs/jax-rs-redirection.html
> 
> HTH, Sergey
> 
> 
>> 
>> 
>> Tony Giaccone
>> 
>> 
> 
> 
> -- 
> Sergey Beryozkin
> 
> Talend Community Coders
> http://coders.talend.com/
> 
> Blog: http://sberyozkin.blogspot.com


Re: Serving Static content...

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

Thanks for the detailed description, I'm forwarding the message to the 
users list,

On 14/05/12 23:21, Tony Giaccone wrote:
>
>
> Hi, my first posting and I have looked over the mailing list and a host of other web sites but
> for the life of me I can't figure out how solve my problem.
>
>
> First a general description, I'm creating a Restful Web Service that manages a persistent
> entity (eventually many but for now one).  I'm using Spring, Spring Security, Jackson and
> Apache CXF. I'm using maven for my builds and deploying to jetty.
>
> I have a servlet that responds to incoming requests and routes them to the correct service
> implementation.  The WebService part works just fine.
>
>
> What I want do do now, is include a page of HTML which includes css and javascript in the
> application so that I can use to test the web services.  I want to deploy the service and the
> static html/javascript/css in the same war file.
>
> Essentially I have this file layout:
>
> 	webapp +
> 			|
> 			----->  static - +
> 			|                       |
> 			|                       | - MyTestCode.html
>                          |                       |
>                          |                       | ->  css (contains css files)
>                          |                       |
>                          |                       | ->  js (contains javascript included in the MyTestCode.htm file)
> 			|
> 			----->WEB-INF -+
> 			|                            | -->  applicationContext.xml
> 			|                            |
> 			|                            |-->  web.xml
> 			|
> 			|--- index.jsp
>
>
>
> Assume I have a servlet named myServlet,  I want all the requests that go to my
>
> myServlet/service
>
> to map to a Restful service implementation.
>
> So for example:
>
> 	http://localhost:8080/myServlet/server/user/getAll   - calls a method on the service implementation.
>
> I want this URL
>
> 	http://locahost:8080/myServlet/static/MyTestCode.html
>
> To return the data from the file of html
>
>
> I'm aware of this page: http://cxf.apache.org/docs/servlet-transport.html
>
> But I've not been able to figure out how to get this to work.  Do I have to use both a
> redirect servlet and a static-resource-list? I've tried every combination I can think of to get this to
> work but had zero success.
>
> Can someone point me in the right direction?

The simplest option is to avoid using a wildcard uri pattern. If you can 
have two servlet declarations, one listening on '/server/*', another one 
on '/static/*', then it should work without any problems.

If you do need to use a single CXFServlet also capable of serving the 
static content, then you need to set up a static-resource-list, the 
values are reg expressions, so you should probably do something like this:

<init-param>
  <param-name>static-resources-list</param-name>
  <param-value>/static/(\w)+.[html|css|js]</param-value>
</init-param>

or

<init-param>
  <param-name>static-resources-list</param-name>
  <param-value>
    /static/Mytest.html
    /static/My.css
    /static/My.js
  </param-value>
</init-param>

Combining redirect & static configuration won;t work, but it may be 
worth trying to use the redirect parameters only:

<init-param>
             <param-name>redirects-list</param-name>
	    	<param-value>/(\w)+.html</param-value>
	    </init-param>
	    <init-param>
     		<param-name>reditect-servlet-name</param-name>
	    	<param-value>DefaultCXFServlet</param-value>
	    </init-param>
	
However I'm not sure how it will work with CXFServlet listening on '*'.

See also this section:
http://cxf.apache.org/docs/jax-rs-redirection.html

HTH, Sergey


>
>
> Tony Giaccone
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com