servlet实现登录的简单实例(思路详解与详细注释)
一、总体思路
首先是我的工程图(如下,图中蓝色涂掉部分是不需要的),我的大概思路是:先构建一个登录页面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):
点击登录:
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- JSP+Servlet+JavaBean实现登录网页实例详解
- 一个简单的jsp+servlet实例,实现 4000 简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个完整的简单jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- 简单的servlet实例,实现登录信息传送
- Netty实例-简单的服务端-客户端实现,注释详细
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- 一个简单的jsp+servlet实例,实现简单的登录
- JSP+Servlet+JavaBean实现登录网页实例详解
- JSP+Servlet+JavaBean实现登录网页实例详解
- 一个简单的jsp+servlet实例,实现简单的登录