Spring+Springmvc+mybatis 配置文件
1. spring配置文件
业务逻辑
<!-- 开启注解扫描 只扫描service和dao,controller不需要spring框架去处理-->
<context:component-scan base-package="pers.myssm">
<!-- exclude 排除@controller -->
<context:exclude-filter type="annotation" expression=
"org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--===========spring 整合 mybatis 配置完就不需要mysqlmapconfig.xml=========-->
<!--配置连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/webshop"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</bean>
<!--配置sqlsessionfactory-->
<!-- SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置扫描器,将maybatis接口(dao层)的实现加入到ioc中-->
<bean id="mapperScanner" class=
"org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="pers.myssm.dao"/>
</bean>
<!--======================声明式事务管理器================-->
<!--配置-->
<bean id="transactionManager" class=
"org.springframework.jdbc.datasource.DataSourceTransactionManager" >
<!--数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置事务通知 事务如何切入-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 以get开头 -->
<tx:method name="get*" read-only="true"/>
<!-- 所有方法 -->
<tx:method name="*" isolation="DEFAULT"/>
</tx:attributes>
</tx:advice>
<!--aop增强-->
<aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution(* pers.myssm.service.impl.*ServiceImpl.*(..))"/>
</aop:config>
关于sqlsessionfactorybean:详见
关于 MapperScannerConfigurer:
MapperFactoryBean是MyBatis-Spring团队提供的一个用于根据Mapper接口生成Mapper对象的类,通过MapperFactoryBean可以配置接口文件以及注入SqlSessionfactory,从而完成一个Bean的实例化。
MapperScannerConfigurer是MyBatis-Spring团队提供的一种用于以自动扫描形式来配置MyBatis中映射器的类,可以通过配置包路径来自动扫描包接口生成映射器,这使得开发人员可以在编写很少代码的情况下,完成对映射器的配置,从而提高开发效率。
关于transactionManager:详见
2. springmvc配置文件
网站跳转逻辑
<!--注解扫描 pers.myssm包下-->
<context:component-scan base-package="pers.myssm">
<!-- 包含 @Controller -->
<context:include-filter type="annotation" expression=
"org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--配置视图解析器 方便页面返回-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 通过url可直接访问-->
<mvc:view-controller path="/log" view-name="Jlogin" />
<!--配置静态资源-->
<mvc:resources mapping="/css/" location="/css/**"/>
<!--处理springmvc无法处理的请求 交给tomcat-->
<mvc:default-servlet-handler/>
<!--支持jsr303 校验 -->
<mvc:annotation-driven/>
关于 mvc:default-servlet-handler:当在web.xml 配置了前端控制器时,所有对于静态资源的请求都会被看作是一个普通的后台控制器请求,导致请求找不到而报 404 异常错误。详见
关于 mvc:annotation-driven:如果不加DispatcherServlet则无法区分请求是资源文件还是mvc的注解,而导致controller的请求报404错误。详见
3. web.xml 配置文件
- 配置 spring 监听器
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
- 前端控制器(如果不定义配置文件地址,需要在web同级目录下配置springmvc 配置文件名dispatcherservlet-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:springmvc.xml</param-value>
</init-param>
<!-- 启动服务器加载 -->
<!-- 容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- 字符编码过滤器 CharacterEncodingFilter
springmvc 4.0之后 有请求与响应属性
<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-patterns>
</filter-mapping>
- 将post请求转为put delete请求 HiddenHttpMethodFilter
解决springmvc 不支持put和delete请求 HttpPutFormContentFilter
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>
org.springframework.web.filter.HiddenHttpMethodFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>
org.springframework.web.filter.HttpPutFormContentFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4. Servlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
5. web.xml
一般的web工程中都会用到web.xml,web.xml主要用来配置,可以方便的开发web工程。web.xml主要用来配置Filter、Listener、Servlet等。但是要说明的是web.xml并不是必须的,一个web工程可以没有web.xml文件。
关于web.xml:详见
6.依赖
spring mvc 依赖
-
spring junit单元测试
-
日志
slf4j 是规范 接口 ;实现是log4j 、logback等
常用 :slf4j+logback
slf4j logback-core logback-classic (实现slf4j接口并整合) -
数据库
驱动 mysql-connector
连接池 c3p0 -
dao层
mybatis ( ibatis先出 spring提供依赖 mybatis出来后spring没有提供依赖)
自身 mybatis
与spring整合 mybatis-spring -
servlet web 依赖:jstl标签库
standard
jackson (ajax json)
servlet -
spring 依赖
-
核心api
spring-core
spring-bean
spring-context -
spring dao层依赖
spring-jdbc
spring-tx 事务 -
spring web 依赖
spring-web 启动
spring-webmvc -
spring test 测试
spring-test
-