您的位置:首页 > 其它

servlet实现登录的简单实例(思路详解与详细注释)

2020-09-05 16:03 387 查看

一、总体思路

首先是我的工程图(如下,图中蓝色涂掉部分是不需要的),我的大概思路是:先构建一个登录页面login.html,在登录页面填好账号和密码后点击登录进行跳转,至于是跳转到成功页面success.html,还是跳转到失败页面error,html,是由loginServlet类来进行判断的。

二、详细思路

1、我的登录页面login.html的代码如下。要登录,首先需要进行信息验证,验证所填的账号以及密码是否正确,这里使用的表单提交方法(form标签),当信息填写完后,点击登录时,表单会自动提交给"/login"所在的地址的post方法中(login.html与loginServlet之间通过"/login"进行连接是通过在web.xml页面进行设置的),而"/login"所在的地址其实就是loginServlet类。

loginServlet代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>htmlLogin</title>
</head>
<body>
<h1>欢迎来到我的第一个javaWeb登录页面</h1><br/><br/>
<form action="/login" method="post">
账号:<input type="text" name="uname" size="30"/><br/><br/>
密码:<input type="password"  name="upass" size="30"/><br/><br/>
<input type="submit" value="登录"/>

</form>
</body>
</html>

web.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>bb</servlet-name>
<servlet-class>
com.kaikeba.web.loginServlet
</servlet-class>
<init-param>
<param-name>myencoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>bb</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>

2、loginServlet类的代码如下(servlet类需要继承HttpServlet)。由login.html表单将账号和密码信息提交到这个地方后,通过doPost()方法进行判断跳转。

package com.kaikeba.web;

import javax.servlet.FilterConfig;
import javax.servlet.ServletConfig;
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 java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* @Author: 非常颜小姐
* @Description:
* @Date Created in 2020-08-26 21:26
* @Modified By:
*/
public class loginServlet extends HttpServlet {

String myencoding =null;
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("初始化....");
myencoding = config.getInitParameter("myencoding");
//System.out.println(" String myencoding = "+myencoding);
}

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/error.html").forward(req,resp);
if("GET".equals(req.getMethod())){//查看调用的方法是否使get方法
System.out.println("get方法");
}
}
String uname=null;
String upass=null;
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding(myencoding);

//接受参数
uname = req.getParameter("uname");//获得登录页面所填写的账号
upass = req.getParameter("upass");//获得登录页面所填写的密码
//System.out.println("uname="+uname+",upass="+upass);

//跳转页面
boolean success = false;
//System.out.println("哈哈哈哈哈哈哈");
try {
success = sqlText(uname,upass);//调用sqlText方法,得到success
//System.out.println("success"+success);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if (success == true){//如果success为true,则跳转至成功页面,否则跳转至失败页面
req.getRequestDispatcher("/success.html").forward(req,resp);
}
else req.getRequestDispatcher("/error.html").forward(req,resp);//转发
}

@Override
public void destroy() {
super.destroy();
}

//表单中的账号密码信息与数据表中的账号密码信息进行比较,如果数据表中有此账号和密码,则success为true,返回success
public boolean sqlText(String uname,String upass) throws SQLException {
Statement sm = null;// 装载SQL语句变量
ResultSet rs = null;// 数据库查询返回结果集变量
boolean success = false;
//System.out.println("hhhhhhhhh");
try {
//System.out.println("hhhhhhhhh");
Connection conn = DruidUtil.getConnection();//从DruidUtil连接池创建conn连接
sm = conn.createStatement();//创建statement

String sql = "SELECT name,pass FROM users ";//搜索users数据表中的账号和密码信息
rs = sm.executeQuery(sql);//获取搜索到的结果集

// 展开结果集
while (rs.next()) {
// 通过字段检索users表中数据
String name = rs.getString("name");//获取结果集中的一个name数据
String pass = rs.getString("pass");//获取结果集中的一个pass数据

// 输出数据
//System.out.println("用户名: " + name);
//System.out.println("密码: " + pass);
if (name.equals(uname) && pass.equals(upass)) {//若此账号密码与表单提交的账号密码信息相同,则success为true
success = true;
}
}

//关闭连接
rs.close();
sm.close();
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
// System.out.println("hhhhhhhhh");
//System.out.println(success);
return success;//返回success值
}

}

这里因为需要连接数据库进行信息比对,所以用到了一些工具包,配置文件以及与数据库取得连接的一个DruidUtil类(一般情况下,连接数据库只需要备好三个工具包,配置文件,以及一个DruidUtil类,就能直接取到一个与数据库的连接)。

DruidUtil类代码:

/**
* @Author: 非常颜小姐
* @Description:
* @Date Created in 2020-08-27 22:11
* @Modified By:
*/
public class DruidUtil {
private static DataSource data = null;
static {
InputStream is = DruidUtil.class.getClassLoader().getResourceAsStream("dbcp.properties");
Properties ppt = new Properties();
try {
ppt.load(is);
data = BasicDataSourceFactory.createDataSource(ppt);
} catch (Exception e) {
e.printStackTrace();
}
}
/** 用于从DBCP连接池中 获取一个连接
* @return DBCP连接池中的一个连接对象.
*/
public static Connection getConnection() {
try {
return data.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
/**用于释放连接 , 执行环境 , 结果集 等资源
*  @param conn 要释放的连接资源
*  @param state 要释放的执行环境资源
*  @param result 要释放的结果集资源
* */
public static void close(Connection conn,Statement state,ResultSet result) {
if(result != null) {
try {
result.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(state != null) {
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

我的users数据表:


3、success.html代码与error.html代码如下:

success.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>success</title>
</head>
<body>
<h1>恭喜你,登录成功</h1>
</body>
</html>

error.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
<h1>很遗憾,登录失败</h1>
</body>
</html>

三、效果图

输入正确的账号的密码(这里密码输入的是123):


点击登录:

输入错误的账号或密码(这里密码输入的是234):

点击登录:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: