栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring与Web环境集成

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring与Web环境集成

Spring与Web环境集成 1. ApplicationContext应用上下文获取方式

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

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

2. 创建案例

1、创建监听器

 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.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 ​
 public class UserServlet extends HttpServlet {
 ​
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         //ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
         ServletContext servletContext = this.getServletContext();
         //ApplicationContext app = (ApplicationContext) servletContext.getAttribute("app");
         ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
         UserService userService = app.getBean(UserService.class);
         userService.save();
     }
 }

4、配置web.xml文件

 
 
     
         contextConfigLocation
         applicationContext.xml
     
     
         com.ntect.listener.ContextLoaderListener
     
     
 
     
         UserServlet
         com.ntect.web.UserServlet
     
         UserServlet
         /userServlet
     

5、测试

浏览器访问

 http://localhost:8080/userServlet

控制台输出

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

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

需要做两件事:

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

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

3.1 导入Spring集成web的坐标
 
     org.springframework
     spring-web
     5.3.16

3.2 配置ContextLoaderListener监听器

     
         contextConfigLocation
         classpath:applicationContext.xml
     
     
         org.springframework.web.context.ContextLoaderListener
     
3.3 使用WebApplicationContextUtils获得应用上下文对象ApplicationContext
ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
UserService userService = app.getBean(UserService.class);

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874488.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号