Dodaj ścieżkę kontekstową do aplikacji Spring Boot
Próbuję ustawić programowo root kontekstowy aplikacji Spring Boot. Powodem roota kontekstu jest to, że chcemy, aby aplikacja była dostępna z localhost:port/{app_name}
i aby wszystkie ścieżki kontrolera były do niej dołączone.
Oto plik konfiguracyjny aplikacji web-app.
@Configuration
public class ApplicationConfiguration {
Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);
@Value("${mainstay.web.port:12378}")
private String port;
@Value("${mainstay.web.context:/mainstay}")
private String context;
private Set<ErrorPage> pageHandlers;
@PostConstruct
private void init(){
pageHandlers = new HashSet<ErrorPage>();
pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,"/notfound.html"));
pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,"/forbidden.html"));
}
@Bean
public EmbeddedServletContainerFactory servletContainer(){
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
logger.info("Setting custom configuration for Mainstay:");
logger.info("Setting port to {}",port);
logger.info("Setting context to {}",context);
factory.setPort(Integer.valueOf(port));
factory.setContextPath(context);
factory.setErrorPages(pageHandlers);
return factory;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
Oto kontroler indeksu dla strony głównej.
@Controller
public class IndexController {
Logger logger = LoggerFactory.getLogger(IndexController.class);
@RequestMapping("/")
public String index(Model model){
logger.info("Setting index page title to Mainstay - Web");
model.addAttribute("title","Mainstay - Web");
return "index";
}
}
Nowy root aplikacji powinien znajdować się w localhost:12378/mainstay
, ale nadal znajduje się w localhost:12378
.
Czego mi brakuje powoduje, że Spring Boot nie dołącza katalogu głównego kontekstu przed mapowaniem żądania?
9 answers
Dlaczego próbujesz rzucić własne rozwiązanie. Spring-boot już to wspiera.
Jeśli jeszcze go nie masz, Dodaj plik application.properties
do src\main\resources
. W tym pliku właściwości dodaj 2 właściwości:
server.contextPath=/mainstay
server.port=12378
UPDATE (Spring Boot 2.0)
W wersji 2.0 (ze względu na wsparcie zarówno Spring MVC, jak i Spring WebFlux)contextPath
zostało zmienione na:
server.servlet.contextPath=/mainstay
Możesz następnie usunąć konfigurację dla niestandardowego kontenera serwletów. Jeśli musisz zrobić trochę post processing na kontenerze możesz dodać implementację EmbeddedServletContainerCustomizer
do swojej konfiguracji(na przykład, aby dodać Strony błędów).
Zasadniczo właściwości wewnątrz application.properties
służą jako domyślne, zawsze możesz je nadpisać używając innego application.properties
obok dostarczonego artefaktu lub dodając parametry JVM (-Dserver.port=6666
).
Zobacz także przewodnik referencyjny , w szczególności sekcję właściwości .
Klasa ServerProperties
narzędzia EmbeddedServletContainerCustomizer
. Wartość domyślna dla contextPath
to ""
. W swojej próbce kodu ustawiasz contextPath
bezpośrednio na TomcatEmbeddedServletContainerFactory
. Następnie instancja ServerProperties
przetworzy tę instancję i zresetuje ją ze ścieżki do ""
. (ta linia wykonuje null
sprawdzanie, ale jako domyślne jest ""
zawsze kończy się niepowodzeniem i ustawia kontekst na ""
i tym samym nadpisuje Twój).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 05:39:57
Jeśli używasz Spring Boot, nie musisz konfigurować właściwości serwera poprzez inicjalizację Vean.
Zamiast tego, jeśli jedna z funkcji jest dostępna dla podstawowej konfiguracji, można ją ustawić w pliku" właściwości " o nazwie application
, który powinien znajdować się pod src\main\resources
w strukturze aplikacji. Plik "Właściwości" jest dostępny w dwóch formatach
.yml
.properties
Sposób, w jaki określasz lub ustawiasz konfiguracje różnią się w zależności od formatu.
W twoim konkretnym przypadku, jeśli zdecydujesz się użyć rozszerzenia .properties
, W src\main\resources
znajdziesz plik o nazwie application.properties
z następującymi ustawieniami konfiguracyjnymi
server.port = 8080
server.contextPath = /context-path
OTOH, jeśli zdecydujesz się użyć rozszerzenia .yml
(tj. application.yml
), będziesz musiał ustawić konfiguracje używając następującego formatu (tj. YAML
):
server:
port: 8080
contextPath: /context-path
Aby dowiedzieć się więcej o właściwościach sprężynowego buta, skorzystaj z poniższego linku:
Https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-28 10:42:33
Jeśli używasz Spring Boot 2.0.0 użyj:
server.servlet.context-path
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-18 16:00:27
Poprawne właściwości to
server.servlet.path
Aby skonfigurować ścieżkę DispatcherServlet
I
server.servlet.context-path
Aby skonfigurować ścieżkę kontekstu aplikacji poniżej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-24 09:03:36
Możemy ustawić w application.properties
jako
API_CONTEXT_ROOT=/therootpath
I uzyskujemy do niego dostęp w klasie Java, jak wspomniano poniżej
@Value("${API_CONTEXT_ROOT}")
private String contextRoot;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-28 10:43:42
In Spring Boot 1.5:
Dodaj następującą właściwość w application.properties
:
server.context-path=/demo
Uwaga: /demo
To Adres URL ścieżki kontekstowej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-11 16:13:40
Serwer.contextPath= / mainstay
Działa na mnie, gdybym miał JEDEN plik wojenny w JBOSS. Wśród wielu plików wojennych, gdzie każdy zawiera jboss-web.xml to nie działa. Musiałem umieścić jboss-web.xml wewnątrz katalogu WEB-INF z zawartością
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
<context-root>mainstay</context-root>
</jboss-web>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 13:08:22
Należy pamiętać, że " serwer.ścieżka kontekstowa " lub " serwer.servlet.context-path "[począwszy od springboot 2.0.właściwości x] będą działać tylko w przypadku wdrożenia do osadzonego kontenera, np. embedded tomcat. Właściwości te nie będą miały wpływu, jeśli wdrażasz aplikację jako wojnę na przykład do zewnętrznego programu tomcat.
Zobacz tę odpowiedź tutaj: https://stackoverflow.com/a/43856300/4449859
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 14:47:59
Ścieżka kontekstowa może być bezpośrednio zintegrowana z kodem, ale nie jest to wskazane, ponieważ nie można jej ponownie użyć, więc zapisz ją w aplikacji.Plik Właściwości serwer.contextPath= / nazwa folderu, w którym umieszczono kod contextPath = nazwa folderu, w którym umieszczono kod/ Uwaga: uważnie obserwuj ukośnik.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-10 13:12:23