Spring和Spring MVC是3.2.3.RELEASE 版本的,Hibernate是3.6.10.Final版本的,采用的是Mysql数据库,使用的是JDK1.7版本,Jetty9服务器,这里吐槽一下,maven下开发,tomcat没有jetty好用,虽然tomcat很牛逼,但是真的没有jetty好用,项目的源码地址:https://git.oschina.net/yellowcong/spring_springMVC_Hibernate
pom.xml配置文件
在pom中设定了使用的是阿里云的工厂,这样在国内的下载速度飞一样的感觉
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>yellowcong</groupId>
<artifactId>spring_springmvc_hibernate</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>users Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- 配置国内比较快的 阿里云的Maven仓库 -->
<repositories>
<repository>
<id>aliyunmaven</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<!-- <scope>test</scope> -->
</dependency>
<!-- 导入jsp -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
<!-- 导入servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 导入Spring的orm -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<!-- 配置切面 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!---aspectj 面向切向 -->
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.5</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.15.0-GA</version>
</dependency>
<!-- Spring需要的注解 -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.2</version>
</dependency>
<!-- 配置Spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 配置fileupload,spring mvc依赖 -->
<dependency>
<groupId>com.liferay</groupId>
<artifactId>org.apache.commons.fileupload</artifactId>
<version>1.2.2.LIFERAY-PATCHED-1</version>
</dependency>
<!-- 数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<!-- 数据连接池 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.10.Final</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
<!-- 共用的配置说明,比如spring版本, 项目名称, jdk版本等 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>3.2.3.RELEASE</spring.version>
</properties>
<build>
<finalName>users</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- 配置war包的名称 -->
<warName>hello</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.6.v20170531</version>
<configuration>
<scanIntervalSecond>10</scanIntervalSecond>
<webApp>
<contextPath>/users</contextPath>
</webApp>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>8080</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
Web.xml
配置编码,Springmvc,Spring
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>spring_springmvc_hibernate</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Spring mvc -->
<servlet>
<servlet-name>config</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>config</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 设定字符编码 -->
<filter>
<filter-name>CharacterFilter</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>
</filter>
<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 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>
<!-- spring 中提供的获取Session的方法 -->
<filter>
<filter-name>OpenSessionInViewFilte</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilte</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
config-servlet.xml
配置Spring mvc
<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<mvc:default-servlet-handler/>
<!-- 通过Annotation 来控制Controller -->
<context:component-scan base-package="com.yellowcong"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 将静态文件夹制定到某个特别的文件夹中统一处理
** 表示的是文件夹中的子文件夹中的所有类容
其中location 需要两个 正斜杠
-->
<mvc:resources location="/resources/" mapping="/resources/**"/>
<!-- 配置权限拦截器 -->
<!-- 当我们的数据访问到 amdin的时候,就会直接调用admin对象 -->
<!-- <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/**"/>
<mvc:mapping path="/role/**"/>
<mvc:mapping path="/group/**"/>
<mvc:mapping path="/attachment/**"/>
<mvc:mapping path="/reply/**"/>
<mvc:mapping path="/tabel/**"/>
<mvc:mapping path="/image/**"/>
<mvc:mapping path="/info/**"/>
<mvc:mapping path="/login/stu"/>
<mvc:mapping path="/admin/**"/>
<bean class="com.yellowcong.interceptor.UserInterceptor"/>
</mvc:interceptor>
</mvc:interceptors> -->
<!-- 设定访问的名称 和对应的Servlet -->
<!-- 配置Multipart,只有设定了才能完成文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000"></property>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 3.0.5后默认加上了jstl的属性配置.这个就是默认的配置 -->
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<!-- 设定前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 设定后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 配置全局异常 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!--
<prop key="com.yellowcong.exception.UserException">error</prop>
<prop key="java.lang.RuntimeExceptio">error</prop>
<prop key="com.yellowcong.exception.ChannelException">error</prop>
<prop key="com.yellowcong.exception.GroupException">error</prop>
<prop key="com.yellowcong.exception.RoleException">error</prop>
-->
</props>
</property>
</bean>
</beans>
ApplicationContext.xml
注意Spring的这个配置文件放在src/main/resources
类目录下,这个如果自己还想在细分下去,放置的位置需要在web.xml中配置相应的位置
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- 通过我们 注释所表示的是可选配置的方式-->
<!-- 开启我们的注解 ,有时候 找不到类,我们可以在后面添加 * 表示所遇的包-->
<context:annotation-config/>
<context:component-scan base-package="com.yellowcong.*"/>
<!-- 其中我们可以通过properties
后面你有个神奇的空格
设定数据库的一些属性 -->
<context:property-placeholder location="classpath:jdbc-config-local.properties" />
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${driverClassName}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
<!-- 链接池启动的初始值 -->
<property name="initialPoolSize" value="5"/>
<!-- 设定最大的请求连接 -->
<property name="maxPoolSize" value="500"/>
<!-- 最小的空闲值当空闲的连接数目比较 -->
<property name="minPoolSize" value="1"/>
<!--最大空闲值,超过60秒钟没有用就默认关闭, 默认值为 0 -->
<property name="maxIdleTime" value="0"/>
<!-- 连接数没有了的时候,获取的连接输 默认是 3 我们可以设定 -->
<property name="acquireIncrement" value="5"/>
<!-- 自动回收超时连接 -->
<property name="unreturnedConnectionTimeout" value="1"/>
<!--连接时间最长为10s ,超过了10s就自动收回了 -->
<property name="maxIdleTimeExcessConnections" value="10"/>
<!--最长回收时间-->
<property name="maxConnectionAge" value="10"/>
</bean>
<!-- 配置SessionFacrory ,其中我们是基于xml 配置使用LocalSessionFactoryBean这个类-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan">
<value>com.yellowcong.entity</value>
</property>
<!-- 配置一些SQL数据 这个以前是在hibernate.cfg.xml中配置的数据-->
<property name="hibernateProperties">
<!-- 第二种设定值的方式 -->
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">false</prop>
</props>
</property>
</bean>
<!-- 配置Spring的事物处理 -->
<!-- 创建事物管理器对象 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置Aop Spring 是通过Aop 来进行事物管理的 -->
<aop:config>
<!-- 设定事物 -->
<aop:pointcut id="allMethod" expression="execution(* com.yellowcong.dao.impl.*.*(..))"/>
<!-- 确定需要调用的方法 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethod"/>
</aop:config>
<!-- 导入tx 事物管理,配置事物管理 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- 这个是所有的方法都加入事物管理 -->
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
</beans>
jdbc-config-local.properties
数据库配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///yellowcong
username=root
password=root
log4j.properties
日志配置
log4j.rootLogger=WARN, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
#log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
# Print the date in ISO 8601 format
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN