目录
一、导入
二、分析
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就不用担心获取的数据乱码问题了。
2.pom依赖文件
pom介绍之前我们先介绍一下maven
maven:简单理解就是个仓库,如果你是跟过动力节点的java web就知道在用maven之前都是手动导入jar包,例如编译环境是jdk8,你就要导入jdk8这个jar包,一个项目下来要导入二三十个jar包,多麻烦,但是如果你用了maven,就能在pom文件里面添加你要用的jar包依赖代码,就能自动获取jar包。
说白了pom的作用就是解决依赖环境的问题。
3.整体项目mvc三层结构
一般而言,整项目ssm项目可以由Model模型(JavaBean),View视图(Jsp) 和 Controller控制器(Servlet)构成
其中每一部分的作用为:
- Model:承载数据,并对用户提交请求进行计算的模块。其分为两类,一类称为数据承载Bean,一类称为业务处理Bean。所谓数据承载Bean是指实体类(也就是domain文件),专门承载业务数据的,如Student、User等。而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的。
- View:为用户提供使用界面,与用户直接进行交互,对于我的.jsp和.html文件(如果你用vue,就是.vue文件)
- Controller:用于将用户请求转发给相应的Model进行处理,并将处理Model的计算结果向用户提供相应响应。
4.后端三层结构控制层(controller)、服务程(service)、持久层(dao)
controller
用于将用户请求转发给相应的service里面处理,并且把处理结果反馈给用户
这里我们看到,基本上control中就是简单几行代码,只是把用户的操作、数据丢给了service里面处理。
service
用于对control发来的要求进行处理,筛选,并访问指定的数据层,获取数据后反馈给control
dao
对要求进行分析,直接从表中获取指定数据反馈给service,这个package里面基本都是一个接口一个xml文件的组合,实际上最核心就是这里了,crud增删改查,对数据库进行操作。
domain
有的人也喜欢写成mapping,这个不重要,damain存放的是实体类
实体类里面最重要就是写每个数据的类型,然后ctrl+o(我最喜欢idea这个功能),把对应的tostring、get、set方法给重写了,爽死。
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。
(3)mybatis-config.xml
顾名思义,就是配置mybatis
1.指明实体类的位置
2.指定sql映射文件位置
3.分页插件
正常的话我们还需要一个mybatis自带的分页插件,用于前端分页显示数据
(4)springmvc-config.xml
这个文件就是配置springmvc
组件扫描器
有人可能问了,在applicationcontext里面不是协过一次了吗,为什么还写,我个认为两边都可以写,只要齐全就行了
视图解析器
帮助开发人员设置视图文件路径
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详细讲解