Example usage for com.liferay.portal.kernel.servlet HttpHeaders ETAG

List of usage examples for com.liferay.portal.kernel.servlet HttpHeaders ETAG

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.servlet HttpHeaders ETAG.

Prototype

String ETAG

To view the source code for com.liferay.portal.kernel.servlet HttpHeaders ETAG.

Click Source Link

Usage

From source file:com.liferay.httpservice.servlet.ResourceServlet.java

License:Open Source License

@Override
public void service(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {

    try {//  ww  w.ja v  a 2s. co m
        String requestURI = getRequestURI(request);

        int aliasIndex = requestURI.indexOf(_alias);

        if (aliasIndex == 0) {
            requestURI = requestURI.substring(_alias.length());
        }

        if (Validator.isNotNull(_name)) {
            requestURI = _name.concat(requestURI);
        }

        URL url = _httpContext.getResource(requestURI);

        if (url == null) {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);

            return;
        }

        URLConnection urlConnection = url.openConnection();

        long lastModified = urlConnection.getLastModified();

        if (lastModified > 0) {
            long ifModifiedSince = request.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE);

            if ((ifModifiedSince > 0) && (ifModifiedSince == lastModified)) {

                response.setContentLength(0);

                response.setDateHeader(HttpHeaders.LAST_MODIFIED, lastModified);

                String ifNoneMatch = request.getHeader(HttpHeaders.IF_NONE_MATCH);

                if (Validator.isNotNull(ifNoneMatch) && !ifNoneMatch.equals('0')) {

                    response.setHeader(HttpHeaders.ETAG, ifNoneMatch);
                }

                response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);

                return;
            }
        }

        if (lastModified > 0) {
            response.setDateHeader(HttpHeaders.LAST_MODIFIED, lastModified);
        }

        String fileName = getRequestURI(request);

        int slashIndex = fileName.lastIndexOf(StringPool.SLASH);

        if (slashIndex != -1) {
            fileName = fileName.substring(slashIndex + 1);
        }

        String contentType = _httpContext.getMimeType(fileName);

        if (isSupportsRangeHeader(contentType)) {
            sendFileWithRangeHeader(request, response, fileName, urlConnection.getInputStream(),
                    urlConnection.getContentLength(), contentType);
        } else {
            ServletResponseUtil.sendFile(request, response, fileName, urlConnection.getInputStream(),
                    urlConnection.getContentLength(), contentType);
        }
    } catch (Exception e) {
        PortalUtil.sendError(HttpServletResponse.SC_NOT_FOUND, e, request, response);
    }
}