Maven搭建SSH框架案例(三)-----测试框架是否可用

       在前面的两次博客中已经实现了使用Maven来搭建SSH框架,但是还没有测试所搭建的框架是否可行,现在将要简易测试所搭建的框架是否可用。这里将写一个简单的登录事件来测试struts2,spring和hibernate框架整合是否成功。

编写一个LoginAction类:

public class LoginAction extends BaseAction{
	
	private SysUserService sysUserService;
	private LoginService loginService;
	
	/**
	 * 登录action
	 * @return
	 */
	public String login(){
		String id=this.getStrParam("id");
		String password=this.getStrParam("password");
		
		String information=loginService.checkUser(id, password);
		SysUser sysUser=sysUserService.getUserById(id);
		if(information.equals("")){
			return "success";
		}else{
			this.getRequest().setAttribute("info", information);
			this.getRequest().setAttribute("url", "/mssh/login.jsp");
			return "information";
		}
	}

	//生成sysUserService的set方法
	public void setSysUserService(SysUserService sysUserService) {
		this.sysUserService=sysUserService;
	}
	
	public void setLoginService(LoginService loginService) {
		this.loginService = loginService;
	}
}

LoginService类:

public class LoginService {
	
	private SysUserService sysUserService;
	
	/**
	 * 检测登录用户是否合法
	 * @param id 
	 * @param password
	 * @return  检测结果,""表示用户可以合理登录
	 */
	public String checkUser(String id,String password){
		SysUser sysUser=sysUserService.getUserById(id);
		if(sysUser==null){
			return "用户不存在,请检测账号.";
		}
		if(!sysUser.getPassword().equals(password)){
			return "用户密码错误,请检查密码.";
		}
		return "";
	}

	public void setSysUserService(SysUserService sysUserService) {
		this.sysUserService = sysUserService;
	}
}

SysUserService类:

public class SysUserService {
	
	private SysUserDao sysUserDao;
	
	/**
	 *通过ID获得用户对象 ,如果不存在返回null
	 */
	public SysUser getUserById(String id){
		return sysUserDao.get(id);
	}
	
	/**
	 * 保存用户
	 */
	public void saveUser(SysUser sysUser) {
		sysUserDao.save(sysUser);
	}
	
	/**
	 * 通过用户ID删除用户,如果不存在改用户,则在控制台输出错误提示
	 */
	public void deleteUserById(String id){
		SysUser sysUser=getUserById(id);
		if(sysUser!=null){
			sysUserDao.delete(sysUser);
		}else{
			System.out.println("##########该用户不存在,无法删除!##########");
		}
	}

	public void setSysUserDao(SysUserDao sysUserDao) {
		this.sysUserDao = sysUserDao;
	}
}

SysUserDao类:

public class SysUserDao extends BaseGenericHibernateDao<SysUser, String>{
	
	/**
	 * 保存用户
	 * @param sysUser:用户对象
	 */
	public void saveUser(SysUser sysUser){
		this.save(sysUser);
	}
	
	/**
	 * 通过id删除用户对象,如果不存在改用户,则将打印错误信息在控制台
	 */
	public void deleteUser(SysUser sysUser){
		this.delete(sysUser);
	}
	
	/**
	 * 通过id获得用户对象
	 */
	public SysUser getUser(String id){
		return this.get(id);
	}
}
       这里需要注意,为了提高代码的可重用性,所以编写了一个BaseGenericHibernateDao类来与数据库进行交互,其他的所有Dao类只需要继承 BaseGenericHibernateDao就可以了。可以想象,如果没有这么一个通用的类,那么我们每写一个实体,如果这个实体需要与数据库打交道,那么就要专门为它写一个Dao类。这样下来,如果这样的实体很多,那么重复的工作量就成倍增加了。


BaseGenericHibernateDao类:

public class BaseGenericHibernateDao<T, PK extends Serializable> extends HibernateDaoSupport{
	
	/**
	 * 实体类类型(由构造方法自动赋值)
	 */
	private Class<T> entityClass;
	
	/**
	 * 构造方法,根据实例类自动获取实体类类型
	 */
	public BaseGenericHibernateDao() {
		this.entityClass = null;
		Class c = getClass();                 //获得类路径  
		Type t = c.getGenericSuperclass();	  //获得该实体的直接父类
		if (t instanceof ParameterizedType) {
			Type[] p = ((ParameterizedType) t).getActualTypeArguments();      //获得超类的泛型参数的实际类型
			this.entityClass = (Class<T>) p[0];
		}
	}
	
   /**
    * 根据主键获取实体。如果没有相应的实体,返回 null。
    */
	public T get(PK id) {
		try {
			T t = (T) getHibernateTemplate().get(entityClass, id);
			return t;
		} catch (Exception e) {
			return null;
		}
	}
	
	/**
	 * 根据主键获取实体。如果没有相应的实体,抛出异常。
	 */
	public T load(PK id) {
		return (T) getHibernateTemplate().load(entityClass, id);
	}
	
	/**
	 * 获取全部实体
	 */
	public List<T> loadAll() {
		return (List<T>) getHibernateTemplate().loadAll(entityClass);
	}
	
	/**
	 * 保存用户
	 */
	public void save(T entity){
		getHibernateTemplate().save(entity);
	}
	
	/**
	 * 删除对象对象实体
	 */
	public void delete(T entity){
		getHibernateTemplate().delete(entity);
	}

}
注意,这里采用的是通过继承HibernateDaoSupport类来使用Hibernate。


SysUser类:

public class SysUser {
	
	/**
	 * 用户id
	 */
	private String id;
	
	/**
	 * 用户姓名
	 */
	private String name;
	
	/**
	 * 用户密码
	 */
	private String password;
	
	public SysUser(String id, String name, String password) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
	}

	public SysUser() {
		super();
	}

	public String toString() {
		return "SysUser [id=" + id + ", name=" + name + ", password=" + password + "]";
	}
	
	public String getId() {
		return id;
	}
	public void setId(String 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;
	}
}
再创建SysUser这个实体类之后,还需要在SysUser类的同一个目录下创建一个SysUser.hbm.xm来和数据库进行映射。


SysUser.hbm.xml配置文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	
<hibernate-mapping package="com.zys.system.model">
    <class name="SysUser" table="USER">
        <id name="id" type="java.lang.String" column="ID" >
            <generator class="assigned"/>
        </id>
        
        <!-- 实体类的属性 -->
        <property name="name" column="NAME"/>
        <property name="password" column="PASSWORD"/>
    </class>
</hibernate-mapping>

接下来,还需要在Spring的application.xml配置文件中配置给sysUserdao,sysUserService,loginService注入对象,可以看到,在前面的几个类中调用了这几个对象的set方法,这个set方法就是用来获取Spring给我们创建的相关对象的,这样就减小了类之间的耦合度。

<?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-3.0.xsd
                http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" default-autowire="byName">
        
        <bean id="sysUserService" class="com.zys.system.service.SysUserService"></bean>
        <bean id="sysUserDao" class="com.zys.system.dao.SysUserDao"></bean>
        <bean id="loginService" class="com.zys.system.service.LoginService"></bean>
        
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
	        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  
	        <property name="url" value="jdbc:mysql://localhost:3306/csuft_news"></property>  
	        <property name="username" value="root"></property>  
	        <property name="password" value="zengyongsheng"></property>  
    	</bean>    
    	
    	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
            <property name="dataSource">  
                <ref bean="dataSource" />  
            </property>  
            <property name="annotatedClasses">  
                <list>  
                    <value>com.zys.system.model.SysUser</value>  
                </list>  
            </property>  
            <property name="hibernateProperties">  
                <props>  
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>  
                    <prop key="hibernate.show_sql">true</prop>  
                    <prop key="hibernate.hbm2ddl.auto">update</prop>  
                </props>  
            </property>  
            
            <property name="mappingLocations">
	            <list>
	                 <value>classpath:/com/zys/system/**/model/*.hbm.xml</value>
	            </list>
        	</property>
        </bean>      
</beans>


最后,还需要在struts.xml中进行相应的配置

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
 	<package name="default" extends="struts-default">
		<action name="login" class="com.zys.system.action.LoginAction" method="login">
			<result name="success">/system/frame.jsp</result>
			<result name="information">/information.jsp</result>
		</action>
	</package>
</struts>

接下来将测试运行的结果,在数据库中已经准备了一条数据。

首先是登录界面:


用户不存在的情形:


密码错误情形:


登录成功情形:



SSH框架搭建到这里,已经基本可以使用了,但是相关配置文件还是显得十分臃肿,下次将把一些配置文件细节稍微介绍,同时优化下配置文件的书写。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖墩有点瘦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值