Skip to content

Commit f3db14b

Browse files
committed
[(imporve) greengerong#21]: Getting jsessionids with urls. (Add response to event handler before reponse prerender html)
1 parent 285d10f commit f3db14b

File tree

3 files changed

+38
-26
lines changed

3 files changed

+38
-26
lines changed

src/main/java/com/github/greengerong/PreRenderEventHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
import org.apache.http.HttpResponse;
55

66
import javax.servlet.http.HttpServletRequest;
7+
import javax.servlet.http.HttpServletResponse;
78

89
public interface PreRenderEventHandler {
910

1011
String beforeRender(HttpServletRequest clientRequest);
1112

12-
void afterRender(HttpServletRequest clientRequest, HttpResponse prerenderResponse, String html);
13+
void afterRender(HttpServletRequest clientRequest, HttpServletResponse clientResponse, HttpResponse prerenderResponse, String responseHtml);
1314

1415
void destroy();
1516
}

src/main/java/com/github/greengerong/PrerenderSeoService.java

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -202,24 +202,24 @@ private void copyResponseHeaders(HttpResponse proxyResponse, HttpServletResponse
202202
}
203203
}
204204

205+
private String getResponseHtml(HttpResponse proxyResponse)
206+
throws IOException {
207+
HttpEntity entity = proxyResponse.getEntity();
208+
return entity != null ? EntityUtils.toString(entity) : "";
209+
}
210+
205211
/**
206212
* Copy response body data (the entity) from the proxy to the servlet client.
207213
*/
208-
private String copyResponseEntity(HttpResponse proxyResponse, HttpServletResponse servletResponse)
214+
private void responseEntity(String html, HttpServletResponse servletResponse)
209215
throws IOException {
210-
HttpEntity entity = proxyResponse.getEntity();
211-
if (entity != null) {
212-
PrintWriter printWriter = servletResponse.getWriter();
213-
try {
214-
final String html = EntityUtils.toString(entity);
215-
printWriter.write(html);
216-
printWriter.flush();
217-
return html;
218-
} finally {
219-
closeQuietly(printWriter);
220-
}
216+
PrintWriter printWriter = servletResponse.getWriter();
217+
try {
218+
printWriter.write(html);
219+
printWriter.flush();
220+
} finally {
221+
closeQuietly(printWriter);
221222
}
222-
return "";
223223
}
224224

225225

@@ -262,8 +262,8 @@ private boolean isInResources(final String url) {
262262
return from(prerenderConfig.getExtensionsToIgnore()).anyMatch(new Predicate<String>() {
263263
@Override
264264
public boolean apply(String item) {
265-
return (url.indexOf('?') >= 0 ? url.substring(0, url.indexOf('?')) : url)
266-
.toLowerCase().endsWith(item);
265+
return (url.indexOf('?') >= 0 ? url.substring(0, url.indexOf('?')) : url)
266+
.toLowerCase().endsWith(item);
267267
}
268268
});
269269
}
@@ -298,23 +298,24 @@ private boolean proxyPrerenderedPageResponse(HttpServletRequest request, HttpSer
298298
final HttpGet getMethod = getHttpGet(apiUrl);
299299
copyRequestHeaders(request, getMethod);
300300
withPrerenderToken(getMethod);
301-
CloseableHttpResponse proxyResponse = null;
301+
CloseableHttpResponse prerenderServerResponse = null;
302302

303303
try {
304-
proxyResponse = httpClient.execute(getMethod);
305-
response.setStatus(proxyResponse.getStatusLine().getStatusCode());
306-
copyResponseHeaders(proxyResponse, response);
307-
final String html = copyResponseEntity(proxyResponse, response);
308-
afterRender(request, proxyResponse, html);
304+
prerenderServerResponse = httpClient.execute(getMethod);
305+
response.setStatus(prerenderServerResponse.getStatusLine().getStatusCode());
306+
copyResponseHeaders(prerenderServerResponse, response);
307+
final String html = getResponseHtml(prerenderServerResponse);
308+
afterRender(request, response, prerenderServerResponse, html);
309+
responseEntity(html, response);
309310
return true;
310311
} finally {
311-
closeQuietly(proxyResponse);
312+
closeQuietly(prerenderServerResponse);
312313
}
313314
}
314315

315-
private void afterRender(HttpServletRequest request, CloseableHttpResponse proxyResponse, String html) {
316+
private void afterRender(HttpServletRequest clientRequest, HttpServletResponse clientResponse, CloseableHttpResponse prerenderServerResponse, String responseHtml) {
316317
if (preRenderEventHandler != null) {
317-
preRenderEventHandler.afterRender(request, proxyResponse, html);
318+
preRenderEventHandler.afterRender(clientRequest, clientResponse, prerenderServerResponse, responseHtml);
318319
}
319320
}
320321

src/test/java/com/github/greengerong/PreRenderSEOFilterTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import javax.servlet.ServletException;
1919
import javax.servlet.http.HttpServletRequest;
2020
import javax.servlet.http.HttpServletResponse;
21+
import java.io.PrintWriter;
22+
import java.io.StringWriter;
2123
import java.util.Enumeration;
2224
import java.util.HashMap;
2325

@@ -46,6 +48,8 @@ public class PreRenderSEOFilterTest {
4648

4749
@Mock
4850
private HttpGet httpGet;
51+
@Mock
52+
private PrintWriter printWriter;
4953

5054
@Before
5155
public void setUp() throws Exception {
@@ -99,6 +103,8 @@ public void should_handle_when_url_with_escaped_fragment_() throws Exception {
99103
when(servletRequest.getParameterMap()).thenReturn(map);
100104
when(statusLine.getStatusCode()).thenReturn(PrerenderSeoService.HTTP_OK);
101105
when(httpResponse.getAllHeaders()).thenReturn(new Header[0]);
106+
when(servletResponse.getWriter()).thenReturn(printWriter);
107+
102108
//when
103109
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
104110

@@ -201,7 +207,7 @@ public void should_handle_when_user_agent_is_crawler_and_url_is_not_resource_and
201207
when(servletRequest.getParameterMap()).thenReturn(map);
202208
when(statusLine.getStatusCode()).thenReturn(PrerenderSeoService.HTTP_OK);
203209
when(httpResponse.getAllHeaders()).thenReturn(new Header[0]);
204-
210+
when(servletResponse.getWriter()).thenReturn(printWriter);
205211
//when
206212
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
207213

@@ -231,6 +237,8 @@ public void should_handle_when_every_thing_is_ok_but_prerender_server_response_i
231237
when(servletRequest.getParameterMap()).thenReturn(map);
232238
when(statusLine.getStatusCode()).thenReturn(NOT_FOUND);
233239
when(httpResponse.getAllHeaders()).thenReturn(new Header[0]);
240+
when(servletResponse.getWriter()).thenReturn(printWriter);
241+
234242

235243
//when
236244
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
@@ -266,6 +274,7 @@ public void should_handle_when_user_agent_is_crawler_and_url_is_not_resource_and
266274
when(servletRequest.getParameterMap()).thenReturn(map);
267275
when(statusLine.getStatusCode()).thenReturn(PrerenderSeoService.HTTP_OK);
268276
when(httpResponse.getAllHeaders()).thenReturn(new Header[0]);
277+
when(servletResponse.getWriter()).thenReturn(printWriter);
269278

270279
//when
271280
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);
@@ -299,6 +308,7 @@ public void should_use_request_url_from_custom_header_if_available() throws Exce
299308
when(servletRequest.getParameterMap()).thenReturn(map);
300309
when(statusLine.getStatusCode()).thenReturn(PrerenderSeoService.HTTP_OK);
301310
when(httpResponse.getAllHeaders()).thenReturn(new Header[0]);
311+
when(servletResponse.getWriter()).thenReturn(printWriter);
302312

303313
//when
304314
preRenderSEOFilter.doFilter(servletRequest, servletResponse, filterChain);

0 commit comments

Comments
 (0)