自己做的练手小程序,欢迎大家 批评指导 并 提出建议..
开发环境 - eclipse(myeclipse6.5) + tomcat 6 + mysql
下边只贴出主要代码.
struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml" />
<package name="employee" extends="struts-default" namespace="/">
<interceptors>
<!-- 定义 核对登陆 的拦截器 -->
<interceptor name="checkLogin"
class="org.lzpeng.interceptor.CheckLogin" />
<!-- 定义一个拦截器堆栈 -->
<interceptor-stack name="default">
<interceptor-ref name="checkLogin" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 设置全局默认拦截器 -->
<default-interceptor-ref name="default" />
<!-- 定义全局 result -->
<global-results>
<result name="login">viewPage/login.jsp</result>
</global-results>
<!-- 获得所有雇员 -->
<action name="list" method="getAllEmployees"
class="org.lzpeng.actions.EmployeesAction">
<result name="success">/viewPage/employees.jsp</result>
</action>
<!-- 增加或更新雇员的表单需要加载所有的部门 -->
<action name="storeOrUpdate" method="setForinsertOrUpdate"
class="org.lzpeng.actions.EmployeesAction">
<result name="success">viewPage/employeeForm.jsp</result>
</action>
<!-- 增加或更新雇员信息 -->
<action name="insertOrUpdate" method="insertOrUpdate"
class="org.lzpeng.actions.EmployeesAction">
<result name="success" type="redirect-action">
list!getAllEmployees
</result>
<result name="input">viewPage/employeeForm.jsp</result>
</action>
<!-- 删除雇员 -->
<action name="delete" method="delete"
class="org.lzpeng.actions.EmployeesAction">
<result name="success" type="redirect-action">
list!getAllEmployees
</result>
</action>
</package>
<package name="manager" extends="struts-default">
<!-- 转发到登陆界面 -->
<action name="login">
<result>/viewPage/login.jsp</result>
</action>
<!-- 验证用户-->
<action name="check" method="validateUser"
class="org.lzpeng.actions.ManagerAction">
<!-- 重复提交表单处理 -->
<result name="invalid.token">/errorPage.jsp</result>
<!-- 密码错误 -->
<result name="input">/viewPage/login.jsp</result>
<!-- Action名后 +!xxx xxx为方法名 -->
<result name="success" type="redirect-action">
/list!getAllEmployees.action
</result>
<interceptor-ref name="token" />
<interceptor-ref name="defaultStack" />
</action>
</package>
</struts>
BaseHibernateDAO.java
package org.lzpeng.dao.hibernate;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
/**
* HIBERNATE 抽象基础类
* <p>
* 包含了简单的查询和增删改的方法
*
* @author LZPeng
* @version 1.0
* @date 2008/7/20
* @since JDK5
*/
public abstract class BaseHibernateDAO {
@SuppressWarnings("unused")
private Session session = null;
/***************************************************************************
* select
*
* @param clz
* 类实体
* @param id
* 必须实现 Serializable 接口
* @return ret Object
*/
protected Object get(Class<?> clz, java.io.Serializable id) {
Object ret = null;
Session session = getSession();
try {
ret = session.get(clz, id);
} catch (Exception e) {
e.printStackTrace();
} finally {
this.closeSession();
}
return ret;
}
/***************************************************************************
* insert
*
* @param item
* 需要增加的实体
*/
protected void add(Object item) {
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
session.save(item);
tx.commit();
} catch (Exception e) {
if (null != tx) {
tx.rollback();
}
e.printStackTrace();
} finally {
closeSession();
}
}
/***************************************************************************
* update
*
* @param item
* 需要更新的实体对象
*/
protected void update(Object item) {
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
session.update(item);
tx.commit();
} catch (Exception e) {
if (null != tx) {
tx.rollback();
}
e.printStackTrace();
} finally {
closeSession();
}
}
/***************************************************************************
* delete
*
* @param clz
* 类的实例
* @param id
* 实现 Serializable 的类
*/
protected void delete(Class<?> clz, java.io.Serializable id) {
Transaction tx = null;
Session session = getSession();
try {
tx = session.beginTransaction();
session.delete(get(clz, id));
tx.commit();
} catch (Exception e) {
if (null != tx) {
tx.rollback();
}
e.printStackTrace();
} finally {
closeSession();
}
}
/***************************************************************************
*
* @param clazz
* 类实例
* @param condition
* 对应实体类的类型对象
* @return results Object 类型实体的 List 集合
*
* @throws RuntimeException
* if an error occured
*/
@SuppressWarnings("unchecked")
protected List search(Class<?> clazz, Object condition) {
try {
List results = getSession().createCriteria(clazz).add(
Example.create(condition)).list();
return results;
} catch (RuntimeException re) {
throw re;
} finally {
closeSession();
}
}
/***************************************************************************
* 获取 Hibernate session
*
* @return Hibernate session
*/
protected Session getSession() {
return HibernateUtil.getSession();
}
/**
* 设置 HIBERNATE session
*
* @param session
*/
public void setSession(Session session) {
this.session = session;
}
/**
* 关闭 session
*/
protected void closeSession() {
this.session = null;
}
}
EmployeesAction.java
package org.lzpeng.actions;
import org.lzpeng.vo.Department;
import org.lzpeng.vo.Employee;
import org.lzpeng.service.EmployeeService;
import org.lzpeng.service.DepartmentService;
import org.lzpeng.service.impl.DepartmentDaoService;
import org.lzpeng.service.impl.EmployeeDaoService;
import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* <p>
* Employee 的 Action 控制类
* </p>
*
* @author LZPeng
* @version 1.0
* @date 2008/7/22
* @see EmployeeService
* @since JDK5
*/
public class EmployeesAction extends ActionSupport {
private static final long serialVersionUID = -7351331038736790079L;
private EmployeeService empService = new EmployeeDaoService();// 雇员服务类对象
private DepartmentService deptService = new DepartmentDaoService();// 部门服务类对象
private Employee employee = null; // 雇员
private List<Employee> employees = null; // 雇员集合
private List<Department> departments = null;// 部门集合
/***************************************************************************
* 获得所有雇员的信息
*
* @return SUCCESS
*
*/
public String getAllEmployees() {
employees = empService.getAllEmployees();
return SUCCESS;
}
/***************************************************************************
* 增加或者更新雇员时需要将所有部门查出来显示给用户
* <p>
* 如果不在 action 将 departments 放入session 中 迭代器可以拿到值 , 但 <s:select / > 标签不可以..
*
* @return SUCCESS
*/
@SuppressWarnings("unchecked")
public String setForinsertOrUpdate() {
departments = deptService.getAllDepartments();// 获得所有部门
Map<String, List<Department>> session = ActionContext.getContext()
.getSession();
session.put("departments", departments); // 将部门信息放入 session
if (employee != null && employee.getEmployeeid() != null) {
/* 如果是更新,得到此雇员信息 */
employee = empService.getEmployeeByID(employee.getEmployeeid());
}
return SUCCESS;
}
/***************************************************************************
* 执行插入或者更新
*
* @return
*/
public String insertOrUpdate() {
if (employee.getEmployeeid() == null) {
empService.insertEmployee(employee);
} else {
empService.updateEmployee(employee);
}
return SUCCESS;
}
/***************************************************************************
* 通过ID删除雇员
*
*/
public String delete() {
empService.deleteEmployeeByID(employee.getEmployeeid());
return SUCCESS;
}
/***************************************************************************
* action 的默认执行方法
*
* @return SUCCESS
*/
@Override
public String execute() {
return SUCCESS;
}
// -------------------------------------------------------------------------
// Setter and Getter methods
// -------------------------------------------------------------------------
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public List<Department> getDepartments() {
return departments;
}
public void setDepartments(List<Department> departments) {
this.departments = departments;
}
}
EmployeeDaoService.java
package org.lzpeng.service.impl;
import java.util.List;
import org.lzpeng.service.EmployeeService;
import org.lzpeng.vo.Employee;
import org.lzpeng.dao.EmployeeDao;
import org.lzpeng.dao.hibernate.EmployeeHibernateDao;
/**
* 对雇员的持久化操作
* <p>
* 继承自 EmployeeService
*
* @author LZPeng
* @version 1.0
* @date 2008/7/20
* @see EmployeeService
* @since JDK5
*/
public class EmployeeDaoService implements EmployeeService {
private EmployeeDao dao;
public EmployeeDaoService() {
this.dao = new EmployeeHibernateDao();// 雇员的数据库操作类对象
}
/***************************************************************************
* 获得所有雇员信息
*
* @return Employee的集合List
*/
public List<Employee> getAllEmployees() {
return dao.getAllEmployees();
}
public void updateEmployee(Employee emp) {
dao.update(emp);
}
public void deleteEmployeeByID(Integer id) {
dao.delete(id);
}
/***************************************************************************
* 根据雇员ID获得雇员POJO对象
*
* @param id
* 雇员编号
* @return 雇员POJO对象
*/
public Employee getEmployeeByID(Integer id) {
return dao.getEmployee(id);
}
/***************************************************************************
* 增加一个雇员
*
* @param emp
* Employee对象
*/
public void insertEmployee(Employee emp) {
dao.insert(emp);
}
}
未解决的(主要)问题:
问题一 :
第一次访问到login.jsp, 此界面包含(include) head.jsp 但head.jsp不能正常显示.报异常.刷新界面(F5)后,正常显示,异常消失.
问题二 : 关于非空验证提示信息重复
在登录界面,连续2次在不填写数据情况下点 登录 按钮,提示重复..
分享到:
相关推荐
这个基于Struts 2+Hibernate+Spring实现的论坛系统,充分利用了这些框架的优势,为用户提供了交互性强、数据管理高效的在线讨论平台。 首先,Struts 2 是一个 MVC(Model-View-Controller)框架,它负责处理用户的...
这个"Struts2+Hibernate+Crud+For_Extjs用户管理程序"是一个整合了这些技术的示例项目,旨在帮助初学者理解它们如何协同工作来实现一个简单的用户管理系统。 **1. Struts2框架** Struts2是基于MVC(Model-View-...
总结来说,"Struts2+Hibernate实现新闻发布系统"涉及到的主要知识点包括Struts2的MVC架构、Action和拦截器,Hibernate的对象关系映射、CRUD操作,以及自定义的数据库设计。开发者需要理解这两个框架的基本原理和使用...
"ext3+struts2+hibernate+spring的CRUD+分页"是一个典型的Java Web开发组合,用于实现全面的数据管理功能。这个组合充分利用了各个框架的优势,提供了一个强大的后端数据处理和前端展示的解决方案。 首先,EXT3是一...
在这个"Struts2+Hibernate实现CRUD操作网页"项目中,我们能看到开发者如何结合这两个框架来创建一个能够进行创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)操作的Web应用程序。以下是这个项目中的关键...
在这个“Struts2+Hibernate实现文件上传”的项目中,我们将探讨如何结合这两个框架来实现在Web应用中上传图片并存储到数据库的过程。 首先,让我们从Struts2的角度来看。Struts2提供了一种灵活的MVC(模型-视图-...
Struts2、Spring4和Hibernate4是Java Web开发中的三大主流框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个最新的项目系统整合了这三个框架,旨在提供一个高效、灵活且易于维护的开发环境。下面将详细...
在这个项目中,“struts2+hibernate+mysql实现注册登录”是一个基础的实战教程,旨在帮助新手理解如何在实际应用中整合这三个技术。 **Struts2** 是一个强大的MVC框架,它负责处理HTTP请求,控制应用程序的流程,并...
Struts2是一款基于MVC(Model-View-Controller)设计模式的开源框架,用于构建可维护性高、结构清晰的Web应用程序,而Hibernate则是一个对象关系映射(ORM)工具,它简化了数据库操作,将Java对象与数据库表进行映射...
通过学习这个项目,你可以了解到如何整合Struts2和Hibernate,以及如何设计和实现一个简单的Web应用。它涵盖了配置文件的设置(如struts.xml、hibernate.cfg.xml),Action类的编写,DAO(数据访问对象)层的设计,...
通过Struts2处理请求和响应,Spring管理对象和事务,Hibernate进行数据库操作,实现了用户管理与书籍管理的核心功能。对于开发者而言,理解并掌握SSH的整合开发,能够提升开发效率,构建出稳定高效的Web应用。
在IT行业中,构建Web应用程序是常见的任务之一,而"Maven+Struts2+Hibernate+MySQL"的组合是一种经典的Java EE开发框架,用于实现高效的数据库操作和动态网站功能。以下将详细解析这一组合中的各个组件及其在增删改...
Struts2、Hibernate和Spring是Java企业级开发中三大核心框架,它们的组合通常被称为SSH(Struts2、Spring、Hibernate)集成框架。这个“Struts2+Hibernate+Spring课件 张志峰版”提供了深入学习这三大框架的宝贵资源...
SSH整合的关键在于配置文件,包括Struts 2的struts.xml、Spring的applicationContext.xml和Hibernate的hibernate.cfg.xml。这些文件定义了各组件之间的关系和行为。例如,struts.xml中配置Action类及其结果视图,...
Struts2、Hibernate和Spring是Java企业级应用中常用的三个开源框架,它们分别负责MVC模式中的表现层、持久层和业务层管理。SSH(Struts2+Spring+Hibernate)框架整合是Java Web开发中常见的一种技术栈,能有效地提高...
2. **配置文件**:struts-config.xml定义Struts的配置,spring-beans.xml管理Spring的bean,hibernate.cfg.xml配置Hibernate的数据库连接,可能还有实体类的映射文件(hbm.xml或使用注解)。 3. **JSP页面**:展示...
《网络硬盘:基于Struts 2、Hibernate及Spring的实现》 网络硬盘是一种云存储服务,允许用户在网络上存储、管理和共享文件。在这个项目中,我们采用了一种经典的Java Web开发框架——Struts 2,结合ORM框架...
在这个"Struts+Hibernate CRUD"示例中,我们将深入探讨如何结合这两个框架实现一个完整的数据管理应用,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)功能。 首先,让我们从Struts框架开始。...
2. **文章模块**:用户可以发布、编辑、删除自己的文章,Struts2控制请求流向,Spring Service处理业务逻辑,比如检查权限、更新状态,而Hibernate处理文章数据的CRUD操作。 3. **评论模块**:用户可以在文章下留言...