当前位置: 首页 > news >正文

Day12--Servlet实现前后端交互(案例:学生信息管理系统登录页面)

 

                                      (在一个完整的项目架构中,servlet的角色和位置)

Servlet、GenericServlet和HttpServlet三者之间的关系是Java Web开发中的一个重要概念,它们共同构成了基于Java的服务器端程序的基础。以下是具体分析:

1. Servlet接口:
   - 提供了生命周期方法init()、service()、destroy()和其他用于获取配置信息的方法。
   - 是所有Servlet的根,定义了Servlet的基本框架和必须实现的方法。

2. GenericServlet抽象类:
   - 实现了Servlet接口,并提供了这些方法的默认实现,包括init()和destroy()方法的空实现。
   - 是一个抽象类,要求继承它的自定义Servlet类必须实现service()方法。

3. HttpServlet抽象类:
   - 继承自GenericServlet,进一步简化了HTTP特定的处理,例如get和post请求的处理。
   - 包含了处理HTTP协议的方法,如doGet()、doPost()等,使得创建特定于HTTP的Servlet变得简单。

总的来说,这三者的关系和特性,为Java Web开发提供了强大的动态内容生成能力,允许开发者根据HTTP请求的类型和内容,灵活地生成响应。在实际开发中,选择合适的父类继承或实现相应的接口,可以大大影响Servlet的开发效率和应用的性能

下面是案例:

在web目录下创建login.jsp文件并写入前端要显示的页面。

<%--Created by IntelliJ IDEA.User: 21222Date: 2024/7/29Time: 上午10:35To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<div class="box" style="width: 250px; height: 300px; background-color: bisque"><h1>学生信息管理系统登录页</h1>
<%--
这里的action就是webservlet注解里写的名字,运行后会自动到后端寻找
method就是请求方法post或者get--%><form action="login" method="post">账号<input type="text" name="user"><br>密码<input type="text" name="pw"><br><button>登录</button></form>
</div>
</body>
</html>

 webServlet注解一定要加   /   否则运行会报工件错误!!!

如果需要接受中文参数到后端,在处理参数的第一行就要对编码进行设置,设置如下。

在这里进行逻辑判断,账号密码输入正确跳转到LoginSuccess错误就跳转到LoginFailed

注:这里从数据库获取数据我用的是mybatis,测试随意

@WebServlet("/login")
public class UserRes extends HttpServlet {//收参数@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");String user = req.getParameter("user");String pw = req.getParameter("pw");System.out.println("user = " + user);System.out.println("pw = " + pw);List<Admin> admin = GetMapper.mapper.selectAdmin(user, pw);if (!admin.isEmpty()) {req.getRequestDispatcher("LoginSuccess").forward(req, resp);} elsereq.getRequestDispatcher("LoginFailed").forward(req, resp);}
}

当login失败时跳转到这个界面,通过后端渲染数据,传给前端

@WebServlet("/LoginFailed")
public class LoginFailed extends HttpServlet {//收参数@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求的字符编码为UTF-8,以确保接收到的数据正确解码。//设置响应的内容类型为"text/html;charset=utf-8",告诉浏览器返回的内容是HTML格式,并使用UTF-8字符集。//获取响应的PrintWriter对象,用于向客户端发送数据。req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=utf-8");PrintWriter wr = resp.getWriter();wr.write("<!DOCTYPE html>");wr.write("<html>");wr.write("<head>");wr.write("<meta charset=\"utf-8\">");wr.write("<title>Login Failed</title>");wr.write("</head>");wr.write("<body>");wr.write("<h1 style='color:red; font-weight:bold'>Login Failed</h1>");wr.write("</body>");wr.write("</html>");}
}

 当login成功时跳转到这个界面。

@WebServlet("/LoginSuccess")
public class LoginSuccess extends HttpServlet {//收参数@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("\"登录成功!!\" = " + "登录成功!!");ArrayList<Student> students = GetMapper.mapper.selectAll();System.out.println("students = " + students);}
}

相关文章:

Day12--Servlet实现前后端交互(案例:学生信息管理系统登录页面)

&#xff08;在一个完整的项目架构中&#xff0c;servlet的角色和位置&#xff09; Servlet、GenericServlet和HttpServlet三者之间的关系是Java Web开发中的一个重要概念&#xff0c;它们共同构成了基于Java的服务器端程序的基础。以下是具体分析&#xff1a; 1. Servlet接口…...

Android 安装应用-准备阶段

安装应用的准备阶段是在PackageManagerService类中的preparePackageLI(InstallArgs args, PackageInstalledInfo res)&#xff0c;代码有些长&#xff0c;分段阅读。 分段一 分段一&#xff1a; GuardedBy("mInstallLock")private PrepareResult preparePackageLI(I…...

【JKI SMO】框架讲解(九)

本节内容将演示如何向SMO框架添加启动画面。 1.打开LabVIEW新建一个空白项目&#xff0c;并保存。 2.找到工具&#xff0c;打开SMO Editor。 3.新建一个SMO&#xff0c;选择SMO.UI.Splash。 4. 打开LabVIEW项目&#xff0c;可以看到项目里多了一个SystemSplash类。 打开Process…...

Linux通过Docker安装Microsoft Office+RDP远程控制

之前根据B站教程《在linux上安装微软office》&#xff1a;在linux上安装微软office_哔哩哔哩_bilibili 写过一篇使用KVM虚拟机安装Microsoft OfficeRDP远程控制的文章&#xff0c;根据B站的教程安装后&#xff0c;发现有远程控制延迟的问题&#xff0c;比如拖动Office窗口时会…...

利用Qt实现调用文字大模型的API,文心一言、通义千问、豆包、GPT、Gemini、Claude。

利用Qt实现调用文字大模型的API&#xff0c;文心一言、通义千问、豆包、GPT、Gemini、Claude。 下载地址: AI.xyz 1 Qt实现语言大模型API调用 视频——Qt实现语言大模型API调用 嘿&#xff0c;大家好&#xff01;分享一个最近做的小项目 “AI.xyz” 基于Qt实现调用各家大模型…...

借助医疗保健专用的 LLM提高诊断支持与准确性

概述 最近的研究表明&#xff0c;大规模语言模型在医疗人工智能应用中非常有效。它们在诊断和临床支持系统中的有效性尤为明显&#xff0c;在这些系统中&#xff0c;它们已被证明能为各种医疗询问提供高度准确的答案&#xff08;例如&#xff0c;医生在诊断过程中需要用到语言…...

微前端(qiankun)

微前端 特点&#xff1a;独立开发、独立部署&#xff0c;独立运行&#xff0c;增量升级 解决的问题&#xff1a;日常开发过程中&#xff0c;可能有很多老项目需要迭代&#xff0c;但是可能新的一些可能需要使用的依赖或者新的一些框架&#xff0c;老项目已经不满足&#xff0c;…...

速通c++(周二)

前言 Hello&#xff0c;大家好啊&#xff0c;我是文宇&#xff0c;不是文字&#xff0c;是文宇哦。 今天是速通c第二期。 运算符 c里的运算符种类有很多&#xff0c;因为这个教程是入门教程&#xff0c;所以只介绍其中我们会用到的几种。 算数运算 c中的算数运算有九个&a…...

拓扑未来物联网平台简介

拓扑未来物联网平台是基于Thingsboard二次开发的面向产业互联和智慧生活应用的物联网PaaS平台&#xff0c;支持适配各种网络环境和协议类型&#xff0c;可实现各种传感器和智能硬件的快速接入。有效降低物联网应用开发和部署成本&#xff0c;满足物联网领域设备连接、智能化改造…...

软件测试经理工作日常随记【7】-接口+UI自动化(多端集成测试)

软件测试经理工作日常随记【7】-UI自动化&#xff08;多端集成测试&#xff09; 自动化测试前篇在此 前言 今天开这篇的契机是&#xff0c;最近刚好是运维开发频繁更新证书的&#xff0c;每次更新都在0点&#xff0c;每次一更新都要走一次冒烟流程。为了不让我的美容觉被阉割…...

软考:软件设计师 — 9.数据流图

九. 数据流图 数据流图是下午场考试中第一个题目&#xff0c;分值 15 分。通常会考察实体名、存储名、加工名的补充&#xff0c;以及找到缺失的数据流并改正等。 1. 数据平衡原则 数据流的分析依赖于数据平衡原则。 父图与子图之间的平衡 父图与子图之间平衡是指任何一张 …...

收银系统源码-门店折扣活动应该怎么做

系统概况&#xff1a; 专门为零售行业的连锁店量身打造的收银系统&#xff0c;适用于常规超市、生鲜超市、水果店、便利店、零食专卖店、服装店、母婴用品、农贸市场等类型的门店使用。同时线上线下数据打通&#xff0c;线下收银的数据与小程序私域商城中的数据完全同步&#…...

Python数值计算(12)——线性插值

1. 概述 插值是根据已知的数据序列&#xff08;可以理解为你坐标中一系列离散的点&#xff09;&#xff0c;找到其中的规律&#xff0c;然后根据找到的这个规律&#xff0c;来对其中尚未有数据记录的点进行数值估计的方法。最简单直观的一种插值方式是线性插值&#xff0c;它是…...

TypeScript(switch判断)

1.switch 语法用法 switch是对某个表达式的值做出判断。然后决定程序执行哪一段代码 case语句中指定的每个值必须具有与表达式兼容的类型 语法switch(表达式){ case 值1&#xff1a; ​ 执行语句块1 break; case 值2&#xff1a; ​ 执行语句块3 break; dfault: //如…...

血细胞自动检测与分类系统:深度学习与UI界面的结合

一、项目概述 项目背景 在医学实验室中&#xff0c;血细胞的检测和分类是诊断和研究的重要环节。传统方法依赖于人工显微镜检查&#xff0c;费时且容易出现误差。通过深度学习技术&#xff0c;特别是目标检测模型YOLO&#xff0c;可以实现自动化、快速且准确的血细胞检测和分…...

鸿蒙Flex布局

效果&#xff1a; 代码&#xff1a; 换行代码参数设置&#xff1a; wrap:FlexWrap.Wrap Entry Component struct FlexCase {State message: string Hello World;build() {Flex({direction:FlexDirection.Row,justifyContent:FlexAlign.SpaceAround,alignItems:ItemAlign.Cen…...

开发自己的 Web 框架

开发自己的 Web 框架 开发Web服务器主体程序开发Web框架程序使用模板来展示响应内容开发框架的路由列表功能采用装饰器的方式添加路由电影列表页面的开发案例 接收web服务器的动态资源请求&#xff0c;给web服务器提供处理动态资源请求的服务。根据请求资源路径的后缀名进行判断…...

用于自动驾驶的基于立体视觉的语义 3D 对象和自我运动跟踪

Stereo Vision-based Semantic 3D Object and Ego-motion Tracking for Autonomous Driving 论文 摘要&#xff1a; 我们提出了一种基于立体视觉的方法&#xff0c;用于在动态自动驾驶场景中跟踪相机自我运动和 3D 语义对象。我们建议使用易于标记的 2D 检测和离散视点分类以及…...

Spring@Autowired注解

Autowired顾名思义&#xff0c;就是自动装配&#xff0c;其作用是为了消除代码Java代码里面的getter/setter与bean属性中的property。当然&#xff0c;getter看个人需求&#xff0c;如果私有属性需要对外提供的话&#xff0c;应当予以保留。 因此&#xff0c;引入Autowired注解…...

32.x86游戏实战-使用物品call

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...