1. myeclipse 中依次加载struts,spring,hibernate
2. 加上过滤器
WEN-INF/web.xml加上
<filter>
<filter-name>encodingfilter</filter-name>
<filter-class>com.yourcompany.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
EncodingFilter.java
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
public void init(FilterConfig cong) {
// do nothing
}
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) {
try {
srequest.setCharacterEncoding("UTF-8");
chain.doFilter(srequest, sresponse);
} catch (Exception e) {
e.printStackTrace();
}
}
public void destroy() {
// do nothing
}
}
3. 加上Log4j.properties日志
Log4j.properties
# Configure logging for testing: optionally with log file
log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
4. struts加载spring的两种方式
第一种:通过web.xml配置加载spring上下文环境,其配置方式如下
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
//通过listener加载
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
或者利用severlet类加载
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
第二种方式使用Struts 插件在struts-config.xml中
<plug-inclassName="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
这两种配置的明显区别就是,第一种方式可以配置多个spring配置文件。
5. Spring 整合 Struts
替换 struts-config.xml Action 的 Type
<action path="/login” type="org.springframework.web.struts.DelegatingActionProxy" />
在 Spring 配置文件applicationContext.xml中配置 Bean
要点: 通过 path 和 bean 的 name 进行匹配, 这两个值必须一样
<bean name="/login" class="com.test.struts.action.LoginAction"></bean>
6. 组织结构
dao 存放dao 接口
dao.hibernate 存放持欠层实现
model存放pojo
service 存放业务层接口
service.impl存放业务层实现
web存放UI action
7. 事务代理
Spring也提供了声明式事务管理。这是通过Spring AOP实现的。
Spring 中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通
过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。
applicationContext.xml
定义 sessionFactory
中定义 sessionFactory时注意
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
定义 dataSource
定义 sessionFactory
定义dao
类所定义的为dao实现类
<bean id="UserDAO" class="com.yourcompany.hibernate.UserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
定义transactionManager
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
定义代理的bean
UserService为业务层实现
userDao为spring在业务层对象中注入
transactionAttributes中定义了事务代理需要拦截方法的处理
<bean id="UserServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<bean class="com.yourcompany.hibernate.UserService">
<property name="userDao"><ref bean="UserDAO" /></property>
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
对事务物代理的别另一种写法
<bean id="baseTxProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
lazy-init="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="UserServiceProxy1" parent="baseTxProxy">
<property name="target">
<bean class="com.yourcompany.hibernate.UserService">
<property name="userDao">
<ref bean="UserDAO" />
</property>
</bean>
</property>
</bean>
8. POJO打印与测试
BaseObject.java
package com.yourcompany.hibernate;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
public class BaseObject extends ActionForm implements Serializable {
public static final Log log = LogFactory.getLog(BaseObject.class);
public String toString() {
return ToStringBuilder.reflectionToString(this,
ToStringStyle.MULTI_LINE_STYLE);
}
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, o);
}
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
}
9. 单元测试
继承 TestCase
public void testAdd() {
ApplicationContext ctx =new FileSystemXmlApplicationContext("D:\\wwwroot\\SSH\\WebRoot\\WEBINF\\
applicationContext.xml");
//new ClassPathXmlApplicationContext("springConfig.xml");
IUserService userService = (IUserService) ctx.getBean("UserService");
assertNotNull( "userService is NULL!", userService );
User user = new User();
user.setUsername("luo");
userService.save(user);
List list=userService.findByProperty("username",user.getUsername());
User user01=(User)list.get(0);
assertEquals(user01.getUsername(),"luo");
user01.setPassword("123456");
user01.setEmail("beauty2001@163.com");
user01.setBirthday("1980-8-8");
user01.setIntro("I love you!");
userService.attachDirty(user01);
userService.delete(user01);
}
chainmobile学习
1. 组织结构
struts定义UI相关的action和form
po定义pojo及相关的映射文件
filter定义相关的过滤器
dao 定义相关的dao接口与实现
business定义相关的业务逻辑接口与实现
调用流程
2. web.xml
定义了过滤器和struts配置
3. 过滤器
过滤器方法的定义
第一层过滤 对全站进行编码控制
public void doFilter(ServletRequest srequest, ServletResponse sresponse,FilterChain chain) {
try{
//编码
srequest.setCharacterEncoding("GBK");
//继续请求
chain.doFilter(srequest, sresponse);
}catch(Exception e){
e.printStackTrace();
}
}
第二层控制 判断用户是否有进入系统的权限
Struts action
Action form spring注入
Business接口dao接口
public void doFilter(ServletRequest srequest, ServletResponse sresponse,FilterChain chain) {
try {
HttpServletRequest requst = (HttpServletRequest) srequest;
HttpServletResponse response = (HttpServletResponse) sresponse;
HttpSession session = requst.getSession();
//从session从取出操作员对象,如果为空说明没有登录,将其转到登录页面.
Toperator operator = (Toperator) session.getAttribute("operator");
if (operator == null) {
response.sendRedirect("/chinamobile/index.html");
} else {
chain.doFilter(srequest, sresponse);
}
} catch (Exception e) {
e.printStackTrace();
}}
第三层控制 判断用户是否是管理员
public void doFilter(ServletRequest srequest, ServletResponse sresponse,FilterChain chain) {
try {
HttpServletRequest requst = (HttpServletRequest) srequest;
HttpServletResponse response = (HttpServletResponse) sresponse;
HttpSession session = requst.getSession();
//从session中取得操作员
Toperator operator = (Toperator) session.getAttribute("operator");
String ad=operator.getIsAdmin().toString();
//如果是普通业务员,则无此操作权限
if (operator == null || ad.equals("0")) {
response.sendRedirect("/chinamobile/web/main.jsp");
} else {
chain.doFilter(srequest, sresponse);
}
} catch (Exception e) {
e.printStackTrace();
}}
web.xml中配置
<filter>
<filter-name>encodingfilter</filter-name>
<filter-class>filter.EncodingFilter</filter-class>//过滤器对映的类
</filter>
<filter-mapping>
<filter-name>encodingfilter</filter-name>
<url-pattern>/*</url-pattern>//对那些资源进行过滤
</filter-mapping>
struts-config.xml定义action,actionForm,及数据转发
action类中
/*这个地方是用spring的关键所在
* 通过FileSystemXmlApplicationContext类得到spring配置文件
* 通过ApplicationContext得到应用程序上下文context.
* 用getBean(类对象名)方法即可得到业务层对象
* 直接用接口类就可以调用相关方法.
*/
具体代码示例:
ApplicationContext context=new
FileSystemXmlApplicationContext("C:\\eclipse\\workspace\\chinamobile\\src\\applicationContext.xml");
IOperator dooperator=(IOperator)context.getBean("operatorservice");
//Ioperator 为业务层接口 实现由spring托管注入
业务层对象
这里通过注入dao层实现,从而实现业务层对持久层的调用
具体代码示例:
//数据访问层operatordao受理业务对象OperatorImp ,由spring注入(托管)
<bean id="operatorservice" class="business.OperatorImp">
<property name="operator">
<ref bean="operatordao"/>
</property>
</bean>
//数据访问层注入sessionFactory,实现持久化
具体代码示例:
<bean id="operatordao" class="dao.OperatorDAOImp">
<property name="factory">
<ref bean="MySessionFactory"/>
</property>
</bean>
sessionFactory 与事物提交
private SessionFactory factory;
//增加操作
public boolean addOperator(Toperator operator) {
Session session=factory.openSession();
Transaction ts=session.beginTransaction();
session.save(operator);
ts.commit();
boolean isok=ts.wasCommitted();
session.close();
return isok;
}
public boolean setMoney(Tcharge charge) {
boolean isok=true;
Session session=factory.openSession();
Transaction ts=session.beginTransaction();
System.out.println(charge.getChargeCode());
Connection conn=session.connection();
try {
Statement state = conn.createStatement();
int i=state.executeUpdate("update TCHARGE set
charge="+charge.getCharge()+" where charge_code='"+charge.getChargeCode()+"'");
if(i==0){
isok=false;
}
} catch (SQLException e) {
e.printStackTrace();
}
ts.commit();
session.close();
return isok;
spring注入spring注入spring注入
业务层接口
业务层实现
数据访问层接口
数据访问层实现sessionFactory
数据访问层实现
}
分享到:
相关推荐
简单struts+spring+hibernate搭建,配置,适合初学者
DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
网上订餐系统(struts+spring+hibernate).rar 网上订餐设计主要采用采用MYSQL数据库进行数据表的设计,利用JSP的动态生成页面编程技术, 实现了用网络展示餐饮信息、浏览餐饮页面、注册客户、更改客户信息;同时,...
总结来说,这个demo项目提供了一个学习和实践Struts1.2、Spring2.5和Hibernate3.2集成的平台,涵盖了MVC设计模式、依赖注入、面向切面编程和对象关系映射等多个关键概念。通过深入研究和修改这个项目,开发者能够...
在IT行业中,SSH(Struts + Spring + Hibernate)是一个经典的Java Web开发框架组合,用于构建高效、可扩展的Web应用程序。本项目通过SSH框架实现了图书管理系统的图书修改和删除功能,下面将详细介绍这三个核心组件...
标题和描述中指出的文档《Struts+Spring+Hibernate开发实例.pdf》包含了关于这三个流行的Java开源框架结合使用的示例代码和相关知识点。Struts负责视图与控制器部分,Spring负责业务逻辑层及依赖注入,Hibernate负责...
Struts2、Spring2.5和Hibernate3.2是Java Web开发中经典的三大框架,它们的整合使用在过去的许多年里被广泛应用于企业级应用系统。这个完整的项目提供了从开发环境到运行环境的所有必要组件,包括数据库脚本,使得...
Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...
轻量级JavaEE企业应用实战_Struts2+Spring3+Hibernate整合开发_第3版.part1
struts2+spring2.5+hibernate3.2 + freemarker 全新功能实现的增删改查+freemarker 摸版 struts2 的方式自己去看简单。 spring2.5 是用注释来注入 hibernate3.2 是用ejb3注解映射关系 hibernate3 +个属性可以自动...
SSH(Struts+Spring+Hibernate)是一个经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。这个教务管理信息系统是基于SSH框架实现的,提供了完整的源代码,可以直接运行,便于开发者学习和参考。 **...
SSH(Struts+Spring+Hibernate)是Java Web开发中一种常见的技术栈,它将MVC设计模式、依赖注入和持久层框架集成为一个整体,大大提高了开发效率和代码的可维护性。下面我们将深入探讨SSH框架的各个组成部分及其结合...
轻量级JavaEE企业应用实战_Struts2+Spring3+Hibernate整合开发_第3版.part2
Struts2、Spring4和Hibernate4是Java Web开发中的三大主流框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个最新的项目系统整合了这三个框架,旨在提供一个高效、灵活且易于维护的开发环境。下面将详细...
总结来说,这个项目展示了如何集成Struts、Spring和Hibernate来构建一个具备用户登录验证和文件上传功能的Web应用。通过Struts处理HTTP请求,Spring管理对象和事务,以及Hibernate处理数据库操作,开发者可以更高效...
应广大网友需求,自己抽了点时间写了一个Struts2.0+Spring2.0+Hibernate3.1的登录及增删改查的完整演示示例,以此奉献给大家,由于本人水平有限,有写的不好的地方还望大家多提宝贵意见,如果有不明白的地方请关注我的...
Struts2、Spring4和Hibernate是Java开发中的三大框架,它们在构建企业级Web应用程序时起着核心作用。本教程将深入探讨这三个框架如何协同工作,以实现高效、灵活和可扩展的电子商务平台。 首先,Struts2是一个基于...
Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3
基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...