javaweb零碎知识3

// 假设您已经导入了 axios
import axios from 'axios';// 获取表单元素
const form = document.getElementById('myForm');// 为表单添加 submit 事件监听器
form.addEventListener('submit', function(e) {// 阻止表单的默认提交行为e.preventDefault();// 创建 FormData 对象并从表单中获取数据const formData = new FormData(form);// 使用 axios 发送 POST 请求axios.post('http://localhost:8080/untitled2_war_exploded/ser01', formData).then(response => {// 请求成功时执行的代码console.log('表单提交成功:', response.data);// 这里可以添加代码处理服务器的响应,例如显示一个成功消息或跳转到另一个页面alert('注册成功!');}).catch(error => {// 请求失败时执行的代码console.error('表单提交失败:', error);// 这里可以添加代码处理错误,例如显示一个错误消息alert('注册失败: ' + error.message);});
});

当我使用表单默认提交方式才能使用axios.post的提交方式,当我们提交表单的按钮设置submit时就代表使用表单的按钮进行提交

如果我们给提交表的时候是使用自己蛇者的按钮(并且绑定监听事件的时候就不能使用这种形式,只能采用)

下面这种形式

 axios({url:"http://localhost:8080/untitled2_war_exploded/ser01",method:"post",params:{username,email,password}}).then(response => {// 请求成功时执行的代码console.log('表单提交成功:', response.data);}).catch(error => {// 请求失败时执行的代码console.error('表单提交失败:', error);});

设置编码格式

 请求的设置格式

 req.setCharacterEncoding("UTF-8");

回应的设置格式

 resp.setContentType("text/html; charset=UTF-8");

package com.xxx.controller;import com.xxx.controller.Param;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;/*** @author 关岁安*/
public abstract class BaseServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String methodName = request.getParameter("method");if (methodName == null || methodName.isEmpty()) {//返回404错误response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Method parameter is missing or empty");return;}try {System.out.println("方法名字:" + methodName);Method method = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);System.out.println("看看这里被执行到这里没?");Parameter[] parameters = method.getParameters();Object[] args = new Object[parameters.length];for (int i = 0; i < parameters.length; i++) {if (parameters[i].isAnnotationPresent(Param.class)) {Param param = parameters[i].getAnnotation(Param.class);String value = request.getParameter(param.value());args[i] = value;} else if (parameters[i].getType() == HttpServletRequest.class) {args[i] = request;} else if (parameters[i].getType() == HttpServletResponse.class) {args[i] = response;}}method.setAccessible(true);method.invoke(this, args);} catch (NoSuchMethodException e) {//e.printStackTrace();//返回500错误//response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error");System.out.println("拼写错误、方法参数类型不匹配");}catch (InvocationTargetException | IllegalAccessException e){e.printStackTrace();System.out.println("没有足够的权限,包装异常");}}public abstract void register(@Param("username") String username, HttpServletRequest req, HttpServletResponse resp);}
package com.xxx.controller;import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @author 关岁安**/@WebServlet("/Register")
public  class RegisterController extends BaseServlet {@Overridepublic void register(@Param("username") String username, HttpServletRequest req, HttpServletResponse resp) {System.out.println("检测一下这个注册方法是否已经被执行");// 注册逻辑System.out.println("注册用户名: " + username  + "看看是否已经获取到请求");}
}

这里还有一个动态查询

重新实现了servlet那边的方法,按照发送的方式进行封装,如果是post方式就按照post来处理逻辑
如果是get请求就按照get方法来进行处理业务逻辑


这个相较于以前可以传送对象,和param数据,可接受的数据类型变得比以前更多

package com.xxx.controller;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xxx.annotation.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;/*** @author 关岁安*/
public abstract class BaseServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getQueryString();request.setCharacterEncoding("UTF-8");String uri = request.getRequestURI();System.out.println(uri);String methodName = new StringBuffer(uri.substring(uri.lastIndexOf("/") + 1)).toString();Method method = null;Method[] methods = this.getClass().getDeclaredMethods();for (Method method1 : methods) {if("POST".equals(request.getMethod())){if(method1.getAnnotation(POST.class).value().equals(methodName)){method = method1;Parameter[] parameters = method.getParameters();Object[] args = new Object[parameters.length];for (int i = 0; i < parameters.length; i++) {Annotation[] annotations = parameters[i].getAnnotations();for (Annotation annotation : annotations) {if(annotation instanceof Param){String name = ((Param) annotation).value();args[i] = request.getParameter(name);}else if(annotation instanceof Body){ObjectMapper objectMapper = new ObjectMapper();JsonNode jsonNode = objectMapper.readTree(request.getReader());Object object = objectMapper.treeToValue(jsonNode, parameters[i].getType());args[i] = object;}else {if(parameters[i].getType() == HttpServletRequest.class){args[i] = request;}else if(parameters[i].getType() == HttpServletResponse.class){args[i] = response;}}}}try {method.invoke(this,args);} catch (IllegalAccessException e) {throw new RuntimeException(e);} catch (InvocationTargetException e) {throw new RuntimeException(e);}}}else if("GET".equals(request.getMethod())){if(method1.getAnnotation(GET.class).value().equals(methodName)){method = method1;Parameter[] parameters = method.getParameters();Object[] args = new Object[parameters.length];for (int i = 0; i < parameters.length; i++) {Annotation[] annotations = parameters[i].getAnnotations();for (Annotation annotation : annotations) {if(annotation instanceof Param){String name = ((Param) annotation).value();args[i] = request.getParameter(name);}else if(annotation instanceof Body){ObjectMapper objectMapper = new ObjectMapper();JsonNode jsonNode = objectMapper.readTree(request.getReader());Object object = objectMapper.treeToValue(jsonNode, parameters[i].getType());args[i] = object;}else {if(parameters[i].getType() == HttpServletRequest.class){args[i] = request;}else if(parameters[i].getType() == HttpServletResponse.class){args[i] = response;}}}}try {method.invoke(this,args);} catch (IllegalAccessException e) {throw new RuntimeException(e);} catch (InvocationTargetException e) {throw new RuntimeException(e);}}}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

福建 | 南安帝兴混凝土电子签收的困难和突破

01 发展从来都是从困难开始 混凝土发货单实现无纸化签收&#xff0c;众多业内人士认为这个概念很好&#xff0c;但能否落地却大多抱有怀疑态度&#xff0c;理由多种多样&#xff1a; “行业太传统&#xff0c;接受不了新鲜事物。” “驾驶员年龄偏大&#xff0c;玩不来智能手…

【分布式系统管理框架】Zookeeper集群

1、Zookeeper &#xff08;1&#xff09;Zookeeper定义 Zookeeper是一个开源的&#xff0c;为分布式框架提供协调服务的Apache项目。 &#xff08;2&#xff09;Zookeeper工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架…

怎么制作gif动图,视频制作GIF动画更简单

在社交媒体和网络交流中&#xff0c;GIF动画以其生动活泼的表现形式成为了表达情感、幽默和创意的热门媒介。无论是分享日常趣事&#xff0c;还是制作专业演示&#xff0c;一个恰到好处的GIF动图总能吸引目光&#xff0c;传递信息。 但你知道吗&#xff1f;即使没有专业的设计背…

工业一体机为数字化工厂带来高效作业指导

随着工业4.0的浪潮席卷全球&#xff0c;数字化工厂的概念深入人心。在这一背景下&#xff0c;工业一体机作为数字化转型的重要一环&#xff0c;凭借其强大的功能和灵活的应用&#xff0c;为工厂实现高效作业指导提供了强大的助力。 一、工业一体机的优势&#xff1a;赋能数字化…

2024年全国青少年信息素养大赛图形化编程小高组复赛真题

2024年全国青少年信息素养大赛图形化编程小高组复赛真题 题目总数&#xff1a;6 总分数&#xff1a;100 编程题 第 1 题 问答题 请对变身鱼进行编程&#xff0c;变身鱼的初始状态已经设置&#xff0c;不需要进行修改&#xff0c; 1.当变身鱼大小大于300时&#xff0…

数据高效交互丨DolphinDB Redis 插件使用指南

DolphinDB 是一个高性能的分布式数据库。通过 Redis 插件&#xff0c;DolphinDB 用户可以轻松地与 Redis 数据库进行交互。用户不仅可以从 DolphinDB 向 Redis 发送数据&#xff0c;实现高速的数据写入操作&#xff1b;还可以从 Redis 读取数据&#xff0c;将实时数据流集成到 …

PaddleVideo:Squeeze Time算法移植

参考PaddleVideo/docs/zh-CN/contribute/add_new_algorithm.md at develop PaddlePaddle/PaddleVideo GitHubAwesome video understanding toolkits based on PaddlePaddle. It supports video data annotation tools, lightweight RGB and skeleton based action recognitio…

17集 如何用ESP-IDF编译ESP-DL深度学习工程-《MCU嵌入式AI开发笔记》

17集 如何用ESP-IDF编译ESP-DL深度学习工程-《MCU嵌入式AI开发笔记》 参考文档&#xff1a;ESP-DL 用户指南&#xff1a; https://docs.espressif.com/projects/esp-dl/zh_CN/latest/esp32/index.html 和https://docs.espressif.com/projects/esp-dl/zh_CN/latest/esp32/get-s…

PHP禁止IP访问和IP段访问(代码实例)

PHP禁止IP和IP段访问 实现IP限制是Web开发中常见的需求之一&#xff0c;它可以用于限制特定IP地址的访问权限。在PHP中&#xff0c;我们可以通过一些方法来实现IP限制。 <?//禁止某个IP$banned_ip array ("127.0.0.1",//"119.6.20.66","192.168.…

C#中简单Socket编程

C#中简单Socket编程 Socket分为面向连接的套接字(TCP套接字)和面向消息的套接字(UDP 套接字)。我们平时的网络编程是对Socket进行操作。 接下来&#xff0c;我用C#语言来进行简单的TCP通信和UDP通信。 一、TCP通信 新建项目SocketTest&#xff0c;首先添加TCP通信的客户端代…

71.WEB渗透测试-信息收集- WAF、框架组件识别(11)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;70.WEB渗透测试-信息收集- WAF、框架组件识别&#xff08;10&#xff09;-CSDN博客 如果有…

RT2-使用NLP的方式去训练机器人控制器

目标 研究在网络数据上训练的视觉语言模型也可以直接结合到端到端的机器人控制中&#xff0c;提升泛化性以及获得突出的语义推理&#xff1b;使得单个的端到端训练模型可以同时学习从机器人观测到动作的映射&#xff0c;这个过程可以受益于基于网络上的语言和视觉语言数据的预训…

提高LabVIEW软件的健壮性

提高LabVIEW软件的健壮性&#xff0c;即增强其在各种操作条件下的可靠性和稳定性&#xff0c;是开发过程中非常重要的一环。健壮的软件能够在面对意外输入、极端环境和系统故障时依然表现出色&#xff0c;确保系统的连续性和可靠性。以下是详细的方法和策略&#xff0c;从多个角…

如何在 CentOS 上配置本地 YUM 源

引言 CentOS 作为一个流行的企业级 Linux 发行版&#xff0c;依赖 YUM&#xff08;Yellowdog Updater, Modified&#xff09;来管理软件包。YUM 源&#xff08;Repository&#xff09;是软件包存储和分发的中心&#xff0c;它们通常位于互联网上。然而&#xff0c;在某些情况下…

Linux驱动开发-03字符设备驱动框架搭建

一、字符设备驱动开发步骤 驱动模块的加载和卸载&#xff08;将驱动编译模块&#xff0c;insmod加载驱动运行&#xff09;字符设备注册与注销&#xff08;我们的驱动实际上是去操作底层的硬件&#xff0c;所以需要向系统注册一个设备&#xff0c;告诉Linux系统&#xff0c;我有…

快速入门,springboot知识点汇总

学习 springboot 应该像学习一门编程语言一样&#xff0c;首先要熟练掌握常用的知识&#xff0c;而对于不常用的内容可以简单了解一下。先对整个框架和语言有一个大致的轮廓&#xff0c;然后再逐步补充细节。 前序: Spring Boot 通过简化配置和提供开箱即用的特性&#xff0c…

第三期书生大模型实战营 第1关 Linux 基础知识

第三期书生大模型实战营 第1关 Linux 基础知识 第三期书生大模型实战营 第1关 Linux 基础知识InternStudio开发机创建SSH密钥配置通过本地客户端连接远程服务器通过本地VSCode连接远程服务器运行一个Python程序总结 第三期书生大模型实战营 第1关 Linux 基础知识 Hello大家好&a…

cesium 雷达扫描

cesium 雷达扫描 (下面附有源码) 实现思路 1、通过改变圆型材质来实现效果, 2、用了模运算和步进函数(step)来创建一个重复的圆形图案 3、当纹理坐标st落在垂直或水平的中心线上时,该代码将改变透明度和颜色,以突出显示这些线 示例代码 <!DOCTYPE html> <ht…

成为编程大佬!!——数据结构与算法(1)——算法复杂度!!

前言&#xff1a;解决同一个程序问题可以通过多个算法解决&#xff0c;那么要怎样判断一个算法的优劣呢&#xff1f;&#x1f914; 算法复杂度 算法复杂度是对某个程序运行时的时空效率的粗略估算&#xff0c;常用来判断一个算法的好坏。 我们通过两个维度来看算法复杂度——…

Maven在Windows中的配置方法

本文介绍在Windows电脑中&#xff0c;下载、配置Maven工具的详细方法。 Maven是一个广泛使用的项目管理工具&#xff0c;主要针对Java项目&#xff0c;但也可以用于其他类型的项目&#xff1b;其由Apache软件基金会维护&#xff0c;旨在简化和标准化项目构建过程&#xff0c;依…