通过小示例了解SSH整合概念

来源:互联网 发布:java构造方法修饰符 编辑:程序博客网 时间:2024/06/03 12:13

       刚接触SSH整合开发的时候不知道如何入手,下面分享一个简单实例来为大家讲解一下:

   实例名称:用户管理系统  实现用户的添加、用户的删除、用户信息的更新以及查询4个操作

   首先来搭建环境,struts2所用到的包:

  


Hibernate所用到的包:



Spring所用到的包:



此外还额外用到了三个log4j的包:

  

    把这些包整合到WEB-INF的lib文件下,在在类路径下加入所需的包,基本环境就搭好了,搭好之后就可以开始我们的项目了 。

系统结构可分为如下几层:

  •  表现层:由多个jsp页面组成
  •  MVC层:使用struts2框架技术
  • 业务逻辑层:使用业务逻辑组件
  • DAO层:由DAO组件构成
  • Hibernate持久层:使用Hibernate3框架
  • 数据库层:使用MySQL数据库来存储系统数据

数据库层实现:

      在数据库中创建表格名为user,表中含有四个数据项:主键id,name,password,type

Hibernate持久层实现:

  创建User类,包含四个字段,分别于数据库中四个字段相对应
package com.integration.entity;public class User {      private int id;      private String name;      private String password;      private String type;       public User(int id, String name, String password, String type) {this.id = id;this.name = name;this.password = password;this.type = type;}public User() {    }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 String getType() {return type;}public void setType(String type) {this.type = type;}            }

2.创建映射文件
   映射文件用来映射持久化类和数据表。User类的映射文件User.hbm.xml如下:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-11-15 20:15:11 by Hibernate Tools 3.5.0.Final --><hibernate-mapping>    <class name="com.integration.entity.User" table="USER">        <id name="id" type="int">            <column name="ID" />            <generator class="assigned" />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" />        </property>        <property name="password" type="java.lang.String">            <column name="PASSWORD" />        </property>        <property name="type" type="java.lang.String">            <column name="TYPE" />        </property>    </class></hibernate-mapping>


DAO层设计:

    DAO层设计主要包含SessionFactory的配置、DAO接口的创建以及DAO接口的实现类

1.Spring管理SessionFactory
   新建applicationContext.xml文件,在该文件中定义数据源,并完成对SessionFactory的配置和管理。
<?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:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">    <!-- 配置SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ><ref local="dataSource"/></property><!-- 配置Hibernate的属性 --><property name="hibernateProperties"><props><!-- 数据库方言 --><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><!-- 显示SQL语句 --><prop key="hibernate.show_sql">true</prop></props></property><!-- 指定HIbernate映射文件的路径 --><property name="mappingResources"><list><value>com/integration/entity/User.hbm.xml</value></list></property> </bean>  <!-- 配置数据源 --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property><property name="url"><value>jdbc:mysql://localhost:3306/xyz?characterEncoding=utf8&useSSL=true</value></property><property name="username"><value>root</value></property><property name="password"><value>自己的密码</value></property></bean><!-- 配置相关Bean --><bean id="userDAO" class="com.integration.dao.UserDAOImpl"abstract="false" lazy-init="default" autowire="default"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><!-- 创建UserService实例--><bean id="userService" class="com.integration.service.UserServiceImpl"><property name="userDAO" ref="userDAO"></property></bean><!--创建loginAction实例  --><bean id="loginAction" class="com.integration.action.LoginAction"><property name="userService" ref="userService"></property></bean><!--创建userQueryAction实例  --><bean id="userQueryAction" class="com.integration.action.UserQueryAction">    <property name="userService" ref="userService"></property></bean><!--创建userAction实例  --><bean id="userAction" class="com.integration.action.UserAction"> <property name="userService" ref="userService"></property></bean><!--创建userDeleteAction实例  --><bean id="userDeleteAction" class="com.integration.action.UserDeleteAction"><property name="userService" ref="userService"></property></bean><!-- 创建userUpdateAction实例--><bean id="userUpdateAction" class="com.integration.action.UserUpdateAction"><property name="userService" ref="userService"></property></bean></beans>

2.创建DAO接口
    创建UserDAO接口,在该接口定义了6中方法,可以实现添加用户、删除用户、更新用户、查找全部用户、
按用户名及按ID查询相应用户的操作。

package com.integration.dao;import java.util.List;import com.integration.entity.User;public interface UserDAO {    void sava(User user);       //添加用户    User getUser(String name);   //按用户名查找用户    void delete(int id);            //删除用户    void update(User user);       //更新用户    User findById(int id);        //按id查找用户    List<User> findAll();            //查找全部用户} 

3.创建DAO实现类
   定义UserDAOImpl类,实现UserDAO接口。
package com.integration.dao;import java.util.List;import org.hibernate.Query;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.integration.entity.User;public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {    //添加用户 public void sava(User user) {           this.getHibernateTemplate().save(user);   }         //按用户名查找用户public User getUser(String name) {String hsql = "from User u where u.name='"+name+"'";User result = (User)((Query) this.getHibernateTemplate().find(hsql)).uniqueResult();return result;}//删除用户public void delete(int id) {       this.getHibernateTemplate().delete(findById(id));}//更新用户public void update(User user) {this.getHibernateTemplate().update(user);}//按照Id查找用户public User findById(int id) {User user = this.getHibernateTemplate().get(User.class, id);return user;}//查找所有用户public List<User> findAll() {        String queryString = "from User";        List<User> list = this.getHibernateTemplate().find(queryString);return list;}}
该类为UserDAO类的实现类,通过Spring集成Hibernate使用HibernateTemplate进行数据库访问,前提是Spring配置文件中给该类注入了SessionFactory。在Web应用中,SessionFactory和DAO对象都由Spring进行管理,因此不需要在代码中显示设置,在配置文件中配置依赖关系就好了。注入代码:
<bean id="userDAO" class="com.integration.dao.UserDAOImpl"abstract="false" lazy-init="default" autowire="default"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean>



业务逻辑层设计:

1.创建业务逻辑组件接口
     创建UserService接口,在该方法中定义了包含添加用户、删除用户、更新用户、按用户名查找用户、按id查找用户和查找全部用户6个方法。
package com.integration.service;import java.util.List;import com.integration.entity.User;public interface UserService {    void savaUser(User user);   //添加用户    User getUser(String name);  //按用户名查找用户    void delete(int id);            //删除用户    void update(User user);       //更新用户    User findById(int id);        //按id查找用户    List<User> findAll();            //查找全部用户}



2.创建业务逻辑组件实现类

   创建UserServiceImpl类,该类实现了UserService接口。UserServiceImpl类中通过调用DAO组件来实现业务逻辑实现类。
package com.integration.service;import java.util.List;import com.integration.dao.UserDAO;import com.integration.entity.User;public class UserServiceImpl implements UserService{    private UserDAO userDAO;//提供UserDAO对象的注入通道public void setUserDAO(UserDAO userDAO){this.userDAO = userDAO;}//添加用户public void savaUser(User user) {if(userDAO.findById(user.getId())==null){userDAO.sava(user);}                                    //调用DAO组件保存user对象}//按用户名查找用户public User getUser(String name) { return(userDAO.getUser(name));}                                        //调用DAO组件查询//删除用户public void delete(int id) {       if(userDAO.findById(id)!=null)userDAO.delete(id);                 //调用DAO组件删除}    //更新用户public void update(User user) {        if(userDAO.findById(user.getId())!=null)        {        userDAO.update(user);            //调用DAO组件更新              }}//查找public User findById(int id) {return userDAO.findById(id);  }@Overridepublic List<User> findAll() {      return userDAO.findAll();         //调用DAO组件查询}    }

该类在Spring配置文件applicationContext.xml文件中进行配置:
<!-- 创建UserService实例--><bean id="userService" class="com.integration.service.UserServiceImpl"><property name="userDAO" ref="userDAO"></property></bean>


完成用户登录设计:

1.整合Struts2和Spring
  webxml文件如下:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  version="2.5"> <display-name>UserManagement001</display-name><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><!-- 定义核心Filter --><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><!--配置Listener --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext.xml </param-value></context-param></web-app>


2.创建用户登录Action
    创建用户登录Action,名称为LoginAction,该Action负责检查用户信息,如果数据库中存在该用户信息,则允许登录,返回页面,否则登录失败。
package com.integration.action;import java.util.Iterator;import java.util.List;import com.integration.entity.User;import com.integration.service.UserService;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{        String username;       //用户名        String password;     //密码        String usertype;     //用户类型        public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getUsertype() {return usertype;}public void setUsertype(String usertype) {this.usertype = usertype;}private UserService userService;        //设置业务逻辑组件public void setUserService(UserService userService) {this.userService = userService;}public String execute(){List<User> list = (List<User>)userService.findAll();User u = new User();String page = "failer";Iterator<User> it = list.iterator();//检查用户信息是否存在数据库中while(it.hasNext()){u = (User)it.next();if(username.trim().equals(u.getName())&&password.trim().equals(u.getPassword())&&usertype.trim().equals(u.getType())){   page = "success";break;}}return page;}        }


3.用户登录页面
创建登录页面login.jsp,其中包含一个表单,代码如下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>用户登录</title></head><body>       <s:form action="login" method="post" >       <s:textfield name="username" label="用户名"/>       <s:password name="password" label="密码"/>       <s:textfield name="usertype" label="类型"/>       <s:submit value="提交"/>       </s:form></body></html>

4.配置控制器
在applicationContext.xml中配置控制器LoginAction并注入业务逻辑组件代码如下:
<bean id="loginAction" class="com.integration.action.LoginAction"><property name="userService" ref="userService"></property></bean>

在struts.xml文件中配置loginAction,并定义处理结果与视图资源的关系,代码如下:
<action name="login" class="com.integration.action.LoginAction"><result name="success" type="redirect">/userquery.action</result><result name="failer">/error.jsp</result></action>


到此运行项目,可以看到我们的登录界面了,剩余操作思路和上面一样,就不一一列举了。

项目源码下载:
点击打开链接



原创粉丝点击