Browse Source

Add caching support for PublishedFileHandler (#13574)

Add caching support for PublishedFileHandler similar to VaadinServlet.
Testing is done manually as browser caching is difficult to develop
tests for.

Change-Id: I314745766c9feb60758547dba77eb9e13976ce91
tags/7.1.15
Juuso Valli 10 years ago
parent
commit
3e59b5beb2

+ 8
- 1
server/src/com/vaadin/server/communication/PublishedFileHandler.java View File

@@ -110,7 +110,14 @@ public class PublishedFileHandler implements RequestHandler {
return true;
}

// TODO Check and set cache headers
// Set caching for the published file
String cacheControl = "public, max-age=0, must-revalidate";
int resourceCacheTime = request.getService()
.getDeploymentConfiguration().getResourceCacheTime();
if (resourceCacheTime > 0) {
cacheControl = "max-age=" + String.valueOf(resourceCacheTime);
}
response.setHeader("Cache-Control", cacheControl);

OutputStream out = null;
try {

+ 26
- 0
uitest/src/com/vaadin/tests/resources/CachingJavaScriptComponent.java View File

@@ -0,0 +1,26 @@
/*
* Copyright 2000-2014 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.tests.resources;

import com.vaadin.annotations.JavaScript;
import com.vaadin.ui.AbstractJavaScriptComponent;

@JavaScript({ "cachingtest.js" })
public class CachingJavaScriptComponent extends AbstractJavaScriptComponent {
public CachingJavaScriptComponent() {

}
}

+ 76
- 0
uitest/src/com/vaadin/tests/resources/PublishedFileHandlerCaching.java View File

@@ -0,0 +1,76 @@
/*
* Copyright 2000-2014 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.tests.resources;

import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;

/**
* This class tests the caching behavior of PublishedFileHandler.
*
* Previously PublishedFileHandler did not include cache headers in it's
* responses. Unfortunately there isn't a good way to automate this test, so
* manual testing is required at this time. To test the caching behavior run
* this file as a java application on the development server debug
* configuration, and access it through the url
* http://localhost:8888/run/com.vaadin
* .tests.resources.PublishedFileHandlerCaching?restartApplication
*
* On loading the page you'll need to examine the network traffic (e.g. with
* FireBug), keeping an eye on the GET requests for cachingtest.js and it's
* cache headers.
*
* @author Vaadin Ltd
*/
public class PublishedFileHandlerCaching extends AbstractTestUI {

/**
* generated serialVersionUID
*/
private static final long serialVersionUID = 2275457343547688505L;

/*
* (non-Javadoc)
*
* @see com.vaadin.tests.components.AbstractTestUI#setup(com.vaadin.server.
* VaadinRequest)
*/
@Override
protected void setup(VaadinRequest request) {
addComponent(new CachingJavaScriptComponent());
}

/*
* (non-Javadoc)
*
* @see com.vaadin.tests.components.AbstractTestUI#getTestDescription()
*/
@Override
protected String getTestDescription() {
return "Test that PublishedFileHandler includes appropriate cache headers.";
}

/*
* (non-Javadoc)
*
* @see com.vaadin.tests.components.AbstractTestUI#getTicketNumber()
*/
@Override
protected Integer getTicketNumber() {
return new Integer(13574);
}

}

+ 6
- 0
uitest/src/com/vaadin/tests/resources/cachingtest.js View File

@@ -0,0 +1,6 @@
/**
* Used for testing cache header behavior.
*/

function com_vaadin_tests_resources_CachingJavaScriptComponent() {
}

Loading…
Cancel
Save