Spring框架如何与Web应用环境无缝集成?

2026-05-06 06:051阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计799个文字,预计阅读时间需要4分钟。

Spring框架如何与Web应用环境无缝集成?

Spring与Web环境集成

1.ApplicationContext应用上下文获取方式

- 应用上下文文本获取:通过`new ClassPathXmlApplicationContext(Spring配置文件)`方式获取,获取到的应用上下文对象是Spring容器中Bean的工厂。 - 每次从容器中获取Bean时,都会通过`new ClassPathXmlApplicationContext`创建新的Spring容器实例。

Spring与Web环境集成

1. ApplicationContext应用上下文获取方式

应用上下文对象是通过 new ClassPathXmlApplicationContext(Spring配置文件) 方式获取的,但是每次从容器中获取Bean时都要编写 new ClassPathXmlApplicationContext(Spring配置文件),这样的弊端是配置文件加载多次,应用上下文对象创建多次。

在Web项目中,可以使用ServletContextLIstener监听Web应用的启动,我们可以在Web应用启动时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,再将其存储到最大的域servletContext域中,这样就可以在任意位置获取应用上下文ApplicationContext对象。

2. 创建案例

1、创建监听器

Spring框架如何与Web应用环境无缝集成?

package com.ntect.listener; ​ import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; ​ import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; ​ public class ContextLoaderListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { ​ ServletContext servletContext = sce.getServletContext(); //读取web.xml中的全局参数 String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation"); ApplicationContext app = new ClassPathXmlApplicationContext(contextConfigLocation); //将Spring的应用上下文对象存储到ServletContext域中 ​ servletContext.setAttribute("app",app); System.out.println("spring容器创建完毕...."); } ​ public void contextDestroyed(ServletContextEvent sce) { ​ } }

2、创建获取applicationContext对象的工具类

package com.ntect.listener; ​ import org.springframework.context.ApplicationContext; ​ import javax.servlet.ServletContext; ​ public class WebApplicationContextUtils { ​ public static ApplicationContext getWebApplicationContext(ServletContext servletContext) { return (ApplicationContext)servletContext.getAttribute("app"); } }

3、创建servlet的测试类

package com.ntect.web; ​ import com.ntect.listener.WebApplicationContextUtils; import com.ntect.service.UserService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; ​ import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> ​ <!-- 全局初始化参数--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>applicationContext.xml</param-value> </context-param> ​ <!-- 配置监听器--> <listener> <listener-class>com.ntect.listener.ContextLoaderListener</listener-class> </listener> <!-- 配置测试用的servlet--> <servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.ntect.web.UserServlet</servlet-class> </servlet> ​ <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/userServlet</url-pattern> </servlet-mapping> ​ </web-app>

5、测试

浏览器访问

localhost:8080/userServlet

控制台输出

3. Spring提供获取应用上下文的工具

上面地分析只是为了方便理解,不用手动实现,Spring提供了一个监听器ContextLoaderListener就是对上述功能的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具WebApplicationContextUtils获取应用上下文对象。

需要做两件事:

1、在web.xml中配置ContextLoaderListener监听器(导入spring-web坐标)

2、使用WebApplicationContextUtils获得应用上下文对象ApplicationContext

3.1 导入Spring集成web的坐标

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.16</version> </dependency>

3.2 配置ContextLoaderListener监听器

<!-- 全局初始化参数--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> ​ <!-- 配置监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

3.3 使用WebApplicationContextUtils获得应用上下文对象ApplicationContext

ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext); UserService userService = app.getBean(UserService.class);

本文共计799个文字,预计阅读时间需要4分钟。

Spring框架如何与Web应用环境无缝集成?

Spring与Web环境集成

1.ApplicationContext应用上下文获取方式

- 应用上下文文本获取:通过`new ClassPathXmlApplicationContext(Spring配置文件)`方式获取,获取到的应用上下文对象是Spring容器中Bean的工厂。 - 每次从容器中获取Bean时,都会通过`new ClassPathXmlApplicationContext`创建新的Spring容器实例。

Spring与Web环境集成

1. ApplicationContext应用上下文获取方式

应用上下文对象是通过 new ClassPathXmlApplicationContext(Spring配置文件) 方式获取的,但是每次从容器中获取Bean时都要编写 new ClassPathXmlApplicationContext(Spring配置文件),这样的弊端是配置文件加载多次,应用上下文对象创建多次。

在Web项目中,可以使用ServletContextLIstener监听Web应用的启动,我们可以在Web应用启动时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,再将其存储到最大的域servletContext域中,这样就可以在任意位置获取应用上下文ApplicationContext对象。

2. 创建案例

1、创建监听器

Spring框架如何与Web应用环境无缝集成?

package com.ntect.listener; ​ import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; ​ import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; ​ public class ContextLoaderListener implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { ​ ServletContext servletContext = sce.getServletContext(); //读取web.xml中的全局参数 String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation"); ApplicationContext app = new ClassPathXmlApplicationContext(contextConfigLocation); //将Spring的应用上下文对象存储到ServletContext域中 ​ servletContext.setAttribute("app",app); System.out.println("spring容器创建完毕...."); } ​ public void contextDestroyed(ServletContextEvent sce) { ​ } }

2、创建获取applicationContext对象的工具类

package com.ntect.listener; ​ import org.springframework.context.ApplicationContext; ​ import javax.servlet.ServletContext; ​ public class WebApplicationContextUtils { ​ public static ApplicationContext getWebApplicationContext(ServletContext servletContext) { return (ApplicationContext)servletContext.getAttribute("app"); } }

3、创建servlet的测试类

package com.ntect.web; ​ import com.ntect.listener.WebApplicationContextUtils; import com.ntect.service.UserService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; ​ import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xmlns.jcp.org/xml/ns/javaee xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> ​ <!-- 全局初始化参数--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>applicationContext.xml</param-value> </context-param> ​ <!-- 配置监听器--> <listener> <listener-class>com.ntect.listener.ContextLoaderListener</listener-class> </listener> <!-- 配置测试用的servlet--> <servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.ntect.web.UserServlet</servlet-class> </servlet> ​ <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/userServlet</url-pattern> </servlet-mapping> ​ </web-app>

5、测试

浏览器访问

localhost:8080/userServlet

控制台输出

3. Spring提供获取应用上下文的工具

上面地分析只是为了方便理解,不用手动实现,Spring提供了一个监听器ContextLoaderListener就是对上述功能的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具WebApplicationContextUtils获取应用上下文对象。

需要做两件事:

1、在web.xml中配置ContextLoaderListener监听器(导入spring-web坐标)

2、使用WebApplicationContextUtils获得应用上下文对象ApplicationContext

3.1 导入Spring集成web的坐标

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.16</version> </dependency>

3.2 配置ContextLoaderListener监听器

<!-- 全局初始化参数--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> ​ <!-- 配置监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

3.3 使用WebApplicationContextUtils获得应用上下文对象ApplicationContext

ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext); UserService userService = app.getBean(UserService.class);