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

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

Introduction

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

Prototype

String LAST_MODIFIED

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

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 {/*w  w w  . ja  v  a  2 s .  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);
    }
}