概述
SSM框架
MyBatis
MyBatis简介
什么是MyBatis
- 一款持久层框架
- MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程
- MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
- 可以通过Maven仓库获得MyBatis
持久化
- 持久化是将程序数据在持久状态和瞬时状态间转换的机制。
- 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。
持久层
- 完成持久化工作的代码块 . ----> dao层 【DAO (Data Access Object) 数据访问对象】
- 持久化的实现过程则大多通过各种关系数据库来完成
为什么需要MyBatis
- Mybatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取出数据
- 传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率
- MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射
- MyBatis的优点
- 简单易学 只需安装两个jar文件和配置几个SQL映射文件
- 灵活 sql语句写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- **解除sql与程序代码的耦合 ** 通过提供DAO层,将业务逻辑和数据访问逻辑分离,sql和代码的分离,提高了可维护性。
- 提供xml标签,支持编写动态sql
- 重要的一点,用的人多,生态比较好
一个MyBatis程序
-
创建一个普通的maven项目
-
导入依赖
<dependencies> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.14</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency>
-
编写MyBatis核心配置文件
mybatis-config.xml在resources文件中
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--每一个Mpper,XML都需要Mybatis核心配置文件中注册--> <mappers> <!--<mapper resource="com/tqw_zg/dao/UserMapper.xml"/>--> <!--<mapper class="com.tqw_zg.dao.UserMapper"/>--> <package name="com.tqw_zg.dao"/> </mappers> </configuration>
-
编写MyBatis工具类
//sqlSessionFactory --> sqlSession public class MybatisUtils { static SqlSessionFactory sqlSessionFactory = null; static { try { //使用Mybatis第一步 :获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例. // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
-
dao接口
public interface UserDao { //获取全部用户 List<User> getUserList(); //模糊查询一个用户 List<User> getUserLike(String str); //根据ID查询用户 User getUserById(int id); //添加一个用户 int addUser(User user); int addUser2(Map<String,Object> map); //修改用户 int updateUser(User user); //删除一个用户 int deleteUser(int id); }
-
接口实现类
UserMapper.xml在dao文件下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.tqw_zg.dao.UserDao"> <select id="getUserList" resultType="com.tqw_zg.pojo.User"> select * from mybatis.user </select> <select id="getUserById" resultType="com.tqw_zg.pojo.User" parameterType="int"> select * from mybatis.user where id=#{id} </select> <insert id="addUser" parameterType="com.tqw_zg.pojo.User"> insert into mybatis.user (id, name, pwd) values (#{id}, #{name}, #{pwd}) </insert> <update id="updateUser" parameterType="com.tqw_zg.pojo.User"> update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id} </update> <delete id="deleteUser" parameterType="int"> delete from mybatis.user where id=#{id} </delete> </mapper>
-
配置类还可以这样写
db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=123456
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--核心配置文件--> <configuration> <properties resource="db.properties"/> <!--可以给实体类起别名--> <!--<typeAliases>--> <!--<typeAlias type="com.tqw_zg.pojo.User" alias="User"/>--> <!--</typeAliases>--> <typeAliases> <package name="com.tqw_zg.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--每一个Mpper,XML都需要Mybatis核心配置文件中注册--> <mappers> <!--<mapper resource="com/tqw_zg/dao/UserMapper.xml"/>--> <!--<mapper class="com.tqw_zg.dao.UserMapper"/>--> <package name="com.tqw_zg.dao"/> </mappers> </configuration>
-
测试
@Test public void test(){ //1.获取SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //2.执行SQL // 方式一:getMapper UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); for (User user : userList) { System.out.println(user); } //关闭sqlSession sqlSession.close(); }
注意:增删改一定要提交事务
sqlSession.commit();
-
万能Map
假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应该考虑使用Map!
UserMapper接口 //用万能Map插入用户 public void addUser2(Map<String,Object> map); UserMapper.xml <!--对象中的属性可以直接取出来 传递map的key--> <insert id="addUser2" parameterType="map"> insert into user (id,name,pwd) values (#{userid},#{username},#{userpassword}) </insert> 测试 @Test public void test3(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("userid",4); map.put("username","王虎"); map.put("userpassword",789); mapper.addUser2(map); //提交事务 sqlSession.commit(); //关闭资源 sqlSession.close(); }
-
模糊查询 ?
Java代码执行的时候,传递通配符% %
List userList = mapper.getUserLike("%李%");
在sql拼接中使用通配符
select * from user where name like “%”#{value}"%"
-
配置解析
MyBatis默认的事务管理器就是JDBC ,连接池:POOLED
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQ2cnN3g-1633929723333)(C:UserszgAppDataRoamingTyporatypora-user-images1633577279151.png)]
-
解决属性名和字段名不一致的问题
-
起别名
pwd as password
-
结果映射集
<resultMap id="UserMap" type="com.tqw_zg.pojo.User"> <!--column数据库中的字段,property实体类中的属性--> <result column="id" property="id"></result> <result column="name" property="name"></result> <result column="pwd" property="password"></result> </resultMap> <select id="getUserList" resultMap="UserMap"> select * from USER where id=${id} </select>
-
-
分页
使用Limit分页
SELECT * from user limit startIndex,pageSize SELECT * from user limit 3; [0,n]
代码实现
接口 //分页 List<User> getUserByLimit(Map<String,Integer> map); Mapper.xml <!--分页查询--> <select id="getUserByLimit" parameterType="map" resultMap="UserMap"> select * from user limit #{startIndex},#{pageSize} </select> 测试 @Test public void getUserByLimit(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("startIndex",1); map.put("pageSize",2); List<User> list = mapper.getUserByLimit(map); for (User user : list) { System.out.println(user); } }
-
使用注解开发
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P3nsr8qh-1633929723336)(C:UserszgAppDataRoamingTyporatypora-user-images1633577710334.png)]
注解在接口上实现
@Select("select * from user") List<User> getUsers();
需要在核心配置文件中绑定接口
<mappers> <mapper class="com.kuang.dao.UserMapper"/> </mappers>
本质:反射机制实现
底层:动态代理
方法存在多个参数,所有的参数前面必须加上@Param(“id”)注解
基本类型的参数或者String类型,需要加上@Param()
#{} 和 ${}
#{}可以很大程度防止sql注入
${}不可以防止sql注入
-
多对一
多个学生关联一个老师 association
<!--按照结果进行查询--> <select id="getStudent2" resultMap="StudentTeacher2"> select s.id sid , s.name sname, t.name tname from student s,teacher t where s.tid=t.id </select> <!--结果封装,将查询出来的列封装到对象属性中--> <resultMap id="StudentTeacher2" type="student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <association property="teacher" javaType="teacher"> <result property="name" column="tname"></result> </association> </resultMap>
-
一对多
一个老师管理多个学生 collection
<!--按结果嵌套查询--> <select id="getTeacher" resultMap="StudentTeacher"> SELECT s.id sid, s.name sname,t.name tname,t.id tid FROM student s, teacher t WHERE s.tid = t.id AND tid = #{tid} </select> <resultMap id="StudentTeacher" type="Teacher"> <result property="id" column="tid"/> <result property="name" column="tname"/> <!--复杂的属性,我们需要单独处理 对象:association 集合:collection javaType=""指定属性的类型! 集合中的泛型信息,我们使用ofType获取 --> <collection property="students" ofType="Student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <result property="tid" column="tid"/> </collection> </resultMap>
-
动态SQL
-
缓存
Spring
-
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式 .
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O613GwcJ-1633929723337)(C:UserszgAppDataRoamingTyporatypora-user-images1633592851141.png)]
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
- 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
- Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
- Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能 , 集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支持 AOP的对象。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。
- Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
- Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
- Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
- Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
-
IOC本质
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Kjl6f3I-1633929723338)(file:///C:/Users/zg/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]
IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。
Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象。
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6da2CG78-1633929723340)(data:image/png;base64,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Y37//fd58+YRiwn6WnYWhD+Uj4CowiJRnr9ang72wlx/++23M2bMIFASTIn7hIYU3U9+U+306dO//vrrbdu2saDW9tFVq65batsFRnUDq6rEAE9G9xAnlatAYulADgrxvkFi3+XLlxkp/c8hHjlgEhA/DATuAXbv3o1vJp2xoy74QiaNySF0qpsb8YW9e/dmPUEk/fnnn9V3CvXdpl1GoYajh5S/XVI8EGfOnFGP7R44cKCWlAVHELUm4v/yyy/0jZROnToNGjQozzXBkwonHmZ92LBhHLj//Oc/vI84XlhJTnuthA4OCub74sWLyOG77747bdq01157jcN9+PBh5hCB5GhqRQWhzFOCpJHYh297+eWXX331VTxcYGDgrFmziIladoHx8fFR3xmaOHHiv/71r379+tnZ2RER9u7dGxAQQPQna9y4ca1atcoRO4oI5HnBggWMKwdffPEFQb9wVeRvYdGA5rVr145JwGfgztFy0pkKwmvr1q3xsmTFxsauX79eeURmr3379kOHDlU///brr78ifqo2/OW///1vbTxZEHaXLl2qL/PoIN7JycmsXQy9uCIhIYG5ZblDc3379n3jjTfoPyayTEkjoI62traenp4cWdQRX8j6gAOnZWfnxo0bJ0+ePH78OIvIVatW4SPfeeedtWvXqkWSIAhQgqQRatSowdu7S5cuRO0JEyY0adIkPDycN62WrePs2bNr1qwJDQ1FVPi7efPm4OBgLU9HXFxcRkZG06ZNCfS4CvXrLenp6QR6HE/btm0RRcxoVFRUociSCjQ4MPWxJWpBl5BDLTvr1tMWuXB3dzc1NS3EIL5lyxZ1j5K2nRchISF0kklmbnF49FNvnQmvWA1cl5+fH0oTExOjt+yE3ebNm2NHUEpmW28vUFNvb29tPFmQgjgVyoVi5vbIkSMcZeaKPmupWeB+8LJ0acSIEc888wzSyBGnaS27TPL0009zCFhisjrEFE6ePJlNLS8vWDIGBQVt2rRp7ty5n3322W+//fagj1sShCeSknWHKvEU+2JkZIRGOjs7E5HVJTv1JQTA+UVERNAuiWjbjh07eGMbGxuzWPbw8EDq0L/IyEhMBjsmJiayWbNmTRsbG6q9qvvy4s2bNwn6pPOX8r169aIAisLrevXqOWXdDXvp0iVEDunK/UCNy5cvMwq0FomtVq0acktPGBrd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)]
-
HelloSpring
Hello实体类
public class Hello { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void show(){ System.out.println("Hello,"+ name ); } }
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--bean就是java对象 , 由Spring创建和管理--> <bean id="hello" class="com.kuang.pojo.Hello"> <property name="name" value="Spring"/> </bean> </beans>
测试
@Test public void test(){ //解析beans.xml文件 , 生成管理相应的Bean对象 ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); //getBean : 参数即为spring配置文件中bean的id . Hello hello = (Hello) context.getBean("hello"); hello.show(); }
结论
- Hello 对象是谁创建的 ? 【hello 对象是由Spring创建的
- Hello 对象的属性是怎么设置的 ? hello 对象的属性是由Spring容器设置的
这个过程就叫控制反转 :
-
控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的
-
反转 : 程序本身不创建对象 , 而变成被动的接收对象 .
依赖注入 : 就是利用set方法来进行注入的.
IOC是一种编程思想,由主动的编程变成被动的接收
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="MysqlImpl" class="com.kuang.dao.impl.UserDaoMySqlImpl"/> <bean id="OracleImpl" class="com.kuang.dao.impl.UserDaoOracleImpl"/> <bean id="ServiceImpl" class="com.kuang.service.impl.UserServiceImpl"> <!--注意: 这里的name并不是属性 , 而是set方法后面的那部分 , 首字母小写--> <!--引用另外一个bean , 不是用value 而是用 ref--> <property name="userDao" ref="OracleImpl"/> </bean> </beans>
-
IoC创建对象
无参构造
<bean id="user" class="com.kuang.pojo.User"> <property name="name" value="kuangshen"/> </bean>
在调用show方法之前,User对象已经通过无参构造初始化了!
有参构造
<!-- 第一种根据index参数下标设置 --> <bean id="userT" class="com.kuang.pojo.UserT"> <!-- index指构造方法 , 下标从0开始 --> <constructor-arg index="0" value="kuangshen2"/> </bean> <!-- 第二种根据参数名字设置 --> <bean id="userT" class="com.kuang.pojo.UserT"> <!-- name指参数名 --> <constructor-arg name="name" value="kuangshen2"/> </bean> <!-- 第三种根据参数类型设置 --> <bean id="userT" class="com.kuang.pojo.UserT"> <constructor-arg type="java.lang.String" value="kuangshen2"/> </bean>
在配置文件加载的时候。其中管理的对象都已经初始化了!
只要在配置文件的对象都被初始化
-
Spring配置
别名
alias 设置别名 , 为bean设置别名 , 可以设置多个别名
Bean的配置
SpringMVC
-
特点
- 轻量级,简单易学
- 高效 , 基于请求响应的MVC框架
- 与Spring兼容性好,无缝结合
- 约定优于配置
- 功能强大:RESTful、数据验证、格式化、本地化、主题等
- 简洁灵活
Spring的web框架围绕DispatcherServlet [ 调度Servlet ] 设计。DispatcherServlet的作用是将请求分发到不同的处理器。
-
Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能**,**DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。
-
SpringMVC的原理
当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
-
简单分析执行流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46IxKkgR-1633929723342)(C:UserszgAppDataRoamingTyporatypora-user-images1633871398846.png)]
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
我们假设请求的url为 : http://localhost:8080/SpringMVC/hello
如上url拆分成三部分:** - HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
- HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
- HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
- Handler让具体的Controller执行。
- Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
- HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
- DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
- 视图解析器将解析的逻辑视图名传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户。
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
erServlet** [ 调度Servlet ] 设计。DispatcherServlet的作用是将请求分发到不同的处理器。
-
Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能**,**DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。
-
SpringMVC的原理
当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
-
简单分析执行流程
[外链图片转存中…(img-46IxKkgR-1633929723342)]
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
我们假设请求的url为 : http://localhost:8080/SpringMVC/hello
如上url拆分成三部分:** - HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
- HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
- HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
- Handler让具体的Controller执行。
- Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
- HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
- DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
- 视图解析器将解析的逻辑视图名传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户。
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
最后
以上就是闪闪奇迹为你收集整理的SSM框架SSM框架的全部内容,希望文章能够帮你解决SSM框架SSM框架所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复