SSM项目的基本目录结构

目录

一、项目启动时各组件的初始化顺序

侧重层次

Spring:

Spring MVC:

MyBatis:

请求打过来时项目的启动顺序 

二、SSM结构

1.组件结构

2.处理请求流程

①Controller层接收请求

②Controller层处理请求

③Service层处理业务逻辑

④DAO层访问数据库

⑤返回响应

⑥视图层展示结果

三、SSM配置文件

1.项目结构各部分功能

2.pom.xml文件

3.web.xml文件

 web.xml 配置的关键组件:

4.Spring 配置文件(通常是 applicationContext.xml)

承担功能

5.Spring MVC 配置文件(通常是 spring-mvc.xml)

承担功能

6.MyBatis 配置文件(通常是 SqlMapConfig.xml)

承担功能


一个完整的SSM(Spring+SpringMVC+MyBatis)项目理应包含以下几个目录结构:

上面是一个普通的maven项目。

一、项目启动时各组件的初始化顺序

从宏观层面看,Spring 容器、MyBatis、SpringMVC 这三部分的初始化基本是按照 “Spring 容器 -> MyBatis -> SpringMVC” 的顺序进行,主要原因如下:

  • Spring 容器先初始化Spring 是整个项目的基础框架,负责管理众多 Bean。MyBatis 和 SpringMVC 都依赖于 Spring 容器来管理其相关组件,例如 MyBatis 的 SqlSessionFactory、SpringMVC 的 DispatcherServlet 等都需要在 Spring 容器中注册为 Bean。所以 Spring 容器需要先完成初始化,才能为后续组件的初始化提供环境支持。
  • MyBatis 初始化在 SpringMVC 之前:MyBatis 主要负责与数据库交互,它的初始化会创建数据源、构建 SqlSessionFactory 等,这些都是应用程序进行数据持久化操作的基础。SpringMVC 作为 Web 层框架,处理 HTTP 请求,在处理请求过程中可能会涉及到数据库操作,这就依赖于 MyBatis 已经完成初始化并能正常工作。

侧重层次

Spring

  • Spring是一个全面的框架,它不专注于特定的层次,而是提供了整个应用的基础设施支持。

  • 在SSM框架中,Spring主要用于管理Bean的生命周期和依赖注入,包括Service层和DAO层的Bean。

  • Spring还提供了AOP(面向切面编程)的支持,可以用于实现如日志记录、事务管理等横切关注点。

Spring MVC

  • Spring MVC专注于Web层特别是Controller

  • 它提供了一个灵活的MVC架构,用于处理HTTP请求和响应。

  • Spring MVC通过注解或配置文件定义URL映射,将请求分发到相应的Controller处理。

MyBatis

  • MyBatis专注于数据访问层,即DAO层

  • 它提供了一个简单而强大的SQL映射框架,用于将Java方法映射到数据库操作。

  • MyBatis允许开发者编写自定义的SQL语句,或者使用其提供的ORM特性来简化数据库操作。

请求打过来时项目的启动顺序 

一个基于 SSM(Spring + Spring MVC + MyBatis)框架搭建的项目启动时,其处理请求的过程顺序如下:

当项目启动,Tomcat 作为 Servlet 容器会首先加载并解析 web.xml 文件。web.xml 文件是 Web 应用的配置文件,其中配置了 Spring MVC 的前端控制器(通常是 DispatcherServlet)。当客户端发起请求时,请求会首先被发送到该前端控制器。前端控制器接收到请求后,会根据请求的信息(如 URL、请求方法等),将请求分发给对应的 Controller 层组件进行处理。Controller 层主要负责接收请求、解析请求参数,并调用相应的业务逻辑。Controller 层会调用 Service 层的服务方法来处理具体的业务逻辑。Service 层是业务逻辑层,它会组织和协调数据的处理流程,可能会调用多个 DAO(数据访问对象)层的方法来完成数据的增删改查操作。DAO 层主要负责与数据库进行交互,根据 Service 层的调用,执行相应的 SQL 语句,从数据库中获取所需的数据或对数据库进行更新操作,然后将查询到的数据或操作结果返回给 Service 层。Service 层接收到 DAO 层返回的数据后,会对数据进行进一步的处理和封装,然后将处理结果返回给前端控制器,前端控制器再将处理结果返回给客户端

二、SSM结构

1.组件结构

2.处理请求流程

在一个典型的SSM(Spring、Spring MVC、MyBatis)框架的Java Web应用程序中,一个HTTP请求的处理流程大致如下: 

【整体:Controller层 -> Service层 -> DAO层(与数据库交互) -> DAO层返回数据 -> Service层返回业务逻辑处理结果 -> Controller层返回HTTP响应。】

①Controller层接收请求

用户通过浏览器或其他客户端发送HTTP请求到服务器。

请求首先到达Spring MVC的前端控制器DispatcherServlet

DispatcherServlet根据URL映射规则(在SSM项目中配置在web.xml文件中)将请求转发给相应的Controller处理。

DispatcherServlet是 Spring MVC 框架中的核心前端控制器,起到连接客户端请求和 Controller 的关键作用。

②Controller层处理请求

Controller层负责处理HTTP请求,解析请求参数,调用Service层的业务逻辑处理方法,并接收Service层返回的结果。

Controller层通常不包含复杂的业务逻辑,而是作为请求的分发器和响应的组装者。

③Service层处理业务逻辑

Service层接收Controller层的调用,处理具体的业务逻辑。

Service层可以调用多个DAO层的方法来完成数据的增删改查操作。

Service层负责协调多个DAO层的操作,封装业务逻辑,并返回业务处理结果给Controller层。

④DAO层访问数据库

DAO层(Data Access Object层)负责与数据库进行交互,执行SQL语句或调用MyBatis提供的API来完成数据的持久化操作。

DAO层接收Service层的调用,执行相应的数据库操作,并返回数据给Service层。

⑤返回响应

DAO层将查询结果返回给Service层,Service层完成业务逻辑处理后,将结果返回给Controller层。

Controller层将结果封装为HTTP响应,通过Spring MVC的DispatcherServlet返回给客户端。

⑥视图层展示结果

对于需要展示的请求,Controller层通常会将数据传递给视图(如JSP、Thymeleaf等),由视图负责将数据展示给用户。

三、SSM配置文件

现在来讲一讲一个基础SSM项目的配置文件应该包括哪些部分以及分别承载着什么内容和功能。

1.项目结构各部分功能

①.idea.mvn:这两个文件夹是由 IDE(如 IntelliJ IDEA)自动生成的,用于存储项目的配置信息和 Maven 相关的设置,一般不需要手动修改。

②src/main/java:存放 Java 源代码。

  • controller:包含控制器类,如StudentController,负责接收前端请求,调用业务逻辑,并返回响应结果。
  • dao:定义数据访问接口,如StudentDao,用于与数据库进行交互。
  • entity:存放实体类,如Student,用于封装业务数据,对应数据库中的表结构。
  • service:包含业务逻辑接口(如StudentService)和实现类(如StudentServiceImpl),处理具体的业务逻辑。

③src/main/resources:存放配置文件。

  • mapper文件夹:存放 MyBatis 的 SQL 映射文件,如StudentMapper.xml,用于定义 SQL 语句和映射关系。
  • applicationContext.xml:Spring 的配置文件,用于配置 Spring 容器中的 bean、事务管理等。
  • springmvc.xml:SpringMVC 的配置文件,配置视图解析器、拦截器等。
  • SqlMapConfig.xml:MyBatis 的核心配置文件,配置数据源、事务管理器等。

④src/main/webapp:存放 Web 应用资源。

  • WEB-INF文件夹:存放应用的配置文件和受保护的资源。web.xml是 Web 应用的部署描述符,用于配置 Servlet、过滤器等。
  • jsp文件夹:存放 JSP 页面,如index.jsp,用于展示数据。

⑤target:Maven 构建项目时生成的目标文件夹,包含编译后的 class 文件、打包后的 war 包等。

⑥pom.xml:Maven 项目的核心配置文件,用于管理项目的依赖、插件和构建信息。

2.pom.xml文件

首先作为一个maven文件,配置pom.xml文件的依赖十分重要。

maven的中央仓库:https://mvnrepository.com/repos/central

进入官网后:

maven项目底层依赖就是连接maven中央仓库,在有网络的情况下,maven上配置的依赖就会默认连接这个网址,如果用的是阿里云,那么就会连接到阿里云,在查找阿里云的依赖时如果没有找到,那么依旧会回到这个网站进行查找,但是若是说在这个网站上都没有查找到,那么就是真的不存在这个依赖。

maven需要什么依赖都可以来这个网站上搜索:

以搜索MySql的依赖为例:

点进去后会看见有各种版本的依赖,需要哪个自行选择:

 

比如说我选择了8.0.11版本的点进去:

就可以直接复制粘贴拿来用了

在此我的这个SSM项目中,我选择了如下依赖:

<dependencies>
    <!-- Jackson JSON 处理库 -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>

    <!-- Spring 框架相关依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.0.2.RELEASE</version>
      <scope>test</scope>
    </dependency>

    <!-- Servlet API 和 JSP API -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- 日志相关依赖 -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>

    <!-- Thymeleaf 模板引擎 -->
    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf-spring4</artifactId>
      <version>3.0.9.RELEASE</version>
    </dependency>

    <!-- Commons IO -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

    <!-- MySQL 数据库驱动 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.29</version>
    </dependency>

    <!-- MyBatis 相关依赖 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    <!-- Druid 数据库连接池 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.10</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.1</version>
      <scope>test</scope>
    </dependency>

   <!-- 导包   -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
  </dependencies>

也就是如下的依赖项:

 

3.web.xml文件

 web.xml 配置的关键组件:

  1. Spring ContextLoaderListener:初始化Spring应用上下文并加载配置文件。

  2. Spring MVC DispatcherServlet:处理所有HTTP请求并映射到相应的控制器。

  3. 字符编码Filter:确保请求和响应的字符编码正确。

  4. 欢迎文件列表:指定访问Web应用根目录时显示的欢迎文件。

  5. 错误页面:指定自定义错误页面以处理404和500错误。

参考我的部署:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    version="4.0"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:javaee="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xml="http://www.w3.org/XML/1998/namespace"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
  <display-name>Archetype Created Web Application</display-name>
  <!-- 配置 Spring 上下文监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <!-- 配置 Spring MVC 前端控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <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>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

4.Spring 配置文件(通常是 applicationContext.xml

承担功能

Spring 配置文件主要负责整个项目的基础配置,包括组件扫描、数据源配置、事务管理、MyBatis 相关配置等,它是整个项目的核心配置,管理着项目中各个组件的生命周期和依赖关系。

注:在ssm集成项目中,mybatis的数据源配置通常是配置在spring的配置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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启组件扫描 -->
    <context:component-scan base-package="com.qcby"/>

    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssmdemo"/>
        <property name="username" value="root"/>
        <property name="password" value="2020"/>
    </bean>

    <!-- 配置 SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!-- 配置 Mapper 扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.qcby.dao"/>
    </bean>
</beans>

5.Spring MVC 配置文件(通常是 spring-mvc.xml

承担功能

Spring MVC 配置文件主要负责处理 Web 请求相关的配置,包括视图解析器、静态资源映射、拦截器、消息转换器等,它是 Web 层的核心配置,负责将客户端请求映射到相应的控制器方法,并将处理结果返回给客户端。

比如我配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启组件扫描 -->
    <context:component-scan base-package="com.qcby.controller"/>

    <!-- 开启 Spring MVC 注解支持 -->
    <mvc:annotation-driven/>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

6.MyBatis 配置文件(通常是 SqlMapConfig.xml

承担功能

在 SSM 集成项目中,MyBatis 配置文件主要负责一些 MyBatis 自身的特性配置,如类型别名、插件、映射器等,通常不再配置数据源

就可以精简成下面的模式:

<?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="mysql">
        <environment id="mysql">
            <!--配置事务的类型,使用Spring管理事务-->
            <transactionManager type="MANAGED"></transactionManager>
            <!--使用Spring配置的数据源-->
            <dataSource type="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"/>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/StudentMapper.xml"></mapper>
    </mappers>
</configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值