一、登陆页: 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 />
密 码:<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>
相关推荐
Servlet:用于验证数据、实例化JavaBean、调用Dao连接数据库、控制页面的跳转 Servlet过滤器(filter):能够在一个Request到达servlet之前预处理request,也可以在离开servlet时处理response Servlet监听器:给web中...
统名称:jsp+servlet+javabean新闻发布系统 大家好,这是我搜集整理好并且测试通过的的一个新闻发布系统,有程序,设计详细文档和ppt演示,我现在把程序共享给大家,有需要完整文档的朋友请再联系我!! 系统角色:...
使用数据库保存聊天记录;...系统支持双人聊天与群聊,群聊登陆界面为webLogin.jsp 双人聊天为login.jsp。在注册以后均可以登陆系统进行聊天。 最新加入了收到消息MSN消息提示,以及任务栏文字提示等。
利用JSP技术开发的新闻发布系统,主要有五大功能模块:前台查看模块,登陆验证模块,管理员管理模块,新闻类型管理模块,新闻信息管理模块,实现了对网站新闻的动态管理。因为可以用来动态发布新闻信息,所以对信息...
用jsp+servlet+JavaBean+DAO做的注册系统,仿照网上多数网站的注册,输入完一项验证一项,有验证码,用户名和验证码的验证使用Ajax
Servlet 用于验证数据、实例化JavaBean、调用DAO连接数据库、控制页面跳转 DAO用于连接数据库及进行数据库的操作如:查询、删除、更改等 JavaBean用于数据的封装,方便将查询结果在servlet与jsp页面之间进行传递等 ...
实现和数据库数据之间的验证。实现MVC架构的例子,用了DAO的模式,简单易用,易学习,是新手学习的好例子, mysql6.0
主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...
主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...
控制转发层采用Servlet,数据访问层采用Hibernate(bean和dao是由Hibernate逆向工程自动生成)。 系统采用分层架构,由上到下分为视图层、控制转发层、业务层、服务层、数据库访问层。运用了一些基本设计模式,系统...
本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础、网页布局、数据库基础、Servlet、前端后台数据库交互、DAO等知识。 前一篇文章讲解了MyEclipse+Servlet+JSP实现...
Java+Servlet+HTML+CSS+数据库,实现的学生信息管理系统,实现了 新增和查询功能。 覆盖知识 ...三层架构的搭建(dao层接口和实现类的编写、service层接口和实现类的编写、view层的Servlet类的编写)
用DAO的方式处理登陆模块的数据库连接和数据的处理等部分,使得jsp页面中不再有复杂的用户名和密码等的验证代码,实现了视图(界面设计)与业务逻辑的分离,使程序清晰明朗,具有更高的可读性。
主要基于Servlet+JSP+JavaBean开发模式实现JavaWeb用户登录注册功能实例代码,非常实用,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
登录注册,非法访问验证,博客的用户文章发布,心情说说,日志的增删改查,访客用户的管理,博客运行时间统计,博客书城的管理,图书的上架售卖以及结算(结算的功能还没写),纯手写前台页面,大概20左右个CSS,每...
基于Servlet+JSP+JavaBean的新生管理系统源码+数据库+部署说明(javaweb高分课设).zip # JavaWeb项目之新生管理系统(Servlet+JSP+JavaBean) ## 项目介绍 ### 功能介绍 -登录,登出和登录验证 -新生报到...
需要完成的任务 :该系统的基本需求是,系统要实现如下的基本管理功能: (1)用户分为两类:系统管理员,一般用户。...(5)技术实现:基于(JSP+Servlet+JavaBean+DAO+JDBC)的Web 架构设计该系统。
要求:基于JSP+Servlet+JavaBean+JDBC+DAO的Web架构设计该系统,进一步了解并掌握如何对数据库进行操作,以及如何分析、设计一个应用系统。 需求要求: 该系统的基本需求是,系统要实现如下的基本管理功能: (1)...
要求:基于JSP+Servlet+JavaBean+JDBC+DAO的Web架构设计该系统,进一步了解并掌握如何对数据库进行操作,以及如何分析、设计一个应用系统。 需求要求: 该系统的基本需求是,系统要实现如下的基本管理功能: (1)...
第5章 验证模块(jsp+servlet+jsvaildation) 5.1 表单基础 5.2 客户端表单验证框架 5.3 服务器端验证 5.4 实现图形验证码 5.5 避免重复提交功能 5.6 缩略加水印图像 5.7 小结 第6章 网络...