Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
6507d172
Commit
6507d172
authored
Mar 29, 2019
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '1.5.x' into 2.0.x
parents
be32421b
70eee612
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
67 additions
and
8 deletions
+67
-8
spring-boot-features.adoc
...ing-boot-docs/src/main/asciidoc/spring-boot-features.adoc
+0
-7
TomcatServletWebServerFactory.java
...ot/web/embedded/tomcat/TomcatServletWebServerFactory.java
+7
-1
TomcatServletWebServerFactoryTests.java
...b/embedded/tomcat/TomcatServletWebServerFactoryTests.java
+60
-0
No files found.
spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
View file @
6507d172
...
...
@@ -2927,13 +2927,6 @@ https://github.com/undertow-io/undertow[Undertow] servers. Most developers use t
appropriate "`Starter`" to obtain a fully configured instance. By default, the embedded
server listens for HTTP requests on port `8080`.
WARNING: If you choose to use Tomcat on https://www.centos.org/[CentOS], be aware that, by
default, a temporary directory is used to store compiled JSPs, file uploads, and so on.
This directory may be deleted by `tmpwatch` while your application is running, leading to
failures. To avoid this behavior, you may want to customize your `tmpwatch` configuration
such that `tomcat.*` directories are not deleted or configure `server.tomcat.basedir` such
that embedded Tomcat uses a different location.
[[boot-features-embedded-container-servlets-filters-listeners]]
...
...
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java
View file @
6507d172
/*
* Copyright 2012-201
8
the original author or authors.
* Copyright 2012-201
9
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -200,6 +200,12 @@ public class TomcatServletWebServerFactory extends AbstractServletWebServerFacto
resetDefaultLocaleMapping
(
context
);
addLocaleMappings
(
context
);
context
.
setUseRelativeRedirects
(
false
);
try
{
context
.
setCreateUploadTargets
(
true
);
}
catch
(
NoSuchMethodError
ex
)
{
// Tomcat is < 8.5.39. Continue.
}
configureTldSkipPatterns
(
context
);
WebappLoader
loader
=
new
WebappLoader
(
context
.
getParentClassLoader
());
loader
.
setLoaderClass
(
TomcatEmbeddedWebappClassLoader
.
class
.
getName
());
...
...
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactoryTests.java
View file @
6507d172
...
...
@@ -18,6 +18,7 @@ package org.springframework.boot.web.embedded.tomcat;
import
java.io.File
;
import
java.io.IOException
;
import
java.net.URISyntaxException
;
import
java.net.URL
;
import
java.nio.charset.Charset
;
import
java.nio.charset.StandardCharsets
;
...
...
@@ -26,11 +27,17 @@ import java.util.Arrays;
import
java.util.Locale
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.concurrent.atomic.AtomicReference
;
import
javax.naming.InitialContext
;
import
javax.naming.NamingException
;
import
javax.servlet.MultipartConfigElement
;
import
javax.servlet.ServletContext
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletRegistration.Dynamic
;
import
javax.servlet.http.HttpServlet
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.apache.catalina.Container
;
import
org.apache.catalina.Context
;
...
...
@@ -58,9 +65,20 @@ import org.mockito.InOrder;
import
org.springframework.boot.testsupport.rule.OutputCapture
;
import
org.springframework.boot.web.server.WebServerException
;
import
org.springframework.boot.web.servlet.ServletContextInitializer
;
import
org.springframework.boot.web.servlet.server.AbstractServletWebServerFactory
;
import
org.springframework.boot.web.servlet.server.AbstractServletWebServerFactoryTests
;
import
org.springframework.core.io.ByteArrayResource
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.test.util.ReflectionTestUtils
;
import
org.springframework.util.FileSystemUtils
;
import
org.springframework.util.LinkedMultiValueMap
;
import
org.springframework.util.MultiValueMap
;
import
org.springframework.web.client.RestTemplate
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
junit
.
Assert
.
fail
;
...
...
@@ -443,6 +461,48 @@ public class TomcatServletWebServerFactoryTests
this
.
webServer
.
start
();
}
@Test
public
void
nonExistentUploadDirectoryIsCreatedUponMultipartUpload
()
throws
IOException
,
URISyntaxException
{
TomcatServletWebServerFactory
factory
=
new
TomcatServletWebServerFactory
(
0
);
AtomicReference
<
ServletContext
>
servletContextReference
=
new
AtomicReference
<>();
factory
.
addInitializers
(
new
ServletContextInitializer
()
{
@Override
public
void
onStartup
(
ServletContext
servletContext
)
throws
ServletException
{
servletContextReference
.
set
(
servletContext
);
Dynamic
servlet
=
servletContext
.
addServlet
(
"upload"
,
new
HttpServlet
()
{
@Override
protected
void
doPost
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
ServletException
,
IOException
{
req
.
getParts
();
}
});
servlet
.
addMapping
(
"/upload"
);
servlet
.
setMultipartConfig
(
new
MultipartConfigElement
((
String
)
null
));
}
});
this
.
webServer
=
factory
.
getWebServer
();
this
.
webServer
.
start
();
File
temp
=
(
File
)
servletContextReference
.
get
()
.
getAttribute
(
ServletContext
.
TEMPDIR
);
FileSystemUtils
.
deleteRecursively
(
temp
);
RestTemplate
restTemplate
=
new
RestTemplate
();
HttpHeaders
headers
=
new
HttpHeaders
();
MultiValueMap
<
String
,
Object
>
body
=
new
LinkedMultiValueMap
<>();
body
.
add
(
"file"
,
new
ByteArrayResource
(
new
byte
[
1024
*
1024
]));
headers
.
setContentType
(
MediaType
.
MULTIPART_FORM_DATA
);
HttpEntity
<
MultiValueMap
<
String
,
Object
>>
requestEntity
=
new
HttpEntity
<>(
body
,
headers
);
ResponseEntity
<
String
>
response
=
restTemplate
.
postForEntity
(
getLocalUrl
(
"/upload"
),
requestEntity
,
String
.
class
);
assertThat
(
response
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
}
@Override
protected
JspServlet
getJspServlet
()
throws
ServletException
{
Tomcat
tomcat
=
((
TomcatWebServer
)
this
.
webServer
).
getTomcat
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment