diff --git a/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/pom.xml b/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/pom.xml index 8c26e9947d..38d019c683 100644 --- a/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/pom.xml +++ b/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/pom.xml @@ -1,95 +1,84 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> - 4.0.0 + 4.0.0 - com.baeldung.spring-thymeleaf-attributes.module - accessing-session-attributes + com.baeldung.spring-thymeleaf-attributes.module + accessing-session-attributes + 0.0.1-SNAPSHOT + war + + + com.baeldung.spring-thymeleaf-attributes + spring-thymeleaf-attributes 0.0.1-SNAPSHOT - war + ../pom.xml + - - com.baeldung.spring-thymeleaf-attributes - spring-thymeleaf-attributes - 0.0.1-SNAPSHOT - ../pom.xml - + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + ${spring.boot.starter.thymeleaf} + + + + org.junit.jupiter + junit-jupiter-engine + ${junit.jupiter.engine.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + org.mockito + mockito-junit-jupiter + ${mockito.version} + test + + + org.junit.jupiter + junit-jupiter-api + ${junit.jupiter.engine.version} + test + + - - - jakarta.servlet - jakarta.servlet-api - provided - - - org.springframework.boot - spring-boot-starter-web - - - org.thymeleaf - thymeleaf-spring6 - ${thymeleaf.spring6.version} - - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.engine.version} - test - - - org.mockito - mockito-core - ${mockito.version} - test - - - org.mockito - mockito-junit-jupiter - ${mockito.version} - test - - - org.junit.jupiter - junit-jupiter-api - ${junit.jupiter.engine.version} - test - + + + + org.springframework.boot + spring-boot-maven-plugin + + + -Dfile.encoding="UTF-8" -Xdebug + -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 + + + + + - - - - - - src/main/resources - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - -Dfile.encoding="UTF-8" -Xdebug - -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 - - - - - - - - com.baeldung.accesing_session_attributes.SpringWebApplicationInitializer - UTF-8 - UTF-8 - UTF-8 - true - true - 5.9.3 - 5.3.1 - 3.1.1.RELEASE - + + com.baeldung.accesing_session_attributes.SpringWebApplicationInitializer + UTF-8 + UTF-8 + UTF-8 + true + true + 5.9.3 + 5.3.1 + 3.1.1.RELEASE + 3.1.1 + \ No newline at end of file diff --git a/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/src/main/java/com/baeldung/accesing_session_attributes/web/SpringWebConfig.java b/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/src/main/java/com/baeldung/accesing_session_attributes/web/SpringWebConfig.java index 00b49ff392..b3cba41aad 100644 --- a/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/src/main/java/com/baeldung/accesing_session_attributes/web/SpringWebConfig.java +++ b/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/src/main/java/com/baeldung/accesing_session_attributes/web/SpringWebConfig.java @@ -1,34 +1,26 @@ package com.baeldung.accesing_session_attributes.web; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ResourceBundleMessageSource; -import org.springframework.web.context.WebApplicationContext; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import org.thymeleaf.spring6.SpringTemplateEngine; import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver; -import org.thymeleaf.spring6.view.ThymeleafViewResolver; import org.thymeleaf.templatemode.TemplateMode; -import org.thymeleaf.web.servlet.JakartaServletWebApplication; @Configuration @EnableWebMvc -public class SpringWebConfig implements WebMvcConfigurer, ApplicationContextAware { +public class SpringWebConfig implements WebMvcConfigurer { // , ApplicationContextAware { - private WebApplicationContext webApplicationContext; - - public SpringWebConfig() { + @Autowired + public SpringWebConfig(SpringResourceTemplateResolver templateResolver) { super(); - } - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.webApplicationContext = (WebApplicationContext) applicationContext; + templateResolver.setPrefix("/WEB-INF/templates/"); + templateResolver.setSuffix(".html"); + templateResolver.setTemplateMode(TemplateMode.HTML); } /* @@ -51,36 +43,4 @@ public class SpringWebConfig implements WebMvcConfigurer, ApplicationContextAwar messageSource.addBasenames("name-analysis"); return messageSource; } - - @Bean - public SpringResourceTemplateResolver templateResolver() { - SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); - templateResolver.setApplicationContext(this.webApplicationContext); - templateResolver.setPrefix("/WEB-INF/templates/"); - templateResolver.setSuffix(".html"); - - templateResolver.setTemplateMode(TemplateMode.HTML); - templateResolver.setCacheable(true); - return templateResolver; - } - - @Bean - public SpringTemplateEngine templateEngine() { - SpringTemplateEngine templateEngine = new SpringTemplateEngine(); - templateEngine.setMessageSource(webApplicationContext); - templateEngine.setTemplateResolver(templateResolver()); - return templateEngine; - } - - @Bean - public ThymeleafViewResolver viewResolver() { - ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); - viewResolver.setTemplateEngine(templateEngine()); - return viewResolver; - } - - @Bean - public JakartaServletWebApplication jakartaServletWebApplication() { - return JakartaServletWebApplication.buildApplication(webApplicationContext.getServletContext()); - } } diff --git a/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/src/main/java/com/baeldung/accesing_session_attributes/web/controllers/NameAnalysisController.java b/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/src/main/java/com/baeldung/accesing_session_attributes/web/controllers/NameAnalysisController.java index 65aa0686a0..55c1c8fa58 100644 --- a/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/src/main/java/com/baeldung/accesing_session_attributes/web/controllers/NameAnalysisController.java +++ b/spring-web-modules/spring-thymeleaf-attributes/accessing-session-attributes/src/main/java/com/baeldung/accesing_session_attributes/web/controllers/NameAnalysisController.java @@ -20,6 +20,7 @@ import com.baeldung.accesing_session_attributes.business.entities.NameAnalysisEn import com.baeldung.accesing_session_attributes.web.beans.SessionNameRequest; import com.baeldung.accesing_session_attributes.web.factories.SessionNameRequestFactory; +import jakarta.servlet.ServletContext; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -27,19 +28,15 @@ import jakarta.servlet.http.HttpServletResponse; public class NameAnalysisController { private NameAnalysisService nameAnalysisService; - private HttpServletRequest request; private SessionNameRequestFactory sessionNameRequestFactory; - private HttpServletResponse response; - private JakartaServletWebApplication jakartaServletWebApplication; + private JakartaServletWebApplication webApp; @Autowired - public NameAnalysisController(JakartaServletWebApplication jakartaServletWebApplication, HttpServletRequest request, HttpServletResponse response, NameAnalysisService nameAnalysisService, SessionNameRequestFactory sessionNameRequestFactory) { + public NameAnalysisController(NameAnalysisService nameAnalysisService, SessionNameRequestFactory sessionNameRequestFactory, ServletContext servletContext) { super(); - this.jakartaServletWebApplication = jakartaServletWebApplication; - this.request = request; - this.response = response; this.nameAnalysisService = nameAnalysisService; this.sessionNameRequestFactory = sessionNameRequestFactory; + this.webApp = JakartaServletWebApplication.buildApplication(servletContext); } @ModelAttribute("nameRequest") @@ -53,22 +50,25 @@ public class NameAnalysisController { } @RequestMapping(value = "/name-analysis", params = { "search" }) - public String performNameAnalysis(final NameRequest nameRequest, final BindingResult bindingResult) { - performNameRequest(nameRequest); + public String performNameAnalysis(final NameRequest nameRequest, final BindingResult bindingResult, HttpServletRequest request, HttpServletResponse response) { + IWebSession webSession = getIWebSession(request, response); + performNameRequest(nameRequest, webSession); return "name-analysis"; } @RequestMapping(value = "/name-analysis/clear") - public String clearNameAnalysis() { - clearAnalysis(); + public String clearNameAnalysis(HttpServletRequest request, HttpServletResponse response) { + IWebSession webSession = getIWebSession(request, response); + clearAnalysis(webSession); return "redirect:/name-analysis"; } @RequestMapping(value = "/name-analysis/remove-history-request", params = { "id" }) - public String removeRequest() { + public String removeRequest(HttpServletRequest request, HttpServletResponse response) { try { + IWebSession webSession = getIWebSession(request, response); final Integer rowId = Integer.valueOf(request.getParameter("id")); - removeRequest(rowId); + removeRequest(rowId, webSession); } catch (Exception e) { e.printStackTrace(); @@ -76,53 +76,49 @@ public class NameAnalysisController { return "redirect:/name-analysis"; } - private void removeRequest(Integer rowId) { - IWebSession session = getIWebSession(); - Object requests = session.getAttributeValue("requests"); - if (rowId != null && requests != null && (requests instanceof List)) { - ((List) requests).remove(rowId.intValue()); + private void removeRequest(Integer rowId, IWebSession webSession) { + if (rowId != null) { + List requests = getRequestsFromSession(webSession); + if (requests != null) { + requests.remove(rowId.intValue()); + } } } - private void performNameRequest(final NameRequest nameRequest) { + private void performNameRequest(final NameRequest nameRequest, IWebSession webSession) { try { CompletableFuture nameAnalysis = this.nameAnalysisService.searchForName(nameRequest); NameAnalysisEntity nameAnalysisEntity = nameAnalysis.get(30, TimeUnit.SECONDS); - sessionRegisterRequest(nameRequest); - sessionRegisterAnalysis(nameAnalysisEntity); - sessionClearAnalysisError(); + sessionRegisterRequest(nameRequest, webSession); + sessionRegisterAnalysis(nameAnalysisEntity, webSession); + sessionClearAnalysisError(webSession); } catch (Exception e) { e.printStackTrace(); - sessionSetAnalysisError(nameRequest); + sessionSetAnalysisError(nameRequest, webSession); } } - private void sessionClearAnalysisError() { - IWebSession session = getIWebSession(); - session.setAttributeValue("analysisError", null); + private void sessionClearAnalysisError(IWebSession webSession) { + webSession.removeAttribute("analysisError"); } - private void sessionSetAnalysisError(NameRequest nameRequest) { - IWebSession session = getIWebSession(); - session.setAttributeValue("analysisError", nameRequest); + private void sessionSetAnalysisError(NameRequest nameRequest, IWebSession webSession) { + webSession.setAttributeValue("analysisError", nameRequest); } - private void clearAnalysis() { - IWebSession session = getIWebSession(); - session.setAttributeValue("lastAnalysis", null); + private void clearAnalysis(IWebSession webSession) { + webSession.removeAttribute("lastAnalysis"); } - private void sessionRegisterAnalysis(NameAnalysisEntity analysis) { - IWebSession session = getIWebSession(); - session.setAttributeValue("lastAnalysis", analysis); + private void sessionRegisterAnalysis(NameAnalysisEntity analysis, IWebSession webSession) { + webSession.setAttributeValue("lastAnalysis", analysis); } - private void sessionRegisterRequest(NameRequest nameRequest) { - IWebSession session = getIWebSession(); - session.setAttributeValue("lastRequest", nameRequest); + private void sessionRegisterRequest(NameRequest nameRequest, IWebSession webSession) { + webSession.setAttributeValue("lastRequest", nameRequest); SessionNameRequest sessionNameRequest = sessionNameRequestFactory.getInstance(nameRequest); - List requests = getRequestsFromSession(session); + List requests = getRequestsFromSession(webSession); requests.add(0, sessionNameRequest); } @@ -136,8 +132,8 @@ public class NameAnalysisController { return (List) requests; } - private IWebSession getIWebSession() { - IServletWebExchange webExchange = this.jakartaServletWebApplication.buildExchange(request, response); - return webExchange.getSession(); + private IWebSession getIWebSession(HttpServletRequest request, HttpServletResponse response) { + IServletWebExchange exchange = webApp.buildExchange(request, response); + return exchange == null ? null : exchange.getSession(); } }