Servlet页面登录的数据库验证程序(二)
这个程序在原来的程序基础上加入了密码验证。
一、增加一个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页面登录的数据库验证程序(二)的更多相关文章
- Servlet页面登录的数据库验证程序(一)
一.基本思想是MVC模式,一个登录页面login.jsp,一个服务器处理程序Servlet.java,一个MySql数据库userinfo. 另外还有相关的数据封装类User和数据库连接类GetDat ...
- Servlet页面注册用户的小程序(一)
本实例实现用userreg.jsp页面中的表单提交注册请求,把注册信息提交给regservlet写入数据库并且查询新用户显示出来. 一.准备工作. 1.jdbc数据驱动开发包mysql-connect ...
- java登录时数据库验证账户密码-mysql
一:连接数据库: package login; import java.sql.*; public class conmysql { String drivername="com.mysql ...
- Servlet初级学习加入数据库操作(二)
源代码地址:https://url56.ctfile.com/f/34653256-527822631-2e255a(访问密码:7567) 将页面中的数据逐步替换为数据库管理 准备一个连接数据库的类 ...
- servlet数据库验证登录
servlet数据库验证登录 一.将数据库连接和验证封装为一个单独的类 import java.sql.*; public class SQLtest { // JDBC 驱动名及数据库 URL st ...
- 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- 14.ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- 实现手机扫描二维码页面登录,类似web微信-第四篇,服务器端
转自:http://blog.csdn.net/otangba/article/details/8273952 终于到了服务器端,第三篇的手机客户端如果已经下载了的话,没有服务器是不能正常运行的. 服 ...
随机推荐
- Djanog结合jquery实现ajax
最近想在使用django的基础上通过jquery实现页面局部刷新的功能,研究了两天,终于是解决了这个问题,下面把方法步骤记录下来,以备以后重用. 在项目中通过两种形式实现了ajax: 第一种方法:we ...
- 2014年6月份第4周51Aspx源码发布详情
通用医院会员管理系统源码 2014-6-23 [VS2010]功能介绍:本系统共包括以下模块:会员开卡管理.会员充值管理.会员消费管理.会员病例管理.客户预约管理.系统信息管理(门诊管理.卡类型管理 ...
- Android数据库 — — —查询数据
package com.example.datebasetest; import android.content.ContentValues;import android.database.Curso ...
- Linux内核分析—完成一个简单的时间片轮转多道程序内核代码
---恢复内容开始--- 20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10 ...
- 【转】C#多线程
C#中的多线程编程 C#是.Net平台的通用开发工具,它能够建造所有的.Net应用.在.Net中所有线程都运行在应用程序域(AppDomain)中,这也许让你想到Win32进程,实际上它们还是有很大的 ...
- Java的多态
多态的定义: 同一种行为,在不同对象上有不同的表现形式 实现多态的条件: 要有继承 要有方法的重写 要有父类的引用指向子类的对象 代码如下: public class Animal { String ...
- Java随笔二
1.常量:final可以设置变量,也可以表示这个变量只能被赋值一次(即可以声明一个空变量,只能赋值一次):可以使用关键字static final设置一个类常量,以供一个类中的多个方法使用. 2.字符串 ...
- Cosh.2
没壳 直接拖 一开始 字符长度不对. 所以 输入都超过5 就没什么问题了 发现下面的跳转都是跳到eorr的 那不跳的条件呢 看来他们必须要相等.单步跟踪就会发现eax指向的是我们的Seri ...
- react native 之 react-native-image-picke的详细使用图解
最近需要在react native项目中集成相机和相册的功能,于是在网上找了一个好用的第三方插件:react-native-image-picke. 该插件可以同时给iOS和Android两个平台下使 ...
- ubuntu环境下使用apt-get配置apache+php+mysql
主要步骤:1,安装apachesudo apt-get install apache2sudo /etc/init.d/apache2 restart2,安装phpsudo apt-get insta ...