`

JSP+Servlet+DAO登陆验证

 
阅读更多

 

JSP+Servlet+DAO登陆验证

一、登陆页: login.jsp

<%@ page contentType="text/html; charset=UTF-8" import="java.util.*" %>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>用户登录</title>
  <script type="text/javascript">
   function validate(f)
   {
    if(!(/^\w{5,15}$/.test(f.userid.value)))
    {
     alert("用户 ID 长度必须在 5 ~ 15 位之间!");
     f.userid.focus(); // 把焦点放到用户 ID 框中
     false;
    }
    if(!(/^\w{5,15}$/.test(f.userpass.value)))
    {
     alert("密码长度必须在 5 ~ 15 为之间!");
     f.userpass.focus();  // 把焦点放到密码框中
     return false;
    }
    return true;
   }
  </script>
 </head>
 <body>
  <h2>用户登陆</h2>
  <%
   request.setCharacterEncoding("UTF-8");  // 设置接收参数编码格式为 UTF-8
  %>
  <%
   List<String> info = (List<String>)request.getAttribute("info");  // 提取错误提示信息
   if(info != null) // 存在错误提示信息,登陆失败!
   {
    Iterator<String> iter = info.iterator();  // 实例化 Iterator 类
    while(iter.hasNext())
    {
  %>
     <h3><%= iter.next() %></h3>
  <%
    }
   }
  %>
  <form action="Login" method="post" onSubmit="return validate(this)">
   用户ID:<input type="text" name="userid" /><br />
   密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="userpass" size="22px" /><br />
   <input type="submit" value=" 登 陆 " />
   <input type="reset" value=" 重 置 " />
  </form>
 </body>
</html>

 

二、数据库脚本:

-- 判断数据库是否已存在,如果存在则删除
DROP DATABASE IF EXISTS etecha;

-- 创建数据库 etecha
create database etecha;

-- 进入数据库 etecha 中
use etecha;

-- 判断用户表 user 是否已存在,如果存在则删除
DROP TABLE IF EXISTS user;

create table user
(
 userid varchar(30) primary key,  -- 主键,用户ID
 name varchar(30) not null, -- 用户名
 password varchar(32) not null  -- 密码
)ENGINE=MyISAM DEFAULT CHARSET=utf8;


insert into user(userid, name, password) values('admin', 'administrator', '123');

 

 

三、VO 类: User.java

package com.etecha.api.vo;

public class User
{
 private String userid;
 private String name;
 private String password;

 public String getUserid()
 {
  return this.userid;
 }
 public void setUserid(String userid)
 {
  this.userid = userid;
 }

 public String getName()
 {
  return this.name;
 }
 public void setName(String name)
 {
  this.name = name;
 }

 public String getPassword()
 {
  return this.password;
 }
 public void setPassword(String password)
 {
  this.password = password;
 }
}

 

 

四、DAO 类:IUserDAO.java

package com.etecha.api.dao;

import com.etecha.api.vo.User;

public interface IUserDAO
{
 public boolean findLogin(User user) throws Exception;
}

 

 

五、数据库连接类:DatabaseConnection.java

package com.etecha.api.dbc;

import java.sql.Connection;
import java.sql.DriverManager;

public class DatabaseConnection
{
 private static final String DBDRIVER = "com.mysql.jdbc.Driver";
 private static final String DBURL = "jdbc:mysql://localhost:3306/etecha";
 private static final String DBUSER = "root";
 private static final String DBPASSWORD = "123";
 private Connection conn = null;

 // 在构造方法中进行数据库的连接
 public DatabaseConnection() throws Exception  
 {
  try
  {
   Class.forName(DBDRIVER);  // 运用反射机制加载数据库驱动程序
   this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);  // 建立与数据库的连接
  }
  catch (Exception e)
  {
   throw e;
  }
 }

 public Connection getConnection()
 {
  return this.conn;  // 取得当前连接
 }

 public void close() throws Exception
 {
  if(this.conn != null)
  {
   try
   {
    this.conn.close();  // 如果已建立连接则断开当前连接
   }
   catch (Exception e)
   {
    throw e;
   }
  }
 }
}

 

 

六、DAO工厂类:DAOFactory.java

package com.etecha.api.factory;

import com.etecha.api.dao.IUserDAO;
import com.etecha.api.dao.proxy.UserDAOProxy;

// 取得 DAO 实例
public class DAOFactory
{
 public static IUserDAO getIUserDAOInstance()
 {
  return new UserDAOProxy();  // 返回代理实例
 }
}

 

 

七、DAO 实现类: UserDAOImpl.java

package com.etecha.api.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.etecha.api.dao.IUserDAO;
import com.etecha.api.vo.User;

// DAO 实现类
public class UserDAOImpl implements IUserDAO
{
 private Connection conn = null;  // 声明数据库连接对象
 private PreparedStatement pstmt = null;  // 声明数据库操作对象

 // 在构造方法中设置数据库的连接
 public UserDAOImpl(Connection conn)  
 {
  this.conn = conn;
 }

 public boolean findLogin(User user) throws Exception
 {
  boolean flag = false;
  try
  {
   String sql = "SELECT name FROM user WHERE userid = ? AND password = ?";  // 构造 SQL 语句
   this.pstmt = this.conn.prepareStatement(sql);  // 加载 SQL 语句,实例化操作
   this.pstmt.setString(1, user.getUserid());  // 设置 ID
   this.pstmt.setString(2, user.getPassword()); // 设置 Password
   ResultSet rs = this.pstmt.executeQuery();  // 取得查询结果
   if(rs.next())
   {
    user.setName(rs.getString(1));
    flag = true;
   }
  }
  catch (Exception e)
  {
   throw e;  // 向上抛出异常
  }
  finally
  {
   if(this.pstmt != null)
   {
    try
    {
     this.pstmt.close();  // 如果与数据库的操作处于连接状态则关闭
    }
    catch (Exception e)
    {
     throw e;
    }
   }
  }
  return flag;
 }
}

 

 

八、DAO 代理类:UserDAOProxy.java

package com.etecha.api.dao.proxy;

import com.etecha.api.dao.IUserDAO;
import com.etecha.api.dao.impl.UserDAOImpl;
import com.etecha.api.dbc.DatabaseConnection;
import com.etecha.api.vo.User;

// DAO 代理类
public class UserDAOProxy implements IUserDAO
{
 private DatabaseConnection dbc = null;  // 声明数据库连接对象
 private IUserDAO dao = null;  // 声明 DAO 接口

 // 在构造方法中实例化与数据库的连接
 public UserDAOProxy()
 {
  try
  {
   this.dbc = new DatabaseConnection();  // 实例化数据库连接
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  this.dao = new UserDAOImpl(this.dbc.getConnection());  // 把连接结果返回到 DAO 接口
 }

 public boolean findLogin(User user) throws Exception
 {
  boolean flag = false;
  try
  {
   flag = this.dao.findLogin(user);  // 通过 DAO 接口判断用户名是否合法
  }
  catch (Exception e)
  {
   throw e;
  }
  finally
  {
   this.dbc.close();  // 关闭与数据库的连接
  }
  return flag;
 }
}

 

 

九、Servlet:LoginServlet.java

package com.etecha.api.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.etecha.api.factory.DAOFactory;
import com.etecha.api.vo.User;

public class LoginServlet extends HttpServlet
{
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
 {
  String path = "login.jsp";
  String userid = request.getParameter("userid");  // 接收 userid 内容
  String userpass = request.getParameter("userpass"); // 接收 userpass 内容
  List<String> info = new ArrayList<String>();
  if(userid == null || "".equals(userid))
  {
   info.add("<span style='color:red'>用户 id 不能为空!</span>");  // 错误提示信息
  }
  if(userpass == null || "".equals(userpass))
  {
   info.add("<span style='color:red'>密码不能为空!</span>");  // 密码错误提示
  }
  if(info.size() == 0) // 用户通过验证
  {
   User user = new User();  // 实例化 VO 类
   user.setUserid(userid);  // 把 userid 添加到 VO 对象 user 中
   user.setPassword(userpass); // 把 userpass 添加到 VO 对象 user 中
   try
   {
    if(DAOFactory.getIUserDAOInstance().findLogin(user))  // 验证通过
    {
     info.add("登陆成功!欢迎<font size=14 color=red> " + user.getName() + " </font>光临本站!");
    }
    else // 登陆失败
    {
     info.add("<span style='color:red'>登陆失败!用户名或密码错误!</span>");
    }
   }
   catch (Exception e)
   {
    e.printStackTrace();
   }
  }
  request.setAttribute("info", info);  // 保存错误信息
  request.getRequestDispatcher(path).forward(request, response);  // 跳转到登陆页面
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
 {
  this.doGet(request, response);
 }
}

 

十、web.xml 配置文件:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

  <servlet>                  <!-- 定义 Servlet -->
 <servlet-name>login</servlet-name>           <!-- 与 servlet-mapping 相对应,名字必须完全相同 -->
 <servlet-class>com.etecha.api.servlet.LoginServlet</servlet-class>   <!-- 定义具体的包.类名 -->
  </servlet>
  <servlet-mapping>                <!-- 映射路径 -->
 <servlet-name>login</servlet-name>         <!-- 与 servlet 相对应,名字和 servlet 完全相同 -->
 <url-pattern>/Login</url-pattern>           <!-- 页面的映射路径。虚拟路径 -->
  </servlet-mapping>


</web-app>

分享到:
评论

相关推荐

    jsp+Servlet+javaBean实现登录注册

    本项目“jsp+Servlet+javaBean实现登录注册”采用经典的Web开发技术栈,包括JavaServer Pages (JSP)、Servlet以及JavaBeans,结合MySQL数据库,利用集成开发环境myEclipse进行开发。下面将详细阐述这些知识点。 1. ...

    jsp+servlet+javabean实现网上商城项目完整源码

    《基于JSP、Servlet和JavaBean的网上商城项目详解》 网上商城项目是现代电子商务的重要组成部分,它将传统的购物体验与互联网技术相结合,为用户提供便捷的在线购物平台。本项目利用JSP、Servlet和JavaBean技术实现...

    基于JSP+Servlet图书管理系统

    【基于JSP+Servlet图书管理系统】是一个典型的Web应用程序开发实例,它利用了Java技术栈中的核心组件来构建一个用于管理图书信息的系统。系统的主要功能包括图书的添加、删除、修改和查询,以及用户管理等。以下是这...

    在线考试系统(jsp+servlet)_jap+servlet考试,jsp servlet 实现在线考试

    在线考试系统是一个基于Java技术,特别是使用JSP(JavaServer Pages)和Servlet的Web应用程序,它为用户提供了在线进行考试和自动评估成绩的功能。这样的系统通常由几个关键组件构成,包括用户界面、后端服务器处理...

    jsp + servlet + javaBean + sql 学生课绩管理系统.zip

    在本系统中,Servlet扮演着控制器的角色,处理由JSP提交的请求,执行相应的业务逻辑,比如验证用户身份、计算平均分、更新成绩等,并将结果返回给JSP进行展示。Servlet可以通过继承HttpServlet类并重写doGet或doPost...

    用jsp+servlet+javabean做的博客系统

    在这个"用jsp+servlet+javabean做的博客系统"中,我们可以学习到三个关键的技术栈:JavaServer Pages (JSP)、Servlet以及JavaBeans。下面将详细阐述这三个技术在构建博客系统中的作用和知识点。 1. **JavaServer ...

    基于jsp+javabean+servlet的课程管理系统 java毕业设计

    【标题】:“基于jsp+javabean+servlet的课程管理系统”是使用Java Web技术构建的一个教育信息化解决方案,主要面向高校或培训机构,旨在高效管理和组织课程信息。这一系统结合了JSP(JavaServer Pages)、JavaBean...

    JSP+Servlet+MySql实现商城项目

    本项目基于JSP、Servlet和MySQL技术实现了在线商城的功能,这是一套完整的电商系统开发案例,适合初学者和有一定经验的开发者学习。在本文中,我们将深入探讨这三个核心技术在电商项目中的应用,以及它们如何协同...

    jsp+servlet 网上书城项目

    在"jsp+servlet 网上书城项目"中,Servlet负责业务逻辑处理,如用户登录验证、商品查询、购物车管理等。Servlet与JSP配合,实现MVC(Model-View-Controller)架构,使代码结构更清晰。 3. **Oracle数据库**:Oracle...

    基于jsp+Servlet+mybatis实现简单增删改查的图书信息系统

    在本项目中,我们主要探讨的是如何利用Java技术栈,特别是jsp、Servlet和MyBatis,来构建一个简单的图书信息管理系统。这个系统具备基础的图书信息增删改查(CRUD)功能,并且实现了分页展示,同时也包含了用户登录...

    JavaWeb实现网上商城:JSP+Servlet+Dao

    Servlet:用于验证数据、实例化JavaBean、调用Dao连接数据库、控制页面的跳转 Servlet过滤器(filter):能够在一个Request到达servlet之前预处理request,也可以在离开servlet时处理response Servlet监听器:给web中...

    jsp+ajax+servlet+jdbc案例

    在登录、增删查改等操作中,Servlet接收来自JSP的请求,执行相应的业务逻辑,比如验证用户登录信息,或对数据库进行CRUD操作。 AJAX则扮演了前端与后端通信的重要角色。它使网页可以在不刷新整个页面的情况下,与...

    JSP+Servlet+JDBC实现MYSQL增删改查

    在本文中,我们将深入探讨如何使用JSP(JavaServer Pages)、Servlet和JDBC(Java Database Connectivity)来实现MySQL数据库的增、删、改、查操作。这种方法在小型项目中非常常见,但也有其局限性,如代码与SQL语句...

    使用jsp+servlet+jdbc实现花卉管理系统.zip

    【标题】"使用jsp+servlet+jdbc实现花卉管理系统"是一个基于Java Web技术的项目实例,主要涉及了前端展示层JSP、服务器控制层Servlet以及数据访问层JDBC。这个系统可能是一个适合毕业设计或课程设计的作业,它利用了...

    基于JSP+Servlet小项目

    【基于JSP+Servlet小项目】是一个典型的JavaWeb应用程序,它是使用JavaServer Pages(JSP)技术和Servlet进行开发的。这个项目可能包含了从用户界面到后端数据处理的完整流程,展示了如何在Web环境中整合这两种技术...

    学生管理系统(JSP+Servlet+MyBatis)

    【学生管理系统(JSP+Servlet+MyBatis)】是一个基于Web的应用程序,主要用于高校或教育机构的学生信息管理。此系统采用经典的Java Web开发技术栈,包括JSP(JavaServer Pages)、Servlet和MyBatis,同时也引入了...

    J2EE项目在线博客系统(jsp + servlet + javabean)

    【J2EE项目在线博客系统】是一个典型的Java企业级应用示例,主要使用了jsp、servlet和javabean技术来构建。这个项目是初学者踏入J2EE领域的一个很好的实践平台,它可以帮助开发者理解如何在实际环境中整合这些核心...

    学生课绩管理系统 jsp + servlet + javaBean + sql.rar

    《基于jsp、servlet、javaBean和SQL的学生课绩管理系统详解》 学生课绩管理系统是教育信息化中的一个重要组成部分,它能够有效地帮助学校管理和追踪学生的学业成绩。本系统采用经典的Java Web技术栈,包括jsp(Java...

    JSP+Servlet+JavaBean__数据库登录验证

    本项目“JSP+Servlet+JavaBean__数据库登录验证”旨在实现一个基本的用户登录验证功能,这涉及到前端界面设计、后端逻辑处理以及与数据库的交互。以下是关于这些知识点的详细说明: 1. **JSP(JavaServer Pages)**...

    基于单表的增删改查(jsp+servlet版)

    在传统的MVC(Model-View-Controller)架构中,Servlet通常扮演控制器的角色,负责接收请求、处理业务逻辑,并调用模型层(如DAO,Data Access Object)进行数据操作,最后将结果传递给JSP进行展示。 在"基于单表的...

Global site tag (gtag.js) - Google Analytics