入职两周,对SSM框架进行了学习,简单梳理一下我所知道的知识,简单对整个框架各层的作用进行一些分析、探讨。
SSM:Spring、Spring MVC、Mybaits
三种框架
1.Spring
Spring是一个基于IOC(反转控制)和AOP(面向切面编程)的结构J2EE系统的框架。
AOP 即 Aspect Oriented Program 面向切面编程。首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务,所谓的周边功能,比如性能统计,日志,事务管理等等。
2.Spring MVC
MVC是一种很流行的框架,把复杂的web应用分成三个部分:Model(模型)、View(视图)、Controller(控制器)。其中,Model为应用程序核心,用于保存数据;View为显示部分,通过联系后台的数据生成对应的用户界面;Controller用于处理模型和视图之间的数据交互。
Spring MVC,是Spring的一个子框架,拥有Spring的特性,如依赖注入。简单来说,即使用了MVC架构模式的思想,将web层进行功能划分,框架的目的就是帮助我们简化开发。
3.Mybaits
平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还需操作Connection,Statement, ResultSet,这些其实只是手段的辅助类。 不仅如此,访问不同的表,还会写很多雷同的代码,显得繁琐和枯燥。
那么用了Mybatis之后,只需要自己提供SQL语句,其他的工作,诸如建立连接,Statement, JDBC相关异常处理等等都交给Mybatis去做了,那些重复性的工作Mybatis也给做掉了,我们只需要关注在增删改查等操作层面上,而把技术细节都封装在了我们看不见的地方。
请求-响应流程
以简单的Maven风格的SSM项目为例
用户发送url请求,在核心控制器拿到请求后进行路由分发,通过不同路径分发到不同的Controller层,Controller层根据不同路径执行Service层的不同路由函数,每个路由函数通过Mapper层执行不同的sql返回对应的数据对象,最后在Controller层将数据和对应的页面匹配后完成响应。
具体流程如下
整个流程中有三个重要的配置文件
web.xml spring-mvc.xml application.xml
1.web.xml
每个web项目都会有,关联整个项目的配置
-
监听器
-
提供spring、mybaits配置文件路径
-
提供spring-mvc配置文件路径、核心控制器
<!-- spring的配置文件--> <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> <!-- spring mvc核心:分发servlet --> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- spring mvc的配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
2.spring-mvc.xml
-
扫描Controller,让Spring进行管理
-
提供注解驱动,进行路由分发
-
视图定位、解析
<context:annotation-config/> <context:component-scan base-package="com.how2java.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <mvc:annotation-driven /> <mvc:default-servlet-handler /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
3.applicationCotext.xml
-
扫描Service,让Spring进行管理
-
配置数据库
-
扫描Mapper和对应xml文件,配置DAO接口,让Spring进行管理
<context:annotation-config /> <context:component-scan base-package="com.how2java.service" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>admin</value> </property> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="typeAliasesPackage" value="com.how2java.pojo" /> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:com/how2java/mapper/*.xml"/> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <!--使用下面的方式配置参数,一行配置一个 --> <value> </value> </property> </bean> </array> </property> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.how2java.mapper"/> </bean>