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

一、增加一个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. IOS调用系统声音(键盘声音)

    #import <AudioToolbox/AudioToolbox.h> AudioServicesPlaySystemSound(1106); 注:括号中为系统声音的id,详见 htt ...

  2. 通过js对cookie的使用手册

    一般大多数人还是用引用JQuary API——jquery.cookie.js,来操作cookie.这是一种很不错的方式,我也支持这样的做法. 但是有时候我们只需要一种极为轻量级的代码来实现简单的功能 ...

  3. VMware-workstation-full-11.0.0-2305329&VMware-player-7.0.0-2305329

    VMware-workstation-full-11.0.0-2305329.exe Name: VMware-workstation-full-11.0.0-2305329.exe 发行日期: 20 ...

  4. (转) 如何让 UITableView 的 headerView跟随 cell一起滚动

    在我们利用 UITableView 展示我们的内容的时候,我需要在顶部放一个不同于一般的cell的 界面,这个界面比较独特. 1. 所以我就把它 作为一个section的 headerView. 也就 ...

  5. VS.net中快捷键收缩和展开代码段 (转)

    i. Ctrl-M-O   折叠所有方法 ii. Ctrl-M-P   展开所有方法并停止大纲显示(不可以再折叠了) iii. Ctrl-M-M   折叠或展开当前方法 iv. Ctrl-M-L展开所 ...

  6. 电脑重装系统后如何恢复Mysql数据库

    电脑重装系统后如何恢复Mysql数据库 一.[设置mysql的path]

  7. 手机支持USB功能、驱动文件对应关系

    手机支持USB功能: 1.UMS(USB MASS Stronge) : 连接PC作为存储盘使用 2.ADB : 用于调试 3.MTP :连接PC作为存储盘使用(win XP需要安装WMP10 以上 ...

  8. VIM C++语法高亮配色

    因工作需求,必须在终端下远程下代码,vim打开cpp/h文件,看到一连串的字母就傻了,根本无法阅读. 后来才知道VIM这高大上的文本编辑器支持很多的功能,很多的功能.首先最基本的就是语法高亮配色 1. ...

  9. Android Soap实例

    // 指定命名空间 private static final String NAMESPACE = "http://WebXml.com.cn/"; // 给出接口地址 priva ...

  10. C#给DataTable添加序号、C#给DataTable添加合计、小计

    /// <summary>        /// 给DataTable添加序号        /// </summary>        /// <param name= ...