创建Project
创建一个空的Project
为Project命名
创建一个MavenModule
配置GAV
配置maven
add maven property
name:archetypeCatalog
value:internal
使用主题默认生成的项目名
使pom.xml配置自动生效
生成项目后,保证webapp是带有”蓝点”标记的
在main文件夹下建立java文件夹和resources文件夹
与main文件夹平级创建一个test文件夹
test文件夹下创建java文件夹和resources文件夹
注意:为文件夹赋予功能(颜色)后,文件夹才会生效
将我们自己的web.xml模板导入
通过pom.xml导入我们需要的jar包
在resources下创建资源分类包结构
创建mybatis配置文件,spring配置文件,springmvc配置文件
创建jdbc.properties属性文件
为每一个配置文件引入基础文件头信息
为applicationContext.xml配置文件约束头信息
为dispatcherServlet.xml引入约束头信息
为mybatis-config.xml引入约束头信息
引入jdbc.properties信息
创建后台包结构
为utils包导入所需工具类
在interceptor包下创建一个用来过滤请求的拦截器类LoginInterceptor.java
实现HandlerInterceptor接口,重写方法
注意:将拦截器preHandle返回值默认设置为true
在此先将该文件创建出来,是为了接下来对配置文件的编写
在WEB-INF下创建jsp包结构
在jsp下创建settings和workbench包结构
将settings和workbench中的原型导入
在webapp包下导入其他样式与脚本资源
所有资源导入后,需要对maven项目的构建进行刷新
编写mybatis-config.xml
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--配置别名-->
<typeAliases>
<package name="com.sxbdqn.crm.settings.domain"/>
<package name="com.sxbdqn.crm.workbench.domain"/>
</typeAliases>
<!--配置sql映射文件-->
<mappers>
<package name="com.sxbdqn.crm.settings.dao"/>
<package name="com.sxbdqn.crm.workbench.dao"/>
</mappers>
编写applicationContext.xml
<!--Spring配置文件-->
<!--指定数据库属性配置文件-->
<context:property-placeholder location="classpath:properties/jdbc.properties" />
<!--声明组件扫描器-->
<context:component-scan base-package="com.sxbdqn.crm.settings.service" />
<context:component-scan base-package="com.sxbdqn.crm.workbench.service" />
<!--声明DataSource-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--声明SqlSessionFactoryBean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
</bean>
<!--声明MyBatis的扫描器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<property name="basePackage" value="com.sxbdqn.crm.settings.dao,com.sxbdqn.crm.workbench.dao" />
</bean>
<!--事务配置 声明式事务:在源代码之外,控制事务 声明事务管理器,指定完成事务的具体实体类 commit, rollback-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--指定数据源DataSource-->
<property name="dataSource" ref="dataSource" />
</bean>
<!--配置通知(切面):指定方法使用的事务属性 id:自定义的通知名称 transaction-manager:事务管理器 -->
<tx:advice id="myAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--指定方法的事务属性 name:方法名称 isolation:隔离级别 propagation:传播行为
rollback-for:回滚的异常类, 对于自定义的异常要使用全限定名称,系统的异常类可以名称
-->
<tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED"
rollback-for="com.sxbdqn.crm.exception.AjaxRequestException,
com.sxbdqn.crm.exception.TraditionRequestException" />
<tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED"
rollback-for="com.sxbdqn.crm.exception.AjaxRequestException,
com.sxbdqn.crm.exception.TraditionRequestException" />
<tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED"
rollback-for="com.sxbdqn.crm.exception.AjaxRequestException,
com.sxbdqn.crm.exception.TraditionRequestException" />
<!--除了上面的方法以外的,其他方法-->
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<!--配置aop-->
<aop:config>
<!--指定切入点-->
<aop:pointcut id="servicePt" expression="execution(* *..service..*.*(..))" />
<!--配置增强器对象(通知+切入点)-->
<aop:advisor advice-ref="myAdvice" pointcut-ref="servicePt" />
</aop:config>
编写dispatcherServlet.xml
<!--SpringMVC配置文件-->
<!--声明组件扫描器-->
<context:component-scan base-package="com.sxbdqn.crm.settings.web.controller"/>
<context:component-scan base-package="com.sxbdqn.crm.workbench.web.controller"/>
<context:component-scan base-package="com.sxbdqn.crm.exception"/>
<!--<context:component-scan base-package="com.sxbdqn.crm"/>-->
<!--声明视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp" />
<property name="suffix" value=".jsp" />
</bean>
<!--声明注解驱动-->
<mvc:annotation-driven/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/settings/user/login.do"/>
<bean class="com.sxbdqn.crm.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!-- 配置文件上传解析器 id:必须是multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="#{1024*1024*80}"/>
<property name="defaultEncoding" value="utf-8"/>
</bean>
注意:
在配置spring的时候idea会出现如下提示
表示配置文件还没有配置到项目中
点击右上角的配置项目结构图标
最后点击应用
以上提示就消失了
编写web.xml
<!--注册springmvc的中央调度器-->
<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/dispatcherServlet.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>
<!--注册spring的监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.sxbdqn.crm.web.listener.SysInitListener</listener-class>
</listener>
<!--注册字符集过滤器-->
<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>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>