怎么样让网站正常解析老铁外链

pingmian/2026/1/21 18:06:02/文章来源:
怎么样让网站正常解析,老铁外链,众筹网站平台建设,南头专业英文网站建设公司责任链模式适用于需要将请求和处理解耦的场景#xff0c;同时又需要动态地组织处理逻辑的场景。 通过使用责任链模式#xff0c;可以实现请求的动态处理、灵活的扩展和简化的代码编写#xff0c;提高系统的可维护性和可扩展性。 一、责任链入门 以下这是GPT生成的责任链代…责任链模式适用于需要将请求和处理解耦的场景同时又需要动态地组织处理逻辑的场景。 通过使用责任链模式可以实现请求的动态处理、灵活的扩展和简化的代码编写提高系统的可维护性和可扩展性。 一、责任链入门 以下这是GPT生成的责任链代码 1.定义抽象处理器接口 // 定义抽象处理者接口 interface Handler {void handleRequest(int request);void setNextHandler(Handler handler); }2. 具体处理者类1 class ConcreteHandler1 implements Handler {// 定义第二个处理器private Handler nextHandler;Overridepublic void handleRequest(int request) {if (request 0 request 10) {System.out.println(ConcreteHandler1 处理请求 request);} else if (nextHandler ! null) {nextHandler.handleRequest(request);}}Overridepublic void setNextHandler(Handler handler) {this.nextHandler handler;} }3. 具体处理者类2 class ConcreteHandler2 implements Handler {private Handler nextHandler;Overridepublic void handleRequest(int request) {if (request 10 request 20) {System.out.println(ConcreteHandler2 处理请求 request);} else if (nextHandler ! null) {nextHandler.handleRequest(request);}}Overridepublic void setNextHandler(Handler handler) {this.nextHandler handler;} }4. 客户端类 public class Client {public static void main(String[] args) {// 创建具体处理者对象Handler handler1 new ConcreteHandler1();Handler handler2 new ConcreteHandler2();// 设置处理者之间的关系handler1.setNextHandler(handler2);// 创建请求并发送给责任链的第一个处理者handler1.handleRequest(5);handler1.handleRequest(15);handler1.handleRequest(25);} }在这个示例中Handler 是抽象处理者接口定义了处理请求的方法 handleRequest 和设置下一个处理者的方法 setNextHandler。ConcreteHandler1 和 ConcreteHandler2 是具体处理者类分别处理不同范围的请求。Client 是客户端类创建具体处理者对象并设置它们之间的关系然后发送请求给责任链的第一个处理者。当请求发送到责任链后责任链中的处理者按顺序尝试处理请求直到有一个处理者处理了请求为止。 handler1.handleRequest(15); 表示将请求值为15的请求发送给责任链的第一个处理者 handler1。在当前设计的责任链模式中一旦有一个处理者处理了请求处理链就会终止不再将请求传递给下一个处理者。因此每次发送请求后只有第一个能够处理该请求的处理者会对其进行处理。因为具体的实现类中是通过if...else进行处理器的整合的当然也可以修改为只要满足特定的处理条件处理器就会继续往下走。 责任链作为一种设计模式目的是为了让代码更加优雅复用性更高。 二、上下文责任链 1. 定义订单处理器模板接口 public interface OrderProcessor {// 自定义void processOrder(Order order, OrderContext context);// 公共方法void preRequestHandler(Order order); }2. 定义订单处理器抽象类模板 实现公共方法 public abstract class AbstractOrderProcessor implements OrderProcessor {Overridepublic void preRequestHandler(Order order) {System.out.println(采购员对订单统一处理);} }3. 订单处理器实现 3.1 开始处理器 Component HandlerOrder(order 1) public class PendingOrderProcessor extends AbstractOrderProcessor {Overridepublic void processOrder(Order order, OrderContext context) {// 处理待处理的订单逻辑System.out.println(开始订单处理: order.getId());// 可以通过上下文对象访问共享信息System.out.println(Context: context.getInfo());} }3.2 批准处理器 Component HandlerOrder(order 2) public class ApprovedOrderProcessor extends AbstractOrderProcessor{Overridepublic void processOrder(Order order, OrderContext context) {// 处理已批准的订单逻辑System.out.println(批准订单: order.getId());// 可以通过上下文对象访问共享信息System.out.println(Context: context.getInfo());} }3.3 发货处理器 Component HandlerOrder(order 3) public class ShippedOrderProcessor extends AbstractOrderProcessor{Overridepublic void processOrder(Order order, OrderContext context) {// 处理已发货的订单逻辑System.out.println(订单发货: order.getId());// 可以通过上下文对象访问共享信息System.out.println(Context: context.getInfo());} }4. 订单责任链 Component public class OrderProcessorChain {private final ApplicationContext applicationContext;CollectionOrderProcessor processors new ArrayList();// 注入 ApplicationContextpublic OrderProcessorChain(ApplicationContext applicationContext) {this.applicationContext applicationContext;// 获取所有订单处理器this.processors applicationContext.getBeansOfType(OrderProcessor.class).values();}// 根据注解值进行排序protected ListOrderProcessor getProcessors() {return this.processors.stream().sorted((o1, o2) - {HandlerOrder order1 o1.getClass().getAnnotation(HandlerOrder.class);HandlerOrder order2 o2.getClass().getAnnotation(HandlerOrder.class);if (order1 null order2 null) {return 0; // 如果两者都没有注解则认为它们相等} else if (order1 null) {return 1; // 如果 o1 没有注解但 o2 有注解则 o1 排在 o2 前面} else if (order2 null) {return -1; // 如果 o1 有注解但 o2 没有注解则 o1 排在 o2 后面} else {return Integer.compare(order1.order(), order2.order()); // 比较两个注解的 order 属性}}).collect(Collectors.toList());}public void process(Order order, OrderContext context) {ListOrderProcessor processors getProcessors();// 依次调用订单处理器处理订单for (OrderProcessor processor : processors) {processor.preRequestHandler(order);processor.processOrder(order, context);}} }5. 实体类和注解 Data public class Order { private int id; }Data public class OrderContext {private String info; // 上下文信息 }// 指定注解的保留策略 Retention(RetentionPolicy.RUNTIME) public interface HandlerOrder {int order(); }6. 测试 SpringBootTest public class OrderProcessorChainTest {Autowiredprivate OrderProcessorChain processorChain;Testpublic void testOrderProcessing() {// 创建订单Order order new Order();order.setId(123);// 创建订单上下文对象OrderContext context new OrderContext();context.setInfo(Some info for processing orders);// 处理订单processorChain.process(order, context);} }结果 采购员对订单统一处理 开始订单处理: 123 Context: Some info for processing orders 采购员对订单统一处理 批准订单: 123 Context: Some info for processing orders 采购员对订单统一处理 订单发货: 123 Context: Some info for processing orders 三、Spring过滤器链 责任链在Spring中怎么运用呢 在Spring框架中责任链模式常常运用在拦截器Interceptor和过滤器Filter等场景中用于处理HTTP请求、消息传递等。 拦截器Interceptor在Spring MVC中拦截器用于在处理请求之前或之后执行一些操作比如权限检查、日志记录等。你可以定义多个拦截器它们按照顺序构成一个责任链。当一个请求到达时会依次执行每个拦截器的预处理方法和后处理方法类似于责任链模式的行为。 过滤器Filter在Spring框架中你也可以使用Servlet过滤器来对HTTP请求进行预处理或后处理。过滤器链在Servlet容器中会按照配置顺序依次执行也可以看作是一个责任链模式的应用。 事件监听器Event ListenerSpring框架提供了事件监听器机制你可以定义自己的事件和监听器并通过Spring容器进行管理。当某个事件发生时监听器会按照注册顺序依次被调用类似于责任链模式。 下面是一个简单的Spring拦截器示例 1. 定义拦截器 public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在请求处理之前执行的操作比如权限检查未登录则直接拦截if (!checkAuth(request)) {response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);return false;}// 放行return true;}// 可以不重写该方法Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在请求处理之后执行的操作}// 可以不重写该方法Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在请求完成之后执行的操作}private boolean checkAuth(HttpServletRequest request) {// 检查用户是否有权限// 这里假设简单地检查请求中是否包含合法的身份验证信息String authToken request.getHeader(Authorization);return authToken ! null authToken.equals(valid_token);} }在这个示例中 LoginInterceptor 类实现了 HandlerInterceptor 接口它是Spring MVC中的拦截器。preHandle 方法用于在请求处理之前执行操作比如权限检查postHandle 和 afterCompletion 方法分别用于在请求处理之后执行操作。多个拦截器可以组成一个责任链按照它们的注册顺序依次执行。 代码中只是提供了拦截器的实现但是并没有形成责任链那么多个拦截器是如何形成链路并进行请求的处理的呢 2. 过滤器链配置 Configuration public class MvcConfig implements WebMvcConfigurer {Resourceprivate StringRedisTemplate stringRedisTemplate;Resourceprivate EmployeeService employeeService;Overridepublic void addInterceptors(InterceptorRegistry registry) {// 登录拦截器registry.addInterceptor(new LoginInterceptor(stringRedisTemplate)).excludePathPatterns(/user/login,/employee/login).order(2);// 管理员拦截器用户可操作的功能都排除registry.addInterceptor(new AdminLoginInterceptor(employeeService)).excludePathPatterns(/user/login,/user/logout).order(3);// token刷新的拦截器,order值越小越先执行这个拦截器对所有请求都执行registry.addInterceptor(new RefreshTokenInterceptor(stringRedisTemplate)).addPathPatterns(/**).order(1);}}在上面的代码中MvcConfig 实现了 WebMvcConfigurer 类并且通过addInterceptors方法项过滤器链中增加了两个拦截器LoginInterceptor 和 AdminLoginInterceptor。这两个拦截器通过order指定了拦截器的顺序。两个拦截器在请求过来时都会触发拦截器会根据自身配置的拦截路径做过滤处理。 我们可以来看下 WebMvcConfigurer接口的定义接口定义了很多方法其中有一个addInterceptors方法就是将拦截器添加到链路中的。这个接口其实有点像我们在责任链入门中讲到的定义抽象处理器接口中的setNextHandler通过registry.addInterceptor()来将处理器进行组织。 public interface WebMvcConfigurer {... default void addInterceptors(InterceptorRegistry registry) {} }InterceptorRegistry类中会通过addInterceptor方法将处理器添加到集合中去。 public class InterceptorRegistry {private final ListInterceptorRegistration registrations new ArrayList();private static final ComparatorObject INTERCEPTOR_ORDER_COMPARATOR;public InterceptorRegistry() {}public InterceptorRegistration addInterceptor(HandlerInterceptor interceptor) {InterceptorRegistration registration new InterceptorRegistration(interceptor);this.registrations.add(registration);return registration;} }通过addInterceptors方法将拦截器添加到Spring MVC的拦截器链中。当Spring MVC接收到一个请求时它会通过DispatcherServlet进行处理。DispatcherServlet会调用拦截器链中的每个拦截器来处理请求。 具体来说以下是请求如何经过拦截器链被拦截器处理的过程 当一个请求到达DispatcherServlet时DispatcherServlet会创建一个用于处理该请求的HandlerExecutionChain。 在创建HandlerExecutionChain的过程中DispatcherServlet会检查是否存在拦截器链。如果存在DispatcherServlet会将该请求与拦截器链关联起来。 在处理请求之前DispatcherServlet会依次调用拦截器链中每个拦截器的preHandle方法。拦截器的preHandle方法可以用来进行预处理比如身份验证、日志记录等操作。 如果拦截器链中的所有拦截器的preHandle方法都返回true表示请求可以继续处理。此时DispatcherServlet会调用与请求匹配的处理器(Controller)来处理请求。 处理器处理完请求后DispatcherServlet会依次调用拦截器链中每个拦截器的postHandle方法。拦截器的postHandle方法可以用来进行后处理比如修改响应内容等操作。 最后DispatcherServlet会依次调用拦截器链中每个拦截器的afterCompletion方法。拦截器的afterCompletion方法会在请求完成后被调用无论请求是否成功处理。 通过这个过程拦截器能够在请求处理的不同阶段进行干预实现诸如权限验证、日志记录、异常处理等功能。拦截器链的顺序由拦截器的order方法决定数值越小的拦截器优先级越高。 四、总结 关于责任链模式必须要有处理器模板要有链链可以是集合也可以是类似链表。请求就会沿着这条链依次被链上处理器处理。

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

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

相关文章

做网站的团队电子商务营销优势

什么是链表 离散,就是“分离的、散开的” 链表是什么样子的: 有限个节点离散分配 彼此间通过指针相连 除了首尾节点,每个节点都只有一个前驱节点和一个后继节点 首节点没有前驱结点,尾节点没有后继节点 基本概念术语&#xf…

医院网站建设 不足重庆设计网站

一. 简介 EF连接数据库有三种模式,分别是DBFirst、ModelFirst、CodeFirst,分别适用于不同的开发场景。 该章节,将主要介绍EF的DBFirst连接SQLServer数据库和MySql数据库两种操作方式 该模式在EF中出现的出现的最早,符合我们的传统…

ps做字幕模板下载网站网站每天更新的内容是内链吗

哈尔滨工业大学计算机专业创建于1956年,是中国最早的计算机专业之一。在1985年, 它又发展成计算机科学与工程系,并建立了计算机科学技术研究所。2000年,计算机科学与技术学院成立。同年,建立了软件学院,后经国家教育部、国家计委批…

电子商务网站开发费用调研报告图片制作在线生成器免费版

概述 在计算器科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定排序方式进行排列的一种算法。本文将总结几类常用的排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序&…

jsp网站开发实例与发布网络营销热门岗位

![1.png](https://ucc.alicdn.com/pic/developer-ecology/5dffeef22eb74645a35be2f60b5e54c6.png) 作者 | 亦盏 前言 随着微服务的流行,越来越多公司使用了微服务框架,微服务以其高内聚、低耦合等特性,提供了更好的容错性,也…

做网站网武昌做网站多少钱

序言 对于GPT-4我只是一个门外汉,至于我为什么要了解screenshot to code,只是因为我想知道,在我不懂前端设计的情况下,能不能通过一些工具辅助自己做一些简单的前端界面设计。如果你想通过此文深刻了解GPT-4或者该开源项目&#…

做网站链接怎么弄自己怎么设计公园

导读:知识图谱的构建技术主要有自顶向下和自底向上两种。其中自顶向下构建是指借助百科类网站等结构化数据源,从高质量数据中提取本体和模式信息,加入到知识库里。而自底向上构建,则是借助一定的技术手段,从公开采集的…

网站群建设规范定制开发小程序

一、环境空间的特点 环境空间是一种特殊类型的变量,它可以像其它变量一样被分配和操作,还可以以参数的形式传递给函数。 R语言中环境空间具有如下3个特点: 1、对象名称唯一性 此特点指的是在不同的环境空间中可以有同名的变量出现&#x…

正规的锦州网站建设新钥匙建站

Java面试题_2024新版Java高频面试题Java八股文面试真题 Java高频面试专题视频课程,瓤括了Java生态下的主流技术面试题,课程特色: 1、全面,jvm、并发编程、mysql、rabbitmq、spring、mybatis、redis、分布式、微服务、数据结构等等…

公司网站开发费计入什么科目定制旅游网站有哪些

近日,2020首届全国信创产业生态创新大赛颁奖盛典在北京信创园举办,霍因科技提交的“霍因科技-信创云统一存储和数据湖方案”荣获生态创新奖,这彰显了霍因科技在以数据存储技术推动信息技术应用创新产业方面的卓越成就。 据悉,首届…

湛江网站模网站建设vipjiuselu

1、NoSQL: 指的是非关系型数据库,主要分成四大类:键值存储数据库、列存储数据库、文档型数据库、图形数据库。 2、什么是Redis: Redis是一种基于内存的数据库,一般用于做缓存的中间件。 3、Redis的主要的特点: 1、Rd…

制冷机电工程东莞网站建设p2f网站系统

目录 一、性能测试的指标 1、并发量 2、响应时间 3、错误率 4、吞吐量 5、资源使用率 二、压测全流程 三、其他注意点 1、并发和吞吐量的关系 2、并发和线程的关系 四、调优及分布式集群压测(待仔细学习) 1.线程数量超过单机承载能力时的解决…

杭州网站维护公司商务型网站模板

「11」显示器采集捕获单个显示器的完整视频画面 在OBS软件中,「显示器采集」是一种用于捕集显示器屏幕画面的功能,您可以将其用于整个桌面窗口的采集到直播间。该功能主要用于捕捉您的计算机桌面屏幕内容,以便将其实时显示在直播窗口中&#…

个人网站建设制作asp网站发布ftp

vue和thymeleaf : 若先显示框架后加载数据则用vue 若后端处理好之后发送给前端页面显示用thymeleaf (弹幕) 对于前后端分离的认识: 使用vue 将前端页面、框架等建立好,只需要后端发送数据即可 但thymeleaf就需要在服务器启动之前将数据保存到…

wap网站设计上海交通大学毕业设计网站

HashSet存储自定义对象保证元素唯一性图解原理及代码优化 1.原理: * 1.HashSet原理 * 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数 * 当Hash…

网站内容建设出现的问题怎么更改wordpress主题的字体

一:背景 1. 讲故事 中秋国庆长假结束,哈哈,在老家拍了很多的短视频,有兴趣的可以上B站观看:https://space.bilibili.com/409524162 ,今天继续给大家分享各种奇奇怪怪的.NET生产事故,希望能帮助…

浙江华企做网站哪些网站是用织梦做的

1.安装Git、TortoiseGit和汉化包 Git官网: Git TortoiseGit和汉化包: Download – TortoiseGit – Windows Shell Interface to Git 2.常用命令 创建仓库命令 git init初始化仓库git clone拷贝一份远程仓库,也就是下载一个项目。提交与修改 git add添加文件到暂存区git…

玄武建设局网站惠州网站建设 鑫

阶段性反馈机制(如何持之以恒、让自己发疯) 反馈机制是王者荣耀的核心武器,击杀野怪获得金币,不断地努力,获得奖励是我们不断的玩这个游戏的主要原因,也是人的本能,我什么都得不到凭什么这么做&…

淮安 做网站 app网站编辑做啥都

集合类型 (Set) 是一个无序并唯一的键值集合。 之所以说集合类型是一个无序集合,是因为它的存储顺序不会按照插入的先后顺序进行存储,如下代码所示: 127.0.0.1:6379> sadd myset v2 v1 v3 #插入数据 v2、v1、v3 (integer) 3 127.0.0.1:6379> smembers myset #查询数…

网站版式有哪几种摘抄一则新闻

Character类除了封装了一个char外,还封装了Unicode字符级别的各种操作,是Java文本处理的基础。下面结合源码分析Character的贡献。 Unicode 也许你没听过Unicode,但应该见过UTF-8。UTF-8(8-bit Unicode Transformation Format&a…