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的搭建请参考上一篇博客;

原文地址:https://www.cnblogs.com/aixing/p/13327634.html