package com.bolo.examples.common.web;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.bolo.examples.common.orm.hibernate3.HibernateDao;
import com.bolo.examples.common.utils.ReflectUtils;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
/**
* 扩展ActionSupport的泛型基类
* <br />封装CRUD基本方法,可在子类进行覆盖重写
* @author 菠萝大象
* @param <T> 实体类型
*/
public class StrutsAction<T> extends ActionSupport implements ModelDriven, Preparable{
protected Integer id; //实体类的主键ID
protected Class<T> entityClass; //T的反射类型
protected T entity; //T类型对象
protected List<T> list; //页面列表list
protected Logger logger = LoggerFactory.getLogger(StrutsAction.class); //日志记录
public static final String RELOAD = "reload"; //重定向的返回字符串
public static final String VIEW = "view"; //查看方法的返回字符串
public static final String REDIRECT = "redirect"; //重定向,@Result type属性对应的值
public static final String REDIRECT_ACTION = "redirectAction"; //Action之间重定向,@Result type属性对应的值
@Autowired
@Qualifier("hibernateDao")
protected HibernateDao hibernateDao;
/**
* 在构造函数中利用反射机制获得参数T的具体类
*/
public StrutsAction(){
this.entityClass = ReflectUtils.getClassGenricType(getClass());
}
/**
* Action的默认执行方法
*/
@Override
public String execute() throws Exception{
doListEntity();
return SUCCESS;
}
/**
* 进入新增或修改页面
*/
@Override
public String input() throws Exception{
doInputEntity();
return INPUT;
}
/**
* 进入查看页面
*/
public String view() throws Exception{
doViewEntity();
return VIEW;
}
/**
* 新增或修改
*/
public String save() throws Exception{
doSaveEntity();
return RELOAD;
}
/**
* 删除
*/
public String delete() throws Exception{
doDeleteEntity();
return RELOAD;
}
/**
* execute回调方法,处理进入主页面的相关逻辑,可在子类中覆盖此方法
*/
protected void doListEntity() throws Exception{
list = hibernateDao.getAll(entityClass);
}
/**
* input回调方法,处理进入新增或修改页面前的相关逻辑,可在子类中覆盖此方法
*/
protected void doInputEntity() throws Exception{}
/**
* view回调方法,处理进入查看页面的相关逻辑,可在子类中覆盖此方法
*/
protected void doViewEntity() throws Exception{}
/**
* save回调方法,处理删除的相关逻辑,可在子类中覆盖此方法
*/
protected void doSaveEntity() throws Exception{
try {
hibernateDao.save(entity);
}catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
/**
* delete回调方法,处理删除相关逻辑,可在子类中覆盖此方法
*/
protected void doDeleteEntity() throws Exception{
try {
hibernateDao.delete(entityClass,id);
}catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
public void prepareInput() throws Exception {
prepareEntity();
}
public void prepareSave() throws Exception {
prepareEntity();
}
public void prepareView() throws Exception {
prepareEntity();
}
protected void prepareEntity() throws Exception{
if (id != null) {
entity = (T)hibernateDao.get(entityClass,id);
} else {
entity = entityClass.newInstance();
}
}
/**
* 取得HttpSession函数
*/
public static HttpSession getSession() {
return ServletActionContext.getRequest().getSession();
}
/**
* 取得HttpRequest函数.
*/
public static HttpServletRequest getRequest() {
return ServletActionContext.getRequest();
}
/**
* 取得HttpResponse函数
*/
public static HttpServletResponse getResponse() {
return ServletActionContext.getResponse();
}
/**
* ModelDriven接口定义的方法,返回实体对象
*/
public T getModel() {
return entity;
}
/**
* 页面列表显示的list
*/
public List getList() {
return list;
}
/**
* 获取页面传递的id值
* @param id 主键ID
*/
public void setId(Integer id) {
this.id = id;
}
/**
* Preparable接口的方法,设置为空方法体是屏蔽它去拦截所有的方法
*/
public void prepare() throws Exception {}
}
在IT行业中,SSH(Struts2、Spring和Hibernate)是一个常见的企业级Web应用程序开发框架组合。这个基于注解的SSH可运行完整程序是利用这三个框架的最新版本——Struts2.1.6、Spring2.5和Hibernate3.5进行整合的示例,而且所有的配置都是通过注解来完成的,这大大简化了传统XML配置的复杂性。下面将详细解释这些技术及其注解的应用。 Struts2是MVC(模型-视图-控制器)架构的一个实现,它提供了强大的动作控制和拦截器机制。Struts2的注解如`@Action`、`@Result`和`@InterceptorRef`允许开发者在类或方法级别定义操作行为,结果映射和拦截器链,使得代码更加清晰和模块化。 Spring框架是Java企业级应用的核心,它提供了依赖注入(DI)和面向切面编程(AOP)等核心功能。Spring2.5中引入了更多的注解,如`@Autowired`用于自动装配bean,`@Service`、`@Repository`和`@Controller`用于标记业务层、数据访问层和展示层的组件,还有`@Transactional`用于声明式事务管理。这些注解减少了XML配置,提高了开发效率。 再者,Hibernate3.5是一个流行的ORM(对象关系映射)工具,它将数据库操作与Java对象模型相结合。Hibernate的注解如`@Entity`定义实体类,`@Table`指定数据库表名,`@Id`定义主键,`@GeneratedValue`生成主键值,`@ManyToOne`、`@OneToMany`等定义关联关系。这些注解使得数据库模型的定义更加直观,无需编写复杂的HQL或SQL语句。 在整合SSH时,通常会使用Spring来管理Struts2的Action类,以及处理Hibernate的SessionFactory和DAO。Spring的`@Configuration`和`@Bean`注解可以用来创建和配置bean,而Struts2和Hibernate的配置可以通过Spring的`<context:component-scan>`标签扫描带有特定注解的类来自动配置。 此压缩包中的"ssh2"可能包含以下内容:Struts2的配置文件(如struts.xml)、Spring的配置文件(如applicationContext.xml)、Hibernate的配置文件(如hibernate.cfg.xml)、实体类、DAO类、Service类、Action类以及相关的测试和资源文件。通过运行这个完整的程序,开发者可以学习如何在实际项目中有效地利用SSH框架和注解进行开发。 这个基于注解的SSH程序是一个很好的学习资源,它展示了如何在不使用大量XML配置的情况下,利用现代Java企业级框架进行高效开发。通过研究和实践这个示例,开发者能够掌握SSH框架的注解用法,提高开发效率,并为构建健壮的Web应用程序打下坚实基础。













































































































































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 1
- 资源: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Tipszotero搜索引擎的设置,更好地抓取论文信息
- ,,MD500E源码和代码解析文档 代码包含了同步机FOC控制算法、电阻、电感、磁链、反电动势、死区补偿、过调制限制、弱磁等算法,支持无感和有感,亲自带电机运行过 ,关键词:MD500E源码; 代
- 基于 Java AIO 和 T-IO: 利用 Java 异步 I/O 和 T-IO 提供高效性能 支持常用的 Spring-Boot 注解,但不使用 Spring 的 IOC 和 AOP
- PyTorch开源机器学习库简介与入门教程-适用于AI开发
- Nova for mac 代码编辑工具
- ,,FOC 无感 混合磁链观测器 电机控制 代码 PMSM MiniDD(直驱)电机变频无感程序,包含偏心,重量,共振等感知算法,所有算法都不基于库函数,MCU底层配置完全手写 ,核心关键词:FO
- 5G+AI+物联网智慧医院信息化顶层设计解决方案 (1).ppt
- 大数据湖总体规划及一体化运营管理建设方案.ppt
- 大数据集群治理与数据治理解决方案.ppt
- ,,流水线贴膜机完成项目程序,包含PLC程序和触摸屏程序,程序内 包含上下气缸控制,夹紧气缸控制,输送带电机控制,贴膜伺服控制,旋转电机控制等类容,非常适合学习简单控制工艺及运动控制初学者学习,该程序
- Dynatrace资料视频,介绍如何使用Dynatrace
- 大数据平台应用功能蓝图、大数据平台数据治理解决方案.ppt
- 大数据平台数据治理体系与大数据架构技术方案.ppt
- 大数据平台应用功能蓝图与数据治理解决方案.ppt
- ,,国内新能源汽车巨头某车型电机控制器软件源代码 ,基于TI 28x平台,含核心算法,全部开源,注释详细,程序规范,包含永磁同步电机FOC矢量控制算法、坡起辅助 、怠速蠕行、刹车油门扭矩协调、缺相诊断
- 大数据治理平台总体架构、技术架构、功能架构及数据应用解决方案.ppt


