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

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

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%request.setCharacterEncoding("utf-8"); %>
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5   <head>
 6     <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
 7     <title>登录错误</title>
 8   </head>
 9   
10   <body>
11     <!-- 此处才是重要代码 -->
12     <%
13     String err=(String)request.getAttribute("error");
14     %>
15     <%=err %><br>
16     <a href="login.jsp">返回登录</a>
17     <!-- 此处才是重要代码 -->
18   </body>
19 </html>

二、改写loginserv.java。

 1 package com.kaly.servlet;
 2 
 3 import java.io.IOException;
 4 import java.sql.Connection;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 
 9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import javax.servlet.http.HttpSession;
14 
15 import com.kaly.data.GetData;
16 import com.kaly.data.User;
17 
18 public class loginserv extends HttpServlet {
19     public void doGet(HttpServletRequest request, HttpServletResponse response)
20             throws ServletException, IOException {
21         doPost(request, response);
22     }
23 
24     public void doPost(HttpServletRequest request, HttpServletResponse response)
25             throws ServletException, IOException {
26         String realusername=null;//经过验证的有效用户名
27         //以下三行主要解决中文乱码问题
28         request.setCharacterEncoding("utf-8");
29         response.setCharacterEncoding("utf-8");
30         response.setContentType("text/html);charset=utf-8");
31         //获得表单请求信息
32         String getUser=request.getParameter("username");//用户名
33         String getpassword=request.getParameter("password");//密码,这个小程序暂时未验证密码
34         String otherAction=request.getParameter("action");//获取退出登录等信息
35         //验证登录信息
36         GetData data=new GetData();//实例化自定义的GetData对象
37         Connection connection=data.getConnection();//从data中获得数据连接对象
38         ResultSet rs;//游标对象
39         User user=new User();
40         String uPassWord=null;
41         HttpSession session=request.getSession();//获得会话对象
42         try {
43             PreparedStatement pStatement=connection.prepareStatement("select * from user where username=?");
44             pStatement.setString(1, getUser);
45             //把经过查询得到的符合条件的记录交给游标对象rs
46             rs=pStatement.executeQuery();
47             //在游标对象rs中找到每一条记录,实际上如果用户名username不允许重复,则记录只有一条
48             while(rs.next()){
49                 //把查询的数据封装到User对象,以后使用时只需要使用这个对象就可以了
50                 user.setUserData(rs.getString(2), rs.getString(4), rs.getString(5));
51                 uPassWord=rs.getString(3);
52             }
53             data.close();//关闭数据连接
54         } catch (SQLException e) {
55             e.printStackTrace();
56         }
57         //验证用户名和密码。按照登录用户名查找用户,读取密码,如果没有记录,则用户名错误,如果密码不争取,则密码错误
58         if("logout".equals(otherAction)){//这个地方必须要用到equals,用原来的==会出错,不知道为什么。
59         //如果得到了"退出登录"的请求,则将登录的用户名信息置为null
60         session.setAttribute("lUserName", null);
61         //重定向到login.jsp页面
62         response.sendRedirect("login.jsp");
63         }else{//否则就验证用户名和密码
64             if(user.getUsename()==null){//如果从数据库得到的用户名为null,表示数据库中根本没有该用户
65                 request.setAttribute("error", "用户名错误");
66                 request.getRequestDispatcher("error.jsp").forward(request, response);
67             }else if(!getpassword.equals(uPassWord)){//否则检查请求的密码是否和从数据库中读出来的密码匹配
68                 request.setAttribute("error", "密码输入错误");
69                 request.getRequestDispatcher("error.jsp").forward(request, response);
70             }else{//如果用户名和密码都对,则写入信息重定向网页,显示已经登录
71                 session.setAttribute("lUserName", user.getNickname());//向会话对象写入数据
72                 //重定向到login.jsp页面
73                 response.sendRedirect("login.jsp");
74             }
75         }
76     }
77 }

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

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

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

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

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

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

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

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