/**
* 分析流程:
* 1、前端页面提交登录请求
* 2、被web.xml拦截,进入到LoginServlet(有两种方式:方式一,在web.xml文件中配置servlet拦截器;方式二,不用在web.xml中配置,直接在类中通过                         @WebServlet("/login")注解    //请求路径)
* 3、获取页面输入的用户名和密码
* 4、创建一个工具类,用于生成连接工厂
* 5、调用UserDao层,通过连接工厂连接数据库,根据名字查询用户
* 6、拼接sql语句,set参数,执行预编译,返回结果集
* 7、判断结果集是否存在,如果存在,就return数据
* 8、在LoginServlet中调用dao层后获取到数据,获取session对象,将获取到的数据存储到session对象中
* 9、资源跳转到页面
* 10、跳转到成功页面,显示数据
*/

代码示例:

1、前端页面提交登录请求

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录页面</title>
</head>
<body><form action="login" method="post">用户名:<input name="username" type="text"><br>密    码:<input name="password" type="password"><br><button type="submit">登录</button></form>
</body>
</html>

2、被web.xml拦截,进入到LoginServlet(有两种方式:方式一,在web.xml文件中配置servlet拦截器;方式二,不用在web.xml中配置,直接在类中通过                         @WebServlet("/login")注解    //请求路径)

配置的web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>demo2</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list> <servlet><servlet-name>loginServlet</servlet-name>   <servlet-class>org.fkjava.Servlet.LoginServlet</servlet-class>  </servlet><servlet-mapping><servlet-name>loginServlet</servlet-name><url-pattern>/</url-pattern>    //拦截所有的请求</servlet-mapping>
</web-app>

3、请求被拦截后跳转到LoginServlet类中,获取页面输入的用户名和密码,调用dao层获取数据,将获取到的数据保存到session对象中,然后重定向,将数据发到成功页面

package org.fkjava.Servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.fkjava.bean.User;
import org.fkjava.dao.UserDao;
import org.fkjava.util.MD5;
/*** Servlet implementation class LoginServlet*/
@WebServlet("/login")//请求路径,  如果配置了@WebServlet注解就不配置web.xml,两者二选一
public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;    /*** @see HttpServlet#HttpServlet()*/public LoginServlet() {super();// TODO Auto-generated constructor stub
    }/*** @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)*/protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/**设置请求编码*/request.setCharacterEncoding("UTF-8");/**设置响应类型*/response.setContentType("text/html");/**设置响应编码*/response.setCharacterEncoding("UTF-8"); //获取MD5加密对象MD5 pwd = new MD5();//获取输入的用户名和密码String name = request.getParameter("username");String pass = null;try {pass = pwd.getMD5(request.getParameter("password"));} catch (Exception e) {// TODO: handle exceptio
            e.printStackTrace();}        //初始化dao层UserDao userDao = new UserDao();/**调用dao层的获取用户的方法*/try {String user = userDao.findUserByName(name,pass);System.out.println(user);//获取session,将获取到的数据保存到session中HttpSession session = request.getSession();session.setAttribute("user", user);//重定向,跳转到成功页面response.sendRedirect("success.jsp");} catch (Exception e) {// TODO Auto-generated catch block
            e.printStackTrace();}        }
}

4、创建一个工具类,用于生成连接工厂,这里需要使用的数据库的驱动jar包mysql-connector-java-5.1.40.jar

package org.fkjava.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {//准备参数private static String url = "jdbc:mysql://127.0.0.1:3306/rqzc_db?useSSL=false";private static String user = "root";private static String password ="";//使用静态代码块加载驱动static{try {/**使用类名加载数据库驱动*/Class.forName("com.mysql.jdbc.Driver");} catch (Exception e) {e.printStackTrace();/**创建运行时异常*/throw new RuntimeException("数据库驱动加载异常!", e);    }}/**提供公共、静态的连接数据库的方法*/public static Connection getConnection() throws SQLException{Connection conn = DriverManager.getConnection(url, user, password);        return conn;    }
}

5、创建UserDao类,通过连接工厂获取连接,拼接sql语句,执行预编译(方式sql语句攻击,例如admin' or '1'='1会直接通过),设置参数,执行查询语句返回结果集

package org.fkjava.dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.fkjava.jdbc.ConnectionFactory;
public class UserDao {public String findUserByName(String name, String pass) throws Exception {/**获取连接,因为连接工厂设置的静态方法,可以指定使用类名调用方法*/Connection conn = ConnectionFactory.getConnection();        /**拼接sql语句*/String sql = "select * from r_employee where username= ? and password = ?";        /**预编译sql语句,这样是为了防止sql语句攻击*/PreparedStatement statement = conn.prepareStatement(sql);/**set参数,1表示第一个参数,2表示第二个参数*/statement.setString(1, name);statement.setString(2, pass);//执行sql语句,返回结果集ResultSet rs = statement.executeQuery();/**判断结果集是否有数据*/if(rs.last()){/**返回用户真实姓名*/return rs.getString("realname");}else{return "查询失败!";}   }
}

6、如果查询到数据,保存到session对象中,并重定向到成功页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>成功页面</title>
</head>
<body>${sessionScope.user}:登录成功!
</body>
</html>

7、bean实体类

package org.fkjava.bean;
public class User {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

8、补充:下面是编码结构示意图:

转载于:https://www.cnblogs.com/guzhou-ing/p/6692838.html

使用servlet+jdbc+MD5实现用户加密登录相关推荐

  1. JSP+Servlet + JDBC 实现简单的登录验证模块

    数据库设计+编码+运行调试 数据库准备: 二话不说,上图 文件组织如下: 首先写出三个JSP页面文件 login.jsp <%@ page language="java" c ...

  2. Java项目:小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 用户功能模块: 用户注册: 用户登录:商品模块:订单模块:后台管理系统功能:管理员模块: 商品模块:订单管理模块 : 二.项目 ...

  3. jsp mysql servlet_JSP+Servlet+JDBC+mysql实现的学生成绩管理系统

    本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑器 Ec ...

  4. spring 3.x 学习笔记_spring mvc、spring jdbc 实现网站的登录注册功能

    使用spring mvc.spring jdbc 实现网站的登录注册功能 1.        据业务模型 创建model 一般实现序列化 2.        用spring 注解(@Repositor ...

  5. jsp servlet mysql项目_JSP+Servlet+JDBC+mysql实现的个人日记本系统

    项目简介 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑 ...

  6. mysql日记本程序_JSP+Servlet+JDBC+mysql实现的个人日记本系统

    项目简介 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的个人日记本系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编辑 ...

  7. mysql jdbc jsp学生管理系统_JSP+Servlet+JDBC+mysql实现的学生成绩管理系统

    项目简介 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术少,易于理解,适合JavaWeb初学者学习使用. 难度等级:入门 技术栈 编 ...

  8. 支持增删查改的简单Java Web通讯录详细教程【基于Mac OS+IDEA+Servlet+JDBC+Tomcat】

    本文将以Web版通讯录的形式介绍一个支持简单增删查改的Java Web项目,软硬件环境基于Macbook Air M2+macOS Ventura 13.1+IntelliJ IDEA 2022,技术 ...

  9. Web基础之Servlet+JDBC+JSP项目实战记录(一)

    Web基础之Servlet+JDBC+JSP项目实战记录(一) 一.项目说明: 通过前面的学习,我们已经对Servlet有了一定的了解:接下来我们要结合数据库和JSP技术一步一步完成一个小型的动态we ...

最新文章

  1. 树莓派镜像源切换之旅.md
  2. LongestPalindromeSequence
  3. go连接mysql数据库
  4. GP学习(五)—ArcGIS Toolbox Reference dialog box
  5. maven常用插件配置
  6. Java面向对象的思想
  7. 计算机春季高考试题答案,最新春季高考历年真题-天津市春季高考计算机试卷...
  8. C语言 表白代码(I love you!)
  9. 浏览器设置阻止第三方Cookie保护自己隐私
  10. ccs定义的函数不变色_ccs使用问题及解决办法
  11. hd6630m可以玩lol吗_《LOL》流畅玩!Intel HD620核显性能实测
  12. python将多张图片合并成一张图片
  13. el-descriptions引入代码中label不生效问题
  14. Android 对于外部TF(SD)卡和U盘的读写操作
  15. 计应java1803_[南开大学]18秋学期(1709、1803、1809)《古代汉语(一)》在线作业 ......
  16. 测试打印 lua 的 _G 所有显示的字段内容
  17. ElasticSearch安装、IK、映射、索引管理、搜索管理和集群管理
  18. zabbix报警功能(邮件报警)---触发器/动作
  19. Property maxActive is not used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have
  20. Opencv-图像ROI与ROI操作

热门文章

  1. [转]VB:如何检测到U盘的插拔(源代码)
  2. 换股也是一种解套方法
  3. Ooooops! 这通骚扰电话是AI机器人打的(浙大出品,中文很6)
  4. 傅盛希望定义AI时代的机器人产品,2年交出这份可落地答卷
  5. AI能为智能手机带来哪些惊喜?Gartner列了这十大应用
  6. 浅谈SnackBar(Toast大兄弟)
  7. Uber新CEO的第一把火:停止运营Xchange Leasing租车业务
  8. 软件工程概论之登录页面
  9. 在div中使用css让文字底部对齐的方法
  10. 强制更新LYNC客户端的地址簿