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

devtools/2024/9/23 11:16:08/

 

                                      (在一个完整的项目架构中,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);}
}


http://www.ppmy.cn/devtools/88833.html

相关文章

多语言海外AEON抢单可连单加额外单源码,java版多语言抢单系统

多语言海外AEON抢单可连单加额外单源码&#xff0c;java版多语言抢单系统。此套是全新开发的java版多语言抢单系统。 后端java&#xff0c;用的若依框架&#xff0c;这套代码前后端是编译后的&#xff0c;测试可以正常使用&#xff0c;语言繁体&#xff0c;英文&#xff0c;日…

Laravel php框架与Yii php 框架的优缺点

Laravel和Yii都是流行的PHP框架&#xff0c;它们各自具有独特的优点和缺点。以下是对这两个框架优缺点的详细分析&#xff1a; Laravel PHP框架的优缺点 优点 1、设计思想先进&#xff1a;Laravel的设计思想非常先进&#xff0c;非常适合应用各种开发模式&#xff0c;如TDD&…

【Java】Java学生成绩管理系统(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

构造函数或者析构函数中调用虚函数会怎样

构造函数或者析构函数中调用虚函数会怎样 析构函数中调用虚函数总结 在C中&#xff0c;构造函数和析构函数中调用虚函数会导致一些行为与预期不符。具体来说&#xff1a; 构造函数中调用虚函数 当在构造函数中调用虚函数时&#xff0c;调用的是当前类的版本&#xff0c;而不是…

【算法设计题】实现以字符串形式输入的简单表达式求值,第2题(C/C++)

目录 第2题 实现以字符串形式输入的简单表达式求值 得分点&#xff08;必背&#xff09; 题解 1. 初始化和变量定义 2. 获取第一个数字并存入队列 3. 遍历表达式字符串&#xff0c;处理运算符和数字 4. 初始化 count 并处理加减法运算 代码详解 &#x1f308; 嗨&#xf…

hive自动安装脚本

使用该脚本注意事项 安装hive之前确定机子有网络。或者yum 更改为本地源&#xff0c;因为会使用epel仓库下载一个pv的软件使用该脚本前提是自行安装好mysql数据库准备好tomcat软件包&#xff0c;该脚本使用tomcat9.x版本测试过能正常执行安装成功&#xff0c;其他版本没有测试…

新书推荐:《码农职场:IT 人求职就业手册》——照亮你的职业道路

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Skywalking9部署的问题

1. skywalking9需要使用es8。不支持es7&#xff0c;这里要注意&#xff0c;需要修改es版本。 2. es8部署的时候&#xff0c;默认是配置了安全选项的&#xff0c;需要把安全配置关掉&#xff0c;或者修改skywalking的配置文件&#xff0c;设置相关配置。 这里偷懒&#xff0c;…