Spring框架:第九章:Spring整合Web

简介: Spring框架:第九章:Spring整合Web

Spring整合Web

在web工程中添加Spring的jar包。

Spring的核心包

spring-beans-4.0.0.RELEASE.jar

spring-context-4.0.0.RELEASE.jar

spring-core-4.0.0.RELEASE.jar

spring-expression-4.0.0.RELEASE.jar

aop包

spring-aop-4.0.0.RELEASE.jar

spring-aspects-4.0.0.RELEASE.jar

com.springsource.org.aopalliance-1.0.0.jar

com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar

JDBC-ORM包

spring-jdbc-4.0.0.RELEASE.jar

spring-orm-4.0.0.RELEASE.jar

spring-tx-4.0.0.RELEASE.jar

Spring的web整合包

spring-web-4.0.0.RELEASE.jar

测试包

spring-test-4.0.0.RELEASE.jar

整合Spring和Web容器分两个步骤:

1、导入spring-web-4.0.0.RELEASE.jar

2、在web.xml配置文件中配置org.springframework.web.context.ContextLoaderListener监听器监听ServletContext的初始化

3、在web.xml配置文件中配置contextConfigLocation上下文参数。配置Spring配置文件的位置,以用于初始化Spring容器

在web.xml中配置

  <!-- needed for ContextLoaderListener -->
  <!--配置SpringIOC容器的配置文件路径-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>location</param-value>
  </context-param>
  <!-- Bootstraps the root web application context before servlet initialization -->
  <!--这个监听器会在web工程启动时候创建Spring IOC 容器。-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

这个监听器会在web工程启动时候读取spring的配置文件,做初始化Spring IOC 容器的操作。

这个Spring IOC 容器对象保存到ServletContext域对象中我们就可以使用Spring IOC容器对象。

我们可以深入进去看看底层源码:

public class ContextLoaderListener extends ContextLoader implements ServletContextListener

可以看到它实现了ServletContextListener,ServletContextListener监听servletContext对象的创建和销毁

在ServletContextListener里可以看到有contextInitialized和contextDestroyed

  // Method descriptor #5 (Ljavax/servlet/ServletContextEvent;)V
  public abstract void contextInitialized(javax.servlet.ServletContextEvent arg0);
  // Method descriptor #5 (Ljavax/servlet/ServletContextEvent;)V
  public abstract void contextDestroyed(javax.servlet.ServletContextEvent arg0);

contextInitialized是servletContext对象的创建

contextDestroyed是servletContext对象的销毁

servletContext对象的创建在web工程启动的时候创建,web工程启动的时候需要有一个springIOC容器

可以看看我们之前的代码@ContextConfiguration(locations = “classpath:applicationContext.xml”)或者

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“applicationContext.xml”);都创建了Spring的IOC容器对象

在创建了Spring的IOC容器对象时我们需要Spring的配置文件:applicationContext.xml

我们在web.xml中配置

  <!--配置SpringIOC容器的配置文件路径-->
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>

下面这个监听器一启动就会读取上面的参数:配置文件路径

<!--这个监听器会在web工程启动时候创建Spring IOC 容器。-->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>

我们可以使用DeBug看源码ContextLoaderListener的initWebApplicationContext(event.getServletContext());找到ContextLoader中initWebApplicationContext方法

createWebApplicationContext创建一个Spring容器对象,可以看到它有值了

可以继续往下看configureAndRefreshWebApplicationContext配置和刷新Spring容器

我们进入它的方法体内找到以下代码

String configLocationParam = sc.getInitParameter(CONFIG_LOCATION_PARAM);

它来读取web.xml中<param-name>contextConfigLocation</param-name>的值,获得初始化参数,得到我们自己写的<param-value>classpath:applicationContext.xml</param-value>

把它放到Spring容器中

执行到wac.refresh();位置就开始刷新,执行后要等上一段时间,执行完这段代码后,我们的配置文件applicationContext.xml已经全部加载好了,bean对象也创建好了。

回到initWebApplicationContext方法中执行到

servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

其中this.context

它把容器对象放到了servletContext域对象中,使用在web工程中只要获取到servletContext对象就可以在servletContext对象中获取spring容器对象

这就是在web.xml中配置的底层原理

我们如何获取到spring容器对象也就是WebApplicationContext呢?

获取WebApplicationContext上下文对象的方法如下:

方法一(不推荐):

getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

这一个好理解,前面我们容器对象放到了servletContext域对象中,现在获取就好了,不过后面的一长串不好记忆,所以不推荐

方法二(推荐):

WebApplicationContextUtils.getWebApplicationContext(getServletContext())

使用这种的就好些了,不用我们记忆,而且它的底层和方法一是一样的,也是获取getAttribute

相关文章
|
23天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
38 0
|
19天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
113 45
|
27天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
43 1
Spring 框架:Java 开发者的春天
|
15天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
23 3
|
14天前
|
前端开发 JavaScript 开发工具
从框架到现代Web开发实践
从框架到现代Web开发实践
25 1
|
18天前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
24 3
|
20天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
37 2
|
20天前
|
前端开发 JavaScript
Bootstrap Web 前端 UI 框架
Bootstrap 是快速开发 Web 应用程序的前端工具包。
30 3
|
19天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
77 1

热门文章

最新文章

下一篇
无影云桌面