实现用户的登录,并且登录后显示用户名_jquery - 登陆成功后,右上角显示用户名怎么做-程序员宅基地

技术标签: java  代码  java网络编程  tomcat  servlet  jsp  java学习  数据库  

利用servlet,jsp实现用户的登录,并且登录后显示用户名(连接数据库)

显示用户名这里是通过session传递数据,登陆成功后点击退出时要清除页面session。
使用软件:tomcat-8.5.34,mysql,java
我们一共需要写:

  • 位于src下的服务器端用于登录的LoginServlet,登陆成功后用于退出的SuccessServlet
  • 位于web下的前端登录页面login.html,登陆成功后的页面success.jsp,登录失败的页面error.html;
首先我们来写登录的服务器端LoginServlet
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 java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

@WebServlet(urlPatterns = "/loginServlet")//此处为标记,让前端代码执行的时候走这个服务器
public class loginServlet extends HttpServlet {
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        try {
    
            System.out.println("进入方法");
            //获取页面请求的参数
            String name = req.getParameter("uname");
            String password = req.getParameter("upass");
            //获取数据库的连接(连接数据库)
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/(这里写具体连接那个数据库,不带括号,直接写库名)?serverTimezone=UTC";
            String username = "这里写数据库的用户名";
            String passwd = "这里写数据库的密码";
            Connection con = DriverManager.getConnection(url, username, passwd);
            String sql = "select * from users";
            Statement sta = con.createStatement();
            ResultSet res = sta.executeQuery(sql);
            int t = 0;//登陆成功
            //数据库里记得要提前存好用户名和密码,否则无法登陆!
            while (res.next()) {
    
                //获取数据库表中每一列的值
                String user1 = res.getString("username");
                String pass1 = res.getString("password");
                if (name.equals(user1) && password.equals(pass1)) {
    
                    t = 1;
                    break;
                } else {
    
                    t = 0;
                }
            }
            if (t == 1) {
    
                HttpSession session=null;//清除页面滞留的session,这样点击退出以后,下次登录确保重新获取新的用户名
                session = req.getSession();//获取session
                session.setAttribute("uname",name);//将用户名传递给session
                req.getRequestDispatcher("/success.jsp").forward(req, resp);//request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 这个是在服务端运行的,对浏览器来说是透明的。这里能够实现页面的跳转
            } else if (t == 0) {
    
                req.getRequestDispatcher("/error.html").forward(req, resp);//跳转到登录失败的界面
            }
        } catch (Exception e) {
    
            e.printStackTrace();
        }
    }
}

下面是登陆成功后用于退出的SuccessServlet,点击退出按钮回到登录页面

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 java.io.IOException;

@WebServlet(urlPatterns = "/SuccessServlet")
public class SuccessServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        try {
    
                req.getRequestDispatcher("/login.html").forward(req, resp);
                HttpSession session=null;
                session = req.getSession();
                session.removeAttribute("uname");
        } catch (Exception e) {
    
            e.printStackTrace();
        }
    }
}

接下来我们来写登录的页面login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<h1>登录</h1>

<form action="loginServlet" method="post">
    username:<input type="text" name="uname"><br>
    password:<input type="password" name="upass"><br>
    <input type="submit" value="登录"/>
</form>
</body>
</html>
最后我们来写登录候的页面success.jsp及error.html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>success</title>
    <script>
        function jump(){
      
            window.location.href="/SuccessServlet";
        }
    </script>
</head>
<body>
<h1>欢迎你,${ sessionScope.uname}</h1>
<button onclick=javascript:jump()>退出</button>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录失败</title>
</head>
<body>
<h1>登录失败!!!!</h1>
</body>
</html>

到这里代码的部分就完成了,在部署Tomcat的时候,有一个index.jsp,这是Tomcat运行的首页,我们可以将login.html作为超链接写在index.jsp中,也可以将login.html的内容全部写在index.jsp中,就不需要login.html了,下面讲解怎么部署Tomcat:

首先点击idea右上角的edit configurations…
在这里插入图片描述
之后我们点击加号
在这里插入图片描述
向下翻,找到Tomcat server—local在这里插入图片描述
选择好安装路径后,点击fix,然后点击应用,确定。

下面是我们的运行结果:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
点击退出之后回到登录页面
登录失败:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47098642/article/details/115725718

智能推荐

字节转换比特位c语言,C语言实现双字节在数组中按比特位移动-程序员宅基地

文章浏览阅读728次。先说一下应用场合,在LED点阵显示屏中,为了节省flash空间,常用一个bit位来标记哪个灯是否点亮。为了做出比较炫的效果,比如16 * 16像素gif动画边边移动边跳跃。就应用到该思想。双字节是16bit位,数组的bit位是数组长度乘以8(类型指的是uint8_t),比如uint8_t a[5]长度则是5 * 8 = 40。该函数的思想就是这双字节的16bit位在在数组a[5]中40bit位中移..._将数组转比特 c

大数据基础课第一课 Hadoop详解_大数据 hadoop 课程内容-程序员宅基地

文章浏览阅读500次。Hadoop概述课程目标:知道Hadoop的概念及发展历史说出hadoop的核心组件知道hadoop的优势1.1 什么是HadoopHadoop名字的由来作者:Doug cuttingHadoop项目作者的孩子给一个棕黄色的大象样子的填充玩具的命名Hadoop的概念:Apache Hadoop 是一个开源的, 可靠的(reliable), 可扩展的(scalable)分布式计算框架允许使用简单的编程模型跨计算机集群分布式处理大型数据集可扩展: 从单个服务器_大数据 hadoop 课程内容

超越性的AI——GitHub Copilot,有了它还需要程序员敲代码吗?_copilot 工作原理-程序员宅基地

文章浏览阅读1.8k次。GitHub Copilot 究竟是什么?Copilot 是一种基于公开源代码和文本训练的人工智能。它实时为程序员提供代码建议。Copilot 还使用 GPL 等 Copyleft 许可下的众多 GitHub 存储库作为培训材料。那么为什么它和“抄袭有关?”这还和当年那一段“雷神代码”有关。有行业从业者称,在利用GitHub Copilot 走平方根倒数速算法(Fast Inverse Square Root),结果出人意料。它简直“完美复刻”那段著名的代码,就连当年.._copilot 工作原理

Linux学习笔记-B站韩顺平_韩顺平linux笔记-程序员宅基地

文章浏览阅读1.6w次,点赞95次,收藏536次。linux 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,_韩顺平linux笔记

游戏脚本用什么语言写_为什么要写分镜头脚本?-程序员宅基地

文章浏览阅读1.1k次。分镜头脚本是最实用的影视创作脚本,它是在文学脚本的基础上运用蒙太奇思维和蒙太奇技巧进行再创作的脚本,即根据拍摄提纲或文学脚本,参照拍摄现场的实际情况,分隔场次或段落,并运用形象的对比、呼应、积累、暗示、并列、冲突等手段,来建构屏幕上的总体形象。分镜头脚本设计是从文字到影像的预演,是影视思维的具体呈现,是影视导演最为重要的工作之一。//分镜头脚本设计的目标//微电影作为影视创作的新类型,虽然具有“微..._游戏分镜脚本

PyQt5学习入门-2-信号/槽学习_self.pushbutton_2.clicked.connect(self.textbrowser-程序员宅基地

文章浏览阅读1.7k次,点赞6次,收藏4次。摘要:PyQt5学习入门-1简单对整个流程进行介绍。下面的这篇文章会做一个简单的计算器框架。最终实现的界面效果如下1.本章的目的写这篇文章需要能够让读者学习到以下几点:1.如何使用Text Browser(可以理解为文本的输出框)2.如何使用按键(pushButton),以及如何通过鼠标来触发任务3.如何进行布局2.拖拽组件打开Qt designer后,我们首先新建一个widget。新建一个wid_self.pushbutton_2.clicked.connect(self.textbrowser.clear)

随便推点

在Kali中安装IBus的拼音输入法_ibus-pinyin 拼音 无法定位软件包-程序员宅基地

文章浏览阅读1.4w次。IBus,全称为Intelligent Input Bus,是GNU/Linux和类UNIX操作系统下的以GPL协议分发源代码的开源免费多语言输入法框架。在Kali Linux中默认是没有安装有中文的输入法的,为了方便可以安装IBus的拼音输入法。在命令行中直接输入下面命令安装IBus: apt-get install ibus 过程如下: 接着输入下面命令安..._ibus-pinyin 拼音 无法定位软件包

ActiveMQ消息保存到MySQL-程序员宅基地

文章浏览阅读175次。<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed..._activemq将消息存储在mysql

Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序_goland创建go项目-程序员宅基地

文章浏览阅读4.9w次,点赞4次,收藏6次。Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序Go 语言 入门 && 基于 GoLand 2023.1_goland创建go项目

python分布式计算框架-Parallel Python-程序员宅基地

文章浏览阅读1.9k次。python分布式计算框架-Parallel Python本文翻译自:https://www.parallelpython.com/概述Parallel Python是一个python模块,提供了在SMP(具有多个处理器或核心的操作系统)和群集上并行执行python代码的机制。 Parallel Python具有轻量级、易安装、易与其他python软件集成的特性。 Parallel Python是用纯Python语言写的开源跨平台的模块。特征Python代码在集群或SMP上并行执行。_parallel python

2019年电气试验作业安全生产模拟考试题库及答案_作为电气工作者 员工必须熟知-程序员宅基地

文章浏览阅读2.3k次。2019年电气试验作业安全生产模拟考试题库及答案题库来源:安全生产模拟考试一点通第1题、【判断题】10kV等级的电气设备工频耐压试验最高试验电压为42kV。A、正确 B、错误正确答案:A第2题、【判断题】50%击穿放电电压,是指在该冲击电压作用下放电的概率为50%。A、正确 B、错误正确答案:A第3题、【判断题】66kV电气设备工频耐压试验变压器的最高试验电压为200k..._作为电气工作者 员工必须熟知

CentOS7安装Hadoop3完全分布式_centos7 hadoop3安装-程序员宅基地

文章浏览阅读7.4k次,点赞8次,收藏37次。前提条件拥有CentOS7服务器版环境集群规划项目 服务器node2 服务器node3 服务器node4 HDFS NameNode、DataNode DataNode DataNode、SecondaryNameNode Yarn NodeManager Resourcemanager、NodeManager NodeManager 虚拟机准备通网络能ping通外网,例如:ping baidu.com如_centos7 hadoop3安装

推荐文章

热门文章

相关标签