目录
- 1.需求分析
- 2.技术架构
- 3.环境搭建
- 3.1创建父模块
- 3.1.1修改父模块的pom文件,指定整个项目中用到的jar包的依赖及其版本
- 3.2 创建domain层子模块
- 3.3 创建dao层子模块
- 3.3.1 修改pom文件,添加dao层jar包的依赖
- 3.4创建service层子模块
- 3.4.1修改pom文件,添加service层jar包的依赖
- 3.5创建web层子模块
- 3.5.1修改pom文件,添加web层jar包的依赖
- 4.添加配置文件
- 4.1 spring和mybatis的配置文件
- 4.2 SpringMVC的配置文件
- 4.3 配置web.xml
- 4.数据库设计
1.需求分析
这个后台系统是为一个旅游网站设计的,主要业务是旅游产品的管理、订单管理和系统管理,其中系统管理包含用户管理、角色管理、资源权限管理和访问日志四个模块。
2.技术架构
前端使用AdminLTE模板主体工具,后台采用Spring+SpringMVC+Mybatis+SpringSecurity,数据库使用mysql。整个项目为单体架构,且并未考虑到高并发的应用场景。
3.环境搭建
3.1创建父模块
3.1.1修改父模块的pom文件,指定整个项目中用到的jar包的依赖及其版本
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.GTMStudio</groupId><artifactId>admintel_ssm</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>admintel_ssm_dao</module><module>admin_ssm_service</module><module>admin_ssm_domain</module><module>admin_ssm_utils</module><module>admin_ssm_web</module><module>admin_ssm_test</module></modules><!--在父工程的pom.xml中抽取一些重复的配置,比如:锁定jar包版本、设置编译版本--><!--统一管理jar包版本--><properties><spring.version>5.0.2.RELEASE</spring.version><springmvc.version>5.0.4.RELEASE</springmvc.version><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version><shiro.version>1.2.3</shiro.version><mysql.version>8.0.17</mysql.version><mybatis.version>3.4.5</mybatis.version><spring.security.version>5.0.1.RELEASE</spring.security.version><mysql.version>8.0.17</mysql.version></properties><!-- 锁定jar包版本 --><dependencyManagement><dependencies><!--Mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--Mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!--springMVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${springmvc.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!--spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency></dependencies></dependencyManagement><dependencies><!--pagehelper依赖--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency><!--SpringSecurity依赖--><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId><version>${spring.security.version}</version></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId><version>${spring.security.version}</version></dependency><!--jsr250的依赖--><dependency><groupId>javax.annotation</groupId><artifactId>jsr250-api</artifactId><version>1.0</version></dependency><!--页面端控制权限标签--><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-taglibs</artifactId><version>5.0.1.RELEASE</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><target>1.9</target><source>1.9</source><encoding>UTF-8</encoding></configuration></plugin></plugins></build></project>
3.2 创建domain层子模块
3.3 创建dao层子模块
3.3.1 修改pom文件,添加dao层jar包的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>admintel_ssm</artifactId><groupId>com.GTMStudio</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>admintel_ssm_dao</artifactId><packaging>jar</packaging><dependencies><!--添加domain的依赖--><dependency><groupId>com.GTMStudio</groupId><artifactId>admin_ssm_domain</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><!--Mybatis和Mybatis与spring的整合--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!--Mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.17</version></dependency><!--spring相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></dependency><!--junit测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope></dependency><!--c3p0连接池--><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version></dependency></dependencies></project>
3.4创建service层子模块
3.4.1修改pom文件,添加service层jar包的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>admintel_ssm</artifactId><groupId>com.GTMStudio</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>admin_ssm_service</artifactId><packaging>jar</packaging><dependencies><!--添加domain层的依赖--><dependency><groupId>com.GTMStudio</groupId><artifactId>admin_ssm_domain</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><!--添加dao层的依赖--><dependency><groupId>com.GTMStudio</groupId><artifactId>admintel_ssm_dao</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><!--spring相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></dependency></dependencies></project>
3.5创建web层子模块
3.5.1修改pom文件,添加web层jar包的依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>admintel_ssm</artifactId><groupId>com.GTMStudio</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>admin_ssm_web</artifactId><packaging>war</packaging><dependencies><!--springMVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>com.GTMStudio</groupId><artifactId>admin_ssm_service</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version><scope>provided</scope></dependency><dependency><groupId>com.GTMStudio</groupId><artifactId>admin_ssm_service</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies></project>
4.添加配置文件
4.1 spring和mybatis的配置文件
<?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"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!--配置mybatis start--><!--数据库连接池--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!--连接数据库的必备信息--><property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/admintel?serverTimezone=Asia/Shanghai"></property><property name="user" value="root"></property><property name="password" value="123456"></property></bean><!--mapper配置--><!--配置生产SqlSessionFactory对象的工厂,让spring管理SqlSessionFactory 使用mybatis和spring整合包中的--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--数据库连接池--><property name="dataSource" ref="dataSource"/><!--扫描pojo包,给包下所有pojo对象起别名--><property name="typeAliasesPackage" value="com.GTMStudio.admintelssm.domain"/><!--传入PageHelper的插件--><property name="plugins"><array><!--传入插件的对象--><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><props><prop key="helperDialect">mysql</prop><prop key="reasonable">true</prop></props></property></bean></array></property></bean><!--mapper扫描器:用来产生代理对象--><!--扫描接口包路径,生成包下所有接口的代理对象,并且放入spring容器中--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--因为不会被引用,所以就需要写id了--><property name="basePackage" value="com.GTMStudio.admintelssm.dao"/></bean><!--配置mybatis end--><!--service层配置文件开始--><!--组件扫描配置--><context:component-scan base-package="com.GTMStudio.admintelssm.service"/><!--aop面向切面编程,切面就是切入点和通知的组合--><!--配置事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!--配置事务的通知--><tx:advice id="advice"><tx:attributes><tx:method name="save*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="find*" read-only="true"/><tx:method name="*" propagation="REQUIRED"/></tx:attributes></tx:advice><!--配置切面--><aop:config><aop:pointcut id="pointcut" expression="execution(* com.GTMStudio.admintelssm.service.impl.*.*(..))"/><aop:advisor advice-ref="advice" pointcut-ref="pointcut"/></aop:config><!--service层配置文件结束--></beans>
4.2 SpringMVC的配置文件
<?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"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--扫描controller的注解,别的不扫描--><context:component-scan base-package="com.GTMStudio.admintelssm.controller"/><!--视图解析器--><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/pages/"/><property name="suffix" value=".jsp"/></bean><!--释放静态资源--><mvc:default-servlet-handler/><!--设置静态资源不过滤--><mvc:resources mapping="/css/**" location="/css/"/><mvc:resources mapping="/img/**" location="/img/"/><mvc:resources mapping="/js/**" location="/js/"/><mvc:resources mapping="/plugins/**" location="/plugins/"/><bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><list><bean class="com.GTMStudio.admintelssm.utils.StringToDateConverter"/></list></property></bean><!--开启对SpringMVC注解的支持--><mvc:annotation-driven conversion-service="conversionService"/><!--支持AOP的注解支持,AOP底层使用代理技术JDK动态代理,要求必须有接口cglib代理,生成子类对象,proxy-target-class="true" 默认使用cglib的方式--><aop:aspectj-autoproxy proxy-target-class="true"/>
</beans>
4.3 配置web.xml
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><!--报403错误时的指定跳转页面--><error-page><error-code>403</error-code><location>/403.jsp</location></error-page><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><!--解决中文乱码过滤器--><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>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--解决中文乱码过滤器--><!--springsecurity的过滤器--><filter><filter-name>springSecurityFilterChain</filter-name><!--名字必须是springSecurityFilterChain--><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--springsecurity的过滤器--><!--配置spring核心监听器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--重新指定spring配置文件的路径--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext.xml,classpath*:spring-security.xml</param-value></context-param><!--在整合spring容器时使用ContextLoaderListener,它实现了ServletContextListener监听器接口,ServletContextListener只负责监听web容器启动和关闭的事件.而RequestContextListener实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,web服务器接收的每一次请求都会通知该监听器.--><listener><listener-class>org.springframework.web.context.request.RequestContextListener</listener-class></listener><!--springmvc的核心servlet--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.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><!--<!–配置log4j的配置文件位置–>--><!--<context-param>--><!--<param-name>log4jConfiguration</param-name>--><!--<param-value>log4j.properties</param-value>--><!--</context-param>--><!--<!–使用监听加载log4j的配置文件–>--><!--<listener>--><!--<listener-class></listener-class>--><!--</listener>-->
</web-app>