一、环境

SSH使用的版本:struts2.3.14、spring3.2.2、hibernate4.2.0

数据库:MYSQL

tomcat版本:apache-tomcat-7.0.42

 

二、所需要导入的jar包

2.1 struts2的jar包

  同时,整合hibernate还需要一下jar包:

2.2 spring3的jar包

2.3 hibernate4的jar包

  导入/lib/required文件夹下的所有jar包

  配置连接池需要导入/lib/optional/c3p0文件夹中的所有jar包

  数据库使用的是MYSQL,因此还需要mysql的连接驱动:mysql-connector-java-5.1.22-bin.jar

2.4 用于日志的jar包

log4j-1.2.17.jar,slf4j-api-1.7.5.jar,slf4j-log4j12-1.7.5.jar

2.5 AspectJ相关的jar包

aopalliance-1.0.jar,aspectjrt.jar,aspectjweaver.jar

三、web.xml配置

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
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>BillLogger</display-name> <!-- WebApp Root -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param> <!-- Struts2 Filter -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,com/billLogger/resources/struts.xml</param-value>
</init-param>
</filter>
<!-- Struts2 Filter Mapping -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- Log4j ConfigurationFile Location -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:com/billLogger/resources/log4j.properties</param-value>
</context-param> <!-- Spring Log4j Listener -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener> <!-- Spring Web Request Listener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>

  struts的配置文件struts.xml默认存放路径在/WEB-INF/classes目录下,即将struts.xml放在src的目录下。我这里把配置文件放在com.billLogger.resources包内,因此要在init-param标签设置config的值。

  需要注意的是,若设置了<param-name>config</param-name>参数,则struts-default.xml和struts-plugin.xml原来struts2默认加载的文件也要手动指定,否则不会自动加载。

四、配置struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant><!-- default set
to false for prod --> <package name="bills" namespace="/bills" extends="struts-default">
<action name="*" class="com.billLogger.actions.bill.{1}">
<result>/views/bills/{1}.jsp</result>
<result name="redirect" type="redirect">${redirectUrl}</result>
</action>
</package> <package name="root-redirect" namespace="/" extends="struts-default">
<action name="">
<result type="redirect">bills/Listing.action</result>
</action>
</package>
</struts>

五、配置hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/moneymanagement</property>
<property name="connection.username">root</property>
<property name="connection.password">tyc1234</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable c3p0 connection pooling,beacause hibernate pooling is not prod-ready.
Apparently connection.provider_class is needed in hibernate 3+ -->
<!-- <property name="connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property> -->
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.idle_test_period">30</property> <!-- Echo all ececuted SQLto stdout for debugging -->
<property name="show_sql">true</property> <!-- 对象与数据库表格映像文件 -->
<mapping resource="com/billLogger/mode/bill.hbm.xml" />
<mapping resource="com/billLogger/mode/category.hbm.xml" />
</session-factory>
</hibernate-configuration>

  在配置c3p0连接池的时候,hibernate3一定要写上

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>这句话是用于指定hibernate的连接方式,如果没有的话,将不会指定c3p0为hibernate的连接池,c3p0的连接类直接在核心jar包中。在hibernate4中c3p0有专用jar包,这里不需要设置connection.provider_class。

六、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:p="http://www.springframework.org/schema/p" 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"> <!-- SessionFactory -->
<bean id="sessionFactory" scope="singleton" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"<!-- 和hibernate3导入的不同 -->
    p:configLocation="classpath:/com/billLogger/resources/hibernate.cfg.xml" /> <!-- TransactionManager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"<!-- 和hibernate3导入的不同 -->
    p:sessionFactory-ref="sessionFactory" />
<!-- Spring Advice -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"></tx:method>
<tx:method name="*"></tx:method>
</tx:attributes>
</tx:advice>
<!-- Spring Aop Config -->
<aop:config>
<aop:pointcut id="pointcut" expression="
execution(* com.billLogger.services.*Impl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />
</aop:config> <!-- Dao -->
<bean id="billDao" class="com.billLogger.dao.BillDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean> <!-- Service -->
<bean id="billService" class="com.billLogger.services.BillService">
<property name="billDao">
<ref bean="billDao" />
</property>
</bean> <!-- Action -->
<bean id="billListAction" class="com.billLogger.actions.bill.Listing" scope="session">
<property name="billService">
<ref bean="billService" />
</property>
</bean>
</beans>

  这里想说下spring在对hibernate4的支持上和3是有区别的。在Hibernate4.0以上的版本,session已经自己封装了事务处理,所以在spring3.1以上的版本把HibernateTemplate去掉了。在hibernate4中获取session的时候,不需要再继承HibernateDaoSupport类,可以直接baseDao类中添加一个SessionFactory属性,再添上它的setter方法。我们使用的DAO层的实现层是要添加到applicationContext.xml中的(其实也就是spring的依赖注入)。

七、java代码

7.1 mode层

package com.billLogger.mode;

import java.sql.Date;

public class Bill {
Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
} Float money;
public Float getMoney() {
return money;
}
public void setMoney(Float money) {
this.money = money;
} Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
} Integer account;
public Integer getAccount() {
return account;
}
public void setAccount(Integer account) {
this.account = account;
}
}

7.2 DAO层

package com.billLogger.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory; import com.billLogger.mode.Bill; /*
*@author Jeniss 2013-10-14 下午4:09:26
*@tag
*/
public class BillDao{
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} public Session getSession() {
return sessionFactory.getCurrentSession();
} public List<Bill> getAllBills() {
String hql = "from Bill";
Query query = getSession().createQuery(hql);
List<Bill> bills = query.list();
return bills;
}
}

7.3 service层

package com.billLogger.services;

import java.util.List;

import com.billLogger.dao.BillDao;
import com.billLogger.mode.Bill; /*
*@author Jeniss 2013-10-14 下午4:13:32
*@tag
*/
public class BillService {
private BillDao billDao;
public void setBillDao(BillDao billDao) {
this.billDao = billDao;
} public List<Bill> getAllBills() {
List<Bill> bills = billDao.getAllBills();
return bills;
}
}

7.4 action层

package com.billLogger.actions.bill;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; /*
*@author Jeniss 2013-10-8 下午5:23:37
*@Tag
*/
public class ActionBase extends ActionSupport implements RequestAware, SessionAware, ApplicationAware {
private static final long serialVersionUID = 1L; protected Map<String, Object> request;
protected Map<String, Object> session;
protected Map<String, Object> application;
public Map<String, Object> getRequest() {
return request;
} public Map<String, Object> getSession() {
return session;
} public Map<String, Object> getApplication() {
return application;
} @Override
public void setApplication(Map<String, Object> application) {
this.application = application;
} @Override
public void setSession(Map<String, Object> session) {
this.session = session;
} @Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
}
package com.billLogger.actions.bill;

import java.util.List;

import com.billLogger.mode.Bill;
import com.billLogger.services.BillService; public class Listing extends ActionBase{
private static final long serialVersionUID = 1L; private BillService billService;
public void setBillService(BillService billService) {
this.billService = billService;
} List<Bill> bills;
public List<Bill> getBills() {
return bills;
} public String execute() throws Exception{
bills = billService.getAllBills();
return SUCCESS;
}
}

  环境搭建成功。这次搭建环境花了两天的时间,在搭的过程中,主要是对打印的日志不太熟悉,造成了查错能力降低。通过搭建这个环境,对SSH各个层的作用认识更形象了。

  hibernate通过Session接口实现了对数据的操作(例如:对数据库的数据进行增删改查操作),其SessionFactory接口可以调用Session。

  spring主要特性是DI和AOP。在SSH中的作用是连接hibernate和spring。在applicationContext文件中定义sessionFactory,通过设置配置文件路径,实现对hibernate配置文件的注入和解析。定义sessionManager(事务声明),通过注入sessionFactory,得到hibernate session,实现hibernate的事务管理。把sessionFactory注入DAO层,在到daoImpl类中可以使用hibernate session。再通过依赖注入,实现service层和action。

  struts则是控制action和jsp页面的连接。

最新文章

  1. 08void
  2. 【iScroll源码学习04】分离IScroll核心
  3. HDU-1698 JUST A HOOK 线段树
  4. JS待定&#183;&#183;&#183;
  5. ajax状态码
  6. Scala基础 - 下划线使用指南
  7. LeetCode算法题-Longest Uncommon Subsequence I(Java实现)
  8. oracle 中如何查看某个表所涉及的存储过程
  9. HDU 4780 Candy Factory(拆点费用流)
  10. 文字创作类App分享-简书
  11. 微信小程序:bindtap等事件传参
  12. C高级第三次作业
  13. 00-02.PHP 网站假设 之 学习PHP语法 [James建站]
  14. 【LOJ】#2446. 「NOI2011」 NOI 嘉年华
  15. 电力项目十八--DOM对象的ajax
  16. xcode上真机调试iphone4s出现“There was an internal API error.”解决方案
  17. 我与前端之间不得不说的三天两夜之jQuery
  18. Memory Allocation with COBOL
  19. [CF1000E]We Need More Bosses
  20. 使用iframe实现页面无刷新提交表单

热门文章

  1. 搜索框+ 定时器+Bug解决
  2. apache2.4.9编译安装
  3. 【JAVASCRIPT】call和apply的用法以及区别
  4. Psychos in a Line CodeForces - 319B (单调栈的应用)
  5. TF启程
  6. CSS3 zoom 属性
  7. programble blending --frame buffer fetch
  8. java中int转成String位数不足前面补零
  9. ES head
  10. cookie实例---显示上一次访问的时间与java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value