吃透 Spring 系列—Web部分

目录

[◆ Spring整合web环境](#◆ Spring整合web环境)

[- Javaweb三大组件及环境特点](#- Javaweb三大组件及环境特点)

[- Spring整合web环境的思路及实现](#- Spring整合web环境的思路及实现)

[- Spring的web开发组件spring-web](#- Spring的web开发组件spring-web)

[◆ web层MVC框架思想与设计思路](#◆ web层MVC框架思想与设计思路)


◆ Spring整合web环境

- Javaweb三大组件及环境特点

在Java语言范畴内,web层框架都是基于Javaweb基础组件完成的

|----------|-------------------------|----------------------------------------------------------------------------------------------------------------------------|
| 组件 | 作用 | 特点 |
| Servlet | 服务端小程序,负责接收客户端请求并作出响应的 | 单例对象,默认第一次访问创建,可以通过配置指定服务器启动就创建,Servlet创建完毕会执行初始化init方法。每个Servlet有一个service方法,每次访问都会 执行service方法,但是缺点是一个业务功能就需要配置一个Servlet |
| Filter | 过滤器,负责对客户端请求进行过滤操作的 | 单例对象,服务器启动时就创建,对象创建完毕执行init方法,对客户端的请求 进行过滤,符合要求的放行,不符合要求的直接响应客户端,执行过滤的核心 方法doFilter |
| Listener | 监听器,负责对域对象的创建和属性变化进行监听的 | 根据类型和作用不同,又可分为监听域对象创建销毁和域对象属性内容变化的,根据监听的域不同,又可以分为监听Request域的,监听Session域的,监听ServletContext域的 |

- Spring整合web环境的思路及实现

在进行Java开发时要遵循三层架构+MVC,Spring操作最核心的就是Spring容器,web层需要注入Service,service层需要注入Dao(Mapper),web层使用Servlet技术充当的话,需要在Servlet中获得Spring容器

web层代码如果都去编写创建AnnotationConfigApplicationContext的代码,那么配置类重复被加载了,Spring容器也重复被创建了,不能每次想从容器中获得一个Bean都得先创建一次容器,这样肯定是不允许。

所以,现在的诉求很简单,如下:

● ApplicationContext创建一次,配置类加载一次;

● 最好web服务器启动时,就执行第1步操作,后续直接从容器中获取Bean使用即可;

● ApplicationContext的引用需要在web层任何位置都可以获取到。

针对以上诉求给出解决思路,如下:

● 在ServletContextListener的contextInitialized方法中执行ApplicationContext的创建。或在Servlet的init方法中执行ApplicationContext的创建,并给Servlet的load-on-startup属性一个数字值,确保服务器启动Servlet就创建;

● 将创建好的ApplicationContext存储到ServletContext域中,这样整个web层任何位置就都可以获取到了

- Spring的web开发组件spring-web

开发如下:

先导入Spring-web的坐标:

在web.xml中去配置ContextLoaderListener,并指定配置文件的位置

在Servlet中直接使用

如果核心配置类使用的是注解形式的,那么Spring容器AnnotationConfigWebApplicationContext,如下配置方式

◆ web层MVC框架思想与设计思路

Java程序员在开发一般都是MVC+三层架构,MVC是web开发模式,传统的Javaweb技术栈实现的MVC如下

原始Javaweb开发中,Servlet充当Controller的角色,Jsp充当View角色,JavaBean充当模型角色,后期Ajax异步流行后,在加上现在前后端分离开发模式成熟后,View就被原始Html+Vue替代。原始Javaweb开发中,Service充当Controller有很多弊端,显而易见的有如下几个:

|------------------------------------------|------------------------------------------------|
| Servlet作为Controller****的问题 | 解决思路****和方案 |
| 每个业务功能请求都对应一个Servlet | 根据业务模块去划分Controller |
| 每个Servlet的业务操作太繁琐 | 将通用的行为,功能进行抽取封装 |
| Servlet获得Spring容器的组件只能通过客户端代码去获取,不能优雅的整合 | 通过Spring的扩展点,去封装一个框架,从原有的Servlet完全接 手过来web层的业务 |

负责共有行为的Servlet称之为前端控制器,负责业务行为的JavaBean称之为控制器Controller

**来源:**黑马程序员新版Spring零基础入门到精通,一套搞定spring全套视频教程(含实战源码)

相关推荐
VX:Fegn08953 小时前
计算机毕业设计|基于ssm + vue超市管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·课程设计
徐徐同学4 小时前
cpolar为IT-Tools 解锁公网访问,远程开发再也不卡壳
java·开发语言·分布式
Mr.朱鹏4 小时前
Nginx路由转发案例实战
java·运维·spring boot·nginx·spring·intellij-idea·jetty
白露与泡影6 小时前
2026版Java架构师面试题及答案整理汇总
java·开发语言
历程里程碑6 小时前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
qq_229058017 小时前
docker中检测进程的内存使用量
java·docker·容器
我真的是大笨蛋7 小时前
InnoDB行级锁解析
java·数据库·sql·mysql·性能优化·数据库开发
钦拆大仁7 小时前
Java设计模式-单例模式
java·单例模式·设计模式
小手cool7 小时前
在保持数组中对应元素(包括负数和正数)各自组内顺序不变的情况下,交换数组中对应的负数和正数元素
java
笨手笨脚の7 小时前
深入理解 Java 虚拟机-04 垃圾收集器
java·jvm·垃圾收集器·垃圾回收