Skip to content
This repository was archived by the owner on Dec 15, 2021. It is now read-only.

Commit 24cee21

Browse files
committed
Add Jetty sample project for SPR-14669
1 parent 7d3a063 commit 24cee21

File tree

4 files changed

+162
-0
lines changed

4 files changed

+162
-0
lines changed

SPR-14669/pom.xml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<groupId>org.example</groupId>
6+
<artifactId>SPR-14669</artifactId>
7+
<name>Repro project for SPR-14669</name>
8+
<packaging>war</packaging>
9+
<version>1.0.0-BUILD-SNAPSHOT</version>
10+
11+
<dependencies>
12+
<dependency>
13+
<groupId>javax.servlet</groupId>
14+
<artifactId>javax.servlet-api</artifactId>
15+
<version>3.1.0</version>
16+
</dependency>
17+
<dependency>
18+
<groupId>org.slf4j</groupId>
19+
<artifactId>slf4j-api</artifactId>
20+
<version>1.6.4</version>
21+
<scope>compile</scope>
22+
</dependency>
23+
<dependency>
24+
<groupId>ch.qos.logback</groupId>
25+
<artifactId>logback-classic</artifactId>
26+
<version>1.0.1</version>
27+
<scope>runtime</scope>
28+
</dependency>
29+
</dependencies>
30+
31+
<build>
32+
<finalName>SPR-14669</finalName>
33+
<plugins>
34+
<plugin>
35+
<groupId>org.eclipse.jetty</groupId>
36+
<artifactId>jetty-maven-plugin</artifactId>
37+
<version>9.3.11.v20160721</version>
38+
<configuration>
39+
<webApp>
40+
<contextPath>/${project.artifactId}</contextPath>
41+
</webApp>
42+
</configuration>
43+
</plugin>
44+
</plugins>
45+
</build>
46+
47+
</project>
48+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.example.spr14669;
2+
3+
import java.io.IOException;
4+
import javax.servlet.Filter;
5+
import javax.servlet.FilterChain;
6+
import javax.servlet.FilterConfig;
7+
import javax.servlet.ServletException;
8+
import javax.servlet.ServletRequest;
9+
import javax.servlet.ServletResponse;
10+
import javax.servlet.annotation.WebFilter;
11+
import javax.servlet.http.HttpServletRequest;
12+
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
15+
16+
import static javax.servlet.DispatcherType.ASYNC;
17+
import static javax.servlet.DispatcherType.ERROR;
18+
import static javax.servlet.DispatcherType.FORWARD;
19+
import static javax.servlet.DispatcherType.INCLUDE;
20+
import static javax.servlet.DispatcherType.REQUEST;
21+
22+
@WebFilter(
23+
urlPatterns = "/*",
24+
asyncSupported = true,
25+
dispatcherTypes = {REQUEST, ERROR, ASYNC, FORWARD, INCLUDE}
26+
)
27+
public class LoggingFilter implements Filter {
28+
29+
private static Logger logger = LoggerFactory.getLogger(LoggingFilter.class);
30+
31+
32+
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
33+
throws IOException, ServletException {
34+
35+
HttpServletRequest httpReq = (HttpServletRequest) req;
36+
logger.info("\n\n" + httpReq.getMethod() + " " + httpReq.getRequestURI() +
37+
", DispatcherType: " + req.getDispatcherType() + "\n\n");
38+
39+
chain.doFilter(req, res);
40+
}
41+
42+
public void init(FilterConfig filterConfig) throws ServletException { }
43+
44+
public void destroy() { }
45+
46+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.example.spr14669;
2+
3+
import java.io.IOException;
4+
import javax.servlet.AsyncContext;
5+
import javax.servlet.AsyncEvent;
6+
import javax.servlet.AsyncListener;
7+
import javax.servlet.DispatcherType;
8+
import javax.servlet.ServletException;
9+
import javax.servlet.ServletResponse;
10+
import javax.servlet.annotation.WebServlet;
11+
import javax.servlet.http.HttpServlet;
12+
import javax.servlet.http.HttpServletRequest;
13+
import javax.servlet.http.HttpServletResponse;
14+
15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
17+
18+
19+
@WebServlet(urlPatterns = "/test", asyncSupported = true)
20+
public class TestServlet extends HttpServlet {
21+
22+
private static Logger logger = LoggerFactory.getLogger(TestServlet.class);
23+
24+
25+
@Override
26+
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
27+
throws ServletException, IOException {
28+
29+
if (!DispatcherType.REQUEST.equals(req.getDispatcherType())) {
30+
logger.info("Unexpected DispatcherType: " + req.getDispatcherType());
31+
return;
32+
}
33+
34+
AsyncContext asyncContext = req.startAsync(req, resp);
35+
asyncContext.setTimeout(5000);
36+
asyncContext.addListener(new AsyncListener() {
37+
38+
public void onTimeout(AsyncEvent event) throws IOException {
39+
logger.info("Timeout event");
40+
ServletResponse response = event.getAsyncContext().getResponse();
41+
if (!response.isCommitted()) {
42+
((HttpServletResponse) response).setStatus(503);
43+
}
44+
// event.getAsyncContext().complete();
45+
}
46+
47+
public void onError(AsyncEvent event) throws IOException { }
48+
49+
public void onStartAsync(AsyncEvent event) throws IOException { }
50+
51+
public void onComplete(AsyncEvent event) throws IOException { }
52+
});
53+
54+
}
55+
56+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<configuration>
3+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
4+
<layout class="ch.qos.logback.classic.PatternLayout">
5+
<Pattern>%d{HH:mm:ss} [%thread] %logger{0} - %msg%n</Pattern>
6+
</layout>
7+
</appender>
8+
<logger name="org.example" level="DEBUG" />
9+
<root level="info">
10+
<appender-ref ref="STDOUT" />
11+
</root>
12+
</configuration>

0 commit comments

Comments
 (0)