zoukankan      html  css  js  c++  java
  • SSH入门开发(实现一个简单的登录功能)详解

    开头,首先想记录下一首诗,是今天拇指阅读看到的;很有感触,所以乐于分享;
    这里写图片描述


    那么,下面正式开始进入正题,搭建一个 SSH完整的项目;

    首先,我们需要在WEB-ROOT下创建一个login.jsp(登录)页面;
    在body之中填写如下代码:

    <form action="user.action" method="post">
            <!-- Struts返回页面对象需要加前缀 user.name -->
            用户名:<input type="text" name="user.name" value="${requestScope.user.name} " />
            密码:<input type="password" name="user.pwd" />
            <input type="submit" value="登录" />
        </form>
        <!-- 错误:返回该页面时显示的数据 -->
         ${error }

    然后,我们在WebRoot新建一个success.jsp;登录成功页面;验证登录成功跳转;
    在body之中编写代码:

    恭喜你,登录成功!!!${sessionScopr.user.name }

    因为登录时需要访问action,需要创建action,在创建action之前,新建一个实体类;
    新建一个实体类User;它必须和数据库对应的表保持一致;
    这里写图片描述
    源码:

    package com.jredu.entity;
    
    public class User {
    
        private int id;
        private String name;
        private String pwd;
    
        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 getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
    }
    

    因为使用的Hibernate框架,所以创建一个实体类的映射文件;同User实体类在同包下;(User.hbm.xml)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- package对应实体类的包 -->
    <hibernate-mapping>
        <!-- 对应的实体类,domain对象,pojo -->
        <class name="com.jredu.entity.User" table="users">
            <id name="id" column="id" type="java.lang.Integer">
                <!-- 主键生成策略 -->
                <!-- 序列的形式生成主键 -->
                <generator class="sequence">
                    <!-- 指定参数:指定序列的名称 -->
                    <param name="sequence">USERS_SEQ</param>
                </generator>
            </id>
            <property name="name" column="name" type="java.lang.String"/>
            <property name="pwd" column="pwd" type="java.lang.String"/>
        </class>
        <query name="findUser">
            <![CDATA[
                from User where name=:name and pwd=:pwd
            ]]>
        </query>
    </hibernate-mapping>

    跳转action,创建Action;(UserAction.java)该类继承 extends ActionSupport;
    这里写图片描述
    - 重写execute()方法;验证登录:(登录成功,登录失败)
    源码:

    package com.jredu.action;
    
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import com.jredu.entity.User;
    import com.jredu.service.UserService;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport{
    
    
        private User user;
        private String error;  //给前台返回的错误信息
    
        @Autowired
        private UserService service;
    
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            //验证登录
            User realUser = service.getUser(user);
            if(realUser!=null){
                //登录成功
                //存储到Session中
                Map<String, Object> map=ActionContext.getContext().getSession();//拿到Session
                map.put("user", realUser);
                return SUCCESS;
            }else{
                //登录失败
                setError("用户名或密码错误");
                return INPUT;
            }
        }
    
        public String getError() {
            return error;
        }
    
        public void setError(String error) {
            this.error = error;
        }
    
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    }
    

    因为Action验证登录的判断需要下层的支持;所以:
    在application-Context.xml中配置Action;
    这里写图片描述


    因为需要被实例化(2种方式,1种添加注解的方式,另一种配置文件,添加bean);
    我们采用第二种方式来实例化;
    这里写图片描述


    依然需要配置,在Struts中继续配置;在package中进行配置;
    这里写图片描述


    Action层配置完毕,进入下一层,Service层;
    创建UserService接口;创建一个方法;
    这里写图片描述


    创建UserService接口的实现类;实现UserService接口中的方法;
    这里写图片描述
    源码:

    package com.jredu.serviceimpl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.jredu.dao.UserDao;
    import com.jredu.entity.User;
    import com.jredu.service.UserService;
    
    @Service
    public class UserServiceImpl implements UserService{
    
        @Autowired
        private UserDao dao;
    
        @Override
        public User getUser(User user) {
            // TODO Auto-generated method stub
            return dao.findUser(user);
        }
    
    }
    
    

    然后进入下一层;创建Dao层;UserDao的接口类;
    这里写图片描述


    创建UserDaoImpl实现UserDao;
    这里写图片描述
    源码:

    package com.jredu.dao.impl;
    
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    import com.jredu.dao.UserDao;
    import com.jredu.entity.User;
    
    //将Dao层变成对象
    @Repository
    public class UserDaoImpl implements UserDao{
    
        @Autowired
        private SessionFactory factory;
    
        @Override
        public User findUser(User user) {
            // TODO Auto-generated method stub
            Session session = factory.openSession();
            //传一个方法的名字
            Query query = session.getNamedQuery("findUser");
            //传参
            query.setString("name", user.getName());
            query.setString("pwd", user.getPwd());
            List<User> list = query.list();
            if(list!=null&&!list.isEmpty()){
                return list.get(0);
            }
            return null;
        }
    
    }
    

    下一步;Hibernate方法,查数据库;
    查询数据库,首先要连接;我们在Spring配置文件中配置过sessionFactory;我们可以直接将其使用,可以在实现类中定义sessionFactory;
    这里写图片描述


    返回上一层这里写图片描述


    Action调用,返回Action;
    注入UserService;
    这里写图片描述
    这里写图片描述


    至此,项目搭建完成;经测试可以正常运行;SSH的搭建请参考上一篇博客;

  • 相关阅读:
    读《成交》有感
    【VC++学习笔记二】绘制图片的双缓冲技术
    【VC++学习笔记一】MFC操作Excel
    敏捷软件开发
    VIM常用命令
    Ubuntu下配置samba实现文件夹共享
    linux系统编程之管道(三):命令管道(FIFO)
    linux系统编程之管道(二):管道读写规则
    linux系统编程之管道(一):匿名管道(pipe)
    《Linux环境进程间通信》系列文章链接
  • 原文地址:https://www.cnblogs.com/aixing/p/13327634.html
Copyright © 2011-2022 走看看