这个程序在原来的程序基础上加入了密码验证。

一、增加一个error.jsp页面,用于跳转出现用户名和密码错误显示信息。

 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>登录错误</title>
</head> <body>
<!-- 此处才是重要代码 -->
<%
String err=(String)request.getAttribute("error");
%>
<%=err %><br>
<a href="login.jsp">返回登录</a>
<!-- 此处才是重要代码 -->
</body>
</html>

二、改写loginserv.java。

 package com.kaly.servlet;

 import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import com.kaly.data.GetData;
import com.kaly.data.User; public class loginserv extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String realusername=null;//经过验证的有效用户名
//以下三行主要解决中文乱码问题
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html);charset=utf-8");
//获得表单请求信息
String getUser=request.getParameter("username");//用户名
String getpassword=request.getParameter("password");//密码,这个小程序暂时未验证密码
String otherAction=request.getParameter("action");//获取退出登录等信息
//验证登录信息
GetData data=new GetData();//实例化自定义的GetData对象
Connection connection=data.getConnection();//从data中获得数据连接对象
ResultSet rs;//游标对象
User user=new User();
String uPassWord=null;
HttpSession session=request.getSession();//获得会话对象
try {
PreparedStatement pStatement=connection.prepareStatement("select * from user where username=?");
pStatement.setString(1, getUser);
//把经过查询得到的符合条件的记录交给游标对象rs
rs=pStatement.executeQuery();
//在游标对象rs中找到每一条记录,实际上如果用户名username不允许重复,则记录只有一条
while(rs.next()){
//把查询的数据封装到User对象,以后使用时只需要使用这个对象就可以了
user.setUserData(rs.getString(2), rs.getString(4), rs.getString(5));
uPassWord=rs.getString(3);
}
data.close();//关闭数据连接
} catch (SQLException e) {
e.printStackTrace();
}
//验证用户名和密码。按照登录用户名查找用户,读取密码,如果没有记录,则用户名错误,如果密码不争取,则密码错误
if("logout".equals(otherAction)){//这个地方必须要用到equals,用原来的==会出错,不知道为什么。
//如果得到了"退出登录"的请求,则将登录的用户名信息置为null
session.setAttribute("lUserName", null);
//重定向到login.jsp页面
response.sendRedirect("login.jsp");
}else{//否则就验证用户名和密码
if(user.getUsename()==null){//如果从数据库得到的用户名为null,表示数据库中根本没有该用户
request.setAttribute("error", "用户名错误");
request.getRequestDispatcher("error.jsp").forward(request, response);
}else if(!getpassword.equals(uPassWord)){//否则检查请求的密码是否和从数据库中读出来的密码匹配
request.setAttribute("error", "密码输入错误");
request.getRequestDispatcher("error.jsp").forward(request, response);
}else{//如果用户名和密码都对,则写入信息重定向网页,显示已经登录
session.setAttribute("lUserName", user.getNickname());//向会话对象写入数据
//重定向到login.jsp页面
response.sendRedirect("login.jsp");
}
}
}
}

三、数据库有以下用户记录。

四、重启服务并加载login.jsp页面。输入一个不存在的用户名。

点击登录后,跳转到error.jsp页面,显示用户名错误。

点击返回登录,输入存在的用户名和错误的密码。

点击登录,跳转到error.jsp页面,显示密码错误。

再点击返回登录,输入完全正确的用户名和密码。

点击登录后,跳转到login.jsp页面。

如果点击退出登录,则返回到未登录状态。表示程序调试正常。

Servlet页面登录的数据库验证程序(二)的更多相关文章

  1. Servlet页面登录的数据库验证程序(一)

    一.基本思想是MVC模式,一个登录页面login.jsp,一个服务器处理程序Servlet.java,一个MySql数据库userinfo. 另外还有相关的数据封装类User和数据库连接类GetDat ...

  2. Servlet页面注册用户的小程序(一)

    本实例实现用userreg.jsp页面中的表单提交注册请求,把注册信息提交给regservlet写入数据库并且查询新用户显示出来. 一.准备工作. 1.jdbc数据驱动开发包mysql-connect ...

  3. java登录时数据库验证账户密码-mysql

    一:连接数据库: package login; import java.sql.*; public class conmysql { String drivername="com.mysql ...

  4. Servlet初级学习加入数据库操作(二)

    源代码地址:https://url56.ctfile.com/f/34653256-527822631-2e255a(访问密码:7567) 将页面中的数据逐步替换为数据库管理 准备一个连接数据库的类 ...

  5. servlet数据库验证登录

    servlet数据库验证登录 一.将数据库连接和验证封装为一个单独的类 import java.sql.*; public class SQLtest { // JDBC 驱动名及数据库 URL st ...

  6. 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  7. ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  8. 14.ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  9. 实现手机扫描二维码页面登录,类似web微信-第四篇,服务器端

    转自:http://blog.csdn.net/otangba/article/details/8273952 终于到了服务器端,第三篇的手机客户端如果已经下载了的话,没有服务器是不能正常运行的. 服 ...

随机推荐

  1. TreeMap 的实现

    TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点. TreeSet 和 TreeMap 的关系 为了让大家了解 TreeMap 和 Tre ...

  2. Python开发入门与实战21-订阅事件(subscribe)

    21. 订阅事件(subscribe) 新用户关注微信公众平台,将产生一个订阅事件,即subscribe事件,在新用户关注公众平台后为新用户提供一些简明扼要的公众号说明 事件推送(event): 接收 ...

  3. Linux/Unix 线程同步技术之互斥量(1)

    众所周知,互斥量(mutex)是同步线程对共享资源访问的技术,用来防止下面这种情况:线程A试图访问某个共享资源时,线程B正在对其进行修改,从而造成资源状态不一致.与之相关的一个术语临界区(critic ...

  4. 利用certutil.exe实现在批处理(bat)中嵌入可执行文件或者各种媒体、图片之类二进制文件的简单方法!

    实际上利用certutil.exe 把二进制文件(包括各种文件,exe可执行程序,图片,声音,mp3) 经过base64编码为文本,可以实现把这些文件嵌入到批处理代码中. 有什么用?: 举个例子,批处 ...

  5. Hello, RealSense!

    这是kinect for windows: 这是华硕 xtion pro: 这是Intel® RealSense™: 几经周折,终于买到了,99美元套件+25美元运费,正在旅途中.

  6. HTML 30分钟入门教程

    作者:deerchao 转载请注明来源 本文目标 30分钟内让你明白HTML是什么,并对它有一些基本的了解.一旦入门后,你可以从网上找到更多更详细的资料来继续学习. 什么是HTML HTML是英文Hy ...

  7. [解决方案] pythonchallenge level 0

    http://www.pythonchallenge.com/pc/def/0.html 问题: 2^38 >>> 2**38 >>>274877906944L 输 ...

  8. js版扫雷(可直接运行试玩)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. BZOJ 1046 最长不降子序列(nlogn)

    nlogn的做法就是记录了在这之前每个长度的序列的最后一项的位置,这个位置是该长度下最后一个数最小的位置.显然能够达到最优. BZOJ 1046中里要按照字典序输出序列,按照坐标的字典序,那么我萌可以 ...

  10. C/C++读入一行不定个数的整数

    我想,每个人一开始遇到这个问题,都会觉得挺简单的.但真正实施的时候,可能就会觉得还是有点坑的.毕竟对于C/C++这样成熟而使用广泛的语言而言,对于这个简单的问题竟然没有一个简洁有力甚至一行代码的解决方 ...