【搭建JavaEE】(3)前后端交互,请求响应机制,JDBC数据库连接
前后端交互

Apache Tomat

B/S目前主流。

tomat包含2部分:
- apache
- 容器


再认识servlet

抽象出的开发模式

项目创建配置
maven +javaee+tomcat
忽略一些不用的文件



webapp文件夹

HiServlet


这里面出现了webinfo,这个别删因为这个呢,是这这个这个文件特别重要。


Url–>uri(抽象)
虚拟地址——web.xml



TOmat启动前




注解版–SuperHiSevlet

*请求-响应
MyRequestServlet

HttpServletRequest

获取前端数据
request.getParameter("前端参数")
- form表单中name属性
<input name='username' value='abc'>
- a标签
<a href='localhost:8099/deep?name=abc&pass=123'

获取多个数据
获取请求方法
获取头
HttpServletRequest.class


package com.ffyc.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;@WebServlet(value = "/req")
public class MyRequestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {String name = request.getParameter("name");String username = request.getParameter("username");System.out.println(name + ":" + username);System.out.println("------------------------------------------");String methodName = request.getMethod();System.out.println("method名称:" + methodName);String[] hobbies = request.getParameterValues("hobby");//多个数据System.out.println("爱好:" + Arrays.toString(hobbies));Enumeration<String> headerNames = request.getHeaderNames();System.out.println("----请求头----------------------");while(headerNames.hasMoreElements()){System.out.println(headerNames.nextElement());}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>测试请求</title>
</head>
<body><a href="http://localhost:8099/deep/req?name=abc">测试请求</a><hr/><form action="http://localhost:8099/deep/req" method="post"><input type="text" name="username" placeholder="请输入用户名"><input type="checkbox" name="hobby" value="basket-ball">basket-ball<input type="checkbox" name="hobby" value="TV">TV<input type="checkbox" name="hobby" value="GAME">GAME<input type="submit" value="提交">
请求乱码问题
request.setCharacterEncoding("utf-8");
过滤器–切面

过滤器–不同的功能块

配置 .xml
插在servlet之前响应




后台响应
乱码问题(HttpServletResponse)
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
filterChain.doFilter(servletRequest, servletResponse);

登录页面


过滤器

import javax.servlet.*;
import java.io.IOException;public class CodingFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");servletResponse.setContentType("text/html;charset=utf-8");filterChain.doFilter(servletRequest, servletResponse);}
}

映射–index.html(LoginServlet.java)



《没有Web包》

代码

LoginServlet.java
package com.ffyc.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet(value = "/login.do")
public class LoginServlet extends HttpServlet {final String USERNAME = "admin";final String PASSWORD = "123";@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");if (USERNAME.equals(username) && PASSWORD.equals(password)) {//successresp.sendRedirect("login-success.html");} else {//loginresp.sendRedirect("index.html");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录页面</title>
</head>
<body><form action="http://localhost:8099/login.do" method="post"><fieldset><legend>用户登录</legend><div><input type="text" name="username" placeholder="用户名"></div><div><input type="password" name="password" placeholder="密码"></div><div><input type="submit" value="登录"><input type="reset" value="取消"></div></fieldset>
</form></body>
</html>
login-success.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录成功页面</title>
</head>
<body><img src="https://img95.699pic.com/photo/40236/5997.jpg_wh300.jpg"/><h1>登录成功</h1></body>
</html>
CodingFilter.java
package com.ffyc.filter;import javax.servlet.*;
import java.io.IOException;public class CodingFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");servletResponse.setContentType("text/html;charset=utf-8");filterChain.doFilter(servletRequest, servletResponse);}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><filter><filter-name>charset</filter-name><filter-class>com.ffyc.filter.CodingFilter</filter-class></filter><filter-mapping><filter-name>charset</filter-name><url-pattern>*.do</url-pattern></filter-mapping>
</web-app>
JDBC

引入JDBC
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>

创建表

创建用户类
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency>

@Data
public class User {private Integer id;private String username;private String password;private String name;
}

1
private final String USERNAME="root";private final String PASSWORD = "123456";private final String URL ="jdbc:mysql://localhost:3306/kingdom_db?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
2
try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);} catch (Exception e) {throw new RuntimeException(e);}
3

4

5

UserDaolmpl.java
package com.ffyc.dao.impl;import com.ffyc.dao.IUserDao;
import com.ffyc.entity.User;import java.sql.*;/*** 与数据库交互*/
public class UserDaoImpl implements IUserDao {private final String USERNAME = "root";private final String PASSWORD = "123456";private final String URL ="jdbc:mysql://localhost:3306/stu_db?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";private Connection conn;private PreparedStatement pst;private ResultSet rs;public UserDaoImpl() {try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic User findUsernameAndPassword(String username, String password) {try {String sql = "Select * FROM user_tab WHERE user_username=? AND user_password=?";pst = conn.prepareStatement(sql);pst.setString(1,username);pst.setString(2, password);rs = pst.executeQuery();if(!rs.next()){return null;}else{Integer id = rs.getInt("user_id");String u = rs.getString("user_username");String p = rs.getString("user_password");String name = rs.getString("user_name");User user = new User();user.setId(id);user.setUsername(u);user.setPassword(p);user.setName(name);return user;}} catch (Exception e) {throw new RuntimeException(e);}}
}相关文章:
【搭建JavaEE】(3)前后端交互,请求响应机制,JDBC数据库连接
前后端交互 Apache Tomat B/S目前主流。 tomat包含2部分: apache容器 再认识servlet 抽象出的开发模式 项目创建配置 maven javaeetomcat 忽略一些不用的文件 webapp文件夹 HiServlet 这里面出现了webinfo,这个别删因为这个呢,是这这个这…...
项目概述、开发环境搭建(day01)
软件开发整体介绍 软件开发流程 第1阶段: 需求分析 需求规格说明书, 一般来说就是使用 Word 文档来描述当前项目的各个组成部分,如:系统定义、应用环境、功能规格、性能需求等,都会在文档中描述。产品原型,一般是通过…...
车联网安全--TLS握手过程详解
目录 1. TLS协议概述 2. 为什么要握手 2.1 Hello 2.2 协商 2.3 同意 3.总共握了几次手? 1. TLS协议概述 车内各ECU间基于CAN的安全通讯--SecOC,想必现目前多数通信工程师们都已经搞的差不多了(不要再问FvM了);…...
【python】OpenCV—Extract Horizontal and Vertical Lines—Morphology
文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、参考 更多有趣的代码示例,可参考【Programming】 1、功能描述 基于 opencv-python 库,利用形态学的腐蚀和膨胀,提取图片中的水平或者竖直线条 2、代码实现 导入基本的库函数 im…...
Redis十大数据类型详解
Redis(一) 十大数据类型 redis字符串(String) string是redis最基本的类型,一个key对应一个value string类型是二进制安全的,意思是redis的string可以包含任何数据。例如说是jpg图片或者序列化对象 一个re…...
Open FPV VTX开源之betaflight配置
Open FPV VTX开源之betaflight配置 1. 源由2. 配置3. 总结4. 参考资料5. 补充 - 飞控固件版本 1. 源由 飞控嵌入式OSD - ardupilot配置使用betaflight配套OSD图片。 Choose correct font depending on Flight Controller SW. ──> /usr/share/fonts/├──> font_btfl…...
AT32 bootloader程序与上位机程序
从8051到stm32, 从串口下载到JLINK调试,从keil到arm-none-eabi-gcc,从"Hello wrold"到通信协议,一路起来已学会很多,是时候写一下bootloader了。 基本原理 单片机代码编译完后可以生成".hex"和".bin"文件&…...
数据结构与算法之栈: LeetCode 151. 反转字符串中的单词 (Ts版)
反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string/ 描述 给你一个字符串 s ,请你反转字符串中 单词 的顺序单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开 返回 单词 顺序颠倒且 单词 之间用单个空…...
使用 configparser 读取 INI 配置文件
使用 configparser 读取 INI 配置文件 适合于读取 .ini 格式的配置文件。 配置文件示例 (config.ini): [DEFAULT] host localhost port 3306 [database] user admin password secret import configparser# 创建配置解析器 config configparser.ConfigParser()# 读取配…...
idea 自动导包,并且禁止自动导 *(java.io.*)
自动导包配置 进入 idea 设置,可以按下图所示寻找位置,也可以直接输入 auto import 快速定位到配置。 Add unambiguous imports on the fly:自动帮我们优化导入的包Optimize imports on the fly:自动去掉一些没有用到的包 禁止导…...
RK3588-NPU pytorch-image-models 模型编译测试
RK3588-NPU pytorch-image-models 模型编译测试 一.背景二.操作步骤1.下载依赖2.创建容器3.安装依赖4.创建脚本A.生成模型名列表B.生成ONNX模型C.生成RKNN模型D.批量测试脚本 一.背景 测试RK3588-NPU对https://github.com/huggingface/pytorch-image-models.git中模型的支持程…...
低代码从“产品驱动”向“场景驱动”转型,助力数字化平台构建
一、前言 在数字化时代的大潮中,从宏观层面来看,新技术的落地速度不断加快,各行各业的数字化进程呈现出如火如荼的态势。而从微观层面剖析,企业面临着行业格局快速变化、市场竞争日益激烈以及成本压力显著增强等诸多挑战。 据专…...
相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型
在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化,两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的:乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于(…...
用gpg和sha256验证ubuntu.iso
链接 https://ubuntu.com/tutorials/how-to-verify-ubuntuhttps://releases.ubuntu.com/jammy/ 本文是2的简明版 sha256sum介绍 sha256sum -c SHA256SUMS 2>&1这段脚本的作用是验证文件的 SHA-256 校验和。具体来说,命令的各个部分含义如下: …...
深入解析 ZooKeeper:分布式协调服务的原理与应用
1.说说 Zookeeper 是什么? ZooKeeper 是一个开源的分布式协调服务,由 Apache Software Foundation 开发维护。它为构建分布式应用程序提供了一套简单且高效的协调接口。ZooKeeper 的设计目的是为了简化分布式系统中常见的任务,例如命名、配置…...
【Rust自学】11.10. 集成测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.10.1. 什么是集成测试 在Rust里,集成测试完全位于被测试库的外部。集成测试调用库的方式和其他代码一样,这也…...
对当前日期进行按年、按月、按日的取值
对当前日期进行按年、按月、按日的取值。 其规则为: 按年 为当前日期到来年同一日期的前一天(2024-12-01到2025-11-30)。 按月 为当前日期到下个月的同一日期的前一天 (2024-12-01 到 2024-12-31)。 按日 为当前日…...
【Rust自学】12.2. 读取文件
12.2.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步: 接收命令行参数读…...
C++内存泄露排查
内存泄漏是指程序动态分配的内存未能及时释放,导致系统内存逐渐耗尽,最终可能造成程序崩溃或性能下降。在C中,内存泄漏通常发生在使用new或malloc等分配内存的操作时,但没有正确地使用delete或free来释放这块内存。 在日常开发过程…...
Http 响应状态码 前后端联调
http 响应状态码 :是服务器在处理HTTP请求时返回的状态信息,用于表示请求的处理结果 1xx : 信息性状态码 100 Continue: 服务器已收到请求头部,客户端应继续发送请求体。 101 Switching Protocols : 切换协议。服务器已理解客户端的请求&a…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...






