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) 的相关文章

随机推荐

  • 使用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