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

JavaEE学习笔记 2024-1-18 --模块化Controller层、AJAX与JSON

« 上一篇

个人整理非商业用途,欢迎探讨与指正!!


文章目录

    • 11.模块化Controller层
    • 12.AJAX
      • 12.1使用场景
    • 13.JSON
      • 13.1如何使用后端发送JSON数据


11.模块化Controller层

将对应模块的Servlet写入到一个指定的模块中,模块化编程

使用switch方式

package com.qf.servlet;import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;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 sun.rmi.transport.proxy.HttpReceiveSocket;/*** Servlet implementation class EmpServlet*/
@WebServlet("/emp/*")
public class EmpServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public EmpServlet() {super();// TODO Auto-generated constructor stub}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		请求的urlString requestURL = request.getRequestURL().toString();System.out.println(requestURL);String[] split = requestURL.split("/");
//		System.out.println(Arrays.toString(split));
//		获取到需要执行得Servlet方法String method = split[split.length-1];switch (method) {case "insert":insert(request,response);break;case "delete":delete(request,response);break;default:return;}}public void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("我是删除方法");}public void insert(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("我是添加方法");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}
}

使用反射

@WebServlet("/dept/*")
public class DeptServlet extends HttpServlet {private static final long serialVersionUID = 1L;public DeptServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String requestURL = request.getRequestURL().toString();String[] split = requestURL.split("/");String method = split[split.length-1];//		当前类对象Class<? extends DeptServlet> clazz = this.getClass();
//		获取当前对象的方法try {
//			获取需要执行的方法Method declaredMethod = clazz.getDeclaredMethod(method, HttpServletRequest.class,HttpServletResponse.class);
//			启动暴力反射declaredMethod.setAccessible(true);
//			方法的反向执行declaredMethod.invoke(this, request, response);} catch (Exception e) {System.out.println("没有对应的方法");}}public void insert(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException  {System.out.println("添加方法");}private void delete(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException  {System.out.println("删除方法");}private void update(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException  {System.out.println("修改方法");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}
}

12.AJAX

异步的JS与XML技术,可以实现JS和服务器之间的异步交互
异步交互:在不刷新网页的前提下,局部代码与服务器进行交互
AJAX不是新技术,也不是编程语言,就是一个使用JS和后端进行交互的技术

AJAX的优点:用户体验非常好;缺点:开发改错困难,不可回退

12.1使用场景

场景1:AJAX验证用户名是否重复

package com.qf.servlet;import java.io.IOException;
import java.util.ArrayList;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class CheckNameServlet*/
@WebServlet("/check")
public class CheckNameServlet extends HttpServlet {private static final long serialVersionUID = 1L;public CheckNameServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");
//		模拟从数据库中获取数据ArrayList<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");list.add("tom");list.add("jack");list.add("rose");//		何如判断name在list中boolean contains = list.contains(name);
//		false是可用 true是不可用
//		System.out.println(contains);
//		0不可用 1可用response.getWriter().print(contains?0:1);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}
}
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><input type="text" id="username"><span id="msg"></span><script>window.onload = function(){let username = document.querySelector("#username");let msg = document.querySelector("#msg");username.onblur = function(){// 发送ajax请求// 1.创建AJAX对象let xhr = new XMLHttpRequest();// 2.封装AJAX的请求数据(形式为:xxxxServlet?xxxx=xxxx&xxx=xxx)xhr.open("GET","check?name="+username.value);// 3.发送请求xhr.send();// 4.AJAX的请求状态判断// readyState// 0:ajax创建但未初始化// 1:ajax创建完成但未发送请求// 2:ajax发送请求到服务器端// 3:ajax请求正在被处理// 4:ajax请求处理完成,可以使用ajax获取服务器响应的数据xhr.onreadystatechange = function(){if(xhr.status == 200 && xhr.readyState == 4){// 5.获取响应的数据let result = xhr.responseText;if(result == 0){msg.innerHTML = '用户名已存在';msg.style.color = 'red';}else{msg.innerHTML = '√';msg.style.color = 'green';}}}}}</script></body>
</html>

13.JSON

配合AJAX进行分离式开发中,数据的交互形式之一
JSON可以实现不同系统,不同语言之间的数据交互
JSON是一种数据格式,类似于JS中的{}对象

语法:
  {
   “key”:“value”,
   “key”:“value”,
   …
  }

数据体量小,可以做为数据传入的载体

13.1如何使用后端发送JSON数据

使用第三方工具(jar、依赖)
Gson
 谷歌发布
Jackson
 Springn内置的
FastJson
 阿里发布的

package com.qf.test;import java.util.ArrayList;
import java.util.HashMap;import org.junit.Test;import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;public class TestJSON {@Testpublic void test01() {System.out.println("helloworld");}@Testpublic void test02() {Gson gson = new Gson();String json = gson.toJson("helloworld");System.out.println(json);}@Testpublic void test03() {Gson gson = new Gson();String json = gson.toJson(new Dog(1,"李四"));System.out.println(json);}@Testpublic void test04() {ArrayList<Dog> dogs = new ArrayList<>();dogs.add(new Dog(1,"1"));dogs.add(new Dog(2,"2"));dogs.add(new Dog(3,"3"));dogs.add(new Dog(4,"4"));String json = new Gson().toJson(dogs);System.out.println(json);}@Testpublic void test05() {ArrayList<Dog> dogs = new ArrayList<>();dogs.add(new Dog(1,"1"));dogs.add(new Dog(2,"2"));dogs.add(new Dog(3,"3"));dogs.add(new Dog(4,"4"));int currPage = 10;HashMap<String,Object> map = new HashMap<>();map.put("dogs", dogs);map.put("page", currPage);String json = new Gson().toJson(map);System.out.println(json);}@Testpublic void test06() throws Exception {Dog dog = new Dog(1,"1");ObjectMapper objectMapper = new ObjectMapper();String json = objectMapper.writeValueAsString(dog);System.out.println(json);}
}

相关文章:

JavaEE学习笔记 2024-1-18 --模块化Controller层、AJAX与JSON

上一篇 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 文章目录 11.模块化Controller层12.AJAX12.1使用场景 13.JSON13.1如何使用后端发送JSON数据 11.模块化Controller层 将对应模块的Servlet写入到一个指定的模块中,模块化编程 使用switch方式 p…...

rpc跨平台通信的简单案例,java和go

当我们使用Go和Java进行RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;跨平台通信时&#xff0c;你可以使用gRPC作为通信框架。gRPC是一个高性能、开源的RPC框架&#xff0c;它支持多种编程语言&#xff0c;包括Go和Java。下面我将为你提供一个简单…...

Java设计模式之观察者模式详解

Java设计模式之观察者模式详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将一同深入探讨Java设计模式之观察者模式&#xff0c;这是一种代…...

分布式锁实现(mysql,以及redis)以及分布式的概念

道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物 我旁边的一位老哥跟我说&#xff0c;你知道分布式是是用来干什么的嘛&#xff1f;一句话给我干懵了&#xff0c;我能隐含知道&#xff0c;大概是用来做分压处理的&#xff0c;并增加系统稳定性的。但是具体如…...

实现分布式锁:Zookeeper vs Redis

目录 引言 1. Zookeeper分布式锁 1.1特点和优势&#xff1a; 强一致性 顺序节点 Watch机制 1.2 Zookeeper分布式锁代码示例 2. Redis分布式锁 2.1特点和优势&#xff1a; 简单高效 可续租性 灵活性 2.2Redis分布式锁代码示例 3.对比和选择 3.1 一致性要求 3.2…...

电脑录屏必备技能,让分享变得更加简单!

随着网络技术的飞速发展&#xff0c;电脑录屏已经成为日常工作和学习中不可或缺的一部分。无论是录制在线课程、游戏解说、软件教程&#xff0c;还是远程会议、演示文稿等&#xff0c;电脑录屏都有着广泛的应用。接下来&#xff0c;本文将介绍三种常见的电脑录屏方法&#xff0…...

重构改善既有代码的设计-学习(一):封装

1、封装记录&#xff08;Encapsulate Record&#xff09; 一些记录性结构&#xff08;例如hash、map、hashmap、dictionary等&#xff09;&#xff0c;一条记录上持有什么字段往往不够直观。如果其使用范围比较宽&#xff0c;这个问题往往会造成许多困扰。所以&#xff0c;记录…...

Python图像处理【19】基于霍夫变换的目标检测

基于霍夫变换的目标检测 0. 前言1. 使用圆形霍夫变换统计图像中圆形对象2. 使用渐进概率霍夫变换检测直线2.1 渐进霍夫变换原理2.2 直线检测 3. 使用广义霍夫变换检测任意形状的对象3.1 广义霍夫变换原理3.2 检测自定义形状 小结系列链接 0. 前言 霍夫变换 (Hough Transform,…...

Spring+SprinMVC+MyBatis注解方式简易模板

SpringSprinMVCMyBatis注解方式简易模板代码Demo GitHub访问 ssm-tpl-anno 一、数据准备 创建数据库test&#xff0c;执行下方SQL创建表ssm-tpl-cfg /*Navicat Premium Data TransferSource Server : 127.0.0.1Source Server Type : MySQLSource Server Version :…...

Python基础第五篇(Python数据容器)

文章目录 一、数据容器入门二、数据容器 list 列表(1),list 列表定义(2),list列表的索引(3),list列表的常见操作(4),list列表的遍历 三、数据容器&#xff1a;tuple&#xff08;元组&#xff09;(1),tuple元组定义(2),tuple元组的索引(3),tuple元组的常见操作(4),tuple元组的遍…...

【H3C】配置AAA认证和Telnet远程登陆,S5130 Series交换机

AAA配置步骤为&#xff1a; 1.开启telent远程登陆服务 2.创建用户&#xff0c;设置用户名、密码、用户的服务类型 3.配置终端登录的数量 4.配置vlan-if的ip地址&#xff0c;用来远程登陆 5.允许对应的vlan通过 1.开启telent远程登陆服务 sys …...

GaussDB数据库中的MERGE INTO介绍

一、前言 二、GaussDB MERGE INTO 语句的原理概述 1、MERGE INTO 语句原理 2、MERGE INTO 的语法 3、语法解释 三、GaussDB MERGE INTO 语句的应用场景 四、GaussDB MERGE INTO 语句的示例 1、示例场景举例 2、示例实现过程 1&#xff09;创建两个实验表&#xff0c;并…...

2024年上海高考数学最后四个多月的备考攻略,目标140+

亲爱的同学们&#xff0c;寒假已经来临&#xff0c;春节即将到来&#xff0c;距离2024年上海高考已经余额不足5个月了。作为让许多学子头疼&#xff0c;也是拉分大户的数学科目&#xff0c;你准备好了吗&#xff1f;今天&#xff0c;六分成长为您分享上海高考数学最后四个多月的…...

SSL证书自动化管理有什么好处?如何实现SSL证书自动化?

SSL证书是用于加密网站与用户之间传输数据的关键元素&#xff0c;在维护网络安全方面&#xff0c;管理SSL证书与部署SSL证书一样重要。定期更新、监测和更换SSL证书&#xff0c;可以确保网站的安全性和合规性。而自动化管理可以为此节省时间&#xff0c;并避免人为错误和不必要…...

路由器初始化配置、功能配置

实验环境 拓扑图 Ip规划表&#xff08;各组使用自己的IP规划表&#xff09; 部门 主机数量 网络地址 子网掩码 网关 可用ip Vlan 市场部 38 192.168.131.0 255.255.255.0 192.168.131.1 2-254 11 研发部 53 192.168.132.0 255.255.255.0 192.168.132.1 2-2…...

node介绍

1.node是什么 Node是一个基于Chrome V8引擎的JS运行环境。 Node不是一个独立的语言、node不是JS框架。 Node是一个除了浏览器之外的、可以让JS运行的环境 Node.js是一个让JS运行在服务端的开发平台&#xff0c;是使用事件驱动&#xff0c;异步非阻塞I/O&#xff0c;单线程&…...

海外抖音TikTok、正在内测 AI 生成歌曲功能,依靠大语言模型 Bloom 进行文本生成歌曲

近日&#xff0c;据外媒The Verge报道&#xff0c;TikTok正在测试一项新功能&#xff0c;利用大语言模型Bloom的AI能力&#xff0c;允许用户上传歌词文本&#xff0c;并使用AI为其添加声音。这一创新旨在为用户提供更多创作音乐的工具和选项。 Bloom 是由AI初创公司Hugging Fac…...

【ARM 嵌入式 编译系列 3.6 -- 删除lib中的某个文件】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 删除lib中的某个文件 删除lib中的某个文件 比如&#xff0c;如果要删除 libc.a 静态库中的特定对象文件并重新使用这个静态库&#xff0c;在终端中可以使用 ar 命令。ar 是一个归档工具&#xff0c;它可以创建…...

web架构师编辑器内容-图层拖动排序功能的开发

新的学习方法 用手写简单方法实现一个功能然后用比较成熟的第三方解决方案即能学习原理又能学习第三方库的使用 从两个DEMO开始 Vue Draggable Next: Vue Draggable NextReact Sortable HOC: React Sortable HOC 列表排序的三个阶段 拖动开始&#xff08;dragstart&#x…...

3.RHCSA脚本配置及通过node2改密码

运行脚本发现node2不成功 脚本破解 选第二个 Ctrl x 换行 破解成功后做node2的改密码题 回到redhat, 发现检测程序检测密码题成功,得了8分....

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...