001
014
015 package com.liferay.portal.kernel.servlet;
016
017 import com.liferay.portal.kernel.util.GetterUtil;
018 import com.liferay.portal.kernel.util.ObjectValuePair;
019
020 import java.util.Enumeration;
021
022 import javax.servlet.DispatcherType;
023 import javax.servlet.RequestDispatcher;
024 import javax.servlet.http.HttpServletRequest;
025 import javax.servlet.http.HttpServletRequestWrapper;
026 import javax.servlet.http.HttpServletResponse;
027
028
031 public class RequestDispatcherUtil {
032
033 public static ObjectValuePair<String, Long> getContentAndLastModifiedTime(
034 RequestDispatcher requestDispatcher, HttpServletRequest request,
035 HttpServletResponse response)
036 throws Exception {
037
038 BufferCacheServletResponse bufferCacheServletResponse =
039 new BufferCacheServletResponse(response);
040
041 requestDispatcher.include(
042 new HttpServletRequestWrapper(request) {
043
044 @Override
045 public long getDateHeader(String name) {
046 if (name.equals(HttpHeaders.IF_MODIFIED_SINCE)) {
047 return -1;
048 }
049
050 return super.getDateHeader(name);
051 }
052
053 @Override
054 public String getHeader(String name) {
055 if (name.equals(HttpHeaders.IF_MODIFIED_SINCE) ||
056 name.equals(HttpHeaders.IF_NONE_MATCH) ||
057 name.equals(HttpHeaders.LAST_MODIFIED)) {
058
059 return null;
060 }
061
062 return super.getHeader(name);
063 }
064
065 @Override
066 public Enumeration<String> getHeaders(String name) {
067 if (name.equals(HttpHeaders.IF_MODIFIED_SINCE) ||
068 name.equals(HttpHeaders.IF_NONE_MATCH) ||
069 name.equals(HttpHeaders.LAST_MODIFIED)) {
070
071 return null;
072 }
073
074 return super.getHeaders(name);
075 }
076
077 @Override
078 public String getMethod() {
079 return HttpMethods.GET;
080 }
081
082 },
083 bufferCacheServletResponse);
084
085 return new ObjectValuePair<>(
086 bufferCacheServletResponse.getString(),
087 GetterUtil.getLong(
088 bufferCacheServletResponse.getHeader(HttpHeaders.LAST_MODIFIED),
089 -1));
090 }
091
092 public static String getEffectivePath(HttpServletRequest request) {
093 DispatcherType dispatcherType = request.getDispatcherType();
094
095 if (dispatcherType.equals(DispatcherType.FORWARD)) {
096 return (String)request.getAttribute(
097 RequestDispatcher.FORWARD_SERVLET_PATH);
098 }
099 else if (dispatcherType.equals(DispatcherType.INCLUDE)) {
100 return (String)request.getAttribute(
101 RequestDispatcher.INCLUDE_SERVLET_PATH);
102 }
103
104 return request.getServletPath();
105 }
106
107 public static long getLastModifiedTime(
108 RequestDispatcher requestDispatcher, HttpServletRequest request,
109 HttpServletResponse response)
110 throws Exception {
111
112 MetaInfoCacheServletResponse metaInfoCacheServletResponse =
113 new MetaInfoCacheServletResponse(response);
114
115 requestDispatcher.include(
116 new HttpServletRequestWrapper(request) {
117
118 @Override
119 public String getMethod() {
120 return HttpMethods.HEAD;
121 }
122
123 },
124 metaInfoCacheServletResponse);
125
126 return GetterUtil.getLong(
127 metaInfoCacheServletResponse.getHeader(HttpHeaders.LAST_MODIFIED),
128 -1);
129 }
130
131 }