Struts+Hibernate 实现登录功能

200 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

前言

  Struts+Hibernate+Mysql的登录案例

  本文是 Struts + Hibernate 的集成案例,其中使用 Struts 作为系统的整体基础架构,负责 MVC 的分离,在Struts框架模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。

1、需求分析

1、在login页面输入账号密码,成功跳转成功页面,失败跳转失败页面

2、并且登录判断是从数据库查询数据比对

3、采用Dao接口开发

4、Struts负责控制业务

5、Hibernate负责对数据库操作

2、具体实现

1、目录结构

image-20221025214417928.png

2、数据库的建库建表语句

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int NOT NULL,
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

3、实体层entity的编写,主要是实体的属性名数据库字段名一一对应,以及Get、Set方法的编写。

public class User {
​
    private Integer id;
    private String username;
    private String password; 
    
    /**
    *  GetSet方法
    */
    
}

4、hibernate的配置文件编写,主要是数据库链接的信息,端口号、数据库名字、账号、密码等。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>
​
    <session-factory>
​
        <!--使用 Hibernate 自带的连接池配置-->
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">xmpkj</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
​
        <!--hibernate 方言-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
​
        <!--打印sql语句-->
        <property name="hibernate.show_sql">true</property>
        <!--格式化sql-->
        <property name="hibernate.format_sql">true</property>
​
        <!-- 加载映射文件 -->
        <mapping resource="sqgxy/xmp/entity/User.hbm.xml"/>
    </session-factory></hibernate-configuration>

5、Dao接口以及实现类的编写,主要是sql查询账号密码的逻辑代码。

public interface UserDao {
​
    public User validateUser(String username,String password);
​
}
public class UserDaoImp implements sqgxy.xmp.dao.UserDao {
    @Override
    public User validateUser(String username, String password) {
        //查询 user 表中的记录
        String hql="from  User where username=?0 and password=?1";
        Query query= (Query) HibernateSessionFactory.getSession().createQuery(hql);
        query.setParameter(0, username);
        query.setParameter(1, password);
        List users=query.list();
        Iterator it=users.iterator();
        while(it.hasNext())
        {
            if(users.size()!=0){
                User user=(User) it.next(); //创建持久化的 JavaBean 对象 user
                return user;
            }
        }
        HibernateSessionFactory.closeSession();
        return null;
    }
}

6、Struts.xml文件,必须放在src根目录下,负责控制业务,详细代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>
    <package name="default" namespace="/default" extends="struts-default">
        <action name="userDaoImp" class="sqgxy.xmp.action.LoginAction" method="execute">
​
                <!--结果为字符串"success"时,跳转至登录成功页面-->
                <result name="success">/success.jsp</result>
​
                <!--结果为字符串"error"时,跳转至登录成功页面-->
                <result name="error">/error.jsp</result>
​
        </action>
    </package></struts>

7、Action的编写,主要编写了账号密码正确与否判断逻辑,其核心代码如下。

  boolean validated=false;          
        ActionContext context=ActionContext.getContext();
        Map session=context.getSession();   
        User user1=null;
​
        user1=(User) session.get("user");
​
        if(user1==null){
            UserDao userDaoImp = new UserDaoImp();
            user1= userDaoImp.validateUser(usr, pwd);
            if(user1!=null){
                session.put("user", user1); 
                validated=true;                 
            }
        }

8、试图JSP页面代码的编写,主要三个页面,登录页面,成功以及失败页面。

3、测试

1、数据库的账号密码

image-20221025215559267.png

2、当账号或者密码不对时,跳转到失败页面。

登入失败时.png

3、当账号密码正确时,跳转到成功页面。

登入成功.png

总结

  以上就是今天的分享,主要分享了Struts+Hibernate的使用以及登录的案例,需要源码的私信,虽然很简单(手动狗头)。