当前位置: 首页 > 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);}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ZooKeeper日志自动清理实用脚本
  • AI可解释性(Python语言版)书籍推荐
  • 什么样的双筒式防爆器把煤矿吸引?
  • kalman的python实现
  • Elasticsearch模糊查询之Wildcard
  • Unity横板动作游戏 - 素材导入和整理
  • 月薪竟然高达60k,AI大模型凭什么?
  • 手摸手教你前端和后端是如何实现导出 Excel 的?
  • Python 爬虫项目实战(一):破解网易云 VIP 免费下载付费歌曲
  • uniapp h5支付(支付宝和微信支付)
  • [ Socket学习 ] 第一章:网络基础知识
  • 常用排序算法的实现与介绍
  • Pyinstaller打包OSError: could not get source code【终极解决】
  • [Meachines] [Easy] Admirer Adminer远程Mysql反向+Python三方库函数劫持权限提升
  • C++面试---小米
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • create-react-app做的留言板
  • echarts的各种常用效果展示
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • extjs4学习之配置
  • Java到底能干嘛?
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • js数组之filter
  • leetcode-27. Remove Element
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Octave 入门
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Vue.js源码(2):初探List Rendering
  • Web Storage相关
  • 编写符合Python风格的对象
  • 使用putty远程连接linux
  • 我这样减少了26.5M Java内存!
  • 以太坊客户端Geth命令参数详解
  • 自定义函数
  • Linux权限管理(week1_day5)--技术流ken
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • ### RabbitMQ五种工作模式:
  • #控制台大学课堂点名问题_课堂随机点名
  • (2020)Java后端开发----(面试题和笔试题)
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (简单) HDU 2612 Find a way,BFS。
  • (六)Flink 窗口计算
  • (实战篇)如何缓存数据
  • (转)jQuery 基础
  • (转)socket Aio demo
  • (转)母版页和相对路径
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】