SSH开发实践part4:Spring整合Struts
1
好了,前面spring与hibernate的整合开发我们基本上讲完了,现在要开始服务层的开发,也就是处理事务的action,在这里我们需要引入spring与struts的整合。也就是将action也作为一个bean交由spring进行管理。当然首先我们要完成相关的配置。
2 配置
第一步当然是现在项目中引入struts包,也可以通过IDE快速的引入。
然后就是修改web.xml的配置信息:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <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>
依次简单解释一下:
第一个是通过配置ContextLoaderListener监听器,使容器启动时,自动加载applicationContext配置,因为它实现了ServletContextListener这个接口,容器启动时会自动执行它实现的方法。
然后配置我们applicationcontext.xml所在位置,如果是默认位置的话也可以不用配置。
最后两个大家都比较熟悉了,就是struts拦截器。
3 编写服务层
同样的,按照分层设计的思想,这里我们同样采样接口开发的设计模式。先编写服务器层接口类,然后在编写具体的实现类。
比如这里我们编写了一个关于员工的服务层接口:
public interface EmpService {
public static final int LOGIN_FAIL=0;
public static final int LOGIN_EMP=1;
public static final int LOGIN_MGR=1;
public int login(Manager mgr);
public String punch(Employee emp);
public Set<AttendType> getAllAttendType();
public boolean addApplication(Employee emp);
}
接口中定义了一些常量以及方法,然后我们在实现类中进行具体的实现:
public class EmpServiceImp implements EmpService{
private EmployeeDAO empDao;
private ManagerDAO mgrDao;
public EmployeeDAO getEmpDao() {
return empDao;
}
public void setEmpDao(EmployeeDAO empDao) {
this.empDao = empDao;
}
public ManagerDAO getMgrDao() {
return mgrDao;
}
public void setMgrDao(ManagerDAO mgrDao) {
this.mgrDao = mgrDao;
}
@Override
public int login(Manager mgr) {
// TODO Auto-generated method stub
if( empDao.findByNameAndPass(mgr).size() >= 1){
return LOGIN_EMP;
}else if(mgrDao.findMgrByNameAndPass(mgr).size() >= 1){
return LOGIN_MGR;
}else{
return LOGIN_FAIL;
}
}
@Override
public String punch(Employee emp) {
// TODO Auto-generated method stub
return null;
}
@Override
public Set<AttendType> getAllAttendType() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean addApplication(Employee emp) {
// TODO Auto-generated method stub
return false;
}
}
这里需要注意的是:我们使用的DAO类(比如EmployeeDAO)都是接口层,而不是具体的实现类,也就是说这个时候我的action是不知道到时候要调用哪个dao实现类的。
怎么办呢?自然想到spring对于bean对象的管理,我们可以在配置文件中配置,像action实现类中注入其所需的dao实现类。
4 注入配置
ok这里就比较简单啦,又回到了spring的配置上:
<bean id="daoTemplate" abstract="true" lazy-init="true" p:sessionFactory-ref="sessionFactory"/>
<bean id="EmployeeDao" class="com.souvenir.daoImp.EmployeeDaoImp" parent="daoTemplate"/>
<bean id="PaymentDao" class="com.souvenir.daoImp.PaymentDaoImp" parent="daoTemplate"/>
<bean id="ManagerDao" class="com.souvenir.daoImp.ManagerDaoImp" parent="daoTemplate"/> ...... <!-- action配置 -->
<bean id="EmpManager" class="com.souvenir.serviceImp.EmpServiceImp">
<property name="empDao" ref="EmployeeDao" />
<property name="mgrDao" ref="ManagerDao" />
</bean>
通过配置可以看出我们向action实现类中注入了两个bean对象,其分别对应我们之前定义好的dao实现类。
5 ok,至此关于SSH集成开发配置的内容就结束了,归根到底其核心还是通过spring来管理dao与action这些bean对象。
剩下的事就是前端开发然后调用action进行处理,也就是struct的配置啦,这里就不再赘述了。
SSH开发实践part4:Spring整合Struts的更多相关文章
- spring 整合struts
1.例子:未被spring整合 struts.xml 的配置文件 <constant name="struts.enable.DynamicMethodInvocation" ...
- Spring整合Struts的两种方式介绍
1 使用Spring托管Struts Action 该种方式就是将Struts Action也视为一种Bean交给Spring来进行托管,使用时Struts的配置文件中配置的Action的classs ...
- 8 -- 深入使用Spring -- 7... Spring 整合 Struts 2
8.7 Spring 整合 Struts2 8.7.1 启动Spring 容器 8.7.2 MVC框架与Spring整合的思考 8.7.3 让Spring管理控制器 8.7.4 使用自动装配
- SSH开发实践part1:Spring与Hibernate整合
1 之前把SSH看完了,现在从头开始进行项目实践.现在讲整个过程中的点滴记录下来,希望对后来者有参考. 2 SSH是一个轻量级的java开发框架,struts负责MVC开发模式中的controller ...
- 【SSH】Spring 整合 Struts
添加 spring-struts-3.2.9.RELEASE.jar struts-config.xml 添加 <controller> <set-property property ...
- spring整合struts
整合目标:使用spring的bean管理struts action service. 整合步骤: 一.加入spring 1.加入spring jar包 2.配置web.xml文件 <contex ...
- Spring整合struts的配置文件存放问题
只使用Spring的时候,我把applicationContext.xml是放在项目的src路径下的,这样使用ClassPathXmlApplicationContext很方便嘛 整合了struts之 ...
- 后端开发实践:Spring Boot项目模板
在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为"第0个迭代"要做的事情.但是,当项目运行了一段时间之后再来反 ...
- spring 整合 struts
struts配置 objectFactory 在struts.xml添加,用spring工厂管理action对象 <constant name="struts.objectFactor ...
随机推荐
- IOS中GPS定位偏移纠正(适用于Google地图)
在这个神奇的国度里,我们总得学习一些有中国特色的东东,例如“火星坐标”.也许有人还不知道这是什么玩意,我就简要介绍一下吧. 如果你有带GPS模块的智能手机,打开定位功能,然后访问Google ...
- 从零开始学ios开发(二):Hello World!来啦!
今天看了书的第二章,主要介绍了一下Xcode的使用方法和一些必要的说明,最后做了一个“Hello World!”的小程序,其实就是在屏幕上用一个Label显示“Hello World!”,一行代码都没 ...
- ASP.NET Web API 2 对 CORS 的支持
CORS概念 跨域资源共享 (CORS) 是一种万维网联合会 (W3C) 规范(通常被认为是 HTML5 的一部分),它可让 JavaScript 克服由浏览器施加的同域策略安全限制. 所谓同域策略, ...
- 华硕电脑安装ubuntu出现问题及决方案
问 题 一:华硕电脑安装ubuntu时无线网络禁用解决方案:打开终端(Ctrl+alt+t)运行命令sudo rmmod acer-wmi,然后开启无线,连接上后便可以上网(附上ubuntu论坛上讨论 ...
- MDI窗体 的再度思考
早在敲学生管理系统的时候,青山师哥就跟我说过 MDI 窗体 跟 子窗体的事情,当时只是简单的查询.小小的用了一下,没有太在意. 当再次面对着这个东西更深层的时候才想起师哥那句话.“好好研究一下这个东 ...
- 仿照CREATE_FUNC实现CCLayer中的返回CCScene* 的静态函数,宏包装成CREATE_SCENE(XXLayer)
#define CREATE_SCENE(__TYPE__)\ CCScene *scene()\ { CCScene *scene=CCScene::create();\ __TYPE__ *lay ...
- 不会JS中的OOP,你也太菜了吧!(第一篇)
一.你必须知道的 1) 字面量 2) 原型 3) 原型链 4) 构造函数 5) 稳妥对象(没有公共属性,而且其方法也不引用this的对象.稳妥对象适合用在安全的环境中和防止数据被其它程序改变的时候) ...
- 15、android 用toast实现简单的进度显示
if(mtoast!=null) { mtoast.setText(progress); } else { mtoast=Toast.makeText(getApplicationContext(), ...
- PowerDesigner中创建Oracle表全过程记录
本文记录如何在PowerDesigner中创建一个Oracle结构的表. 在进行本文阅读之前,需要在PowerDesigner进行 DBMS修改,DataBase创建,用户创建,表空间创建. 1. ...
- 单点登陆CAS安装过程中可能遇到的问题
可能遇到的问题: 错误: java.security.cert.CertificateException: No name matching localhost found 原因: keystore里 ...