You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by netdawg <ne...@yahoo.com> on 2012/09/23 21:25:49 UTC

RE: t5: adding http header

Wulf:  Why (rather how) the @Override annotation ?  I actually had to remove
it for it work.   

Anyhooo...here is the complete working example (right or wrong, not
sure)...comments welcome...

Step 1.  Created a class in your src/main/java -- SERVICES package - where
you will find AppModule.java already installed by Tapestry.  In my case, I
created a class called RevalidateHTTPHeader 

package org.yourGroupId.yourArtifactId.services;

import java.io.IOException;

import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.RequestFilter;
import org.apache.tapestry5.services.RequestHandler;
import org.apache.tapestry5.services.Response;


public class RevalidateHTTPHeader implements RequestFilter 
{

  private static final String CACHE_CTRL = "Cache-Control";
  private static final String EXPIRE_DATE = "Exprires";
 
  public boolean service(Request request, Response response,  RequestHandler
handler) throws IOException 
  { 
    response.setHeader(CACHE_CTRL, "no-cache, no-store, must-revalidate"); 
    response.setHeader(EXPIRE_DATE, "Sun, 07 Dec 1941  07:55:00 GMT"); 
    return handler.service(request, response);   
  }
}


Step 2.  Within AppModule.java, do two things - 

a.  declare the following member variable

RevalidateHTTPHeader nocache = new RevalidateHTTPHeader();

b.  add the following within contributeRequestHandler method:

    public void contributeRequestHandler(OrderedConfiguration<RequestFilter>
configuration,
                                         @Local
                                         RequestFilter filter)
    {
        // Each contribution to an ordered configuration has a name, When
necessary, you may
        // set constraints to precisely control the invocation order of the
contributed filter
        // within the pipeline.

        ///////////////////////////////////////////////////////////////
        //  ADD the custom nocache HTTP header(s)  
 
       configuration.add("NoCache", nocache);  
    
       //
      //////////////////////////////////////////////////////////////


        configuration.add("Timing", filter);
    }

Step 3:   Run Jetty to verify/examine headers - I am using Google Chrome -
which has a free HTTP Headers extension.  
http://localhost:8080/yourArtifactId/[yourPage]

Name                           Extension
Content-Encoding	gzip
Exprires	                       Sun, 07 Dec 1941  07:55:00 GMT
Transfer-Encoding          chunked
Server	                      Jetty(6.1.26)
Content-Type	           text/html; charset=utf-8
Cache-Control	           no-cache, no-store, must-revalidate





--
View this message in context: http://tapestry.1045711.n5.nabble.com/t5-adding-http-header-tp3369097p5716459.html
Sent from the Tapestry - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: t5: adding http header

Posted by netdawg <ne...@yahoo.com>.
Thanks!! 

Yep, even though java -version on command line shows 1.6, the Eclipse (right
click) project --> properties --> java compiler shows using "JDK 1.5
compliance".  Changed that to 1.6 and sure enough no complaints on the
@Override annotation anymore.

And thanks for that typo catch  ;-).  

In fact, off-topic, but in case anyone would  like to use this code, the
whole expires date can be made redundant by using max-age in the HTTP
request header, per RFC 2616 14.21.  

response.setHeader(CACHE_CTRL, "no-cache, no-store, max-age=0,
must-revalidate"); 

Also see: http://www.mnot.net/blog/2007/05/15/expires_max-age

(this also has a link to an excellent tutorial on caches - must read - basic
message being cache control is probably best handled by web server, if you
can control it,  rather than in your application)



--
View this message in context: http://tapestry.1045711.n5.nabble.com/t5-adding-http-header-tp3369097p5716463.html
Sent from the Tapestry - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: t5: adding http header

Posted by Chris Mylonas <ch...@opencsta.org>.
you've got a typo here :)

>  private static final String EXPIRE_DATE = "Exprires";


s/Exprires/Expires/g


i haven't tried it but may give it a go l8r, useful looking service!


off topic but [1] seems relevant
there is a jquery prefilter suggestion when using jquery

[1] = http://stackoverflow.com/questions/12506897/is-safari-on-ios-6-caching-ajax-results



On 24/09/2012, at 5:25 AM, netdawg wrote:

> Wulf:  Why (rather how) the @Override annotation ?  I actually had to remove
> it for it work.   
> 
> Anyhooo...here is the complete working example (right or wrong, not
> sure)...comments welcome...
> 
> Step 1.  Created a class in your src/main/java -- SERVICES package - where
> you will find AppModule.java already installed by Tapestry.  In my case, I
> created a class called RevalidateHTTPHeader 
> 
> package org.yourGroupId.yourArtifactId.services;
> 
> import java.io.IOException;
> 
> import org.apache.tapestry5.services.Request;
> import org.apache.tapestry5.services.RequestFilter;
> import org.apache.tapestry5.services.RequestHandler;
> import org.apache.tapestry5.services.Response;
> 
> 
> public class RevalidateHTTPHeader implements RequestFilter 
> {
> 
>  private static final String CACHE_CTRL = "Cache-Control";
>  private static final String EXPIRE_DATE = "Exprires";
> 
>  public boolean service(Request request, Response response,  RequestHandler
> handler) throws IOException 
>  { 
>    response.setHeader(CACHE_CTRL, "no-cache, no-store, must-revalidate"); 
>    response.setHeader(EXPIRE_DATE, "Sun, 07 Dec 1941  07:55:00 GMT"); 
>    return handler.service(request, response);   
>  }
> }
> 
> 
> Step 2.  Within AppModule.java, do two things - 
> 
> a.  declare the following member variable
> 
> RevalidateHTTPHeader nocache = new RevalidateHTTPHeader();
> 
> b.  add the following within contributeRequestHandler method:
> 
>    public void contributeRequestHandler(OrderedConfiguration<RequestFilter>
> configuration,
>                                         @Local
>                                         RequestFilter filter)
>    {
>        // Each contribution to an ordered configuration has a name, When
> necessary, you may
>        // set constraints to precisely control the invocation order of the
> contributed filter
>        // within the pipeline.
> 
>        ///////////////////////////////////////////////////////////////
>        //  ADD the custom nocache HTTP header(s)  
> 
>       configuration.add("NoCache", nocache);  
> 
>       //
>      //////////////////////////////////////////////////////////////
> 
> 
>        configuration.add("Timing", filter);
>    }
> 
> Step 3:   Run Jetty to verify/examine headers - I am using Google Chrome -
> which has a free HTTP Headers extension.  
> http://localhost:8080/yourArtifactId/[yourPage]
> 
> Name                           Extension
> Content-Encoding	gzip
> Exprires	                       Sun, 07 Dec 1941  07:55:00 GMT
> Transfer-Encoding          chunked
> Server	                      Jetty(6.1.26)
> Content-Type	           text/html; charset=utf-8
> Cache-Control	           no-cache, no-store, must-revalidate
> 
> 
> 
> 
> 
> --
> View this message in context: http://tapestry.1045711.n5.nabble.com/t5-adding-http-header-tp3369097p5716459.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
> 


Re: t5: adding http header

Posted by Bob Harner <bo...@gmail.com>.
"probably", not "problem", sorry.

On Sun, Sep 23, 2012 at 3:36 PM, Bob Harner <bo...@gmail.com> wrote:
> If the compiler complained about @Override, you are problem using a
> 1.5 JDK and Wulf (I assume) was using 1.6.
>
> On Sun, Sep 23, 2012 at 3:25 PM, netdawg <ne...@yahoo.com> wrote:
>> Wulf:  Why (rather how) the @Override annotation ?  I actually had to remove
>> it for it work.
>>
>> Anyhooo...here is the complete working example (right or wrong, not
>> sure)...comments welcome...
>>
>> Step 1.  Created a class in your src/main/java -- SERVICES package - where
>> you will find AppModule.java already installed by Tapestry.  In my case, I
>> created a class called RevalidateHTTPHeader
>>
>> package org.yourGroupId.yourArtifactId.services;
>>
>> import java.io.IOException;
>>
>> import org.apache.tapestry5.services.Request;
>> import org.apache.tapestry5.services.RequestFilter;
>> import org.apache.tapestry5.services.RequestHandler;
>> import org.apache.tapestry5.services.Response;
>>
>>
>> public class RevalidateHTTPHeader implements RequestFilter
>> {
>>
>>   private static final String CACHE_CTRL = "Cache-Control";
>>   private static final String EXPIRE_DATE = "Exprires";
>>
>>   public boolean service(Request request, Response response,  RequestHandler
>> handler) throws IOException
>>   {
>>     response.setHeader(CACHE_CTRL, "no-cache, no-store, must-revalidate");
>>     response.setHeader(EXPIRE_DATE, "Sun, 07 Dec 1941  07:55:00 GMT");
>>     return handler.service(request, response);
>>   }
>> }
>>
>>
>> Step 2.  Within AppModule.java, do two things -
>>
>> a.  declare the following member variable
>>
>> RevalidateHTTPHeader nocache = new RevalidateHTTPHeader();
>>
>> b.  add the following within contributeRequestHandler method:
>>
>>     public void contributeRequestHandler(OrderedConfiguration<RequestFilter>
>> configuration,
>>                                          @Local
>>                                          RequestFilter filter)
>>     {
>>         // Each contribution to an ordered configuration has a name, When
>> necessary, you may
>>         // set constraints to precisely control the invocation order of the
>> contributed filter
>>         // within the pipeline.
>>
>>         ///////////////////////////////////////////////////////////////
>>         //  ADD the custom nocache HTTP header(s)
>>
>>        configuration.add("NoCache", nocache);
>>
>>        //
>>       //////////////////////////////////////////////////////////////
>>
>>
>>         configuration.add("Timing", filter);
>>     }
>>
>> Step 3:   Run Jetty to verify/examine headers - I am using Google Chrome -
>> which has a free HTTP Headers extension.
>> http://localhost:8080/yourArtifactId/[yourPage]
>>
>> Name                           Extension
>> Content-Encoding        gzip
>> Exprires                               Sun, 07 Dec 1941  07:55:00 GMT
>> Transfer-Encoding          chunked
>> Server                        Jetty(6.1.26)
>> Content-Type               text/html; charset=utf-8
>> Cache-Control              no-cache, no-store, must-revalidate
>>
>>
>>
>>
>>
>> --
>> View this message in context: http://tapestry.1045711.n5.nabble.com/t5-adding-http-header-tp3369097p5716459.html
>> Sent from the Tapestry - User mailing list archive at Nabble.com.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: t5: adding http header

Posted by Bob Harner <bo...@gmail.com>.
If the compiler complained about @Override, you are problem using a
1.5 JDK and Wulf (I assume) was using 1.6.

On Sun, Sep 23, 2012 at 3:25 PM, netdawg <ne...@yahoo.com> wrote:
> Wulf:  Why (rather how) the @Override annotation ?  I actually had to remove
> it for it work.
>
> Anyhooo...here is the complete working example (right or wrong, not
> sure)...comments welcome...
>
> Step 1.  Created a class in your src/main/java -- SERVICES package - where
> you will find AppModule.java already installed by Tapestry.  In my case, I
> created a class called RevalidateHTTPHeader
>
> package org.yourGroupId.yourArtifactId.services;
>
> import java.io.IOException;
>
> import org.apache.tapestry5.services.Request;
> import org.apache.tapestry5.services.RequestFilter;
> import org.apache.tapestry5.services.RequestHandler;
> import org.apache.tapestry5.services.Response;
>
>
> public class RevalidateHTTPHeader implements RequestFilter
> {
>
>   private static final String CACHE_CTRL = "Cache-Control";
>   private static final String EXPIRE_DATE = "Exprires";
>
>   public boolean service(Request request, Response response,  RequestHandler
> handler) throws IOException
>   {
>     response.setHeader(CACHE_CTRL, "no-cache, no-store, must-revalidate");
>     response.setHeader(EXPIRE_DATE, "Sun, 07 Dec 1941  07:55:00 GMT");
>     return handler.service(request, response);
>   }
> }
>
>
> Step 2.  Within AppModule.java, do two things -
>
> a.  declare the following member variable
>
> RevalidateHTTPHeader nocache = new RevalidateHTTPHeader();
>
> b.  add the following within contributeRequestHandler method:
>
>     public void contributeRequestHandler(OrderedConfiguration<RequestFilter>
> configuration,
>                                          @Local
>                                          RequestFilter filter)
>     {
>         // Each contribution to an ordered configuration has a name, When
> necessary, you may
>         // set constraints to precisely control the invocation order of the
> contributed filter
>         // within the pipeline.
>
>         ///////////////////////////////////////////////////////////////
>         //  ADD the custom nocache HTTP header(s)
>
>        configuration.add("NoCache", nocache);
>
>        //
>       //////////////////////////////////////////////////////////////
>
>
>         configuration.add("Timing", filter);
>     }
>
> Step 3:   Run Jetty to verify/examine headers - I am using Google Chrome -
> which has a free HTTP Headers extension.
> http://localhost:8080/yourArtifactId/[yourPage]
>
> Name                           Extension
> Content-Encoding        gzip
> Exprires                               Sun, 07 Dec 1941  07:55:00 GMT
> Transfer-Encoding          chunked
> Server                        Jetty(6.1.26)
> Content-Type               text/html; charset=utf-8
> Cache-Control              no-cache, no-store, must-revalidate
>
>
>
>
>
> --
> View this message in context: http://tapestry.1045711.n5.nabble.com/t5-adding-http-header-tp3369097p5716459.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org