JavaWeb-通过表格显示数据库的信息(jsp+mysql)

2023-11-10

login.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>


<title>登录页面</title>



</head>

<body>
	<h2>登录</h2>
	<br>
	<form action="login-action.jsp" method="post">
		用户名<input name="username">(只能由字母组成,3~12位)<br> 密码<input
			type="password" name="password">(6~12位)<br> <input
			type="checkbox" name="keep"> 两周免登陆<br> <input
			type="submit" value="登录">
	</form>
	<hr>
	<%
		//根据传回来的值显示错误信息
		String index = request.getParameter("index");
		if (index != null) {
			if (index.equals("1")) {
				out.print("<h1>用户名或密码为空</h1>");
			} else if (index.equals("2")) {
				out.print("<h1>用户名或密码不符合规则</h1>");
			} else {
				out.print("<h1>用户名或密码错误</h1>");
			}
		}
	%>
</body>
</html>

login-action.jsp

<%@ page language="java" import="java.util.*,java.sql.*"
	pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>


<title>逻辑判断</title>



</head>

<body>
	<%
		//接受用户名密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		if (!username.equals("") || !password.equals("")) {//如果用户名密码不为空
			if (username.matches("[a-zA-Z]{3,12}")
					&& password.matches("[a-zA-Z0-9]{6,12}")) {//如果符合规则
				try {
					//连接数据库,访问数据,查询用户名密码是否正确
					//1.加载驱动
					Class.forName("com.mysql.jdbc.Driver");
					//2.获得数据库连接---创建路
					String url = "jdbc:mysql://localhost:3306/mybase";
					Connection con = DriverManager.getConnection(url,
							"root", "root");
					//3.获得语句执行平台,通过数据库连接对象获取到SQL语句的执行者对象---创建人
					Statement stat = con.createStatement();
					//4.调用执行者对象,执行sql语句获取结果集---创建桶
					String sql = "select * from users where username='"
							+ username + "' and password='" + password
							+ "'";
					ResultSet rs = stat.executeQuery(sql);
					if (rs.next()) {//判断用户名密码是否正确
						if (request.getParameter("keep") != null) {//如果勾选复选框则创建Cookie,令用户两周内不在登录
							//Cookie
							Cookie name = new Cookie("cname", username);
							Cookie passwd = new Cookie("cpasswd", password);
							name.setMaxAge(60 * 60 * 24 * 7 * 2);
							passwd.setMaxAge(60 * 60 * 24 * 7 * 2);
							response.addCookie(name);
							response.addCookie(passwd);
						}
						//为了保证安全性,以session方式传递这两个值
						session.setAttribute("sname", username);
						session.setAttribute("spasswd", password);
						//跳转到欢迎页面
						response.sendRedirect("index.jsp");
					} else {
						//错误跳转,用户名密码有一项不正确就跳转到登录页面,并返回错误信息
						response.sendRedirect("login.jsp?index=3");
					}
				} catch (Exception e) {
					out.print(e.toString());
				}
			} else {
				//错误跳转,用户名密码有一项不符合业务逻辑就跳转到登录页面,并返回错误信息
				response.sendRedirect("login.jsp?index=2");
			}
		} else {
			//错误跳转,用户名密码有一项为空就跳转到登录页面,并返回错误信息
			response.sendRedirect("login.jsp?index=1");
		}
	%>

	<br>
</body>
</html>

index.jsp

<%@ page language="java" import="java.util.*,java.sql.*,com.entity.User"
	pageEncoding="UTF-8"%>

<!-- 需导入sql包,user实体包 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>


<title>欢迎页面</title>

</head>

<body>
	<h2>欢迎页面</h2>
	<br>
	<%
		//获取session中信息
		String username = (String) session.getAttribute("sname");
		String password = (String) session.getAttribute("spasswd");
		if (username == null) {//判断直接访问欢迎页面的用户是否合法
			String cookiename = "";
			String cookiepasswd = "";
			Cookie[] cookies = null;
			cookies = request.getCookies();
			if (cookies.length > 1) {
				cookiename = getCookieByName(cookies, "cname").getValue();
				cookiepasswd = getCookieByName(cookies, "cpasswd")
						.getValue();
				if (!cookiename.equals("") && !cookiepasswd.equals("")) {//获取用户名密码,并在action页面验证	
					response.sendRedirect("login-action.jsp?username="
							+ cookiename + "&password=" + cookiepasswd);
					return;
				}
			}
			//跳转登录
			response.sendRedirect("login.jsp");
		}
		//显示欢迎
		out.print("<h1>Welcome!" + username + "!</h1>");
	%>


	<%!// 创建方法,用于查找指定名称的cookie
	public static Cookie getCookieByName(Cookie[] cs, String name) {
		if (cs == null || cs.length == 0) {
			return null;
		}
		for (Cookie c : cs) {
			if (name.equals(c.getName())) {
				return c;
			}
		}
		return null;
	}%>


	<%!//读取数据库,存到List<User> list中
	public List<User> readUser() {
		List<User> list = new ArrayList<User>();
		Connection con = null;
		ResultSet rs = null;
		try {//连接数据库的操作
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/mybase";
			con = DriverManager.getConnection(url, "root", "root");
			Statement stat = con.createStatement();
			String sql = "select * from users ";
			rs = stat.executeQuery(sql);
			while (rs.next()) {
				int id = rs.getInt("id");
				String myusername = rs.getString("username");
				String mypassword = rs.getString("password");
				User u = new User(id, myusername, mypassword);
				list.add(u);
			}
		} catch (Exception e) {
			e.toString();
		}

		try {//关闭连接
			if (rs != null) {
				rs.close();
			}
			if (con != null) {
				con.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return list;
	}%><hr>
	<!-- 创建表格 -->
	<table border="1">

		<tr>
			<th>id</th>
			<th>username</th>
			<th>password</th>
		</tr>
		<%
			List<User> list = readUser();

			for (User u : list) {
		%><tr>
			<td><%=u.getId()%></td>
			<td><%=u.getUname()%></td>
			<td><%=u.getUpasswd()%></td>
		</tr>
		<%
			}
		%>

	</table>

</body>
</html>

User.java

package com.entity;

//实体类
public class User {
	private int id;
	private String uname;
	private String upasswd;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	public String getUpasswd() {
		return upasswd;
	}

	public void setUpasswd(String upasswd) {
		this.upasswd = upasswd;
	}

	public User(int id, String uname, String upasswd) {
		super();
		this.id = id;
		this.uname = uname;
		this.upasswd = upasswd;
	}

	public User() {
		super();
	}

	@Override
	public String toString() {
		return "user [id=" + id + ", uname=" + uname + ", upasswd=" + upasswd
				+ "]";
	}
}

效果

登录之后,如果正确则会展示表.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb-通过表格显示数据库的信息(jsp+mysql) 的相关文章

  • Elasticsearch知识点

    目录 1 什么是Elasticsearch 2 Elasticsearch的特点 3 Elasticsearch基础概念 4 Elasticsearch基本数据类型 看这里 5 Elasticsearch基本检索类型 5 1 检索和过滤 5
  • 实现serializable序列化接口

    1 什么是序列化和反序列化 Serialization 序列化 是一种将对象以一连串的字节描述的过程 反序列化deserialization是一种将这些字节重建成一个对象的过程 2 什么情况下需要序列化 a 当你想把的内存中的对象保存到一个
  • JSP&EL表达式&MVC&三层结构综合案例

    文章目录 JSP 1 JSP 概述 2 JSP 快速入门 2 1 搭建环境 2 2 导入 JSP 依赖 2 3 创建 jsp 页面 2 4 编写代码 2 5 测试 3 JSP 原理 4 JSP 脚本 4 1 JSP 脚本分类 4 2 案例
  • MySQL数据库入门超级详细教程

    文章目录 MySQL 1 数据库软件安装 2 为什么要用数据库 3 什么是数据库 4 数据库管理系统 DBMS 5 MySQL 介绍 6 SQL 6 1 SQL 语句概述 6 2 SQL 基本操作 7 表结构操作 7 1 创建数据表 7 2
  • JDBC讲解

    SUN公司于1996年提供了一套访问数据库的标准Java类库 即JDBC 一 什么是JDBC JDBC的全称是Java数据库连接 Java Database Connectivity 它是一套用于执行SQL语句的Java API 应用程序可
  • Idea中Springboot开启热部署方法

    Springboot1 3后支持热部署 具体方法如下 1 增加依赖
  • 使用Aspect切面实现系统日志并存入数据库

    使用Aspect切面实现系统日志并存入数据库 1 pom xml中 加入Maven依赖
  • Shell中的幽灵王者—JAVAWEB 内存马 【认知篇】

    Goby社区第 21 篇技术分享文章 全文共 6700 字 预计阅读时间 17 分钟 自我介绍 大家好 我是 su18 无论是个人博客还是社区 已经很久没写技术文章了 原因有很多 时间 精力 心态等等 但在开源社区也算比较活跃 由于工作需要
  • IntelliJ Idea 常用快捷键 列表(实战终极总结!!!!)

    自动代码 常用的有fori sout psvm Tab即可生成循环 System out main方法等boilerplate样板代码 例如要输入for User user users 只需输入user for Tab 再比如 要输入Dat
  • WEB-7-多线程

    多线程 一 背景 二 认识线程 Thread 1 理解 2 进程和线程的区别 高频面试题 3 使用代码创建多线程 三 线程的相关操作 1 创建线程 1 方法一 继承 Thread 类 2 方法二 实现 Runnable 接口 3 其它方法
  • javaweb前后台交互传递数据的几种方法

    前端传后台 form表单传递
  • Java的内省技术

    什么是内省 在计算机科学中 内省是指计算机程序在运行时 Run time 检查对象 Object 类型的一种能力 通常也可以称作运行时类型检查 不应该将内省和反射混淆 相对于内省 反射更进一步 是指计算机程序在运行时 Run time 可以
  • Sping之自动注入-1

    最近终于能静下心来 一步步的学习Java Web开发 在学习的过程中 遇到太多的问题 一开始好些问题真是不知道怎么解决 在这里要非常感谢 Sping In Action 一书的作者 感谢他能写出此书 让我受益匪浅 您辛苦了 本着 相互学习
  • 解决Jenkins插件不能下载安装的问题

    安装到这一步 显示无法下载Jenkins插件 安装中升级站点 如果你还在安装过程中 遇见这个问题 你可以打开一个新的网页 输入网址http localhost 8080 pluginManager advanced 在最下面的升级站点 把其
  • Spring容器和应用上下文理解

    有了Spring之后 通过依赖注入的方式 我们的业务代码不用自己管理关联对象的生命周期 业务代码只需要按照业务本身的流程 走啊走啊 走到哪里 需要另外的对象来协助了 就给Spring说 我想要个对象 于是Spring就很贴心的给你个对象 听
  • 浏览器发器POST请求

    浏览器按F12或打开开发者工具 在console 控制台 标签页下输入 fetch new Request http localhost 8080 power font getToken method POST headers Conten
  • form表单中使用fileUpLoad上传文件

    在最近的项目中 需要对用户的头像就行上传 这里了解到使用appche的 大家可自行到mvn库搜索jar包名进行下载 这里需要注意的是代码中对参数的读取 正常情况下我么使用getparameter方法进行读取表单数据 但是因为在form中我们
  • JDK 8 List集合使用记录

    JDK8 的新特性给我们开发带来了很大的便利性 先声明 我没有系统的去学习 JDK8的这些所有新特性 本文只是记录一些我个人日常开发中常遇到的一些 JDK8 的新特性方法 1 提取对象集合中的某一属性集合 List lt 对象 gt gt
  • GraphQL 实现原理,不要被表象骗了

    GraphQL 实现原理 及实例 GraphQL是一种用于API的查询语言和运行时环境 它提供了一种描述数据的方式 客户端可以根据需要进行精确地获取所需的数据 下面是GraphQL的实现原理 类型系统 Type System GraphQL
  • JavaWeb——第五章 Servlet

    第五章 Servlet 一 Servlet简介 1 1 动态资源和静态资源 1 2 Servlet简介 二 Servlet开发流程 2 1 目标 2 2 开发过程 三 Servlet注解方式配置

随机推荐

  • 使用Sklearn的SVM接口实现鸢尾花分类

    Iris Data Set Iris Data Set 鸢尾属植物数据集 是历史比较悠久的数据集 它首次出现在著名的英国统计学家和生物学家Ronald Fisher 1936年的论文 The use of multiple measurem
  • Docker安装Redis6

    1 拉取redis镜像 docker pull redis 6 2 创建redis映射目录 mkdir p usr local docker redis 3 下载redis conf到映射目录 cd usr local docker red
  • 数据挖掘而之数据清洗

    数据清洗 是整个数据分析过程中不可缺少的一个环节 其结果质量直接关系到模型效果和最终结论 在实际操作中 数据清洗通常会占据分析过程的50 80 的时间 国外有些学术机构会专门研究如何做数据清洗 相关的书籍也不少 美亚搜data cleani
  • CentOS7安装Redis5.0.5

    1 下载redis mkdir home redis cd home redis wget http download redis io releases redis 5 0 5 tar gz tar xzvf redis 5 0 5 ta
  • qt判断文件是否为空_Qt中文文档-QFile

    本项目地址 https github com QtDocumentCN QtDocumentCN github com QFile Class QFile 类提供读写文件的接口 bledata draft node block data d
  • LeetCode-1592-重新排列单词间的空格

    1592 重新排列单词间的空格 说明 给你一个字符串 text 该字符串由若干被空格包围的单词组成 每个单词由一个或者多个小写英文字母组成 并且两个单词之间至少存在一个空格 题目测试用例保证 text 至少包含一个单词 请你重新排列空格 使
  • kafka日志分段(.log文件)及日志文件索引机制(偏移量索引、时间戳索引)

    Kafka版本 2 2 1 环境 CDH 日志分段 segment 格式 在kafka数据存储的目录下 进入topic文件目录 可以看到多个文件 如下 从文件名可以看出 log index timeindex文件一一对应 rw r r 1
  • mysql 死锁_mysql死锁解读

    死锁 Deadlock 什么是死锁 所谓死锁 是指两个或两个以上的进程在执行过程中 因争夺资源而造成的一种互相等待的现象 若无外力作用 它们都将无法推进下去 此时称系统处于死锁状态或系统产生了死锁 这些永远在互相等待的进程称为死锁进程 由于
  • D - Halfway(二分)

    D Halfwayhttps vjudge csgrandeur cn problem Gym 101652Q 暴力 include
  • 常用的/etc/my.cnf配置,可以修改后直接替换

    client port 3378 socket tmp mysql sock default character set utf8 mysql safe updates default character set utf8 prompt u
  • JAVA基础知识点

    一 概述 JAVA语言是美国Sun公司 Stanford University Network 在1995年推出的高级变成语言 2009年Oracle甲骨文公司收购Sun公司 并于2011年发布Java7版本 DOS命令 Win R cmd
  • 2022 年度软件质量保障行业调查报告

    2022 年度软件质量保障行业调查报告 TesterHome https testerhome com topics 35615 覆盖的测试类型 个人提升工作效率的方式 优秀测试人员应该具备的能力 测试同行们的未来计划 阻碍测试进度的因素
  • CMake进阶(一)设置编译选项

    CMake 进阶 一 设置编译选项 CMake设置编译选项 构建Debug版本和Release版本 CMake文件设置 编译过程 CMake设置编译选项 在cmake脚本中 设置编译选项可以通过add compile options命令 也
  • 【超细节】Vue3的属性传递——Props

    目录 前言 一 定义 二 使用 1 在 setup 中 推荐 2 非 setup 中 3 对象写法的校验类型 4 使用ts进行类型约束 5 使用ts时props的默认值 三 注意事项 1 Prop 名字格式 2 对象或数组类型的默认值 3
  • 第十届蓝桥杯 修改数组 (研究生组)

    修改数组 问题描述 给定一个长度为 N 的数组 A A1 A2 AN 数组中有可能有重复出现的整数 现在小明要按以下方法将其修改为没有重复整数的数组 小明会依次修改 A2 A3 AN 当修改 Ai 时 小明会检查 Ai 是否在 A1 Ai
  • hp服务器g5 u盘装系统,hp 440g5怎么装系统

    惠普probook440g5为一款14英寸高性能商务办公本 在升级了英特尔酷睿i7 8代系列处理器后 配合显卡迸发出超凡的性能 很适合外出携带使用 那这款惠普笔记本怎么安装操作系统 今天小编就为大家分享hp 440g5怎么装系统 hp 44
  • PowerMod@快速幂取模

    图片链接 快速幂取模使用心得 看到过于大的数不要害怕 要学会细致分析 想想取模的作用 不就是帮你把大数化小了吗 include
  • 最强自动化测试框架Playwright(25)-浏览器

    Browser Playwright Python 方法 创建page页面 from playwright sync api import sync playwright def run playwright firefox playwri
  • 深度学习正则化

    在设计机器学习算法时不仅要求在训练集上误差 且希望在新样本上 的泛化能 强 许多机器学习算法都采 相关的策略来减 测试误差 这 些策略被统称为正则化 因为神经 络的强 的表示能 经常遇到过拟 合 所以需要使 不同形式的正则化策略 正则化通过
  • JavaWeb-通过表格显示数据库的信息(jsp+mysql)

    login jsp h2 登录 h2 br