目录
一、在Eclipse创建Maven工程
二、配置Struts2、Spring和Hibernate的依赖
三、配置Struts2
四、整合Struts2与Spring
五、整合Struts2、Spring与Hibernate
开发环境:
JDK: jdk1.8.0_111
Maven: apache-maven-3.3.9
Tomcat: apache-tomcat-8.5.4
IDE: Eclipse JavaEE IDE for Web Developers.Version: Neon.1a Release (4.6.1)
System: Ubuntu16.04(64bit)
一、在Eclipse创建Maven工程
1、File > New > Project…
如下图,选择MavenProject
点击Next进入下一个页面。
2、在如下页面中,勾选“Createa simple project (skip archetype selection)”,并选取项目的Location(保存位置)。
注意:新建工程的所有文件都将会被直接保存到所选取目录,而不会另外新建目录。
点击Next进入下一个页面。
3、在如下页面中,填写工程的信息:GroupId、ArtifactId(项目名称)、Version、Packaging(选war)。
其中,Packaging中的war表示正在新建的Maven为Web项目。这时,IDE将会自动生成webapp等目录,并且自动配置好部署时的输
出目录的对应关系。
点击Finish完成工程的创建。
此时,工程目录结构如下图:
4、右键新建的工程,选择Properties,进入如下页面:
默认的DynamicWeb Module的版本较低,这里修改DynamicWeb Module和Java的版本为如上图所示的版本。
5、此时,由于缺少web.xml等文件,IDE会提示如下错误:
解决方法:从另一个DynamicWebProject中拷贝如下两个目录至src/main/webapp目录:META-INF、WEB-INF。并对WEB-INF
中的web.xml进行必要的修改,如下图所示:
6、此时,由于JDK安装版本与工程的默认编译版本不一致,IDE还会提示如下错误:
解决方法:在pom.xml文件中,添加maven-compiler-plugin插件,如下图所示:
7、测试Web工程
在src/main/webapp下新建index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Insert content here
</body>
</html>
启动Tomcat,并通过浏览器进行访问,如下图:
二、配置Struts2、Spring和Hibernate的依赖
在pom.xml文件中,添加三大框架的依赖,如下:
<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.lemonpi.web</groupId>
<artifactId>web-framework-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<!-- 主要依赖库的版本定义 -->
<spring.version>4.0.4.RELEASE</spring.version>
<struts2.version>2.3.31</struts2.version>
<hibernate.version>4.3.5.Final</hibernate.version>
<mysql.version>5.0.4</mysql.version>
<servlet.version>2.5</servlet.version>
<jsp.version>2.1</jsp.version>
</properties>
<dependencies>
<!-- Spring framework Begin -->
<!-- core部分包含4个模块:这里全部选取 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<!-- 如果有自己的日志实现如log4j,可以排除对commons-logging的依赖,没有日志实现而排除了commons-logging依赖,编译报错 -->
<!-- <exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions> -->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</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-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aop部分包含4个模块:这里选取1个 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- data access部分包含5个模块:这里选取3个 -->
<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>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring额外支持包,比如邮件服务、视图解析等 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring framework End -->
<!-- Struts framework Begin -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts2.version}</version>
</dependency>
<!-- struts2的spring插件 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts2.version}</version>
</dependency>
<!-- Struts framework End -->
<!-- Hibernate ORM framework Begin -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Hibernate ORM framework End -->
<!-- servlet接口 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<!-- jsp接口 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 这个插件用于解决如下错误: Java compiler level does not match the version of the installed Java project facet -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
三、配置Struts2
1、在web.xml中添加struts2的过滤器
<!-- Struts2的核心过滤器配置 Begin -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<!-- 通过初始化参数config指定配置文件,默认加载struts-default.xml,struts-plugin.xml,struts.xml(位于webapp/WEB-INF/classes下) -->
<param-name>config</param-name>
<param-value>
struts-default.xml,struts-plugin.xml,struts.xml
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<!-- 过滤器默认只拦截请求 -->
<!-- <dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher> -->
</filter-mapping>
<!-- Struts2的核心过滤器配置 End -->
2、在src/main/resources目录下新建struts.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstrutsPUBLIC
"-//ApacheSoftware Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<packagename="web-framework-demo"extends="struts-default"namespace="/">
<!--<action name="listProduct"class="listProductActionBean"> -->
<actionname="listProduct">
<resultname="success">/WEB-INF/views/ProductList.jsp</result>
</action>
</package>
</struts>
3、测试
四、整合Struts2与Spring
1、在web.xml中添加spring的监听器
<!-- Spring配置 Begin -->
<!-- 加载和关闭Spring Web容器,ContextLoaderListener监听器将在Web应用启动时使用指定的配置文件初始化Spring Web容器,在Web应用关闭时销毁Spring Web容器 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<!-- 指定Web应用上下文实现,默认实现是Spring提供的XmlWebApplicationContext -->
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.XmlWebApplicationContext
</param-value>
</context-param>
<context-param>
<!-- 指定加载文件位置,默认情况下将/WEB-INF/applicationContext.xml作为配置文件 -->
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/context/spring-*.xml
</param-value>
</context-param>
<!-- Spring配置 End -->
2、在src/main/resources/context目录下新建spring-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xmlns:cache="http://www.springframework.org/schema/cache" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:task="http://www.springframework.org/schema/task"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:repository="http://www.springframework.org/schema/data/repository"
xsi:schemaLocation="
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.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
default-lazy-init="false">
<description>Spring公共配置 </description>
<!-- 自动扫描指定包及其子包下的所有Bean类(注意要在上面的xmlns和xsi添加相应的Schema引用) -->
<context:component-scan base-package="com.lemonpi.web"/>
</beans>
3、编写com.lemonpi.web.product.action.ListProductAction
4、修改struts.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstrutsPUBLIC
"-//ApacheSoftware Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<packagename="web-framework-demo"extends="struts-default"namespace="/">
<actionname="listProduct_*"class="listProductAction"method="{1}">
<resultname="list">/WEB-INF/views/ProductList.jsp</result>
</action>
</package>
</struts>
5、测试
五、整合Struts2、Spring与Hibernate
1、创建数据库
shell>CREATEDATABASE `productsdb`;
2、添加数据库连接信息配置文件
在src/main/resources目录下新建jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/util_productsdb
jdbc.user=root
jdbc.password=
jdbc.maxPoolSize=40
jdbc.minPoolSize=2
jdbc.initialPoolSize=2
jdbc.maxIdleTime=30
3、添加hibernate配置文件
在src/main/resources/context目录下新建spring-hibernate.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xmlns:cache="http://www.springframework.org/schema/cache" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:task="http://www.springframework.org/schema/task"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:repository="http://www.springframework.org/schema/data/repository"
xsi:schemaLocation="
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.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
default-lazy-init="false">
<description>Spring-Hibernate配置 </description>
<!-- 连接池(C3P0)配置 Begin -->
<!-- 引入外部属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="${jdbc.driver}"
p:jdbcUrl="${jdbc.url}"
p:user="${jdbc.user}"
p:password="${jdbc.password}"
p:maxPoolSize="${jdbc.maxPoolSize}"
p:minPoolSize="${jdbc.minPoolSize}"
p:initialPoolSize="${jdbc.initialPoolSize}"
p:maxIdleTime="${jdbc.maxIdleTime}"/>
<!-- 连接池(C3P0)配置 End -->
<!-- Hibernate相关信息配置 Begin -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
p:dataSource-ref="dataSource">
<!-- 列出全部持久类 -->
<property name="annotatedClasses">
<list>
<value>com.lemonpi.web.product.domain.Product</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.connection.autocommit">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- Hibernate相关信息配置 End -->
<!-- Hibernate的事务配置 Begin -->
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory"/>
<!-- 以下两部分的配置将由注解来实现 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 配置事务增强处理Bean
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*" isolation="DEFAULT"
propagation="REQUIRED" timeout="5"/>
</tx:attributes>
</tx:advice>
通过AOP将事务增强处理织入Dao中的方法
<aop:config>
<aop:pointcut id="myPointcut" expression="bean(*ServiceImpl)"/>
<aop:advisor advice-ref="txAdvice"
pointcut-ref="myPointcut"/>
</aop:config> -->
<!-- 配置Hibernate的事务结束 End -->
</beans>
4、编写符合MVC层次结构的类
com.lemonpi.web.product.domain.Product
com.lemonpi.web.common.dao.BaseDao
com.lemonpi.web.common.dao.impl.BaseDaoHibernate4
com.lemonpi.web.product.dao.ProductDao
com.lemonpi.web.product.dao.impl.ProductDaoHibernate4
com.lemonpi.web.product.service.ProductService
com.lemonpi.web.product.service.impl.ProductServiceImpl
com.lemonpi.web.product.action.ListProductAction
5、测试
最终,工程目录结构如下图:
参考:
(1)新建工程:
(2)基于XML的整合:
(3)基于注解的整合:
(4)Spring的Maven配置详解:
http://www.importnew.com/22859.html