JavaWeb:实验二JSP表单开发及访问数据库

news2024/11/15 7:54:24

一、实验目的 

1.掌握JSP表单的开发方法。

2.熟悉JDBC技术和使用JDBC连接各种数据库。

二、实验性质

综合性实验

三、实验内容

实现注册与登录功能:

1.创建一个数据库,在数据库建立用户表。(5分)

2.制作一个注册表单,可以输入账户和密码并提交(在数据提交之前用JS对表单数据进行有效性验证),将表单提交的数据写入数据库。(30分)

3.制作一个登录表单,输入账号和密码,通过数据库进行验证,如果账号、密码验证通过,则显示“登录成功”,否则显示“登录失败”。(30分)

e4215c0d51904cee8245b8443418cb3c.jpeg4.从数据库中读取所有的用户数据,并在页面中显示。(25分)

134d399f3e584974a36d8864a8b3d349.jpeglogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link rel="stylesheet" href="./登录注册.css">

</head>

<body>

    <div class="box">

        <h2>Login</h2>

        <form action="login_result.jsp" method="post" name="loginForm"

             onsubmit="return check()">

             <div class="input-box">

                 <label>账号</label> <input type="text" name="username"

                     placeholder="请输入用户名">

             </div>

             <div class="input-box">

                 <label>密码</label> <input type="password" name="password"

                     placeholder="请输入密码">

             </div>

             <div class="btn-box">

                 <div>

                     <button>登录</button>

                 </div>

             </div>

        </form>

    </div>

</body>

</html>

login_result.jsp

<%@page import="java.sql.*"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

    <%

        request.setCharacterEncoding("UTF-8");

        String username = request.getParameter("username");

        String password = request.getParameter("password");

        //1.导入包

        //将jar包粘贴到WEB_INF中的lib文件夹下

        //2.加载驱动

        String driver = "com.mysql.cj.jdbc.Driver";

        Class.forName(driver);

        //3.创建链接Connection

        String url = "jdbc:mysql://localhost:3306/javaweb?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";

        Connection conn = DriverManager.getConnection(url, "root", "g1234");

        Statement stat = conn.createStatement();

        String sql = "SELECT * FROM s WHERE stuname=? and password=?";

        PreparedStatement pstat = conn.prepareStatement(sql);

        pstat.setString(1,username);

        pstat.setString(2,password);

        ResultSet rs = pstat.executeQuery();

       

        if(rs.next()){

             out.print("登录成功,欢迎您:");

             out.println(username);

        }else{

             out.print("登录失败!!!");

        }

        stat.close();

        pstat.close();

        conn.close();

    %>

</body>

</html>

四、实验总结

请书写你对本次实验有哪些实质性的收获和体会,以及对本次实验有何良好的建议?(10分)

login.jsp

这个页面包含一个登录表单,用户需要输入用户名和密码。

通过 JavaScript 对表单进行了基本的前端验证,确保用户输入不为空。

当用户点击登录按钮时,表单数据将被提交到 login_result.jsp 页面进行处理。

login_result.jsp

这个页面接收从登录表单提交的用户名和密码。

加载 MySQL 驱动,建立数据库连接。

使用 PreparedStatement 执行 SQL 查询,查询数据库中是否存在匹配的用户名和密码。

根据查询结果,输出相应的登录成功或失败信息。

优点:

实现了基本的用户登录功能,页面简洁明了,易于使用。

使用了预编译的 SQL 语句,有效防止了 SQL 注入攻击。

提供了基本的前端验证,提升了用户体验。

可改进之处:

安全性:密码处理方面可以更安全,建议使用加盐哈希等技术来存储密码。

错误处理:在异常情况下,可以提供更友好的错误提示,而不仅仅是打印错误信息。

用户体验:可以增加更多的交互性和反馈,例如登录成功后跳转到个人主页等。

可维护性:代码中的数据库连接信息硬编码在页面中,可以将其抽取到配置文件中,便于维护和管理。
register.jsp

这个页面包含一个注册表单,用户需要输入用户名和密码。

通过 JavaScript 对表单进行了基本的前端验证,确保用户名和密码不为空。

当用户点击注册按钮时,表单数据将被提交到 register_result.jsp 页面进行处理。

register_result.jsp

这个页面接收从注册表单提交的用户名和密码。

将接收到的用户名和密码插入到数据库表中。

输出相应的注册成功或失败信息。

优点:

实现了基本的用户注册功能,页面简洁明了,易于使用。

使用了预编译的 SQL 语句,有效防止了 SQL 注入攻击。

提供了基本的前端验证,提升了用户体验。

可改进之处:

安全性:密码处理方面可以更安全,建议使用加盐哈希等技术来存储密码。

错误处理:在异常情况下,可以提供更友好的错误提示,而不仅仅是打印错误信息。

用户体验:可以增加更多的交互性和反馈,例如注册成功后跳转到登录页面等。

可维护性:代码中的数据库连接信息硬编码在页面中,可以将其抽取到配置文件中,便于维护和管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

城市管理违规行为智能识别 Task3学习心得

本次学习主要针对数据集增强和模型预测 1、数据增强&#xff1a; 1&#xff09;将四张训练图像组合成一张&#xff0c;增加物体尺度和位置的多样性。 2&#xff09;复制一个图像的随机区域并粘贴到另一个图像上&#xff0c;生成新的训练样本 3&#xff09;图像的随机旋转、…

day25 Java基础——面向对象两万字详解!(纯干货)

day25 Java基础——面向对象两万字详解&#xff01;&#xff08;纯干货&#xff09; 文章目录 day25 Java基础——面向对象两万字详解&#xff01;&#xff08;纯干货&#xff09;1. 类与对象的关系类&#xff08;Class&#xff09;对象&#xff08;Object&#xff09;类与对象…

gitee绑定公钥后依旧无法使用_gitee push添加公钥无效

解决&#xff1a; 步骤按照官网操作即可&#xff1a;gitee官方说明 看看远程地址是否使用的http模式&#xff0c;是的话换ssh模式

Adobe Acrobat Reader的高级功能详解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Adobe Acrobat Reader是广泛使用的PDF查看器&#xff0c;其不仅可以用于查看和打印PDF文件&#xff0c;还具有一些高级功能&#xff0c;可以提升用户的PDF文档处理效率。以下是对Adobe Acrobat Reader的一些…

RH850系列芯片深度剖析 1.7-启动流程解析

RH850系列芯片深度剖析 1.7-启动流程解析 文章目录 RH850系列芯片深度剖析 1.7-启动流程解析一、简介二、启动相关文件说明三、启动相关的段四、启动流程4.1 启动文件启动4.1.1 寄存器初始化4.1.2 时钟初始化4.1.3 模块Standby寄存器初始化4.1.4 启动从核4.1.5 硬件初始化4.1.5…

vector模拟实现迭代器失效

目录 1.vector和vector> 1.1两者的区别 1.2遍历的方法 2.vector模拟实现的准备 3.reserve出现的问题及解决方案 4.遍历vector的三种方式 5.关于typename的使用 6.insert导致的迭代其实失效问题 6.1因为扩容导致的迭代器失效 6.2因为插入数据倒置的迭代器失效 1.vec…

【精彩回顾·成都】成都 UG 生成式 AI 工作坊:AI 革命下的商业模式创新!

文章目录 前言一、活动介绍二、精彩分享内容及活动议程2.1、亚马逊云科技社区情况和活动介绍2.2、《浅谈 AIGC 商业化》2.3、《AI 浪潮下的产品落地》2.4、现场互动情况2.5、休息茶歇时间2.6、《AI 赋能商业革新&#xff1a;智能化转型的策略与实践》2.7、《动手实践&#xff1…

GAMES104:10+11游戏引擎中物理系统的基础理论算法和高级应用-学习笔记

文章目录 概览一&#xff0c;物理对象与形状1.1 对象 Actor1.2 对象形状Actor Shape 二&#xff0c;力与运动2.1 牛顿定律2.2 欧拉法2.2.1 显式欧拉法Explicit (Forward) Euler’s Method2.2.2 隐式欧拉法 Implicit (Backward) Euler’s Method2.2.3 半隐式欧拉法 Semi-implici…

【iOS】通过第三方库Masonry实现自动布局

目录 前言 约束 添加约束的规则 使用Masonry自动布局 Masonry的常见使用方法 补充 前言 在暑期完成项目时&#xff0c;经常要花很多时间在调试各种控件的位置上&#xff0c;因为每一个控件的位置都需要手动去计算&#xff0c;在遇到循环布局的控件时&#xff0c;还需要设…

使用文件系统管理硬件设备

1、描述一个文件系统 介绍如何使用文件系统来管理计算机系统中所有的硬件设计和磁盘 之前直接在sys_open/sys_read/sys_read中对具体的tty设备的打开、读写进行操作&#xff0c;并且只是非常粗浅地介绍了文件系统的一些概念。接下来将正式引入文件系统 由于文件系统需要考虑不…

从FasterTransformer源码解读开始了解大模型(2.4)代码通读05

从FasterTransformer源码解读开始了解大模型&#xff08;2.4&#xff09;代码解读05-ContextDecoder的前向01 写在前面的话 ContextDecoder部分是用于处理输入部分的组件层&#xff0c;在这一层中&#xff0c;会对所有输入的input ids进行处理&#xff0c;计算Attention&…

全国大学生数学建模比赛——关联规则

一、问题背景与关联规则适用性 在数学建模比赛中&#xff0c;常常会遇到需要分析大量数据以寻找变量之间潜在关系的问题。关联规则分析作为一种数据挖掘技术&#xff0c;特别适用于这种场景。例如&#xff0c;在一些实际问题中&#xff0c;可能需要从众多的因素中找出哪些因素之…

基于Python的量化交易回测框架Backtrader初识记录(一)

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;基于Python的量化交易回测框架Backtrader初识记录&#xff08;一&#xff09;-CSDN博客 前言&#xff1a;近期以来&#xff0c;对股市数据获取及预处理算是告一段落&#xff0c;下一步…

Java-多线程机制

上篇我提到一些多线程的基本使用方法&#xff0c;但并没有说到底层原理&#xff0c;你或许会有一些疑问&#xff0c;为什么不直接调用Run方法而是要用start方法启动线程&#xff1f;多线程到底是怎样执行的&#xff1f;接下来我会详细带你了解多线程的机制原理。 多线程的底层…

Leetcode114将二叉树转换为链表(java实现)

来看下本题的题目描述&#xff1a; 本题想让我们将二叉树转换为单链表&#xff0c;可以发现&#xff0c;左边的二叉树转换为右边的链表是使用的中序遍历&#xff0c;根 左 右 所以本道题的思路就是可以先用一个集合以中序遍历收集元素&#xff0c;然后再构建单链表。 class S…

[pytorch] --- pytorch基础之tensorboard使用

0 tensorboard介绍 TensorBoard是一个用于可视化机器学习实验结果的工具&#xff0c;可以帮助我们更好地理解和调试训练过程中的模型。 在PyTorch中&#xff0c;我们可以使用TensorBoardX库来与TensorBoard进行交互。TensorBoardX 是一个PyTorch的扩展&#xff0c;它允许我们…

Android Codec2 CCodec (七)IConfigurable

上一篇文章我们了解了接口参数的定义&#xff0c;这一节我们简单梳理一下参数获取、配置以及参数反射过程。 1、IConfigurable 通过之前的介绍我们了解到&#xff0c;Codec2模块的功能实现与配置实现是相互分离的&#xff0c;Codec2框架设计了一组API用于获取与模块关联的配置…

2.4 定时器与TIM中断

文章目录 时钟与时钟树stm32时钟树可以手动把系统时钟72mhz改成其他的吗&#xff1f;ST公司给的外围设备配置文件 的 默认配置说明 定时器什么是定时器定时器的类型 时钟与时钟树 频率&#xff1a;如72Mhz即为每秒72M个脉冲 时钟的源头 晶振 时钟树的分支 分频器&#xff1a;…

超越在线翻译百度!揭秘3款工具,工作学习快人一步

在如今这个信息爆炸的时代&#xff0c;我们经常需要用到不同的语言。无论是看外国文章、写邮件给国外朋友&#xff0c;还是和外国客户聊天&#xff0c;语言不通都是个大问题。不过&#xff0c;科技的进步带来了很多在线翻译工具&#xff0c;百度翻译就是其中很受欢迎的一个。但…

U盘文件目录损坏难读?数据重生方案

在数字化时代的洪流中&#xff0c;U盘作为便携的存储介质&#xff0c;承载着无数人的重要数据与回忆。然而&#xff0c;当U盘不幸遭遇文件或目录损坏&#xff0c;导致数据无法读取时&#xff0c;这份便携与便捷瞬间化为乌有&#xff0c;留下的只有无尽的焦虑与困扰。本文将深入…