SSH项目整合实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38262968/article/details/78584813

       刚接触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);  
	}

	@Override
	public 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>

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

项目源码下载:

点击打开链接

猜你喜欢

转载自blog.csdn.net/qq_38262968/article/details/78584813