use of org.apache.tapestry5.http.services.Response in project flowlogix by flowlogix.
the class GwtCachingFilter method service.
@Override
public boolean service(HttpServletRequest request, HttpServletResponse response, HttpServletRequestHandler chainHandler) throws IOException {
String path = request.getServletPath();
boolean neverExpire = checkConfig(path, response);
if (neverExpire == false) {
return chainHandler.service(request, response);
}
log.finer("GwtCachingFilter: Processing " + path);
Request rq = new RequestImpl(request, applicationCharset, sessionFactory);
Response rsp = new ResponseImpl(request, response);
rg.storeRequestResponse(rq, rsp);
rsp.setDateHeader("Expires", new Date().getTime() + InternalConstants.TEN_YEARS);
try {
return carh.handleAssetRequest(rq, rsp, pathProcessor.removeAssetPathPart(path));
} catch (Exception e) {
return chainHandler.service(request, response);
}
}
use of org.apache.tapestry5.http.services.Response in project tapestry-5 by apache.
the class ResourceStreamerImpl method streamResource.
public boolean streamResource(Resource resource, StreamableResource streamable, String providedChecksum, Set<Options> options) throws IOException {
assert streamable != null;
assert providedChecksum != null;
assert options != null;
String actualChecksum = streamable.getChecksum();
if (providedChecksum.length() > 0 && !providedChecksum.equals(actualChecksum)) {
// TAP5-2185: Trying to find the wrongly-checksummed resource in the classpath and context,
// so we can create an Asset with the correct checksum and redirect to it.
Asset asset = null;
if (resource != null) {
asset = findAssetInsideWebapp(resource);
}
if (asset != null) {
response.sendRedirect(asset.toClientURL());
return true;
}
return false;
}
// ETag should be surrounded with quotes.
String token = QUOTE + actualChecksum + QUOTE;
// Even when sending a 304, we want the ETag associated with the request.
// In most cases (except JavaScript modules), the checksum is also embedded into the URL.
// However, E-Tags are also useful for enabling caching inside intermediate servers, CDNs, etc.
response.setHeader("ETag", token);
// If the client can send the correct ETag token, then its cache already contains the correct
// content.
String providedToken = request.getHeader("If-None-Match");
if (token.equals(providedToken)) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return true;
}
long lastModified = streamable.getLastModified();
long ifModifiedSince;
try {
ifModifiedSince = request.getDateHeader(IF_MODIFIED_SINCE_HEADER);
} catch (IllegalArgumentException ex) {
// Simulate the header being missing if it is poorly formatted.
ifModifiedSince = -1;
}
if (ifModifiedSince > 0 && ifModifiedSince >= lastModified) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return true;
}
// Prevent the upstream code from compressing when we don't want to.
response.disableCompression();
response.setDateHeader("Last-Modified", lastModified);
if (productionMode && !options.contains(Options.OMIT_EXPIRATION)) {
// Starting in 5.4, this is a lot less necessary; any change to a Resource will result
// in a new asset URL with the changed checksum incorporated into the URL.
response.setDateHeader("Expires", lastModified + InternalConstants.TEN_YEARS);
}
// mostly result in quick SC_NOT_MODIFIED responses.
if (options.contains(Options.OMIT_EXPIRATION)) {
response.setHeader("Cache-Control", omitExpirationCacheControlHeader);
}
if (streamable.getCompression() == CompressionStatus.COMPRESSED) {
response.setHeader(TapestryHttpInternalConstants.CONTENT_ENCODING_HEADER, TapestryHttpInternalConstants.GZIP_CONTENT_ENCODING);
}
ResponseCustomizer responseCustomizer = streamable.getResponseCustomizer();
if (responseCustomizer != null) {
responseCustomizer.customizeResponse(streamable, response);
}
if (!request.getMethod().equals("HEAD")) {
response.setContentLength(streamable.getSize());
OutputStream os = response.getOutputStream(streamable.getContentType().toString());
streamable.streamTo(os);
os.close();
}
return true;
}
use of org.apache.tapestry5.http.services.Response in project tapestry-5 by apache.
the class ComponentEventDispatcherTest method request_for_whitelist_only_page_from_client_not_on_whitelist.
@Test
public void request_for_whitelist_only_page_from_client_not_on_whitelist() throws IOException {
String requestPath = "/foo/MyPage:anevent";
String localeName = "foo";
String containerPageName = "foo/MyPage";
ComponentRequestHandler handler = mockComponentRequestHandler();
Request request = mockRequest();
Response response = mockResponse();
ComponentClassResolver resolver = mockComponentClassResolver();
LocalizationSetter localizationSetter = mockLocalizationSetter();
MetaDataLocator metaDataLocator = newMock(MetaDataLocator.class);
ClientWhitelist whitelist = newMock(ClientWhitelist.class);
train_getPath(request, requestPath);
expect(localizationSetter.isSupportedLocaleName("foo")).andReturn(false);
train_isPageName(resolver, containerPageName, true);
train_canonicalizePageName(resolver, containerPageName, containerPageName);
expect(metaDataLocator.findMeta(MetaDataConstants.WHITELIST_ONLY_PAGE, containerPageName, boolean.class)).andReturn(true);
expect(whitelist.isClientRequestOnWhitelist()).andReturn(false);
replay();
Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, localizationSetter, response, null, null, null, true, null, "", metaDataLocator, whitelist));
assertFalse(dispatcher.dispatch(request, response));
verify();
}
use of org.apache.tapestry5.http.services.Response in project tapestry-5 by apache.
the class ComponentEventDispatcherTest method request_path_reference_non_existent_page.
@Test
public void request_path_reference_non_existent_page() throws Exception {
Request request = mockRequest();
Response response = mockResponse();
ComponentClassResolver resolver = mockComponentClassResolver();
LocalizationSetter ls = mockLocalizationSetter();
expect(ls.isSupportedLocaleName("en")).andReturn(true);
train_getPath(request, "/en/mypage.foo");
train_isPageName(resolver, "mypage", false);
replay();
Dispatcher dispatcher = new ComponentEventDispatcher(null, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, response, null, null, null, true, null, "", null, null));
assertFalse(dispatcher.dispatch(request, response));
verify();
}
use of org.apache.tapestry5.http.services.Response in project tapestry-5 by apache.
the class ComponentEventDispatcherTest method no_dot_or_colon_in_path.
@Test
public void no_dot_or_colon_in_path() throws Exception {
Request request = mockRequest();
Response response = mockResponse();
LocalizationSetter ls = mockLocalizationSetter();
expect(ls.isSupportedLocaleName("foo")).andReturn(false);
train_getPath(request, "/foo/bar/baz");
replay();
Dispatcher dispatcher = new ComponentEventDispatcher(null, new ComponentEventLinkEncoderImpl(null, contextPathEncoder, ls, response, null, null, null, true, null, "", null, null));
assertFalse(dispatcher.dispatch(request, response));
verify();
}
Aggregations