一、主流技术框架
1. Struts框架
Struts是最早的Java开源框架之一,也是现在Java Web框架的事实标准,现在的绝大多数Java Web应用程序都是基于Struts框架构建的。Struts是MVC设计模式一个优秀的实现。Struts定义了通用的Controller(控制器),通过配置文件(一般是struts-config.xml)隔离了Model(模型)和View(视图),以Action的概念对用户请求做了封装,使代码更清晰易读。Struts还提供了自动将请求的数据填充到对象中以及页面标签等简单编码工具。Struts使开发大型Java Web项目成为可能。
2. Spring框架
Spring的出现改变了Java世界。它的目标是使现有的JavaEE技术更易用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。它主要作为依赖注入容器和AOP实现存在。还提供了声明事务、对DAO层的支持等简化开发的功能。Spring还可以很方便地与Struts、Hibernate等技术集成。
3. Hibernate框架
Hibernate是一个优秀的持久化框架,负责简化将对象数据保存到数据库中或从数据库中读取数据并封装到对象的工作。通过简单配置和编码即可替代JDBC繁琐的程序代码。Hibernate处理数据库操作的方式代表了当前的趋势。
大名鼎鼎的SSH集成框架指的就是Struts+Sping+Hibernate的技术框架。使用这个集成框架将使我们的应用程序更加健壮、稳固、轻巧和优雅。这也是当前最流行的Java技术框架。
二、构建Struts/Sping/Hibernate框架
1. 导入SSH框架包
通过MyEclipse逐一导入SSH的相关框架包。
2. 编写SSH的配置文件
(1) hibernate.cfg.xml配置文件
(记得先导入数据库的驱动类)
示例:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd>
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<property name="connection.url">
jdbc:sqlserver://localhost:1433;Databasename=SSH_DB
</property>
<property name="connection.username">sa</property>
<property name="connection.password">sa</property>
<property name="show_sql">true</property>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/ssh/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
(2) applicationContext.xml配置文件
示例:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- SessionFactory config begin -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- SessionFactory config end -->
<!-- dao config begin -->
<bean id="userDao" class="com.ssh.dao.impl.UserDaoImpl" >
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- dao config end -->
<!-- biz config begin -->
<bean id="userBiz" class="com.ssh.biz.impl.UserBizImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<!-- biz config end -->
<!-- action config begin -->
<bean name="/user" class="com.ssh.struts.action.UserAction">
<property name="userBiz" ref="userBiz"></property>
</bean>
<!-- action config end -->
<!-- transaction begin -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="all*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution (* com.ssh.biz.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
</aop:config>
<!-- transaction end -->
</beans>
(3) struts-config.xml配置文件
示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="userForm" type="ssh.ch9.struts.form.UserForm"></form-bean>
</form-beans>
<action-mappings >
<action
name="userForm"
path="/user"
type="org.springframework.web.struts.DelegatingActionProxy"
attribute="userForm"
scope="request"
input="/MyJSP/index.jsp"
parameter="type"
>
<forward name="find" path="/user.do?type=find"></forward>
<forward name="update" path="/MyJSP/updateUser.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="com.ssh.struts.ApplicationResources" />
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="classpath:applicationContext.xml"/>
</plug-in>
</struts-config>
3 构建三层结构
构建三层结构:数据访问层、业务逻辑层和表示层。
(1)创建包
com.ssh.hibernate (类:HibernateSessionFactory.java 加载Hibernate框架包时,系统自动创建)
com.ssh.biz (接口:UserBiz.java)
com.ssh.biz.impl (类:UserBizImpl.java)
com.ssh.dao (接口:UserDao.java)
com.ssh.dao.impl (类:UserDaoImpl.java)
com.ssh.entity (类:User.java 映射文件:User.hbm.xml)
com.ssh.struts (ApplicationResources.properties 加载struts框架包时,系统自动创建)
com.ssh.struts.action (类:UserAction.java)
com.ssh.struts.form (类:UserForm.java)
com.ssh.test (类:UserTest.java)
(2) 创建包中的相关文件
1. com.ssh.biz
示例:
UserBiz.java 接口
package com.ssh.biz;
public interface UserBiz {
public void save(Object o);
public void delete(Object o);
public void update(Object o);
public Object get(Class clz,int id);
public List find(String sql);
}
2. com.ssh.biz.impl
示例:
UserBizImpl.java 类
package com.ssh.biz.impl;
import java.util.List;
import com.ssh.biz.UserBiz;
import com.ssh.dao.UserDao;
public class UserBizImpl implements UserBiz {
private UserDao userDao;
public void delete(Object o) {
userDao.delete(o);
}
public List find(String sql) {
return userDao.find(sql);
}
public Object get(Class clz, int id) {
return userDao.get(clz, id);
}
public void save(Object o) {
userDao.save(o);
}
public void update(Object o) {
userDao.update(o);
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
3. com.ssh.dao
示例:
UserDao.java 接口
package com.ssh.dao;
public interface UserDao {
public void save(Object o);
public void delete(Object o);
public void update(Object o);
public Object get(Class clz,int id);
public List find(String sql);
}
4. com.ssh.dao.impl
示例:
UserDaoImpl.java 类
package com.ssh.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.ssh.dao.UserDao;
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
public void delete(Object o) {
super.getHibernateTemplate().delete(o);
}
public Object get(Class clz, int id) {
return super.getHibernateTemplate().get(clz, id);
}
public void save(Object o) {
super.getHibernateTemplate().save(o);
}
public List find(String sql) {
return super.getHibernateTemplate().find(sql);
}
public void update(Object o) {
super.getHibernateTemplate().update(o);
}
}
5. com.ssh.entity
示例:
User.java 类
package com.ssh.entity;
public class User {
private int userId;
private String userName;
private String userPwd;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
}
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>
<class name="com.ssh.entity.User" table="UserInfo">
<id name="userId">
<column name="UID"></column>
<generator class="increment"></generator>
</id>
<property name="userName">
<column name="UNAME"></column>
</property>
<property name="userPwd">
<column name="UPWD"></column>
</property>
</class>
</hibernate-mapping>
6. com.ssh.struts.action
示例:
UserAction.java 类
package com.ssh.struts.action;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.ssh.biz.UserBiz;
import com.ssh.entity.User;
import com.ssh.struts.form.UserForm;
private UserBiz userBiz;
public ActionForward find(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
{
String sql = "from com.ssh.entity.User order by UID asc";
List userList = userBiz.find(sql);
request.getSession().setAttribute("userList", userList);
return mapping.getInputForward();
}
public ActionForward get(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
{
int id = Integer.parseInt(request.getParameter("userId"));
System.out.println(id);
User user = (User)userBiz.get(User.class,id);
request.getSession().setAttribute("user", user);
return mapping.findForward("update");
}
public ActionForward save(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
{
UserForm registerForm = (UserForm)form;
User user = new User();
user.setUserName(registerForm.getUserName());
user.setUserPwd(registerForm.getUserPwd());
userBiz.save(user);
String msg = "增加用户成功!";
request.setAttribute("msg", msg);
return mapping.findForward("find");
}
public ActionForward update(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
{
UserForm userForm = (UserForm)form;
int id = Integer.parseInt(request.getParameter("userId"));
String newName = userForm.getUserName();
String newPwd = userForm.getUserPwd();
User user = (User)userBiz.get(User.class, id);
user.setUserName(newName);
user.setUserPwd(newPwd);
userBiz.update(user);
String msg = "修改用户成功!";
request.setAttribute("msg", msg);
return mapping.findForward("find");
}
public ActionForward delete(ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
{
int id = Integer.parseInt(request.getParameter("userId"));
User user = (User)userBiz.get(User.class, id);
userBiz.delete(user);
String msg = "删除用户成功!";
request.setAttribute("msg", msg);
return mapping.findForward("find");
}
public UserBiz getUserBiz() {
return userBiz;
}
public void setUserBiz(UserBiz userBiz) {
this.userBiz = userBiz;
}
}
7. com.ssh.struts.form
示例:
UserForm.java 类
package com.ssh.struts.form;
import org.apache.struts.action.ActionForm;
public class UserForm extends ActionForm {
private String userName;
private String userPwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
}
8. com.ssh.test
示例:
UserTest.java 类
package com.ssh.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ssh.biz.UserBiz;
import com.ssh.entity.User;
public class UserTest {
@Test
public void getUser()
{
ApplicationContext a = new ClassPathXmlApplicationContext("applicationContext.xml");
UserBiz userBiz = (UserBiz)a.getBean("userBiz");
User user = (User)userBiz.get(User.class, 1);
if(user!=null)
{
System.out.println("用户名: " + user.getUserName());
}
}
public void saveUser()
{
ApplicationContext a = new ClassPathXmlApplicationContext("applicationContext.xml");
UserBiz userBiz = (UserBiz)a.getBean("userBiz");
User user = new User();
user.setUserName("Peter");
user.setUserPwd("123");
userBiz.save(user);
System.out.println("增加用户成功");
}
}