关于spring、mybatis整合,很多同学都是在网上直接找到别人xml文件的配置然后复制粘贴过来,并没有对其整体进行一个把握,这篇博客会把大家SSM框架如何搭建的思路给大家理清,接下来需要做的就是写业务逻辑代码,让框架真正做到它本应该做的:为开发者节省了开发时间,便于维护。
首先我们将我们将一个web应用进行分层:
正如图上所说:
前端发来请求后,先找到前端控制器,这是springMVC框架中的一个后端入口
关于xml的内容以及他们之间的关系:
即,applicationContext.xml和springMVC-servlet.xml都要在web.xml中进行一个“注册”,前者用于使的tomcat加载上下文,后者其实就是在注册servlet。因为controller层中的类就相当于一个servlet 。
applicationContext.xml内容:使用<import>导入与项目相关的xml文件;(其为总的配置文件,内容要追求简单)
springMVC-servlet内容:配置自动扫描controller层以及中文处理等;(controller层的类都相当于一个servlet,此xml内容主要是用来在web.xml中配置servlet,所以其内容与servlet相关)
spring-mybatis.xml内容:配置spring和mybatis整合后关于数据库这一部分的所有环境,例如:配置连接池(spring中常用的连接池c3p0,DBCP等)用于存储数据库的连接、扫描service层(即service包,因为在service层调用了dao,所以也就把service层当做mybatis的配置项来配置了)、配置事务管理器、使用AOP将事务织入到service层等
spring-Redis.xml内容:配置spring和Redis整合的相关配置。
【注意】
以上提到的所有的配置文件的名字都是可以随便改,位置都是可以随便放的;例如:
applicationContext.xml:完全可以把它的名字改成application.xml等等,只要web.xml中注册此xml文件的名字一起改掉就可以了。但是学过spring的都知道,一般spring总的配置文件习惯上叫applicationContext.xml,所以为了直观起见,不建议改;
spring-mybatis.xml:完全可以把它的名字改成mybatis.xml等等,只要是在总的配置文件中使用<import>导入的时候名字与其保持一致就可以。因为文件中是关于spring整合mybatis的相关配置信息,所以不建议改成与mybaits无关的名字。例:shabi.xml等
关于dispatcher-servlet.xml文件的名字问题:
如果在IDEA上使用maven中的spring模板去创建spring项目的时候,会在webapp/WEB-INF目录下创建一个名字叫dispatcher-servlet.xml的文件,这个就是我上边说的springMVC-servlet.xml文件。dispatcher-servlet.xml这个文件的名字也是可以随便改的,可以改成springMVC-servlet.xml,mvc-servlet.xml等等(一定要是*****-servlet.xml的格式),但是紧跟着要改web.xml,如果要把dispatcher-servlet.xml改成springMVC-servlet.xml,那么web.xml要修改如下:
修改前:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
修改后:
<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-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
这样系统就会自动在webapp/WEB-INF目录下找springMVC-servlet.xml文件用于servlet的注册。
关于dispatcher-servlet.xml文件的放置地方问题:
刚刚我们上边说系统会自动的在webapp/WEB-INF目录下找springMVC-servlet.xml文件用于servlet的注册。这个配置文件也不是非要存放在webapp/WEB-INF目录下,可以放到别的地方,如下:
这样子的话必须要将web.xml中改成用于指明xml配置文件的路径:
<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-servlet.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>
classpath指的什么路径?
拿上边的项目结构为例,当项目发布到tomcat上之后,tomcat目录下的/webapps/ssmdemo1/WEB-INF/classes目录就是classpath所指的目录,如下:
对比项目在IDEA上的结构可知:只要是存放在IDEA上的resources目录下的xml文件等,在项目发布到tomcat上面之后都会原封不动的存放在tomcat/webapps/项目名/WEB-INF/classes目录下。这个classes目录就是classpath指的路径。
至此,ssm项目搭建时的xml文件结构已经说完,可以通过我例子上面的项目来看一下代码(使用ssm整合后的简单查询):