【j2ee spring】12、整合SSH框架(终结版)
【j2ee spring】12、整合SSH框架(终结版)
最后,我们把整个项目的截图,代码发一下,大家不想下载那个项目的话,可以在这里看到所有的代码(因为那个项目需要一个下载积分,真不多= =,我觉得我搞了那么久,收点积分应该不过分吧。。。嘿嘿)
这里,我尽量用截图来搞,免得复制粘贴,怪烦的
一、项目整体截图
二、开始全部代码
Person.java
Person.hbm.xml
PersonService.java
package cn.cutter_point.service; import java.util.List; import cn.cutter_point.bean.Person; public interface PersonService { //这个业务bean实现几个方法,保存,更新,删除,获取,获取全部 public abstract void save(Person persnon); public abstract void update(Person person); public abstract void delete(Integer personid); public abstract Person getPerson(Integer personid); public abstract List<Person> getPersons(); }
PersonServiceBean
/** * 功能:实现SSH的整合hibernate4+spring4+struts2,这个是一个实体bean * 时间:2015年3月28日21:13:10 * author:cutter_point * 文件:Person.java */ package cn.cutter_point.service.impl; import java.util.List; import javax.annotation.Resource; import org.hibernate.SessionFactory; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import cn.cutter_point.bean.Person; import cn.cutter_point.service.PersonService; @Transactional public class PersonServiceBean implements PersonService { @Resource //这个就是依赖注入 private SessionFactory sessionFactory; //这个业务bean实现几个方法,保存,更新,删除,获取,获取全部 @Override public void save(Person person) { sessionFactory.getCurrentSession().persist(person); } @Override public void update(Person person) { sessionFactory.getCurrentSession().merge(person); } @Override public void delete(Integer personid) { sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession().get(Person.class, personid)); } @Override @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true) public Person getPerson(Integer personid) { return (Person) sessionFactory.getCurrentSession().get(Person.class, personid); } @SuppressWarnings("unchecked") //取消警告 @Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true) @Override public List<Person> getPersons() { return sessionFactory.getCurrentSession().createQuery("from Person").list(); } }
PersonAction.java
/** * 功能:集成ssh框架 * author:cutter_point * 时间:2015年3月29日17:30:07 */ package cn.cutter_point.web.action; import javax.annotation.Resource; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import cn.cutter_point.bean.Person; import cn.cutter_point.service.PersonService; import com.opensymphony.xwork2.ActionSupport; public class PersonAction extends ActionSupport { @Resource private PersonService personService; //先按名字注入,如果找不到的话就按类型注入 private String name; //名字 public String getName() { return name; } public void setName(String name) { this.name = name; } public String add() throws Exception { personService.save(new Person(name)); return "add"; } public String list() throws Exception { /* //获取实例,方法1 ServletContext sc = ServletActionContext.getRequest().getSession().getServletContext(); WebApplicationContext wac = (WebApplicationContext) sc.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); //方法2 WebApplicationContext webApplicationContext = WebApplicationContextUtils. getRequiredWebApplicationContext(ServletActionContext.getServletContext()); if(wac == webApplicationContext) { System.out.println("ok!!!"); } PersonService personService = (PersonService) wac.getBean("personServiceBean");*/ HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute("persons", personService.getPersons()); return "list"; } }
PersonServiceTest.java
package junit.test; import static org.junit.Assert.*; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.cutter_point.bean.Person; import cn.cutter_point.service.PersonService; public class PersonServiceTest { private static PersonService personService; @BeforeClass public static void setUpBeforeClass() throws Exception { try { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); personService = (PersonService) applicationContext.getBean("personServiceBean"); } catch (Exception e) { e.printStackTrace(); } } @Test public void testSave() { // fail("Not yet implemented"); personService.save(new Person("cutter_point")); } @Test public void testUpdate() { // fail("Not yet implemented"); Person person = personService.getPerson(2); //.... person.setName("小丽"); personService.update(person); } @Test public void testDelete() { // fail("Not yet implemented"); personService.delete(9); } @Test public void testGetPerson() { Person person = personService.getPerson(2); System.out.println(person.getName()); System.out.println("关闭数据区=========="); try { Thread.sleep(1000*30);//15秒 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("第二次获取数据"); person = personService.getPerson(2); System.out.println(person.getName()+" ++++++++++"); } @Test public void testGetPersons() { List<Person> persons = personService.getPersons(); for(Person person : persons) { System.out.println(person.getName()); } } }
applicationContext.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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.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-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <context:annotation-config /> <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/cutter_point?useUnicode=true&characterEncoding=UTF-8" /> <property name="username" value="root" /> <property name="password" value="xiaofeng2015" /> </bean> --> <!-- 推荐配置 --> <bean id="myDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <!-- results in a setDriverClassName(String) call --> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/cutter_point"/> <property name="username" value="root"/> <property name="password" value="xiaofeng2015"/> <!-- 连接池启动时的初始值 --> <property name="initialSize" value="1"/> <!-- 连接池的最大值 dbcp2里面似乎没有--> <!-- <property name="maxActive" value="500"/> --> <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 --> <property name="maxIdle" value="2"/> <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --> <property name="minIdle" value="1"/> </bean> <!-- <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> 扫描实体类 <property name="packagesToScan" value="com.tzl"/> hibernate 配置 <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true hibernate.format_sql=true hibernate.hbm2ddl.auto=none 其他取值 create、create-drop、update、validate hibernate.current_session_context_class=thread hibernate.temp.use_jdbc_metadata_defaults=false </value> </property> </bean> --> <!-- hibernate二级缓存的配置 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- configuration elided for brevity --> <property name="dataSource" ref="myDataSource" /> <property name="mappingResources"> <list> <!-- 映射文件 --> <value>cn/cutter_point/bean/Person.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <!-- 用来配置hibernate的属性配置 --> <value> hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.hbm2ddl.auto=update <!--其他取值 create、create-drop、update、validate none --> hibernate.show_sql=true hibernate.format_sql=true <!-- 开启二级缓存功能 --> hibernate.cache.use_second_level_cache = true hibernate.cache.use_query_cache = false hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactory <!-- hibernate3的二级缓存配置 --> <!-- <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> --> </value> </property> </bean> <!-- 配置事务管理器,针对hibernate --> <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 采用注解的方式管理事务 --> <tx:annotation-driven transaction-manager="txManager"/> <bean id="personServiceBean" class="cn.cutter_point.service.impl.PersonServiceBean" /> <bean id="PersonAction" class="cn.cutter_point.web.action.PersonAction" autowire="byName" /> </beans>
ehcache.xml
<!-- ~ Hibernate, Relational Persistence for Idiomatic Java ~ ~ Copyright (c) 2007, Red Hat Middleware LLC or third-party contributors as ~ indicated by the @author tags or express copyright attribution ~ statements applied by the authors. All third-party contributions are ~ distributed under license by Red Hat Middleware LLC. ~ ~ This copyrighted material is made available to anyone wishing to use, modify, ~ copy, or redistribute it subject to the terms and conditions of the GNU ~ Lesser General Public License, as published by the Free Software Foundation. ~ ~ This program is distributed in the hope that it will be useful, ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License ~ for more details. ~ ~ You should have received a copy of the GNU Lesser General Public License ~ along with this distribution; if not, write to: ~ Free Software Foundation, Inc. ~ 51 Franklin Street, Fifth Floor ~ Boston, MA 02110-1301 USA --> <ehcache> <!-- Sets the path to the directory where cache .data files are created. If the path is a Java System Property it is replaced by its value in the running VM. The following properties are translated: user.home - User's home directory user.dir - User's current working directory java.io.tmpdir - Default temp file path --> <!-- 缓存文件存放到硬盘哪里 --> <diskStore path="G:\Workspaces\MyEclipse Professional 2014\ssh\cacheFile" /> <!--Default Cache configuration. These will applied to caches programmatically created through the CacheManager. The following attributes are required for defaultCache: maxInMemory - Sets the maximum number of objects that will be created in memory eternal - Sets whether elements are eternal. If eternal, timeouts are ignored and the element is never expired. timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used if the element is not eternal. Idle time is now - last accessed time timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used if the element is not eternal. TTL is now - creation time overflowToDisk - Sets whether elements can overflow to disk when the in-memory cache has reached the maxInMemory limit. --> <!-- defaultCache节点为缺省的缓存策略 maxElementsInMemory 内存中最大允许存在的对象数量 eternal 设置缓存中的对象是否永远不过期 overflowToDisk 把溢出的对象存放到硬盘上 timeToIdleSeconds 指定缓存对象空闲多长时间就过期,过期的对象会被清除掉 timeToLiveSeconds 指定缓存对象总的存活时间 diskPersistent 当jvm结束是是否持久化对象 diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间 --> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" /> <!-- 特殊配置项目 --> <cache name="cn.cutter_point.bean.Person" maxElementsInMemory="100" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true" /> </ehcache>
struts.xml
addperson.jsp
personlist.jsp
web.xml
三、使用的jar包
好的就这么多了,等会上传项目
连接地址:http://download.csdn.net/detail/cutter_point/8548263
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。