SSH系列一:实现用户登录模块

一、简介:用户登录模块,用户输入用户名和密码,对其身份进行验证
二、简单思路和方法(基于Java ssh框架实现)
1、先在数据库中创建相应的表(我用的是MySQL数据库)

设计个Userinfo表,存放用户的用户名、登录密码和用户信息

    create table userinfo  
    (  
      id                        int(11) primary key,  
      username                 varchar2(50) not null,  
      password                 varchar2(50) not null,   
      real_name               varchar2(10) not null,  
      birthday                 varchar2(40),  
      e_mail                   varchar2(40),  
      address                   varchar2(50)    
    );  

2、用Myeclipse的hibernate生成Javabean:UserInfo.java和对应的配置文件UserInfo.hbm.xml文件(自带的逆向工具)(必须在同一个包下)

UserInfo.java代码

public class UserInfo {
    private int id;
    private String username;
    private String password;
    private String real_name;
    private String birthday;
    private String e_mail;
    private String address;
               //默认的构造方法
    public UserInfo() {
    }

    // 方便测试用
    public UserInfo(String username, String password, String real_name,String birthday,String e_mail,String address) {
        this.username = username;
        ....
    }
    //省略成员变量的set和get方法

UserInfo.hbm.xml代码

<hibernate-mapping>
   <class name="com.bean.UserInfo" table="userinfo">
   <!--id 数据库主键-->
     <id name="id" type="int" column="Id">
       <generator class="native"/><!--native主键自增长-->
     </id>

     <property name="username" type="java.lang.String" column="username"/>
     <property name="password" type="java.lang.String" column="password"/>
     <!--其他属性省略-->
  </class>

</hibernate-mapping>

3、创建UserInfoServiceDAO接口

public interface UserInfoServiceDAO {

    public UserInfo loginUser(User user);//通过页面传值进行数据库验证
                        //这里的user只封装两个值,用户名和密码;user是封装了用户名和密码两个属性进行查询
    public boolean updatePwd(UserInfo userInfo);//进行用户数据的更新
    /*
     *添加新用户,删除就用户等略,自行添加
     */
}

4、创建UserInfoServiceDAOImpl实现类
实现UserInfoServiceDAO的方法

public class UserInfoServiceDAOImpl implements UserInfoServiceDAO {

    private SessionFactory sessionFactory;
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    // 查询数据库中是否有该用户 返回数据库查询的整条信息
    @Override
    public UserInfo loginUser(User user) {
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        Query query = session
                .createQuery("from UserInfo as u where u.username='"
                        + user.getUsername() + "' and u.password='"
                        + user.getPwd() + "'");

        List<UserInfo> list = query.list();
        //if检查是否查到数据,如果长度为0(list.size()为0),则未查到信息
        if (list.size() != 0) {
            UserInfo userInfo1 = list.get(0);
            transaction.commit();
            session.close();
            return userInfo1;
        } else {
            transaction.commit();
            session.close();
            return null;
        }
    }

//进行用户数据的更新
    @Override
    public boolean updatePwd(UserInfo userInfo) {
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.saveOrUpdate(userInfo);
        transaction.commit();
        session.close();
        return true;
    }
}

5、编写action动作代码:UserInfoAction.java
只有验证用户登录和更新action动作,其他功能略

//User只有username和pwd属性
//ModelDriven<User>前台传值的一个接口
public class UserAction extends ActionSupport implements ModelDriven<User> {
     private User user = new User();
     private  UserInfoServiceDAO  userInfoServiceDAOImpl;
     //省略get、set方法
        /*
        *1、execute()继承ActionSupport,重写
        *2、logOut()用户注销
        */
        @Override//用户登录
        public String execute() throws Exception {
        Map session = (Map) ActionContext.getContext().getSession();
        UserInfo userInfo = userInfoServiceDAOImpl.loginUser(user);
        if (user.getUsername() == null&&userInfo==null){
            this.addActionMessage("用户名或密码不正确");
            return ERROR;
        }else{
            session.put("userInfo", userInfo);// session.put("key",value);
            return SUCCESS;
         }
    }

       //用户注销
    public String logOut() throws Exception {
        Map session = (Map) ActionContext.getContext().getSession();
        session.remove("userLogin");
        return SUCCESS;
    }
}

6、applicationContext.xml修改(驱动一般也需要添加)
spring依赖注入
这里写图片描述

    <bean id="userInfoServiceDAOImpl" class="com.dao.impl.UserInfoServiceDAOImpl">
        <property name="sessionFactory" ref="sessionFactory">
        </property>
    </bean>
    <bean id="userAction" class="com.action.UserAction">
        <property name="userInfoServiceDAOImpl" ref="userInfoServiceDAOImpl" />
    </bean>

7、struts.xml部分添加,action属性和result返回

<!--
1、index.jsp首页:登录成功返回首页
2、error.jsp登录错误界面:如果用JavaScript可以不用这个。未输入用户名或未在数据库查询到信息
-->
<!-- 用户登陆界面,用户名、密码两个参数 -->
<action name="slogin" class="userAction">
    <result>/index.jsp</result>
    <result name="error">/error.jsp</result>
</action>
<!-- 用户注销 -->
<action name="logOut" class="userAction" method="logOut">
    <result>/index.jsp</result>
</action>

8、jsp前台页面,简单登录界面,其他略

<!--添加struts2标签的的支持,在struts2的jar包中。插入页面开头-->
<%@taglib prefix="s" uri="/struts-tags"%>
<s:form method="post" action="slogin">
     <!--这里值被后台的ModelDriven<User>接受,封装成User类型-->
    <s:textfield label="用户名" name="username" />
    <s:password label="密码" name="pwd" />
    <s:actionmessage /><!--当出现错误时,显示。可省略-->
    <s:submit value="确认" class="btnsubmit" />
</s:form>
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值