使用JDBC、spring框架、servlet实现一个简单的用户登录功能。

一、mySql数据库

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) DEFAULT NULL,
  `pass` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

二、连接数据库(jdbc+spring)

(1)c3p0-config.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 指定名称的配置 -->
    <named-config name="oa">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/animal</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="maxPoolSize">100</property>
        <property name="initialPoolSize">20</property>
        <property name="minPoolSize">10</property>
        <property name="acquireIncrement">5</property>
    </named-config>
    <!-- 缺省的配置 -->
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/animal</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="maxPoolSize">100</property>
        <property name="initialPoolSize">20</property>
        <property name="minPoolSize">10</property>
        <property name="acquireIncrement">5</property>
    </default-config>
</c3p0-config>

(2)工具类:

package blank.util;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBConn {
    private static ComboPooledDataSource cpds=new ComboPooledDataSource("oa");
    private DBConn(){}
    public static DataSource getDataSource(){
        return cpds;
    }
    public static Connection getConn() throws SQLException{
        return cpds.getConnection();
    }
    public static void release(Connection conn){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn=null;
        }
    }
}

三、创建对应实体

blank.domain包中建立User.java

package blank.domain;

public class User {
    private Integer id;
    private String name;
    private String pass;
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    public User(Integer id, String name, String pass) {
        super();
        this.id = id;
        this.name = name;
        this.pass = pass;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPass() {
        return pass;
    }
    public void setPass(String pass) {
        this.pass = pass;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", pass=" + pass + "]";
    }
    
}

四、数据库操作接口

package blank.dao;
import blank.domain.User;

public interface UserDao {
    User getUser(String name, String pass);
}

五、数据库操作的具体方法实现

package blank.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import blank.dao.UserDao;
import blank.domain.User;
import blank.util.DBConn;

public class UserDaoImpl implements UserDao{
    private JdbcTemplate jdbcTemplate=new JdbcTemplate(DBConn.getDataSource());
    @Override
    public User getUser(String name, String pass) {
        String sql="select id , name, pass from user where name=? and pass=?";
        List<User> users=jdbcTemplate.query(sql, new Object[]{name,pass}, new RowMapper<User>(){

@Override
            public User mapRow(ResultSet rs, int num) throws SQLException {
                User u=new User();
                u.setId(rs.getInt("id"));
                u.setName(rs.getString("name"));
                u.setPass(rs.getString("pass"));
                return u;
            }});
        User user=null;
        if(users!=null&&users.size()>0){
            user=users.get(0);
        }
        return user;
    }

}

说明:此处查询时不可使用单个个体查询的方式,否则当用户名不存在时会报错!

六、登录的jsp界面

(1)login.jsp:

<body>
     <div style="text-align: center;">
        ${user}
        <!-- ./login.do -->
        <form action="./login.do" method="post">
            <table>
                <tr>
                    <td>用户名:</td>
                    <td><input type="text" name="name"/></td>
                </tr>
                <tr>
                    <td>密码:</td>
                    <td><input type="password" name="pass"/></td>
                </tr>
                <tr style="text-align: center;">
                    <td colspan="2"><input type="submit" value="登录"/></td>
                </tr>
            </table>
        </form>
    </div>
  </body>

(2)sc.jsp:

<body>
    欢迎登录

</body>

七、servlet控制层

package blank.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import blank.dao.PetDao;
import blank.dao.UserDao;
import blank.dao.impl.PetDaoImpl;
import blank.dao.impl.UserDaoImpl;
import blank.domain.Pet;
import blank.domain.User;

public class LoginServlet extends HttpServlet {
    private UserDao userDao=new UserDaoImpl();
    private PetDao petDao=new PetDaoImpl();
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String name=request.getParameter("name");
        String pass=request.getParameter("pass");
        User user=userDao.getUser(name, pass);
        if(user!=null){
            request.setAttribute("user", user);
            List<Pet> pets=petDao.getObjects();
            request.setAttribute("pets", pets);
            request.getRequestDispatcher("/sc.jsp").forward(request, response);
        }else{
            request.setAttribute("user", "用户名或密码错误");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
        
    }

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

doGet(request, response);
    }

}

八、结果展示

进入页面显示如下:

输入正确的用户名和密码后跳转至另一页面,显示如下:

输入错误的用户名或密码后留在登录页面不跳转,结果如下:

JavaWeb学习记录(六)——用户登录功能的更多相关文章

  1. Struts2整合Hibernate3实现用户登录功能

    所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...

  2. 实现Web上的用户登录功能

    关于如何实现web上的自动登录功能 文章来源http://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能 ...

  3. 你会做Web上的用户登录功能吗?

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...

  4. 利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)

    利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JS ...

  5. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  6. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  7. tail -fn 1000 test.log | grep '关键字' 按照时间段 sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log /var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件

    Linux 6种日志查看方法,不会看日志会被鄙视的 2020-02-11阅读 7.3K0   作为一名后端程序员,和Linux打交道的地方很多,不会看Linux日志,非常容易受到来自同事和面试官的嘲讽 ...

  8. 使用Struts1完成用户登录功能

    1.Struts框架 框架(framework):就是一系列代码和开发模式的整合,使用框架后,所有开发人员都会按照框架提供的规范进行开发,使代码更容易维护和扩展. 使用框架的优点: 1)   易于维护 ...

  9. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

随机推荐

  1. redis学习(一)

    一.redis简介 Redis是基于内存.可持久化的日志型.key-value高性能存储系统.关键字(Keys)是用来标识数据块.值(Values)是关联于关键字的实际值,可以是任何东西.有时候你会存 ...

  2. 踏着前人的脚印学Hadoop——结构、重点

    HDFS作为一个分布式文件系统,是所有这些项目的基础.分析好HDFS,有利于了解其他系统.由于Hadoop的HDFS和MapReduce是同一个项目,我们就把他们放在一块,进行分析. 如果把整个had ...

  3. Apache Jmeter(2)

    上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测试目标网站是fnng.cnblogs.co ...

  4. CentOS SSH配置

    默认CentOS已经安装了OpenSSH,即使你是最小化安装也是如此.所以这里就不介绍OpenSSH的安装了. SSH配置: 1.修改vi /etc/ssh/sshd_config,根据模板将要修改的 ...

  5. opencv中的Mat类型

    Mat类型主要是跟matlab中的数据类型一样.故用起来很方便. Mat最大的优势跟STL很相似,都是对内存进行动态的管理,不需要之前用户手动的管理内存,对于一些大型的开发,有时候投入的lpImage ...

  6. 沙盒密探——可实现的js缓存攻击

    我们描述了第一次完全运行在浏览器端的微结构单通道攻击.与其他参和这种类型的相反,这种攻击不再需要攻击者在肉鸡上安装任何软件,为了让攻击更容易,肉鸡仅仅需要浏览哪些攻击者控制的不被信任的网页内容.这会让 ...

  7. 在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结

    在 Linux 的 KVM虚拟机 上安装 Mac OS 系统的研究总结 一.资料来源:    网上一共找到两个方法,一个是视频上的教程,一个是网页资料. 二.视频资料方法内容:1.install qe ...

  8. ios openURL的使用(调用系统电话、浏览器、地图、邮件等)

    Safari Any URL starting with http:// which does not point to maps.google.com or www.youtube.com is s ...

  9. [!!!!!]Inno Setup教程-常见问题解答

    [转]Inno Setup教程-常见问题解答 功能 * 翻译 Inno Setup 文字  * 它支持 MBCS (多字节字符集) 吗?  * 将来会支持 Windows Installer 吗?   ...

  10. jQuery实现产品滚动效果

    html: <div class="win_list_b"> <div class="scroll" style="height: ...