SSH 框架搭建与开发
对于Java初学者而言,SSH框架还是比较复杂的,今天借用一个Web注册功能的案例给大家讲解下,主要是讲下开发模式与注意事项!
注册界面如下所示:
1.首先建库建表(我用的是Mysql数据库,大家可以参考其他关系型DB,在SSH框架中集成对应驱动访问即可)
/*
在Mysql的test库中执行如下创建表SQL语句
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(16) NOT NULL,
`password` varchar(16) NOT NULL,
`sex` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
2.创建Dynamic Web Project(我用的是Eclipse J2EE版本,大家也可以使用MyEclipse Java IDE开发环境)
3.将SSH框架中lib库及DB、日志相关库(jar包)拷贝至工程中lib目录
(我这里使用的Struts2 + Spring3 + Hibernate3集成框架)
备注:无需在Libraries中Add新增lib库,工程会自动加载
4.将struts.xml拷贝至src目录下(对应在classes目录也会生成该文件),将applicationContext.xml及web.xml拷贝至WEB-INF目录下
备注:这里路径很容易弄错,需要注意,因为排查起来比较麻烦
5.对工程结构分层:持久层 <- DAO层 <- 业务层 <- Web层(展现层),如下所示:
6.接下来就是逐层实现代码的过程(时间关系,直接上代码与注释吧):
(1)持久层
User.java
package hexieshangwang.ssh.beans;
/**
* @author:hexieshangwang
* @version 1.0
* @parameter
* @since
* @return
* @description:在持久层建立po与hbm.xml映射关系
*/
public class User {
private int id;
private String name;
private String password;
private int sex;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
}
User.hbm.xml
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="hexieshangwang.ssh.beans">
<class name="User" table="user">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" column="name" type="java.lang.String"
not-null="true" length="16"></property>
<property name="password" column="password" type="java.lang.String"
not-null="true" length="16" />
<property name="sex" column="sex" type="java.lang.Integer"
length="1" />
</class>
</hibernate-mapping>
(2)DAO层
BaseDao.java
package hexieshangwang.ssh.dao;
import org.hibernate.HibernateException;
/**
* @author:hexieshangwang
* @version 1.0
* @parameter
* @since
* @return
* @description:在DAO层提供访问持久层(Hibernate)接口
*/
public interface BaseDao {
public void saveObject(Object obj) throws HibernateException;
}
UserDao.java
package hexieshangwang.ssh.daoImpl;
import org.hibernate.HibernateException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import hexieshangwang.ssh.dao.BaseDao;
/**
* @author:hexieshangwang
* @version 1.0
* @parameter
* @since
* @return
* @description:实现DAO层接口
*/
public class UserDao extends HibernateDaoSupport implements BaseDao{
@Override
public void saveObject(Object obj) throws HibernateException {
// TODO Auto-generated method stub
getHibernateTemplate().save(obj);
}
}
(3)业务层
UserService.java
package hexieshangwang.ssh.service;
import org.hibernate.HibernateException;
import hexieshangwang.ssh.forms.UserForm;
/**
* @author:hexieshangwang
* @version 1.0
* @parameter
* @since
* @return
* @description:在业务层提供访问DAO层Service接口
*/
public interface UserService {
public void regUser(UserForm user) throws HibernateException;
}
UserServiceImpl.java
package hexieshangwang.ssh.serviceImpl;
import org.hibernate.HibernateException;
import org.springframework.beans.BeanUtils;
import hexieshangwang.ssh.beans.User;
import hexieshangwang.ssh.dao.BaseDao;
import hexieshangwang.ssh.forms.UserForm;
import hexieshangwang.ssh.service.UserService;
/**
* @author:hexieshangwang
* @version 1.0
* @parameter
* @since
* @return
* @description:实现业务层Service接口
*/
public class UserServiceImpl implements UserService{
private BaseDao dao;
public void setDao(BaseDao dao) {
this.dao = dao;
}
@Override
public void regUser(UserForm userForm) throws HibernateException {
// TODO Auto-generated method stub
User user = new User();
BeanUtils.copyProperties(userForm, user);
dao.saveObject(user);
}
}
applicationContext.xml
备注:此处在Spring框架中整合了Hibernate配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 定义数据源的信息 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://IP:3306/test</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
<property name="maxPoolSize">
<value>80</value>
</property>
<property name="minPoolSize">
<value>1</value>
</property>
<property name="initialPoolSize">
<value>1</value>
</property>
<property name="maxIdleTime">
<value>20</value>
</property>
</bean>
<!--定义Hibernate的SessionFactory -->
<!-- SessionFactory使用的数据源为上面的数据源 -->
<!-- 指定了Hibernate的映射文件和配置信息 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>hexieshangwang/ssh/beans/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="baseDao" class="hexieshangwang.ssh.daoImpl.UserDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!--用户注册业务逻辑类 -->
<bean id="userService" class="hexieshangwang.ssh.serviceImpl.UserServiceImpl">
<property name="dao">
<ref bean="baseDao" />
</property>
</bean>
<!-- 用户注册的Action -->
<bean id="regAction" class="hexieshangwang.ssh.action.RegisterAction">
<property name="userService">
<ref bean="userService" />
</property>
</bean>
<!-- more bean definitions go here -->
</beans>
(4)Web层
UserForm.java
package hexieshangwang.ssh.forms;
/**
* @author:hexieshangwang
* @version 1.0
* @parameter
* @since
* @return
* @description:在Web层实现表单Form
*/
public class UserForm {
private String name;
private String password;
private int sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
}
RegisterAction.java
package hexieshangwang.ssh.action;
import com.opensymphony.xwork2.ActionSupport;
import hexieshangwang.ssh.forms.UserForm;
import hexieshangwang.ssh.service.UserService;
/**
* @author:hexieshangwang
* @version 1.0
* @parameter
* @since
* @return
* @description:在Web层实现Action界面操作
*/
public class RegisterAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private UserForm user;
private UserService userService;
public UserForm getUser() {
return user;
}
public void setUser(UserForm user) {
this.user = user;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public String execute() {
try {
userService.regUser(user);
return SUCCESS;
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
}
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>
<include file="struts-default.xml" />
<package name="hexieshangwang" extends="struts-default">
<action name="register" class="regAction">
<result name="submit">/Register.jsp</result>
<result name="success">/Success.jsp</result>
<result name="error">/Fail.jsp</result>
</action>
</package>
</struts>
SSH 框架搭建与开发的更多相关文章
- 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】
经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...
- 转 SSH框架搭建详细图文教程
原址:http://blog.sina.com.cn/s/blog_a6a6b3cd01017c57.html 什么是SSH? SSH对应 struts spring hibernatestruts ...
- SSH框架搭建 详细图文教程
转载请标明原文地址 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+Hibernate)的集成框架,是目前比较流行的一种Java Web开源框架. SSH主要用于Jav ...
- 项目:《ssh框架综合项目开发视频》-视频目录和第六天的EasyUI简单讲解
4 练习使用技术: Struts2 + hibernate5.x + spring4.x + mysql数据库 1 crm:customer relational manager,客户关系管理 2 c ...
- SSH框架搭建详细图文教程(转)
这篇文章看的我醍醐灌顶的感觉,比之前本科时候学习的SSH架构 要清晰数倍 非常感觉这篇博主的文章 文章链接为:http://blog.sina.com.cn/s/blog_a6a6b3cd01017 ...
- SSH框架搭建详细图文教程
转载请标明原文地址:http://www.cnblogs.com/zhangyukof/p/6762554.html 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+H ...
- ssh框架搭建的基本步骤(以及各部分作用)
ssh框架搭建的基本步骤(以及各部分作用) 一.首先,明确spring,struts,hibernate在环境中各自的作用. struts: 用来响应用户的action,对应到相应的类进行 ...
- SSH框架分模块开发
------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring ...
- SSH框架搭建步骤总结以及Hibernate二级缓存,查询缓存
二级缓存.查询缓存 一级缓存: 默认启动,生命周期是和session同步的,session独享 二级缓存: 需要加载配置信息,生命周期是和应用服务器同步,session共享 1:在hibernate. ...
随机推荐
- Log4j官方文档翻译(四、如何在java中输出日志消息)
我们已经创建来配置文件,本章详细的介绍下如何生成调试信息,并把他们转化成文本文件. 基本的例子 下面就是创建的一个基本的例子: log4j.properties的内容为: log = /usr/hom ...
- UVALive 6609 Minimal Subarray Length(RMQ-ST+二分)
题意:给定长度为N的数组,求一段连续的元素之和大于等于K,并且让这段元素的长度最小,输出最小长度即可,若不存在这样的元素集合,则输出-1 题目链接:UVAlive 6609 做法:做一个前缀和pref ...
- [POJ2942][LA3523]Knights of the Round Table
[POJ2942][LA3523]Knights of the Round Table 试题描述 Being a knight is a very attractive career: searchi ...
- 省选算法学习-dp优化-四边形不等式
嗯......四边形不等式的确长得像个四边形[雾] 我们在dp中,经常见到这样一类状态以及转移方程: 设$dp\left[i\right]\left[j\right]$表示闭区间$\left[i,j\ ...
- cf 853 A planning [贪心]
题面: 传送门 思路: 一眼看得,这是贪心[雾] 实际上,我们要求的答案就是sigma(ci*(ti-i))(i=1~n),这其中sigma(ci*i)是确定的 那么我们就要最小化sigma(ci*t ...
- linux压缩文件——解压方法
linux下 tar解压 gz解压 bz2等各种解压文件使用方法 .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar ...
- splay模板整理
1.插入一个数 void insert(int x) { if (!root) { ++tot; e[tot].left = e[tot].right = e[tot].fa = ; e[tot].v ...
- about coroutine
co 有协作的意思,是让多个 routine 合作来完成某件或者某几件事情,它主要解决的问题就是合理安排一些耗时长的工作的执行时间,让其他的工作有机会得到执行.
- Bzoj1195 [HNOI2006]最短母串 [状态压缩]
Time Limit: 10 Sec Memory Limit: 32 MBSubmit: 1304 Solved: 439 Description 给定n个字符串(S1,S2,„,Sn),要求找 ...
- duilib入门简明教程 -- 前言(1) (转)
原文转自 :http://www.cnblogs.com/Alberl/p/3341956.html 关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘 ...