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

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

前后端交互

在这里插入图片描述

Apache Tomat

在这里插入图片描述

B/S目前主流。

在这里插入图片描述

tomat包含2部分:

  1. apache
  2. 容器

在这里插入图片描述
在这里插入图片描述

再认识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部分&#xff1a; apache容器 再认识servlet 抽象出的开发模式 项目创建配置 maven javaeetomcat 忽略一些不用的文件 webapp文件夹 HiServlet 这里面出现了webinfo&#xff0c;这个别删因为这个呢&#xff0c;是这这个这…...

项目概述、开发环境搭建(day01)

软件开发整体介绍 软件开发流程 第1阶段: 需求分析 需求规格说明书&#xff0c; 一般来说就是使用 Word 文档来描述当前项目的各个组成部分&#xff0c;如&#xff1a;系统定义、应用环境、功能规格、性能需求等&#xff0c;都会在文档中描述。产品原型&#xff0c;一般是通过…...

车联网安全--TLS握手过程详解

目录 1. TLS协议概述 2. 为什么要握手 2.1 Hello 2.2 协商 2.3 同意 3.总共握了几次手&#xff1f; 1. TLS协议概述 车内各ECU间基于CAN的安全通讯--SecOC&#xff0c;想必现目前多数通信工程师们都已经搞的差不多了&#xff08;不要再问FvM了&#xff09;&#xff1b;…...

【python】OpenCV—Extract Horizontal and Vertical Lines—Morphology

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、参考 更多有趣的代码示例&#xff0c;可参考【Programming】 1、功能描述 基于 opencv-python 库&#xff0c;利用形态学的腐蚀和膨胀&#xff0c;提取图片中的水平或者竖直线条 2、代码实现 导入基本的库函数 im…...

Redis十大数据类型详解

Redis&#xff08;一&#xff09; 十大数据类型 redis字符串&#xff08;String&#xff09; string是redis最基本的类型&#xff0c;一个key对应一个value string类型是二进制安全的&#xff0c;意思是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调试&#xff0c;从keil到arm-none-eabi-gcc,从"Hello wrold"到通信协议&#xff0c;一路起来已学会很多&#xff0c;是时候写一下bootloader了。 基本原理 单片机代码编译完后可以生成".hex"和".bin"文件&…...

数据结构与算法之栈: LeetCode 151. 反转字符串中的单词 (Ts版)

反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string/ 描述 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序单词 是由非空格字符组成的字符串。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 设置&#xff0c;可以按下图所示寻找位置&#xff0c;也可以直接输入 auto import 快速定位到配置。 Add unambiguous imports on the fly&#xff1a;自动帮我们优化导入的包Optimize imports on the fly&#xff1a;自动去掉一些没有用到的包 禁止导…...

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中模型的支持程…...

低代码从“产品驱动”向“场景驱动”转型,助力数字化平台构建

一、前言 在数字化时代的大潮中&#xff0c;从宏观层面来看&#xff0c;新技术的落地速度不断加快&#xff0c;各行各业的数字化进程呈现出如火如荼的态势。而从微观层面剖析&#xff0c;企业面临着行业格局快速变化、市场竞争日益激烈以及成本压力显著增强等诸多挑战。 据专…...

相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…...

用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 校验和。具体来说&#xff0c;命令的各个部分含义如下&#xff1a; …...

深入解析 ZooKeeper:分布式协调服务的原理与应用

1.说说 Zookeeper 是什么&#xff1f; ZooKeeper 是一个开源的分布式协调服务&#xff0c;由 Apache Software Foundation 开发维护。它为构建分布式应用程序提供了一套简单且高效的协调接口。ZooKeeper 的设计目的是为了简化分布式系统中常见的任务&#xff0c;例如命名、配置…...

【Rust自学】11.10. 集成测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.10.1. 什么是集成测试 在Rust里&#xff0c;集成测试完全位于被测试库的外部。集成测试调用库的方式和其他代码一样&#xff0c;这也…...

对当前日期进行按年、按月、按日的取值

对当前日期进行按年、按月、按日的取值。 其规则为&#xff1a; 按年 为当前日期到来年同一日期的前一天&#xff08;2024-12-01到2025-11-30&#xff09;。 按月 为当前日期到下个月的同一日期的前一天 &#xff08;2024-12-01 到 2024-12-31&#xff09;。 按日 为当前日…...

【Rust自学】12.2. 读取文件

12.2.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读…...

C++内存泄露排查

内存泄漏是指程序动态分配的内存未能及时释放&#xff0c;导致系统内存逐渐耗尽&#xff0c;最终可能造成程序崩溃或性能下降。在C中&#xff0c;内存泄漏通常发生在使用new或malloc等分配内存的操作时&#xff0c;但没有正确地使用delete或free来释放这块内存。 在日常开发过程…...

Http 响应状态码 前后端联调

http 响应状态码 &#xff1a;是服务器在处理HTTP请求时返回的状态信息&#xff0c;用于表示请求的处理结果 1xx : 信息性状态码 100 Continue: 服务器已收到请求头部&#xff0c;客户端应继续发送请求体。 101 Switching Protocols : 切换协议。服务器已理解客户端的请求&a…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...