基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(2)登录,注册功能实现

   

技术支持:JAVA、JSP

服务器:TOMCAT 7.0.86

编程软件:IntelliJ IDEA 2021.1.3 x64


登陆页面如下

在这个页面中我们实现了一个登录页面和一个注册页面的Jsp文件,和两个java 的服务层文件

分别是web包下的denglu.jsp和zhuce.jsp以及实现网页的服务层代码LoginServlet和zhuceServlet

除此之外我们还会应用到我们的dao层,即dao包,是我们用来实现一些方法的地方,我们把一些会用到的方法都丢到了dao层

同时还会用到我们的实体类,实体类中有Student,因为我们是面对学生,所以学生登录,注册的一些账号,密码信息都会放到Student中供我们来调用

以及我们的Util包,是用来比如在注册时我们要来连接我们的数据库文件,于是util包就会把我们要连接的参数信息都丢到这个包中,也是以供调用。


denglu.jsp

我们在web目录下右键新建一个jsp的文件,取名denglu.jsp(或者其他你也可以)

<%@page contentType="text/html;charset=utf-8" pageEncoding="UTF-8" %>
<%@page import="java.util.*,java.text.*,entiy.*" %>
<!DOCTYPE html>
<html>
<head><title>交易网登录</title><script>// 检查是否有错误信息参数,如果有则显示弹框提示<% if ("1".equals(request.getParameter("error"))) { %>window.onload = function() {alert("您的账号或密码输入错误,请重试。");}<% } %></script><style>h1{font-size: 40px;color: blanchedalmond;text-align: center;font-family: 'Courier New', Courier, monospace;font-style: italic;}</style>
</head>
<body>
<h1 name="top">交易网</h1>
<table align="center" cellspacing="0"><tr><td><table cellpadding="0"><tr><!-- 使用相对路径引用图片 --><td><img src="img/3.jpg"></td></tr><tr><td><ul><li>全面支持iPhone/iPad及Android等系统</li><li>客户端、手机与网页,实现发送、阅读邮件立即同步普通登录手机号登录</li></ul></td></tr></table></td><td><table border="1" cellspacing="0"><form action="Login" method="post"><tr><td><table cellpadding="30"><tr><td colspan="2" align="center"><strong>登录</strong></td></tr><tr><td>昵称:<input type="text" id="name" name="name"></td></tr><tr><td>账号:<input type="text" id="idname" name="idname"></td></tr><tr><td>密码:<input type="password" id="pd" name="pd"></td></tr><tr><td align="center" colspan="2"><input type="submit" value="登录" onclick="f1();" /><!-- 注册按钮改用正确的 <a> 标签 --><a href="zhuce.jsp"><input type="button" value="注册" onclick="f2();"></a></td></tr></table></td></tr></form></table></td></tr><tr><td align="right">关于交易网</td></tr>
</table></body>
</html>

这段代码的基本思路我于是从7个角度来阐述

  1. 页面结构和设计

    • 使用了HTML和CSS进行页面的基本结构和样式设计。
    • 使用了JavaScript来增强用户交互和错误提示功能。
  2. 页面基本信息设置

    • <%@page contentType="text/html;charset=utf-8" pageEncoding="UTF-8" %>:设置页面的编码和内容类型。
    • <%@page import="java.util.*,java.text.*,entity.*" %>:导入Java类库,以便后续Java代码中可以使用相关类。
  3. 页面内容

    • <title> 标签设置页面标题为“交易网登录”。
    • <script> 标签内部的JavaScript代码用于在页面加载时检查是否有错误信息参数,并在需要时显示警告框提示用户。
  4. 页面样式

    • <style> 标签内部定义了标题 <h1> 的样式,包括字体大小、颜色、对齐方式等。
  5. 页面布局

    • 使用了表格 <table> 进行页面内容的布局。
    • 包括左侧包含图片和文本信息的列和右侧登录表单的列。
  6. 登录表单

    • <form> 标签的 action 属性指向 "Login",表示表单提交时将数据发送到名为 "Login" 的服务。
    • 包含昵称、账号、密码输入框和登录按钮。
    • 注册按钮使用 <a> 标签包裹,指向 "zhuce.jsp" 页面,点击时可以跳转到注册页面。
  7. 服务连接

    • 表单的 action="Login" 属性指向一个名为 "Login" 的服务。当用户填写表单并点击登录按钮时,浏览器会将表单数据提交到这个服务。
    • 在服务端(可能是一个Java Servlet或类似的服务),可以处理用户提交的数据,进行验证、身份认证等操作,并返回相应的结果给用户。

总结来说,实现了一个简单的登录页面,使用了HTML、CSS和JavaScript构建页面样式和基本交互。表单数据提交到服务端的 "Login" 服务,服务端负责处理用户登录逻辑。

LoginSerlvet

我们在src根目录下,先新建一个Servlet包,再在包下新建一个java文件,叫LoginServlet

package Servlet;import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;public class LoginServlet extends HttpServlet {// 数据库连接信息(这里假设你使用MySQL数据库)private String jdbcURL = "jdbc:mysql://localhost:3306/sdjyy";private String jdbcUsername = "root";private String jdbcPassword = "asd123";protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 获取登录页面提交的账号和密码String username = request.getParameter("idname");String password = request.getParameter("pd");System.out.println(username);System.out.println(password);// 假设这里是你的登录逻辑,可以是数据库验证等boolean isValidUser = false;try {isValidUser = checkUser(username, password);} catch (Exception e) {e.printStackTrace();}// 这里进行账号密码验证的逻辑,比如查询数据库// 注意:这里应该使用 PreparedStatement 或其他安全方式来避免 SQL 注入攻击// 示例中简单输出账号密码到控制台System.out.println("Username: " + username);System.out.println("Password: " + password);if (isValidUser) {// 登录成功,重定向到商品页面HttpSession session = request.getSession();session.setAttribute("username", username);response.sendRedirect("list");} else {// 登录失败,可以返回到登录页面或者给出错误信息response.sendRedirect("denglu.jsp?error=1"); // 假设带有错误参数}}// 模拟用户验证,实际情况应根据你的业务逻辑实现private boolean checkUser(String username, String password) throws Exception {try {// 加载数据库驱动程序Class.forName("com.mysql.jdbc.Driver");// 连接数据库Connection connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);// 查询语句String sql = "SELECT * FROM users WHERE idname = ? AND pd = ?";PreparedStatement statement = connection.prepareStatement(sql);statement.setString(1, username);statement.setString(2, password);System.out.println(username);System.out.println(password);// 执行查询ResultSet result = statement.executeQuery();// 如果查询到结果集,说明用户名和密码匹配if (result.next()) {return true;}// 关闭连接connection.close();} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();}// 如果没有查询到结果或者出现异常,则验证失败return false;}
}

1. 导入必要的类库和包

这点就不必多说了

2. LoginServlet 类继承 HttpServlet

  • LoginServlet 类继承自 HttpServlet,表示它是一个Servlet,用于处理HTTP请求。
  • 定义了数据库连接信息,包括URL、用户名和密码,方便我们来接,所以我们要先在我们写这些代码之前,新建一个数据库,这是我的一个连接方式,sdjyy是我的数据库名,users则是我的数据表名

3. 实现 doPost 方法处理 POST 请求

  • doPost 方法处理用户提交的登录表单数据。
  • 从请求中获取用户名和密码,并调用 checkUser 方法进行验证。
  • 如果验证成功,将用户名存入 session,并重定向到名为 "list" 的页面。即list就是我登录成功之后的进入的主页面。
  • 如果验证失败,重定向回登录页面 "denglu.jsp" 并附带错误参数。

4. checkUser 方法实现用户验证逻辑

  • checkUser 方法用于连接数据库并执行用户名和密码的验证。
  • 使用 PreparedStatement 来避免 SQL 注入攻击。
  • 如果查询到结果集,即表示用户名和密码匹配,返回 true;否则返回 false。

然后我仔细看了一下,登录功能实现的一个是没有引入dao包,所以这里我就先不把dao包,entity包放出来


网页和服务层写下之后,还有最重要的WEB-INF包中的web.xml文件

web.xml

它是 Java Web 应用程序中一个重要的配置文件,用于配置Servlet、过滤器、监听器等组件及其映射关系。

<servlet><servlet-name>Login</servlet-name><servlet-class>Servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>Login</servlet-name><url-pattern>/Login</url-pattern></servlet-mapping>
  • <servlet> 元素用于定义 Servlet 的名称和实现类。
  • <servlet-mapping> 元素用于指定 Servlet 的映射 URL。

登录功能大致就实现了

注册功能我就先放到下一篇博客了

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“微软蓝屏”事件,给IT行业带来的宝贵经验和教训

“微软蓝屏”事件是指2024年7月19日发生的一次全球性技术故障&#xff0c;主要涉及微软视窗&#xff08;Windows&#xff09;操作系统及其相关应用和服务。 以下是对该事件的详细解析&#xff1a; 一、事件概述 发生时间&#xff1a;2024年7月19日事件影响&#xff1a;全球多个…

2023河南萌新联赛第(二)场 南阳理工学院

A. 国际旅行Ⅰ 题目&#xff1a; 思路&#xff1a; 因为题意上每个国家可以相互到达&#xff0c;所以只需要排序&#xff0c;输出第k小的值就可以了。 AC代码&#xff1a; #include<bits/stdc.h> #define int long long #define IOS ios::sync_with_stdio(0);cin.tie…

基于k8s快速搭建docker镜像服务的demo

基于k8s快速搭建docker镜像服务的demo 一、环境准备 如标题&#xff0c;你需要环境中有和2个平台&#xff0c;并且服务器上也已经安装好docker服务 接下来我来构建一个docker镜像&#xff0c;然后使用harbork8s来快速部署服务demo 二、部署概述 使用docker构建镜像&#x…

HTML常见标签——超链接a标签

一、a标签简介 二、a标签属性 href属性 target属性 三、a标签的作用 利用a标签进行页面跳转 利用a标签返回页面顶部以及跳转页面指定区域 利用a标签实现文件下载 一、a标签简介 <a>标签用于做跳转、导航&#xff0c;是双标签&#xff0c;记作<a></a>&#…

zyx青岛实训day14 7/25

Git 一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更 一&#xff0e;Git的主要功能&#xff1a; 二&#xff0e;准备git机器 修改静态ip&#xff0c;主机名 三&#xff0e;git仓库的建立&#xff1a; 1.安装git [rootgit ~]# yum -y install git 2.创建一个…

ROS2入门到精通—— 2-8 ROS2实战:机器人安全通过狭窄区域的方案

0 前言 室内机器人需要具备适应性和灵活性&#xff0c;以便在狭窄的空间中进行安全、高效的导航。本文提供一些让机器人在狭窄区域安全通过的思路&#xff0c;希望帮助读者根据实际开发适当调整和扩展 1 Voronoi图 Voronoi图&#xff1a;根据给定的一组“种子点”&#xff0…

在英特尔 Gaudi 2 上加速蛋白质语言模型 ProtST

引言 蛋白质语言模型 (Protein Language Models, PLM) 已成为蛋白质结构与功能预测及设计的有力工具。在 2023 年国际机器学习会议 (ICML) 上&#xff0c;MILA 和英特尔实验室联合发布了ProtST模型&#xff0c;该模型是个可基于文本提示设计蛋白质的多模态模型。此后&#xff0…

项目一缓存商品

文章目录 概要整体架构流程技术细节小结 概要 因为商品是经常被浏览的,所以数据库的访问量就问大大增加,造成负载过大影响性能,所以我们需要把商品缓存到redis当中,因为redis是存在内存中的,所以效率会比MySQL的快. 整体架构流程 技术细节 我们在缓存时需要保持数据的一致性所…

如何实现Web服务只允许特定客户端访问

如何实现Web服务只允许特定客户端访问 需求来源 为了满足B/S系统给客户演示的需要&#xff0c;需要部署一套系统允许公网能够访问&#xff0c;便于业务人员到客户哪里进行系统演示&#xff0c;但是目前网络安全非常重要&#xff0c;希望能防止暴力破解或者端口扫描等黑客攻击…

C#/WinFrom TCP通信+ 网线插拔检测+客服端异常掉线检测

Winfor Tcp通信(服务端) 今天给大家讲一下C# 关于Tcp 通信部分&#xff0c;这一块的教程网上一大堆&#xff0c;不过关于掉网&#xff0c;异常断开连接的这部分到是到是没有多少说明&#xff0c;有方法 不过基本上最多的两种方式&#xff08;1.设置一个超时时间&#xff0c;2.…

【Python面试题收录】Python编程基础练习题②(数据类型+文件操作+时间操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题 编写一个函数&#xff0c;实现&#xff1a;先去除左右空白符&#xff0c;自动检测输入的数据类型&#xff0c;如果是整数就转换成二进制形式并返回出结果&#xff1b…

第二讲:NJ网络配置

Ethernet/IP网络拓扑结构 一. NJ EtherNet/IP 1、网络端口位置 NJ的CPU上面有两个RJ45的网络接口,其中一个是EtherNet/IP网络端口(另一个是EtherCAT的网络端口) 2、网络作用 如图所示,EtherNet/IP网络既可以做控制器与控制器之间的通信,也可以实现与上位机系统的对接通…

安防视频监控EasyCVR视频汇聚平台修改配置后无法启动的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构&#xff0c;兼容性强、支持多协议接入&#xff0c;包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…

RV1126 Linux 系统,接外设,时好时坏(二)排查问题的常用命令

在 RV1126 Linux 系统中,排查外设连接问题时,可以使用多种命令来诊断和调试。以下是一些常用的命令和工具: 1. 查看系统日志 dmesg: 显示内核环形缓冲区的消息,通常包含设备初始化、驱动加载和错误等信息。 dmesg | grep <设备名或相关关键字>journalctl: 查看系统…

《华为数据之道》读书笔记六---面向自助消费的数据服务建设

七、从结果管理到过程管理&#xff0c; 从能“看”到能“管” 1、数据赋能业务运营 数字化运营旨在利用数字化技术获取、管理和分析数据&#xff0c;从而为企业的战略决策与业务运营提供可量化的、科学的支撑。 数字化运营归根结底是运营&#xff0c;旨在推动运营效率与能力的…

我在百科荣创企业实践——简易函数信号发生器(5)

对于高职教师来说,必不可少的一个任务就是参加企业实践。这个暑假,本人也没闲着,报名参加了上海市电子信息类教师企业实践。7月8日到13日,有幸来到美丽的泉城济南,远离了上海的酷暑,走进了百科荣创科技发展有限公司。在这短短的一周时间里,我结合自己的教学经验和企业的…

python+vue3+onlyoffice在线文档系统实战20240725笔记,首页开发

解决遗留问题 内容区域的高度没有生效&#xff0c;会随着菜单的高度自动变化。 解决方案&#xff1a;给侧边加上一个最小高度。 首页设计 另一种设计&#xff1a; 进来以后&#xff0c;是所有的文件夹和最近的文件。 有一张表格&#xff0c;类似于Windows目录详情&…

18728 数对问题二

这个问题可以通过使用哈希表来解决。我们可以遍历整个序列&#xff0c;对于每个元素&#xff0c;我们检查它加上C和减去C的元素是否在哈希表中&#xff0c;如果在&#xff0c;我们就找到了一个满足条件的数对。然后我们将当前元素加入哈希表。最后&#xff0c;哈希表中的每个元…

Vue 3 + Vite 项目中安装 Tailwind CSS

官网&#xff1a;安装 - TailwindCSS中文文档 | TailwindCSS中文网 tips&#xff1a;只按照官网的配置可能会导致样式不加载/加载不生效的问题 1、正确安装指令 npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p 自动生成 ​tailwind.config.js​…

基于Vue开发的前端系统中寻找后端API及其参数

前言 在日常渗透工作中&#xff0c;常常遇到后台系统&#xff0c;且有相当一部分是自研开发的系统&#xff0c;没有源代码&#xff0c;没有弱口令漏洞&#xff0c;也没有swagger、webpack泄露等。幸运的是&#xff0c;这些系统几乎都是前后端分离的架构&#xff0c;而我发现使…