目录

一、导入

二、分析

1.前端文件.html以及login.jsp

2.pom依赖文件

3.整体项目mvc三层结构

4.后端三层结构控制层(controller)、服务程(service)、持久层(dao)

controller

service

dao

domain

5.resource存储配置文件

(1)applicationcontext.xml项目配置文件

(2)jdbc.properties

(3)mybatis-config.xml

(4)springmvc-config.xml

6.WEB-INF下面的web.xml文件

1)注册中央调度器

2)注册spring容器监听器

3)字符编码过滤器

4)拦截器,常用于拦截非法登陆

5)设置启动页/欢迎界面

三、总结


一、导入

项目插图来源于我以前的船只管理系统作品基于ssm的船只管理系统_溯逸的博客-CSDN博客

所用到最基本工具有mysql、idea、maven以及navicat,后续有用到我会提及,这里是作为笔记用于记录一些大学做的项目,后续还会更新springboot方面的项目。

此项目是基于crm企业管理系统改编而成,仅仅用于学习用途,原作者是动力节点老杜,从bilibili里面学习并且改编成我大三上学期的期末作业。

二、分析

   一个ssm项目中最最最基本要有的,前端一个.jsp或者.html文件;一个pom依赖导入文件,后端的四个package,以及resources中要存储相关配置文件,web-inf下的web.xml文件,一个数据库,详细情况我会下面慢慢讲解。

项目架构图怎么画 项目框架图_数据

1.前端文件.html以及login.jsp

前端文件对于后端最大作用就是提供一个链接,该链接用于访问后端的control层,然后后端把所得结果反馈给前端,这里我最喜欢用就是ajax来进行作为前端访问后端的工具。这种写法有很大好处就是可以设置访问类型,数据类型直接设置成json就不用担心获取的数据乱码问题了。

项目架构图怎么画 项目框架图_java_02

2.pom依赖文件

pom介绍之前我们先介绍一下maven

maven:简单理解就是个仓库,如果你是跟过动力节点的java web就知道在用maven之前都是手动导入jar包,例如编译环境是jdk8,你就要导入jdk8这个jar包,一个项目下来要导入二三十个jar包,多麻烦,但是如果你用了maven,就能在pom文件里面添加你要用的jar包依赖代码,就能自动获取jar包。

说白了pom的作用就是解决依赖环境的问题。

项目架构图怎么画 项目框架图_mvc_03

3.整体项目mvc三层结构

一般而言,整项目ssm项目可以由Model模型(JavaBean),View视图(Jsp) 和 Controller控制器(Servlet)构成

其中每一部分的作用为:

  1. Model:承载数据,并对用户提交请求进行计算的模块。其分为两类,一类称为数据承载Bean,一类称为业务处理Bean。所谓数据承载Bean是指实体类(也就是domain文件),专门承载业务数据的,如Student、User等。而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的。
  2. View:为用户提供使用界面,与用户直接进行交互,对于我的.jsp和.html文件(如果你用vue,就是.vue文件)
  3. Controller:用于将用户请求转发给相应的Model进行处理,并将处理Model的计算结果向用户提供相应响应。

4.后端三层结构控制层(controller)、服务程(service)、持久层(dao)

controller

用于将用户请求转发给相应的service里面处理,并且把处理结果反馈给用户

这里我们看到,基本上control中就是简单几行代码,只是把用户的操作、数据丢给了service里面处理。

项目架构图怎么画 项目框架图_spring_04

service

用于对control发来的要求进行处理,筛选,并访问指定的数据层,获取数据后反馈给control

项目架构图怎么画 项目框架图_项目架构图怎么画_05

项目架构图怎么画 项目框架图_java_06

dao

对要求进行分析,直接从表中获取指定数据反馈给service,这个package里面基本都是一个接口一个xml文件的组合,实际上最核心就是这里了,crud增删改查,对数据库进行操作。

项目架构图怎么画 项目框架图_java_07

domain

有的人也喜欢写成mapping,这个不重要,damain存放的是实体类

实体类里面最重要就是写每个数据的类型,然后ctrl+o(我最喜欢idea这个功能),把对应的tostring、get、set方法给重写了,爽死。

项目架构图怎么画 项目框架图_spring_08

5.resource存储配置文件

(1)applicationcontext.xml项目配置文件

1.配置数据源

<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${jdbc.mysql.url}"/>
        <property name="username" value="${jdbc.mysql.username}"/>
        <property name="password" value="${jdbc.mysql.password}"/>
        <property name="maxActive" value="${jdbc.mysql.maxActive}"/>    <!--最大连接数量-->
    </bean>

    <!--    配置SqlSessionFactory 利用SqlSessionFactoryBean类 来在其内部构造一个SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--        set注入 将druid连接池 赋给了dataSource这个属性  相当于在mybatis的配置文件中的environment声明了POOLED-->
        <property name="dataSource" ref="myDataSource"/>
        <!--读取mybatis的主配置文件  利用该类中的configLocation属性   来读取mybatis的主配置文件
            configLocation属性是Resource类型的 是spring用来读取外部配置信息的
        -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>


    <!--    这个bean不用写id 这个MapperScannerConfigurer类会在内部调用getMapper() 生成每个dao对象-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--        指定SqlSessionFactory的对象id-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

        <!--       指定包名 MapperScannerConfigurer会扫描这个包中的所有接口 每个接口执行一次getMapper 得到所有接口的dao对象
            最后将创建好的所有dao对象放入spring容器中 dao对象的默认名字就是首字母小写的接口名-->
        <property name="basePackage" value="com.zy.crm.workbench.dao"/>

    </bean>

这三份代码怎么理解呢,这点说实话能讲透的人不多,我看了两遍动力节点关于sql会话工厂也没搞懂,对于初学者(例如我),我不建议花太多时间用在这里,每次我都在用cv打法只改数据库名字,密码以及<bean>中的value和id,其它照抄

2.注册事务管理器

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <!--连接的数据库,指定数据源-->
        <property name="dataSource" ref="myDataSource" />
    </bean>
        <!--  spring自己的aop事务管理功能  -->
        <!--开启事务注解驱动,告诉spring使用注解管理事务
        在service类中的public方法上直接使用@Transactional注解就可以开启事务-->
    <tx:annotation-driven transaction-manager="transactionManager" />

事务管理器我觉得最重要的作用就是用于事务回滚,我们都知道事务是数据库里面的专有名词,例如一句select * from student;就可以当作一个事务,不可分割了,而事务回滚就是把当前的sql语句回滚到该语句还没执行前的状态,例如你修改studen表中的数据a和数据b,而数据a修改成功了,数据b修改失败了,我们只能看到整条sql语句执行失败了,但是事实上a数据已经修改了,所以数据库数据已经发生改变,只是后事务回滚就展现作用了,直接可以把事务回滚到没有执行sql语句前,具体操作会另外开一个篇幅讲,到时候把链接添加过来。

3.组件扫描器

<context:component-scan base-package="com.zy.crm.workbench.service" />
 <context:component-scan base-package="com.zy.crm.utils" />

组建扫描器最大作用就是告诉计算机要扫描的注解在哪个包,像@resource、@controller、@requestmapping......这些都是注解,注解的作用我会另外开一个篇幅讲

(2)jdbc.properties

这个文件作用很简单,作为一个映射文件

开发中使用数据库时获得连接的4个参数(驱动、URL、用户名、密码)通常都存在配置文件中,方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可,这里我增加了一个maxactive,这是配置连接池同时能维持的最大连接数,如果客户端理论上需要100个连接,则这个值设为100。

项目架构图怎么画 项目框架图_数据_09

(3)mybatis-config.xml

顾名思义,就是配置mybatis

1.指明实体类的位置

项目架构图怎么画 项目框架图_spring_10

2.指定sql映射文件位置

项目架构图怎么画 项目框架图_数据_11

3.分页插件

正常的话我们还需要一个mybatis自带的分页插件,用于前端分页显示数据

项目架构图怎么画 项目框架图_java_12

(4)springmvc-config.xml

这个文件就是配置springmvc

组件扫描器

有人可能问了,在applicationcontext里面不是协过一次了吗,为什么还写,我个认为两边都可以写,只要齐全就行了

项目架构图怎么画 项目框架图_mvc_13

视图解析器

帮助开发人员设置视图文件路径

项目架构图怎么画 项目框架图_spring_14

6.WEB-INF下面的web.xml文件

1)注册中央调度器

<!--注册中央调度器-->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--指定springMVC配置文件的位置-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <!--访问处理业务方法都经过中央调度器-->
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

2)注册spring容器监听器

<!--注册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>

3)字符编码过滤器

<!--字符编码过滤器-->
    <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>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

4)拦截器,常用于拦截非法登陆

<filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.zy.crm.filter.LoginFilter</filter-class> 
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

拦截器这块只是我项目的写法,正常不这样写,我是把拦截器在filter.loginfilter这个类里面进行了筛选,具体可以下载我的整个项目代码来看

5)设置启动页/欢迎界面

<welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

三、总结

说了那么久ssm其实就是spring、spring MVC以及mybatis、spring的核心就是ioc和aop、中央调度器,mybatis核心是sqlsession,而springmvc是一个流程图,就是数据的一个流动过程以及中途经过什么处理,这里我推荐看这个博客ssm详细讲解