基于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://xiahunao.cn/news/3269997.html

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

相关文章

【Django】js实现简单计算器

文章目录 完整html写script写views写urls ##需求 ##实验 完整html {% load static %} <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

【JUC】Java锁介绍

文章目录 阿里锁开发规范乐观锁和悲观锁悲观锁乐观锁 synchronized 类锁、对象锁synchronized有三种应用方式锁相关的8种案例演示&#xff08;对象锁、类锁&#xff09;标准访问ab两个线程&#xff0c;请问先打印邮件还是短信&#xff1f;sendEmail钟加入暂停3秒钟&#xff0c;…

c++入门----类与对象(中)

OK呀&#xff0c;家人们承接上文&#xff0c;当大家看过鄙人的上一篇博客后&#xff0c;我相信大家对我们的c已经有一点印象了。那么我们现在趁热打铁再深入的学习c入门的一些知识。 类的默认成员函数 首先我们学习的是我们的默认函数。不知道大家刚读这个名词是什么反应。默认…

鱼哥好书分享活动第27期:看完这篇《云原生安全》了解云原生环境安全攻防实战技巧!

鱼哥好书分享活动第27期&#xff1a;看完这篇《云原生安全》了解云原生安全攻防实战技巧&#xff01; 主要内容&#xff1a;读者对象&#xff1a;本书目录&#xff1a;了解更多&#xff1a;赠书抽奖规则: 当前全球数字化的发展逐步进入深水区&#xff0c;云计算模式已经广泛应用…

【Linux C | 网络编程】简易进程池的实现详解(一)

进程池&#xff08;Process Pool&#xff09;是一种并发编程的模型&#xff0c;用于管理和复用多个进程&#xff0c;以提高系统的效率和性能。它主要解决的问题是减少因频繁创建和销毁进程而带来的性能开销&#xff0c;特别是在需要处理大量并发任务时尤为有效。 主要组成部分…

法律 | 法律人AI使用指南

原文&#xff1a;法律 | 法律人AI使用指南|法官|法院|文书|公司法_网易订阅 01 引言 过去半年多&#xff0c;我一直在尝试着用AI来辅助自己的各项法律工作&#xff0c;将AI融入自己的日常工作之中&#xff0c;并试图形成自身稳定的“法律AI”工作流。在此过程中&#xff0c;…

实时捕获数据库变更

1.CDC概述 CDC 的全称是 Change Data Capture &#xff0c;在广义的概念上&#xff0c;只要能捕获数据变更的技术&#xff0c;我们都可以称为 CDC 。我们目前通常描述的CDC 技术主要面向数据库的变更&#xff0c;是一种用于捕获数据库中数据变更的技术&#xff0c;CDC 技术应用…

【Plotly-驯化】一文教你学会画最美动态可视化的热力图:heatmap技巧

【Plotly-驯化】一文教你学会画最美动态可视化的热力图&#xff1a;heatmap技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取…

JS:JavaScript 简介

前言 在当今数字时代&#xff0c;JavaScript已然成为了现代Web开发的基石。从最初作为浏览器中的一个小型脚本语言&#xff0c;到如今成为驱动全球互联网的强大引擎&#xff0c;JavaScript的发展历程本身就是一个令人着迷的故事。 好了开始学习JS吧 1. 如果刚开始了解js&#…

智慧城管解决方案

1. 项目整体概述 智慧城管项目面临历史发展机遇&#xff0c;十九大提出以人为核心保障民生&#xff0c;推进新型城镇化。市民对政府服务有新诉求&#xff0c;同时云计算、物联网、移动互联网等技术迅速发展。 2. 传统城管业务模式问题 传统城管业务模式存在问题&#xff0c;…

leetcode106. 从中序与后序遍历序列构造二叉树,力扣105姊妹题

leetcode106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…

【每日刷题】Day86

【每日刷题】Day86 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 118. 杨辉三角 - 力扣&#xff08;LeetCode&#xff09; 2. 数组中出现次数超过一半的数字_牛客题霸…

详解Mysql InnoDB引擎 04

文章目录 1. InnoDB 简介2. 逻辑存储结构2.1 表空间 idb文件2.2 段2.3 区 1M2.4 页 16KB2.5 行 3. 架构3.1 内存结构3.1.1 Buffer Pool 缓冲池3.1.2 Change Buffer 更改缓冲区3.1.3 Adaptive Hash Index3.1.4 Log Buffer 3.2 磁盘结构 4. 后台线程5. 事务原理5.1 redo log 重做…

C++的STL简介(一)

目录 1.什么是STL 2.STL的版本 3.STL的六大组件 4.string类 4.1为什么学习string类&#xff1f; 4.2string常见接口 4.2.1默认构造 ​编辑 4.2.2析构函数 Element access: 4.2.3 [] 4.2.4迭代器 ​编辑 auto 4.2.4.1 begin和end 4.2.4.2.regin和rend Capacity: 4.2.5…

LangChain曝关键漏洞,数百万AI应用面临攻击风险

LangChain是一个流行的开源生成式人工智能框架&#xff0c;其官网介绍&#xff0c;有超过一百万名开发者使用LangChain框架来开发大型语言模型&#xff08;LLM&#xff09;应用程序。LangChain的合作伙伴包括云计算、人工智能、数据库和其他技术开发领域的许多知名企业。 近日&…

前端模块化CommonJS、AMD、CMD、ES6

在前端开发中&#xff0c;模块化是一种重要的代码组织方式&#xff0c;它有助于将复杂的代码拆分成可管理的小块&#xff0c;提高代码的可维护性和可重用性。CommonJS、AMD&#xff08;异步模块定义&#xff09;和CMD&#xff08;通用模块定义&#xff09;是三种不同的模块规范…

数据库设计过程概述

1.首先进行需求分析&#xff0c;通过数据流图&#xff0c;数据字典&#xff0c;需求说明书等确定数据处理要求 2.概要结构设计 3.逻辑结构设计 4.物理设计

计算机二级题--结构体及链表 章节

之前写的有结构体全部的知识点&#xff0c;这一篇主要针对计算机二级真题的整理。 需要备考计算机二级的小伙伴们先收藏起来吧。整理不易&#xff0c;不过有帮助记得点赞哦 高频考点&#xff08;容易出错&#xff0c;附有例题&#xff09; 1.结构体传参&#xff0c;传值的区…

数字图像处理中的常用特殊矩阵及MATLAB实现详解

一、前言 Matlab的名称来源于“矩阵实验室&#xff08;Matrix Laboratory&#xff09;”&#xff0c;其对矩阵的操作具有先天性的优势&#xff08;特别是相对于C语言的数组来说&#xff09;。在数字图像处理中&#xff0c;为了提高编程效率&#xff0c;我们可以使用多种方式来创…

MATLAB基础:函数与函数控制语句

今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法&#xff0c;可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如&#xff0c;我们输入lookfor inpu…