搭建整合Struts2,Spring,Hibernate的Web开发框架

目录

一、在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 ModuleJava的版本为如上图所示的版本。



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,并通过浏览器进行访问,如下图:




二、配置Struts2SpringHibernate的依赖


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、测试






四、整合Struts2Spring


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、测试





五、整合Struts2SpringHibernate


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)新建工程:

http://www.codejava.net/frameworks/spring/spring-4-and-struts-2-integration-tutorial-part-1-xml-configuration


(2)基于XML的整合:

http://www.codejava.net/frameworks/struts/struts-2-spring-4-hibernate-4-integration-tutorial-part-1-xml-configuration


(3)基于注解的整合:

http://www.codejava.net/frameworks/struts/struts-spring-hibernate-integration-tutorial-part-2-java-based-and-annotations


(4)SpringMaven配置详解:

http://www.importnew.com/22859.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值