Skip to content

Commit 6f96401

Browse files
发布2.3.30
1 parent fb0425b commit 6f96401

25 files changed

+290
-227
lines changed

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,10 @@
171171
<scope>provided</scope>
172172
<optional>true</optional>
173173
<exclusions>
174-
<exclusion>
175-
<groupId>org.springframework.boot</groupId>
176-
<artifactId>spring-boot-starter-tomcat</artifactId>
177-
</exclusion>
174+
<!-- <exclusion>-->
175+
<!-- <groupId>org.springframework.boot</groupId>-->
176+
<!-- <artifactId>spring-boot-starter-tomcat</artifactId>-->
177+
<!-- </exclusion>-->
178178
<exclusion>
179179
<groupId>org.hibernate.validator</groupId>
180180
<artifactId>hibernate-validator</artifactId>

src/main/java/com/github/netty/protocol/servlet/NettyMessageToServletRunnable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ public void run() {
264264
handleNotFound(servletContext, request, response);
265265
}
266266
} else {
267-
dispatcher = servletContext.getRequestDispatcher(relativeUri, DispatcherType.REQUEST);
267+
dispatcher = servletContext.getRequestDispatcher(relativeUri, DispatcherType.REQUEST, false);
268268
if (dispatcher == null) {
269269
handleNotFound(servletContext, request, response);
270270
} else {

src/main/java/com/github/netty/protocol/servlet/ServletAsyncContext.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class ServletAsyncContext implements AsyncContext, Recyclable {
5959
/**
6060
* Timeout time -> ms
6161
*/
62-
private long timeout;
62+
long timeout;
6363
private List<ServletAsyncListenerWrapper> asyncListenerWrapperList;
6464
private final Runnable timeoutTask = () -> {
6565
//Notice the timeout
@@ -84,15 +84,16 @@ public class ServletAsyncContext implements AsyncContext, Recyclable {
8484
}
8585
}
8686
};
87-
private ServletRequest servletRequest;
88-
private ServletResponse servletResponse;
87+
ServletRequest servletRequest;
88+
ServletResponse servletResponse;
8989
private /*volatile*/ Integer timeoutTaskId;
9090
private /*volatile*/ long startTimestamp;
9191

92-
public ServletAsyncContext(ServletHttpExchange servletHttpExchange, ServletContext servletContext, Executor executor) {
92+
public ServletAsyncContext(ServletHttpExchange servletHttpExchange, ServletContext servletContext, Executor executor, long timeout) {
9393
this.servletHttpExchange = Objects.requireNonNull(servletHttpExchange);
9494
this.servletContext = Objects.requireNonNull(servletContext);
9595
this.executor = Objects.requireNonNull(executor);
96+
this.timeout = timeout;
9697
}
9798

9899
public ServletContext getServletContext() {
@@ -118,14 +119,6 @@ public boolean hasOriginalRequestAndResponse() {
118119
return servletHttpExchange.request == servletRequest && servletHttpExchange.response == servletResponse;
119120
}
120121

121-
public void setServletResponse(ServletResponse servletResponse) {
122-
this.servletResponse = servletResponse;
123-
}
124-
125-
public void setServletRequest(ServletRequest servletRequest) {
126-
this.servletRequest = servletRequest;
127-
}
128-
129122
@Override
130123
public void dispatch() {
131124
String path;
@@ -167,7 +160,7 @@ public void dispatch(javax.servlet.ServletContext context, String path) {
167160
httpServletResponse = servletHttpExchange.response;
168161
}
169162

170-
ServletRequestDispatcher dispatcher = ctx.getRequestDispatcher(path, DispatcherType.ASYNC);
163+
ServletRequestDispatcher dispatcher = ctx.getRequestDispatcher(path, DispatcherType.ASYNC, true);
171164
if (dispatcher == null) {
172165
throw new UnsupportedOperationException("The dispatcher returned from the ServletContext does not support asynchronous dispatching");
173166
}

src/main/java/com/github/netty/protocol/servlet/ServletContext.java

Lines changed: 67 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ protected Map<Charset, DefaultHttpDataFactory> initialValue() throws Exception {
7979
private final UrlMapper<ServletRegistration> servletUrlMapper = new UrlMapper<>();
8080
private final FilterMapper<ServletFilterRegistration> filterUrlMapper = new FilterMapper<>();
8181
private final ClassLoader classLoader;
82+
private LoggerX logger = LoggerFactoryX.getLogger(getLogName(""));
8283
Supplier<Executor> defaultExecutorSupplier;
8384
String contextPath = "";
8485
/**
@@ -92,21 +93,23 @@ protected Map<Charset, DefaultHttpDataFactory> initialValue() throws Exception {
9293
/**
9394
* Minimum upload file length, in bytes (becomes temporary file storage if larger than uploadMinSize)
9495
*/
95-
private long fileSizeThreshold = 4096 * 16;
96+
int fileSizeThreshold = 4096 * 16;
9697
/**
9798
* Upload file timeout millisecond , -1 is not control timeout.
9899
*/
99-
private long uploadFileTimeoutMs = -1;
100+
long uploadFileTimeoutMs = -1;
100101
private Supplier<Executor> asyncExecutorSupplier;
101102
private SessionService sessionService;
102103
private Set<SessionTrackingMode> sessionTrackingModeSet;
103104
private Servlet defaultServlet = new DefaultServlet();
104-
private boolean enableLookupFlag = false;
105+
boolean enableLookupFlag = false;
105106
private boolean mapperContextRootRedirectEnabled = true;
106-
private boolean useRelativeRedirects = true;
107+
boolean useRelativeRedirects = true;
107108
private String serverHeader;
108-
private String requestCharacterEncoding;
109-
private String responseCharacterEncoding;
109+
String requestCharacterEncoding = HttpConstants.DEFAULT_CHARSET.name();
110+
Charset requestCharacterEncodingCharset = HttpConstants.DEFAULT_CHARSET;
111+
String responseCharacterEncoding = HttpConstants.DEFAULT_CHARSET.name();
112+
Charset responseCharacterEncodingCharset = HttpConstants.DEFAULT_CHARSET;
110113
private String servletContextName;
111114
/**
112115
* output stream maxBufferBytes
@@ -151,6 +154,15 @@ public static void asyncClose(Closeable closeable) {
151154
}
152155
}
153156

157+
private static String getLogName(String name) {
158+
if ((name == null) || (name.isEmpty())) {
159+
name = "/";
160+
} else if (name.startsWith("##")) {
161+
name = "/" + name;
162+
}
163+
return "[" + name + "]";
164+
}
165+
154166
public static String normPath(String path) {
155167
if (path.isEmpty()) {
156168
return path;
@@ -169,6 +181,28 @@ public static String normPath(String path) {
169181
return path;
170182
}
171183

184+
/**
185+
* 是否开启UrlServlet的AntPathMatcher路径匹配,默认false不开启
186+
*/
187+
public void setEnableUrlServletAntPathMatcher(boolean enableAntPathMatcher) {
188+
servletUrlMapper.setEnableAntPathMatcher(enableAntPathMatcher);
189+
}
190+
191+
/**
192+
* 是否开启UrlFilter的AntPathMatcher路径匹配,默认false不开启
193+
*/
194+
public void setEnableUrlFilterAntPathMatcher(boolean enableAntPathMatcher) {
195+
filterUrlMapper.setEnableAntPathMatcher(enableAntPathMatcher);
196+
}
197+
198+
public boolean isEnableUrlServletAntPathMatcher() {
199+
return servletUrlMapper.isEnableAntPathMatcher();
200+
}
201+
202+
public boolean isEnableUrlFilterAntPathMatcher() {
203+
return filterUrlMapper.isEnableAntPathMatcher();
204+
}
205+
172206
public DefaultServlet getDefaultServletCast() {
173207
if (defaultServlet instanceof DefaultServlet) {
174208
return (DefaultServlet) defaultServlet;
@@ -241,18 +275,14 @@ public void setDocBase(String docBase, String workspace) {
241275
ResourceManager old = this.resourceManager;
242276
this.resourceManager = new ResourceManager(docBase, workspace, classLoader);
243277
if (old != null) {
244-
getLog().warn("ServletContext docBase override. old = {}, new = {}", old, this.resourceManager);
278+
logger.warn("ServletContext docBase override. old = {}, new = {}", old, this.resourceManager);
245279
}
246280
DiskFileUpload.deleteOnExitTemporaryFile = true;
247281
DiskAttribute.deleteOnExitTemporaryFile = true;
248282
DiskFileUpload.baseDirectory = resourceManager.getRealPath(DEFAULT_UPLOAD_DIR);
249283
DiskAttribute.baseDirectory = resourceManager.getRealPath(DEFAULT_UPLOAD_DIR);
250284
}
251285

252-
private LoggerX getLog() {
253-
return LoggerFactoryX.getLogger(contextPath);
254-
}
255-
256286
public Executor getExecutor() {
257287
Executor executor = asyncExecutorSupplier != null ? asyncExecutorSupplier.get() : null;
258288
if (executor == null) {
@@ -296,12 +326,12 @@ public HttpDataFactory getHttpDataFactory(Charset charset) {
296326
});
297327
}
298328

299-
public long getFileSizeThreshold() {
329+
public int getFileSizeThreshold() {
300330
return fileSizeThreshold;
301331
}
302332

303333
public void setFileSizeThreshold(long fileSizeThreshold) {
304-
this.fileSizeThreshold = Math.max(fileSizeThreshold, MIN_FILE_SIZE_THRESHOLD);
334+
this.fileSizeThreshold = (int) Math.max(fileSizeThreshold, MIN_FILE_SIZE_THRESHOLD);
305335
}
306336

307337
public MimeMappingsX getMimeMappings() {
@@ -387,6 +417,7 @@ public void setContextPath(String contextPath) {
387417
this.contextPath = normed;
388418
this.filterUrlMapper.setRootPath(normed);
389419
this.servletUrlMapper.setRootPath(normed);
420+
this.logger = LoggerFactoryX.getLogger(getLogName(normed));
390421
}
391422

392423
@Override
@@ -455,11 +486,11 @@ public String getRealPath(String path) {
455486

456487
@Override
457488
public ServletRequestDispatcher getRequestDispatcher(String path) {
458-
return getRequestDispatcher(path, DispatcherType.REQUEST);
489+
return getRequestDispatcher(path, DispatcherType.REQUEST, true);
459490
}
460491

461-
ServletRequestDispatcher getRequestDispatcher(String path, DispatcherType dispatcherType) {
462-
String pathNormalize = ServletUtil.pathNormalize(path, true);
492+
ServletRequestDispatcher getRequestDispatcher(String path, DispatcherType dispatcherType, boolean normalize) {
493+
String pathNormalize = normalize ? ServletUtil.pathNormalize(path, true) : path;
463494
if (pathNormalize == null) {
464495
return null;
465496
}
@@ -527,17 +558,23 @@ public Enumeration<String> getServletNames() {
527558

528559
@Override
529560
public void log(String msg) {
530-
getLog().debug(msg);
561+
if (logger.isInfoEnabled()) {
562+
logger.info(msg);
563+
}
531564
}
532565

533566
@Override
534567
public void log(Exception exception, String msg) {
535-
getLog().debug(msg, exception);
568+
if (logger.isErrorEnabled()) {
569+
logger.error(msg, exception);
570+
}
536571
}
537572

538573
@Override
539574
public void log(String message, Throwable throwable) {
540-
getLog().debug(message, throwable);
575+
if (logger.isErrorEnabled()) {
576+
logger.error(message, throwable);
577+
}
541578
}
542579

543580
@Override
@@ -592,7 +629,7 @@ public void setAttribute(String name, Object object) {
592629
}
593630

594631
Object oldObject = attributeMap.put(name, object);
595-
ServletEventListenerManager listenerManager = getServletEventListenerManager();
632+
ServletEventListenerManager listenerManager = this.servletEventListenerManager;
596633
if (listenerManager.hasServletContextAttributeListener()) {
597634
listenerManager.onServletContextAttributeAdded(new ServletContextAttributeEvent(this, name, object));
598635
if (oldObject != null) {
@@ -604,7 +641,7 @@ public void setAttribute(String name, Object object) {
604641
@Override
605642
public void removeAttribute(String name) {
606643
Object oldObject = attributeMap.remove(name);
607-
ServletEventListenerManager listenerManager = getServletEventListenerManager();
644+
ServletEventListenerManager listenerManager = this.servletEventListenerManager;
608645
if (listenerManager.hasServletContextAttributeListener()) {
609646
listenerManager.onServletContextAttributeRemoved(new ServletContextAttributeEvent(this, name, oldObject));
610647
}
@@ -763,7 +800,7 @@ public <T extends EventListener> void addListener(T listener) {
763800
Objects.requireNonNull(listener);
764801

765802
boolean addFlag = false;
766-
ServletEventListenerManager listenerManager = getServletEventListenerManager();
803+
ServletEventListenerManager listenerManager = this.servletEventListenerManager;
767804
if (listener instanceof ServletContextAttributeListener) {
768805
listenerManager.addServletContextAttributeListener((ServletContextAttributeListener) listener);
769806
addFlag = true;
@@ -843,28 +880,30 @@ public String getVirtualServerName() {
843880

844881
@Override
845882
public String getRequestCharacterEncoding() {
846-
if (requestCharacterEncoding == null) {
847-
return HttpConstants.DEFAULT_CHARSET.name();
848-
}
849883
return requestCharacterEncoding;
850884
}
851885

852886
@Override
853887
public void setRequestCharacterEncoding(String requestCharacterEncoding) {
888+
if (requestCharacterEncoding == null) {
889+
requestCharacterEncoding = HttpConstants.DEFAULT_CHARSET.name();
890+
}
854891
this.requestCharacterEncoding = requestCharacterEncoding;
892+
this.requestCharacterEncodingCharset = Charset.forName(requestCharacterEncoding);
855893
}
856894

857895
@Override
858896
public String getResponseCharacterEncoding() {
859-
if (responseCharacterEncoding == null) {
860-
return HttpConstants.DEFAULT_CHARSET.name();
861-
}
862897
return responseCharacterEncoding;
863898
}
864899

865900
@Override
866901
public void setResponseCharacterEncoding(String responseCharacterEncoding) {
902+
if (responseCharacterEncoding == null) {
903+
responseCharacterEncoding = HttpConstants.DEFAULT_CHARSET.name();
904+
}
867905
this.responseCharacterEncoding = responseCharacterEncoding;
906+
this.responseCharacterEncodingCharset = Charset.forName(responseCharacterEncoding);
868907
}
869908

870909
@Override

src/main/java/com/github/netty/protocol/servlet/ServletErrorPageManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public void handleErrorPage(ServletErrorPage errorPage, Throwable throwable, Ser
135135
if (errorPagePath == null || errorPagePath.isEmpty()) {
136136
return;
137137
}
138-
ServletRequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher(errorPagePath, DispatcherType.ERROR);
138+
ServletRequestDispatcher dispatcher = request.getServletContext().getRequestDispatcher(errorPagePath, DispatcherType.ERROR, true);
139139
try {
140140
response.resetBuffer();
141141
} catch (IllegalStateException e) {
@@ -165,7 +165,7 @@ public void handleErrorPage(ServletErrorPage errorPage, Throwable throwable, Ser
165165
httpServletRequest.setAttribute(RequestDispatcher.ERROR_MESSAGE, localizedMessage);
166166
}
167167
}
168-
httpServletRequest.setAttribute(RequestDispatcher.ERROR_SERVLET_NAME, dispatcher.getName());
168+
httpServletRequest.setAttribute(RequestDispatcher.ERROR_SERVLET_NAME, request.dispatcher.getName());
169169
httpServletRequest.setAttribute(RequestDispatcher.ERROR_REQUEST_URI, request.getRequestURI());
170170
httpServletRequest.setAttribute(RequestDispatcher.ERROR_STATUS_CODE, response.getStatus());
171171
request.setDispatcherType(DispatcherType.ERROR);
@@ -177,7 +177,7 @@ public void handleErrorPage(ServletErrorPage errorPage, Throwable throwable, Ser
177177
response.resetBuffer(true);
178178
dispatcher.forward(request, httpServletResponse, DispatcherType.ERROR);
179179

180-
response.getOutputStream().setSuspendFlag(false);
180+
response.outputStream.setSuspendFlag(false);
181181
}
182182
} catch (Throwable e) {
183183
logger.warn("on handleErrorPage error. url=" + request.getRequestURL() + ", case=" + e.getMessage(), e);

src/main/java/com/github/netty/protocol/servlet/ServletFilterChain.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class ServletFilterChain implements FilterChain, Recyclable {
2929
ServletRegistration servletRegistration;
3030
private ServletContext servletContext;
3131

32-
// public static final Set<Filter> FILTER_SET = new HashSet<>();
32+
// public static final Set<Filter> FILTER_SET = new HashSet<>();
3333
// public static final AtomicLong SERVLET_TIME = new AtomicLong();
3434
// public static final AtomicLong FILTER_TIME = new AtomicLong();
3535
// private long beginTime;
@@ -53,14 +53,14 @@ public static ServletFilterChain newInstance(ServletContext servletContext, Serv
5353
*/
5454
@Override
5555
public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
56-
ServletEventListenerManager listenerManager = servletContext.getServletEventListenerManager();
56+
ServletEventListenerManager listenerManager = servletContext.servletEventListenerManager;
5757

5858
//Initialization request
5959
if (pos == 0) {
6060
ServletHttpServletRequest httpServletRequest = ServletUtil.unWrapper(request);
6161
if (httpServletRequest != null) {
62-
httpServletRequest.setMultipartConfigElement(servletRegistration.getMultipartConfigElement());
63-
httpServletRequest.setServletSecurityElement(servletRegistration.getServletSecurityElement());
62+
httpServletRequest.multipartConfigElement = servletRegistration.multipartConfigElement;
63+
httpServletRequest.servletSecurityElement = servletRegistration.servletSecurityElement;
6464
}
6565
}
6666

src/main/java/com/github/netty/protocol/servlet/ServletHttpAsyncRequest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ public static ServletHttpAsyncRequest newInstanceAsyncPath(HttpServletRequest so
6767
request.mapperElement = mapperElement;
6868
request.requestURI = contextPath + relativePathNoQueryString;
6969
if (source.getAttribute(AsyncContext.ASYNC_REQUEST_URI) == null) {
70-
request.specialAttributes[0] = source.getRequestURI();
71-
request.specialAttributes[1] = source.getContextPath();
72-
request.specialAttributes[2] = source.getServletPath();
73-
request.specialAttributes[3] = source.getPathInfo();
74-
request.specialAttributes[4] = source.getQueryString();
70+
request.specialAttributes[0] = request.getRequestURI();
71+
request.specialAttributes[1] = request.getContextPath();
72+
request.specialAttributes[2] = request.getServletPath();
73+
request.specialAttributes[3] = request.getPathInfo();
74+
request.specialAttributes[4] = request.getQueryString();
7575
}
7676
return request;
7777
}
@@ -93,7 +93,7 @@ public void setRequest(ServletRequest servletRequest) {
9393

9494
@Override
9595
public ServletRequestDispatcher getRequestDispatcher(String path) {
96-
return servletAsyncContext.servletContext.getRequestDispatcher(path, getDispatcherType());
96+
return servletAsyncContext.servletContext.getRequestDispatcher(path, getDispatcherType(), true);
9797
}
9898

9999
@Override

0 commit comments

Comments
 (0)