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();
}
}