JAVA自学路-SSM框架解析

302 阅读3分钟

入职两周,对SSM框架进行了学习,简单梳理一下我所知道的知识,简单对整个框架各层的作用进行一些分析、探讨。

SSM:Spring、Spring MVC、Mybaits

三种框架

1.Spring

Spring是一个基于IOC(反转控制)和AOP(面向切面编程)的结构J2EE系统的框架。

其中,IOC 是Spring的基础,英文为Inversion Of Control,就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象;DI 依赖注入,英文为 Dependency Inject,就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。

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>