SSM框架下web项目的运行流程

本文详细介绍了SSM框架下web项目的运行流程,从web启动过程到SSM各组件的作用。首先,当WEB项目启动,Tomcat会读取配置文件并创建ServletContext。接着讲解了Spring的加载过程,包括加载配置文件、获取Bean。然后阐述了Spring MVC的运行流程,包括DispatcherServlet、HandlerMapping、HandlerAdapter等。最后,解析了Mybatis的操作步骤和在SSM中的角色。SSM中,DAO层处理数据库交互,Service层处理业务逻辑,Controller层控制流程,View层负责展示。各层之间通过接口进行低耦合通信,实现了一个完整的web程序流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. web的流程

web项目的运行流程,需求是怎么实现的,数据怎么请求,怎么存储,怎么改变。数据库怎么修改。怎么查询数据库

1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 

<!-- 配置加载类路径的配置文件 -->
  <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>
  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>

  <!-- 解决中文乱码过滤器 -->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 前端控制器(加载classpath:spring-mvc.xml 服务器启动创建servlet) -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置初始化参数,创建完DispatcherServlet对象,加载springmvc.xml配置文件 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <!-- 服务器启动的时候,让DispatcherServlet对象创建 -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 

3.容器将<context-param></context-param>转化为键值对,并交给ServletContext. 

4.容器创建<listener></listener>中的类实例,即创建监听(通过contextInitialized(ServletContextEvent args)这个方法). listener的类实例需要实现 javax.servlet.ServletContextListener接口。

5.容器初始化<filter></filter>。filter的类实例需要实现 javax.servlet.Filter接口

6.容器加载<load-on-startup>的<serlvet/>。 servlet实现javax.servlet.Servlet接口

7.容器销毁时,按照servlet-->filter-->listener的顺序销毁servlet、filter和listener

二,Spring的运行流程

第一步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml"); 
,ApplicationContext接口,它由BeanFactory接口派生而来,因而提供了BeanFactory所有的功能。配置文件中的bean的信息是被加载在HashMap中的,一个bean通常包括,id,class,property等,bean的id对应HashMap中的key,value呢就是bean

第二步:调用getBean方法,getBean是用来获取applicationContext.xml文件里bean的,()写的是bean的id。一般情况都会强转成我们对应的业务层(接口)。例如SpringService springService =(SpringService)ac.getBean("Service");

第三步:这样我们就可以调用业务层(接口实现)的方法。

二、Spring MVC部分

1、Spring MVC的运行流程

  • springMVC框架 
    这里写图片描述 
    框架执行流程(面试必问) 
    1、用户发送请求至前端控制器DispatcherServlet
    2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
    3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
    4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
    5、执行处理器(Controller,也叫后端控制器)。
    6、Controller执行完成返回ModelAndView
    7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
    8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
    9、ViewReslover解析后返回具体View
    10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
    11、DispatcherServlet响应用户

     
  • 前端控制器DispatcherServlet(不需要程序员开发) 
    作用接收请求,响应结果,相当于转发器,中央处理器。有了DispatcherServlet减少了其它组件之间的耦合度。
    处理器映射器HandlerMapping(不需要程序员开发) 
    作用:根据请求的url查找Handler
    处理器适配器HandlerAdapter 
    作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
    处理器Handler (需要程序员开发) 
    注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
    视图解析器View resolver(不需要程序员开发) 
    作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
    视图View (需要程序员开发) 
    View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

 

四、Mybatis部分

1、Mybatis的运行流程

  • Mybatis运行流程图: 
    这里写图片描述
<!-- 3.配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 扫描bean包 使用别名 -->
        <property name="typeAliasesPackage" value="com.txb.bean"></property>

        <!--配置加载映射文件 UserMapper.xml-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>

    </bean>

    <!-- 自动生成dao,mapper-->
    <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 给出需要扫描Dao接口包 -->
        <property name="basePackage" value="com.txb.dao"/>
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
  • 第二步:加载我们的xml文件 
    第三步:创建SqlSessionFactoryBuilder 
    第四步:创建SqlSessionFactory 
    第五步:调用openSession(),开启sqlSession 
    第六步:getMapper()来获取我们的mapper(接口),mapper对应的映射文件,在加载mybatis.xml时就会加载 
    第七步:使用我们自己的mapper和它对应的xml来完成我们和数据库交互。即增删改查。 
    第八步:提交session,关闭session。
     

2.SSM中各层作用及关系

1.持久层:DAO层(mapper层)(属于mybatis模块)

  • DAO层:主要负责与数据库进行交互设计,用来处理数据的持久化工作。

  • DAO层的设计首先是设计DAO的接口,也就是项目中你看到的Dao包。

  • 然后在Spring的xml配置文件中定义此接口的实现类,就可在其他模块中调用此接口来进行数据业务的处理,而不用关心接口的具体实现类是哪个类,这里往往用到的就是反射机制,DAO层的jdbc.properties数据源配置,以及有 关数据库连接的参数都在Spring的配置文件中进行配置。

  • ps:(有的项目里面Dao层,写成mapper,当成一个意思理解。)

2.业务层:Service层(属于spring模块)

  • Service层:主要负责业务模块的逻辑应用设计。也就是项目中你看到的Service包。

  • Service层的设计首先是设计接口,再设计其实现的类。也就是项目中你看到的service+impl包。

  • 接着再在Spring的xml配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。

  • 最后通过调用DAO层已定义的接口,去实现Service具体的实现类。

  • ps:(Service层的业务实现,具体要调用到已定义的DAO层的接口.)

3.控制层/表现层:Controller层(Handler层) (属于springMVC模块)

  • Controller层:主要负责具体的业务模块流程控制,也就是你看到的controller包。

  • Controller层通过要调用Service层的接口来控制业务流程,控制的配置也同样是在Spring的xml配置文件里面,针对具体的业务流程,会有不同的控制器。

4.View层 (属于springMVC模块)

  • 负责前台jsp页面的展示,此层需要与Controller层结合起来开发。

  • Jsp发送请求,controller接收请求,处理,返回,jsp回显数据。

3.三层架构运行流程

流程

4.各层之间的联系

  • DAO层,Service层这两个层次可以单独开发,互相的耦合度很低。

  • Controller,View层耦合度比较高,因而要结合在一起开发。也可以听当做两层来开发,这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,项目会显得清晰简单。

  • 值得注意的是,Service逻辑层设计: 
    • Service层是建立在DAO层之上的,在Controller层之下。因而Service层应该既调用DAO层的接口,又提供接口给Controller层的类来进行调用,它处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。 
      • 示意图

4.SSM框架实现一个web程序主要使用到如下三个技术:

  1. Spring:用到注解和自动装配,就是Spring的两个精髓IOC(反向控制)和 AOP(面向切面编程)。

  2. SpringMVC:用到了MVC模型,将流程控制代码放到Controller层处理,将业务逻辑代码放到Service层处理。

  3. Mybatis:用到了与数据库打交道的层面,dao(mapper)层,放在所有的逻辑之后,处理与数据库的CRUD相关的操作。

比如你开发项目的时候,需要完成一个功能模块:

  1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。

  2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。

  3. 写Mapper.java/Dao.java,将Mapper.xml中的操作按照id映射成Java函数。实际上就是Dao接口,二者选一即可。

  4. 写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。

  5. 写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。

  6. 写JSP页面调用,请求哪些参数,需要获取什么数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值