`
紫_色
  • 浏览: 144302 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java Spring-3.2.0+Struts-2.3.4+JPA2.0 整合

    博客分类:
  • J2EE
阅读更多

Spring-3.2.0+Struts-2.3.4+JPA2.0 整合首先我们要引入整合需要的包,所需要的包如下图:



 

 

这里需要注意与JPA的整合需要加入hibernate-entitymanager-4.1.6.Final.jar这个包,另外用Eclipse(MyEclipse)新建项目时不需要引入J2EE的相关jar包(MyEclipse新建时会自动引入,我们可以手动删除,如下图),因为Hibernate已经集成了JPA的相关jar包,jar包有冲突或过少都会整合失败.



 

 

引入相关的jar后我们要在classpath(src)下新建META-INF/persistence.xml(这个是固定的),这里我们使用MySQL数据库进行演示,其内容如下:

 

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"  
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence   
            http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
            
    <persistence-unit name="SHOPPINGJPA" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>  
        <properties>
            <!--配置Hibernate方言 -->  
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
            <!--配置数据库驱动 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <!--配置数据库用户名 -->
            <property name="hibernate.connection.username" value="root" />
            <!--配置数据库密码 -->
            <property name="hibernate.connection.password" value="619100" />
            <!--配置数据库url -->
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/shopping" />
            <!--设置外连接抓取树的最大深度 -->
            <property name="hibernate.max_fetch_depth" value="3" />
            <!--自动输出schema创建DDL语句 -->
            <property name="hibernate.hbm2ddl.auto" value="update" />    
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="javax.persistence.validation.mode" value="none"/>
        </properties>
    </persistence-unit>
</persistence>

 

 

 

然后我们新建在classpath(src)下log4j.properties日志文件:

 

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=D:/Project/Shopping/shop.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=warn, stdout

#log4j.logger.gd.hz.oa=debug

 

 

 

 

在新建Spring配置文件(在classpath(src)下)beans.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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" 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.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

	<context:annotation-config />
	<context:component-scan base-package="gd.hz.shopping" />

	<bean id="entityManagerFactory"
		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="persistenceUnitName" value="SHOPPINGJPA" />
	</bean>

	<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="entityManagerFactory" />
	</bean>
	
	<!-- 对@Transactional这个注解进行的驱动,
	这是基于注解的方式使用事务配置声明,这样在具体应用中可以指定对哪些方法使用事务。 -->
	<tx:annotation-driven transaction-manager="transactionManager" />
	
	<!-- 
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="find*" propagation="REQUIRED" />
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="modify*" propagation="REQUIRED" />
			<tx:method name="remove*" propagation="REQUIRED" />
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:pointcut id="bussinessService"
			expression="execution(public 
		* gd.hz.shopping.service.*.*(..))" />
		<aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice" />
	</aop:config>
 	-->
</beans>

这里我们需要注意,事务的声明有编程式和声明式,注释的为声明式事务管理,可提供统一的事物管理,这里在我们使用编程式声明这样可以更灵活的管理我们的事务.

 

 

 

然后我们新建一下我们的struts.xml(在classpath(src)下)文件:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8" />
</struts>
	

 

 

 

配置一下我们的web.xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:beans.xml</param-value>
	</context-param>

	<!-- 配置spring监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- 编码过滤器 -->
	<filter>
		<filter-name>encodingFilter</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>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<!-- 配置缓存清除监听器,负责处理由 JavaBean Introspector 功能而引起的缓存泄露 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>
	
	<!-- 声明session在view层关闭 -->
	<filter>
		<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
		<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
		<init-param>
			<param-name>entityManagerFactoryBeanName</param-name>
			<param-value>entityManagerFactory</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- 声明使用struts2 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<servlet>
		<servlet-name>InitParamServlet</servlet-name>
		<servlet-class>gd.hz.shopping.servlet.InitParamServlet</servlet-class>

		<!-- 配置商品类别列显示条数 -->
		<init-param>
			<param-name>productTypePageSize</param-name>
			<param-value>20</param-value>
		</init-param>
		<load-on-startup>5</load-on-startup>
	</servlet>
</web-app>

 

 

 

 

整合后的目录结构如下:



 

编写我们的测试程序:

编写实体类:

 

package gd.hz.shopping.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class ProductType {
	
	/**
	 * 类别ID
	 */
	private Integer id ;
	
	/**
	 * 用户名称
	 */
	private String name ;
	
	/**
	 * 备注,用于搜索引擎
	 */
	private String note ;
	
	/**
	 * 是否可见
	 */
	private Boolean visible = true ;
	
	@Id
	@GeneratedValue
	@Column(name="productId")
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}

	@Column(nullable=false , length=32)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	@Column(length=128)
	public String getNote() {
		return note;
	}
	public void setNote(String note) {
		this.note = note;
	}

	@Column(nullable=false)
	public Boolean getVisible() {
		return visible;
	}
	public void setVisible(Boolean visible) {
		this.visible = visible;
	}
}

 

 

 

 

编写Dao接口:

 

package gd.hz.shopping.dao;

public interface ProductTypeDao {
	/**
	 * 查询实体
	 * @param entityClass
	 * @param entityId
	 * @return
	 */
	public <T> T select(Class<T> entityClass , Object entityId) ;
}

 

 

编写Dao实现:

 

package gd.hz.shopping.dao.impl;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import gd.hz.shopping.dao.ProductTypeDao;

/**
 * 商品类别DAO层
 * @author Administrator
 *
 */
@Repository("productTypeDao")
@Transactional
public class ProductTypeDaoImpl implements ProductTypeDao {

	protected EntityManager entityManager ;

	@PersistenceContext
	protected void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}
	
	/**
	 * 根据ID查询用户
	 * readOnly=true 声明为只读
	 * propagation=Propagation.NOT_SUPPORTED:声明不需要事务,当不需要事务时挂起
	 */
	@Override
	@Transactional(readOnly=true , propagation=Propagation.NOT_SUPPORTED)
	public <T> T select(Class<T> entityClass, Object entityId) {
		return entityManager.find(entityClass , entityId);
	}

}

 

 

 

 

编写Service接口:

 

package gd.hz.shopping.service;


public interface ProductTypeService {
	public <T> T find(Class<T> entityClass , Object entityId) ;
}

 
 编写Service实现类:

 

 

package gd.hz.shopping.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import gd.hz.shopping.dao.ProductTypeDao;
import gd.hz.shopping.service.ProductTypeService;

@Service("productTypeMnager")
@Transactional
public class ProductTypeServiceImpl implements ProductTypeService {

	private ProductTypeDao productTypeDao = null ;
	
	@Resource(name="productTypeDao")
	public void setProductTypeDao(ProductTypeDao productTypeDao) {
		this.productTypeDao = productTypeDao;
	}

	@Override
	public <T> T find(Class<T> entityClass, Object entityId) {
		return productTypeDao.select(entityClass, entityId);
	}
}

 

 

 

新建struts控制类:

package gd.hz.shopping.action;

import javax.annotation.Resource;

import gd.hz.shopping.model.ProductType;
import gd.hz.shopping.service.ProductTypeService;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;

@Controller("testAction")
@Scope("prototype")
public class TestAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	
	private ProductTypeService productTypeService = null ; 
	private ProductType productType = null ;
	
	public ProductType getProductType() {
		return productType;
	}

	public void setProductType(ProductType productType) {
		this.productType = productType;
	}

	@Resource(name="productTypeMnager")
	public void setProductTypeService(ProductTypeService productTypeService) {
		this.productTypeService = productTypeService;
	}

	public String index() 
	{
		//查询ID为13的ProductType
		productType = productTypeService.find(ProductType.class , 13);
		return "index" ;
	}

}

 

新建jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s"  uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'Test.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
  </head>
  
  <body>
  <%--使用OGNL表达式--%>
    您好:<s:property value="productType.name"/><br>
  </body>
</html>

 

重新配置struts.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8" />
	
	<package name="org" namespace="/" extends="struts-default">
		<action name="testAction" class="testAction">
			<result name="index">/Test.jsp</result>
		</action>
	</package>
</struts>
	

 

输入URL:http://xxx/testAction!index  结果如下:



 

 

 

  • 大小: 48.8 KB
  • 大小: 44.4 KB
  • 大小: 51.3 KB
  • 大小: 100.5 KB
分享到:
评论

相关推荐

    spring-3.2.0+struts-2.3.4+hibernate-4.0.1

    本人的此jar合集只能保证SSH2的基础环境,至于更复杂的功能,可能此集合已经包含,或者您可以从您下载的Spring或者hibernate或者struts中寻找您需要的jar包,按要求添加即可。 【因本人能力有限,不能保证此jar集合...

    spring-3.2.0+struts-2.3.4+hibernate-4.1.5

    本人的此jar合集只能保证SSH2的基础环境,至于更复杂的功能,可能此集合已经包含,或者您可以从您下载的Spring或者hibernate或者struts中寻找您需要的jar包,按要求添加即可。 【因本人能力有限,不能保证此jar集合...

    spring-3.2.0+struts-2.3.4+hibernate-3.6.6

    本人的此jar合集只能保证SSH2的基础环境,至于更复杂的功能,可能此集合已经包含,或者您可以从您下载的Spring或者hibernate或者struts中寻找您需要的jar包,按要求添加即可。 【因本人能力有限,不能保证此jar集合...

    spring-3.2.0+struts-1.3.10+hibernate-4.0.1

    本人的此jar合集只能保证SSH2的基础环境,至于更复杂的功能,可能此集合已经包含,或者您可以从您下载的Spring或者hibernate或者struts中寻找您需要的jar包,按要求添加即可。 【因本人能力有限,不能保证此jar集合...

    spring-3.2.0+struts-1.3.10+hibernate-4.1.5

    本人的此jar合集只能保证SSH2的基础环境,至于更复杂的功能,可能此集合已经包含,或者您可以从您下载的Spring或者hibernate或者struts中寻找您需要的jar包,按要求添加即可。 【因本人能力有限,不能保证此jar集合...

    spring-context-3.2.0 spring-core-3.2.0 等齐全的Spring jar包

    包括`spring-core`、`spring-context`、`spring-webmvc`、`spring-web`、`spring-beans`、`spring-test`、`spring-jdbc`、`spring-orm`、`spring-aop`和`spring-tx`,它们都是3.2.0版本。让我们逐一了解这些组件的...

    spring-3.2.0+struts-1.3.10+hibernate-3.6.6

    本人的此jar合集只能保证SSH2的基础环境,至于更复杂的功能,可能此集合已经包含,或者您可以从您下载的Spring或者hibernate或者struts中寻找您需要的jar包,按要求添加即可。 【因本人能力有限,不能保证此jar集合...

    spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.1.jar

    在Java开发中,Spring框架是不可或缺的一部分,它提供了一种模块化、可扩展的方式来构建应用程序。在使用Spring框架时,有时会遇到导入源码或运行项目时出现类找不到的错误,这通常是因为缺少了必要的依赖库。在这个...

    spring-framework-3.2.0手册+jar+schema.zip

    spring.3.2.0jar包及使用手册!压缩包中有:spring-framework-3.2.0.RELEASE-schema.zip,spring-framework-3.2.0.RELEASE-docs.zip

    p4环境配置安装包(behavioral-model+gmock-1.7.0+p4c+protobuf-3.2.0+thrift-0.9.2)

    p4环境配置安装包(behavioral-model+gmock-1.7.0+p4c+protobuf-3.2.0+thrift-0.9.2),配置教程链接:https://blog.csdn.net/qq_34039018/article/details/88843937

    spring-test-3.2.0.RELEASE.jar

    总结起来,`spring-test-3.2.0.RELEASE.jar`是Spring框架中的一个重要组件,它为开发者提供了丰富的测试工具和策略,有助于构建健壮、可维护的Java应用。无论是在小型项目还是大型企业级系统中,深入理解和熟练使用...

    spring-aop-3.2.0.RELEASE.jar

    spring-aop-3.2.0.RELEASE.jar,一个Spring中AOP的jar包

    opencv3.2.0+opencv_contrib-3.2.0+vs2015编译的文件

    在本压缩包中,"opencv3.2.0+opencv_contrib-3.2.0+vs2015编译的文件" 提供了OpenCV 3.2.0版本以及opencv_contrib模块,后者包含了额外的实验性和非官方支持的模块,为开发者提供了更多的功能选择。这些文件是针对...

    spring-context-support-3.2.0.RELEASE.jar

    spring-context-support-3.2.0.RELEASE.jar

    spring-cglib-repack-3.2.0.jar

    cmd 进入源码目录 E:\Git\spring\spring-framework(我的目录) 执行: gradle cleanidea eclipse (根据自己的IDE工具选择eclipse或idea)和gradle objenesisRepackJar 以及 gradle cglibRepackJar ;

    spring-framework-3.2.0.RELEASE-dist

    3.2.0.RELEASE版本加强了对JPA(Java Persistence API)的支持,增强了事务管理和数据源管理的功能。 Spring框架的另一个亮点是其强大的集成能力。例如,它集成了Quartz调度器,用于定时任务的执行;整合了邮件服务...

    Spring3+Hibernate4+Struts2 jar包 SSH框架

    spring 3.2.0+hibernate 4.1.6+struts2整合需要的jar包 的目录 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar asm-commons-3.3.jar aspectjweaver-1.5.3.jar bonecp-0.7.1.RELEASE.jar cglib-2.1.3.jar ...

    spring-beans-3.2.0.RELEASE-javadoc.jar

    java spring-beans-3.2.0.RELEASE-javadoc.jar spring-beans-3.2.0.RELEASE-javadoc.jar

    spring-cglib-repack-3.2.0.jar和spring-objenesis-2.2.jar

    标题 "spring-cglib-repack-3.2.0.jar" 和 "spring-objenesis-2.2.jar" 指的是两个在Spring框架源代码构建过程中常用的库。这两个库在Spring框架的运行和开发中起着至关重要的作用。 首先,让我们详细了解一下...

    spring-context-support-3.2.0.RELEASE

    spring-context-support-3.2.0.RELEASE是Spring-context的扩展支持,用于MVC方面

Global site tag (gtag.js) - Google Analytics