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://xiahunao.cn/news/3224798.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

OJhelper一款帮助你获取各大oj信息的软件

项目地址 应用功能 目前应用支持&#xff1a;查询、自定义、收藏各大oj比赛信息&#xff0c;跳转比赛界面。查询各大oj的Rating分以及题量&#xff0c;查看题量饼状图。 应用环境 windows和安卓端 应用预览&#xff1a; 维护概况 后期会提供持续更新&#xff0c;具体可以…

STM32学习历程(day6)

EXTI外部中断使用教程 首先先看下EXTI的框图 看这个框图就能知道要先初始化GPIO外设 那么和前面一样 1、先RCC使能时钟 2、配置GPIO 选择端口为输入模式&#xff0c; 3、配置AFIO&#xff0c;选择我们用的GPIO连接到后面的EXTI 4、配置EXTI&#xff0c;选择边沿触发方式…

全网最适合入门的面向对象编程教程:12 类和对象的 Python 实现-Python 使用 logging 模块输出程序运行日志

全网最适合入门的面向对象编程教程&#xff1a;12 类和对象的 Python 实现-Python 使用 logging 模块输出程序运行日志 摘要&#xff1a; 本文主要介绍了日志的定义和作用&#xff0c;以及 Python 内置日志处理的 logging 模块&#xff0c;同时简单说明了日志等级和 logging …

中职网络安全B模块渗透测试server2380

使用nmap扫描添加参数-sV Flag:2.4.38 添加参数-A不然扫不全 &#xff08;这两题可以直接加-sV -A&#xff09; Flag: 4.3.11-Ubuntu 根据nmap扫描发现系统为ubuntu系统&#xff0c;ubuntu操作系统在某些版本中默认包含一个名为"ubuntu"的用户帐户。这是为了方…

leetcode--从前序与中序遍历序列构造二叉树

leetcode地址&#xff1a;从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,…

中职网络安全Server2216

任务环境说明&#xff1a;✓ 服务器场景&#xff1a;Server2216&#xff08;开放链接&#xff09;✓ 用户名:root密码&#xff1a;1234561.黑客通过网络攻入本地服务器,通过特殊手段在系统中建立了多个异常进程找出启动异常进程的脚本&#xff0c;并将其绝对路径作为Flag值提交…

Java中的 this 关键字是什么意思? this() 又是什么?

目录 问题问题一&#xff1a;什么是this关键字?问题二&#xff1a;什么是this()&#xff1f; 问题 问题一&#xff1a;什么是this关键字? 定义&#xff1a;this 代表当前对象。这个定义比较抽象&#xff0c;举例来回答。 思考一个问题&#xff1a;如果没有 this 会怎样&…

领导者视角:识别系统问题的信号

作为企业的领导者&#xff0c;有时候我们面对的不仅是表面的小问题&#xff0c;而是根深蒂固的系统性问题。如果您发现以下症状&#xff0c;可能就是时候深入挖掘了&#xff1a; 1、资源消耗大&#xff1a;一个看似小的问题&#xff0c;解决起来却不断耗费大量资源。 2、反复无…

图论---无向图中国邮路的实现

开始编程前分析设计思路和程序的整体的框架&#xff0c;以及作为数学问题的性质&#xff1a; 程序流程图&#xff1a; 数学原理&#xff1a; 本质上是找到一条欧拉回路&#xff0c;考虑图中的边权重、顶点的度数以及如何通过添加最少的额外边来构造欧拉回路&#xff0c;涉及到欧…

double和float的区别与使用

double和float类型的区别与使用 在Java中&#xff0c;double和float都是基本数据类型&#xff0c;用于表示浮点数&#xff08;即带有小数点的数&#xff09;。 它们在精度和范围上有所不同&#xff1a; double类型提供了更高的精度和更大的范围&#xff0c;而float类型则精度更…

昇思14天

ResNet50图像分类 1. ResNet50图像分类概述 ResNet50是一种用于图像分类的深度卷积神经网络。图像分类是计算机视觉的基本应用&#xff0c;属于有监督学习范畴。ResNet50通过引入残差结构&#xff0c;解决了深层网络中的退化问题&#xff0c;使得可以训练非常深的网络。 2. …

(自用)共享单车服务器(二) 项目日志

stdin、stdout、stderr 注意&#xff1a;stderr是不缓存的&#xff0c;stdout则进行行间缓存。接下来我们看下行间缓存的效果&#xff0c;请参考以下代码&#xff1a; #include "stdio.h" #include <unistd.h>int main(int argc, char** argv) {for (int i 0…

LNMP搭建Discuz和Wordpress

1、LNMP L:linux操作系统 N&#xff1a;nginx展示前端页面web服务 M&#xff1a;mysql数据库&#xff0c;保存用户和密码&#xff0c;以及论坛相关的内容 P&#xff1a;php动态请求转发的中间件 数据库的作用&#xff1a; 登录时验证用户名和密码 创建用户和密码 发布和…

接口测试基础知识(url,http,接口测试流程)

接口测试的节点&#xff1a;在功能测试时&#xff0c;我们需要等待前端与后端都开发完成之后&#xff0c;才能进行界面的功能测试&#xff0c;接口测试则只需要在后端开发完成&#xff0c;即可进行接口测试&#xff0c;如下图表示&#xff1a; 接口测试的节点.png 学习路径.png…

【PTA天梯赛】L1-003 个位数统计(15分)

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法刷题 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录 题目题解总结 题目 题目链接 题解 使用string把长度达1000位的数字存起来开一个代表个位数的数组 a[11]倒序计算最后一位&#xff0c;…

YOLOv5、v7、v8如何修改检测框文字颜色和大小

YOLOv5和YOLOv8默认的标签文字颜色为白色&#xff0c;但是在亮度较大的图片中文字不明显&#xff0c;就需要对标签文字的颜色进行修改 一、YOLOv5 打开X:\Anaconda\envs\your-env\Lib\site-packages\ultralytics\utils\plotting.py X代表你的anaconda安装的盘&#xff0c;yo…

【面试题】正向代理和反向代理的区别?

正向代理&#xff08;Forward Proxy&#xff09;和反向代理&#xff08;Reverse Proxy&#xff09;是两种常见的代理服务器类型&#xff0c;它们在网络通信中扮演着不同的角色&#xff0c;具有不同的功能和应用场景。 一、正向代理 1. 定义与位置 正向代理是位于客户端和目标…

修改服务器挂载目录

由于我们的项目通常需要挂载一个大容量的数据盘来存储文件数据&#xff0c;所以我们每台服务器都需要一个默认的挂载目录来存放这些数据&#xff0c;但是由于我们的误操作&#xff0c;导致挂载目录名字建错了&#xff0c;这时候后端就读不到挂载目录了&#xff0c;那我们我们的…

机器人三定律及伦理分析

全世界的机器人定律并没有一个统一的标准或体系&#xff0c;但是在科学文献中&#xff0c;最广为人知的是由科幻小说家阿西莫夫提出的“机器人三定律”。本文将以这些定律为基础&#xff0c;分析现有的机器人伦理和实际应用中的问题&#xff0c;给出若干实例&#xff0c;并对相…

从微软 Word 中提取数据

从 Microsoft Word 文档中提取数据可以通过编程来实现&#xff0c;有几种常见的方法&#xff0c;其中之一是使用 Python 和 python-docx 库。python-docx 是一个处理 .docx 文件&#xff08;Microsoft Word 文档&#xff09;的 Python 库&#xff0c;可以读取和操作 Word 文档的…