比赛网站开发wordpress 路由怎么配

web/2025/10/8 22:37:11/文章来源:
比赛网站开发,wordpress 路由怎么配,j2ee网站开发买什么书,免费申请注册网站servlet3异步在深入了解什么是异步Servlet之前#xff0c;让我们尝试了解为什么需要它。 假设我们有一个Servlet#xff0c;处理时间很长#xff0c;如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.Prin… servlet3异步 在深入了解什么是异步Servlet之前让我们尝试了解为什么需要它。 假设我们有一个Servlet处理时间很长如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;WebServlet(/LongRunningServlet) public class LongRunningServlet extends HttpServlet {private static final long serialVersionUID 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {long startTime System.currentTimeMillis();System.out.println(LongRunningServlet Start::Name Thread.currentThread().getName() ::ID Thread.currentThread().getId());String time request.getParameter(time);int secs Integer.valueOf(time);// max 10 secondsif (secs 10000)secs 10000;longProcessing(secs);PrintWriter out response.getWriter();long endTime System.currentTimeMillis();out.write(Processing done for secs milliseconds!!);System.out.println(LongRunningServlet Start::Name Thread.currentThread().getName() ::ID Thread.currentThread().getId() ::Time Taken (endTime - startTime) ms.);}private void longProcessing(int secs) {// wait for given time before finishingtry {Thread.sleep(secs);} catch (InterruptedException e) {e.printStackTrace();}}} 如果我们通过浏览器在URL上方为http://localhost:8080/AsyncServletExample/LongRunningServlet?time8000 servlet上方收到响应则响应为“处理完成8000毫秒” 8秒后。 现在如果您查看服务器日志将得到以下日志 LongRunningServlet Start::Namehttp-bio-8080-exec-34::ID103 LongRunningServlet Start::Namehttp-bio-8080-exec-34::ID103::Time Taken8002 ms. 因此尽管大多数处理与Servlet请求或响应无关但我们的Servlet线程运行了大约8秒。 这可能导致线程饥饿 -由于在所有处理完成之前我们的servlet线程被阻塞因此如果服务器收到大量要处理的请求它将达到最大servlet线程限制并且进一步的请求将出现Connection Refused错误。 在Servlet 3.0之前有针对这些长时间运行的线程的特定于容器的解决方案我们可以生成单独的工作线程来执行繁重的任务然后将响应返回给客户端。 启动工作线程后Servlet线程返回到Servlet池。 Tomcat的CometWebLogic的FutureResponseServlet和WebSphere的异步请求分派器是异步处理实现的一些示例。 特定于容器的解决方案的问题在于在不更改应用程序代码的情况下我们无法移至其他servlet容器这就是为什么在Servlet 3.0中添加了Async Servlet支持以为Servlet中的异步处理提供标准方式的原因。 异步Servlet实现 让我们看一下实现异步servlet的步骤然后为上述示例提供异步支持的servlet。 首先我们要提供异步支持的servlet应该具有WebServlet 批注 其asyncSupported值为true 。 由于实际工作将委托给另一个线程因此我们应该有一个线程池实现。 我们可以使用Executors框架创建线程池并使用servlet上下文侦听器来启动线程池。 我们需要通过ServletRequest.startAsync()方法获取AsyncContext的实例。 AsyncContext提供了获取ServletRequest和ServletResponse对象引用的方法。 它还提供了使用dispatch方法将请求转发到另一个资源的方法。 我们应该有一个Runnable实现 在这里我们将进行繁重的处理然后使用AsyncContext对象将请求分派到另一个资源或者使用ServletResponse对象写入响应。 处理完成后我们应调用AsyncContext.complete方法以使容器知道异步处理已完成。 我们可以将AsyncListener实现添加到AsyncContext对象中以实现回调方法–我们可以使用它为异步线程处理过程中发生错误或超时的情况提供对客户端的错误响应。 我们还可以在此处进行一些清理活动。 一旦我们完成了用于异步Servlet示例的项目它将如下图所示。 在Servlet上下文侦听器中初始化辅助线程池 AppContextListener.java package com.journaldev.servlet.async;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener;WebListener public class AppContextListener implements ServletContextListener {public void contextInitialized(ServletContextEvent servletContextEvent) {// create the thread poolThreadPoolExecutor executor new ThreadPoolExecutor(100, 200, 50000L,TimeUnit.MILLISECONDS, new ArrayBlockingQueueRunnable(100));servletContextEvent.getServletContext().setAttribute(executor,executor);}public void contextDestroyed(ServletContextEvent servletContextEvent) {ThreadPoolExecutor executor (ThreadPoolExecutor) servletContextEvent.getServletContext().getAttribute(executor);executor.shutdown();}} 该实现非常简单如果您不熟悉Executors框架请阅读Thread Pool Executor 。 有关监听器的更多详细信息请阅读Servlet Listener Tutorial 。 工作线程实现 AsyncRequestProcessor.java package com.journaldev.servlet.async;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.AsyncContext;public class AsyncRequestProcessor implements Runnable {private AsyncContext asyncContext;private int secs;public AsyncRequestProcessor() {}public AsyncRequestProcessor(AsyncContext asyncCtx, int secs) {this.asyncContext asyncCtx;this.secs secs;}Overridepublic void run() {System.out.println(Async Supported? asyncContext.getRequest().isAsyncSupported());longProcessing(secs);try {PrintWriter out asyncContext.getResponse().getWriter();out.write(Processing done for secs milliseconds!!);} catch (IOException e) {e.printStackTrace();}//complete the processingasyncContext.complete();}private void longProcessing(int secs) {// wait for given time before finishingtry {Thread.sleep(secs);} catch (InterruptedException e) {e.printStackTrace();}} } 请注意AsyncContext的用法及其在获取请求和响应对象然后通过complete方法调用完成异步处理的用法。 AsyncListener实现 AppAsyncListener.java package com.journaldev.servlet.async;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.AsyncEvent; import javax.servlet.AsyncListener; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebListener;WebListener public class AppAsyncListener implements AsyncListener {Overridepublic void onComplete(AsyncEvent asyncEvent) throws IOException {System.out.println(AppAsyncListener onComplete);// we can do resource cleanup activity here}Overridepublic void onError(AsyncEvent asyncEvent) throws IOException {System.out.println(AppAsyncListener onError);//we can return error response to client}Overridepublic void onStartAsync(AsyncEvent asyncEvent) throws IOException {System.out.println(AppAsyncListener onStartAsync);//we can log the event here}Overridepublic void onTimeout(AsyncEvent asyncEvent) throws IOException {System.out.println(AppAsyncListener onTimeout);//we can send appropriate response to clientServletResponse response asyncEvent.getAsyncContext().getResponse();PrintWriter out response.getWriter();out.write(TimeOut Error in Processing);}} 注意onTimeout方法的实现在该方法中我们向客户端发送超时响应。 这是我们异步servlet的实现请注意使用AsyncContext和ThreadPoolExecutor进行处理。 AsyncLongRunningServlet.java package com.journaldev.servlet.async;import java.io.IOException; import java.util.concurrent.ThreadPoolExecutor;import javax.servlet.AsyncContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;WebServlet(urlPatterns /AsyncLongRunningServlet, asyncSupported true) public class AsyncLongRunningServlet extends HttpServlet {private static final long serialVersionUID 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {long startTime System.currentTimeMillis();System.out.println(AsyncLongRunningServlet Start::Name Thread.currentThread().getName() ::ID Thread.currentThread().getId());request.setAttribute(org.apache.catalina.ASYNC_SUPPORTED, true);String time request.getParameter(time);int secs Integer.valueOf(time);// max 10 secondsif (secs 10000)secs 10000;AsyncContext asyncCtx request.startAsync();asyncCtx.addListener(new AppAsyncListener());asyncCtx.setTimeout(9000);ThreadPoolExecutor executor (ThreadPoolExecutor) request.getServletContext().getAttribute(executor);executor.execute(new AsyncRequestProcessor(asyncCtx, secs));long endTime System.currentTimeMillis();System.out.println(AsyncLongRunningServlet End::Name Thread.currentThread().getName() ::ID Thread.currentThread().getId() ::Time Taken (endTime - startTime) ms.);}}运行异步Servlet 现在当我们在servlet上运行URL为http://localhost:8080/AsyncServletExample/AsyncLongRunningServlet?time8000我们得到的响应和日志如下 AsyncLongRunningServlet Start::Namehttp-bio-8080-exec-50::ID124 AsyncLongRunningServlet End::Namehttp-bio-8080-exec-50::ID124::Time Taken1 ms. Async Supported? true AppAsyncListener onComplete 如果我们将时间设置为9999则会发生超时并在客户端以“处理中的超时错误”和日志形式获得响应 AsyncLongRunningServlet Start::Namehttp-bio-8080-exec-44::ID117 AsyncLongRunningServlet End::Namehttp-bio-8080-exec-44::ID117::Time Taken1 ms. Async Supported? true AppAsyncListener onTimeout AppAsyncListener onError AppAsyncListener onComplete Exception in thread pool-5-thread-6 java.lang.IllegalStateException: The request associated with the AsyncContext has already completed processing.at org.apache.catalina.core.AsyncContextImpl.check(AsyncContextImpl.java:439)at org.apache.catalina.core.AsyncContextImpl.getResponse(AsyncContextImpl.java:197)at com.journaldev.servlet.async.AsyncRequestProcessor.run(AsyncRequestProcessor.java:27)at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)at java.lang.Thread.run(Thread.java:680) 注意servlet线程快速完成了执行所有主要的处理工作都在其他线程中进行。 这就是异步Servlet的全部希望您喜欢它。 下载AsyncServletExample项目 参考 开发者食谱博客上来自JCG合作伙伴 Pankaj Kumar 的Servlet 3异步Servlet功能 。 翻译自: https://www.javacodegeeks.com/2013/08/async-servlet-feature-of-servlet-3.htmlservlet3异步

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

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

相关文章

设计师常去网站成都网站建设案例单招网

--- 24.4.20 目录 1、什么是Bug? 2、什么是调试(Debug)? 3、Debug和Release 4、VS基础调试快捷键 4.1、环境准备 4.2、调试快捷键 5、监视和内存观察 5.1、监视窗口 5.2、内存窗口 6、调试举例1 7、调试举例2 8、调试…

网站建设优化规划书如何构建成交型网站

一、什么是Json?JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999的一个子集。 JS…

app网站下载免费珠海网站建设公司有哪些

本文介绍了如何使用STM32驱动压力传感器进行实时监测。首先,我们会介绍压力传感器的工作原理和常见类型。然后,我们将介绍如何选择合适的STM32单片机和压力传感器组合。接下来,我们会详细讲解如何使用STM32驱动压力传感器进行数据采集和实时监…

一个主机建多少个网站wordpress md5解密

JAVA八股--redis 如何保证Redis和数据库数据一致性redisson实现的分布式锁的主从一致性Redis脑裂现象及解决方案介绍I/O多路复用模型undo log 和 redo log(没掌握MyISAM 和 InnoDB 有什么区别? 如何保证Redis和数据库数据一致性 关于异步通知中消息队列…

打字建站宝微信平台制作网站开发

使用 Tye 辅助开发 k8s 应用竟如此简单(一)使用 Tye 辅助开发 k8s 应用竟如此简单(二)续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中如何对数据库进行链接。Newbe.Claptrap 是一个…

懒人模板网站网站商品展示设计

Domain Admin:一目了然,一键掌握,您的全方位图形化域名与SSL证书智能管家!- 精选真开源,释放新价值。 概览 Domain Admin是一个基于Python Vue3.js 技术栈实现的域名和SSL证书监测平台,旨在为用户打造一个…

程序员和网站建设企业搭建pc端网站

WPF列表性能提高技术 WPF数据绑定系统不仅需要绑定功能,还需要能够处理大量数据而不会降低显示速度和消耗大量内存,WPF提供了相关的控件以提高性能,所有继承自ItemsControl的控件都支持该技术。 虚拟化 UI虚拟化是列表仅仅为当前显示项创建…

如何在电商平台做好企业网站推广不用框架做网站

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元 1、用万用表电阻挡测量实验板(箱)上电位器(可调电阻)的参数范围。 0~1kΩ电阻: 1k*0%=0 1k*100%=1k 所以范围为0~1k 0~10kΩ电阻: 10k*0%=0 10k*…

校园网站制作如何做好一名销售

本文作者:孙雪丽文字编辑:周聪聪技术总编:张学人重大通知!!!2019年6月22日至24日在河南郑州举行Stata编程技术特别训练营,招生工作已经圆满结束。另外爬虫俱乐部将于2019年7月5日至7月8日在武汉…

陵水网站建设哪家专业十大免费ppt网站在线

Java线程池的类型和使用 引言 在并发编程中,线程池是一种非常重要的工具,它可以实现线程的复用,避免频繁地创建新线程,从而提高程序的性能和效率。Java的并发库提供了丰富的线程池功能,本文将介绍Java线程池的类型和…

南阳网站制作网站建设明细报价表

一、查看进程:ps 或 ps -a 二、命令后台运行: sudo ./runmyled.o& 命令后边跟个&, 返回进程id号 三、查看当前的进程: 四、删除进程:sudo kill id1 id2 id3

郑州网站及优化重庆软装设计公司官网

深入解析大语言模型显存占用:训练与推理 文章脉络 估算模型保存大小 估算模型在训练时占用显存的大小 全量参数训练 PEFT训练 估算模型在推理时占用显存的大小 总结 对于NLP领域的从业者和研究人员来说,有没有遇到过这样一个场景,你的…

淘宝上做的网站网站建设开发收费

文章目录一、软件介绍二、安装 Homebrew使用 Ruby 或者 Shell 脚本安装手动 clone 安装三、卸载 Homebrew四、Homebrew 安装目录五、安装包所在位置六、程序安装目录七、软件版本切换八、清除旧版本文件九、brew 命令汇总安装、升级和删除软件包查看和检验软件包参考示例服务相…

常州建站价格一个完整的网站制作流程

WebService 1. WebService基本认识 WebService最早是微软提出了一种以XML为载体网络信息传输的规范,现在几乎所有的语言与平台都支持,带有状态机制,不依赖于容器,可以发送一个xml作为其请求内容. WebService通常是基于http的远程方…

哪里有最新的网站源码本地app软件制作公司

科目编号:8 -6-6- 6 座位号 2017-2018学年度第二学期期末考试 建筑结构基础 试题 2018年 7 月 一、单选题(本大题共10小题,每小题4分,共计40分) (★请考生务必将答案填入到下面对应序号的答题框中★&#…

兰考县住房和城乡建设局网站外国购物网站设计风格

文章目录 1 自回归模型AR Model1.1 自回归模型 vs 多元线性回归模型1.1.1 线性回归1.1.2 AR(1)模型1.1.3 AR(p)模型 1.2 AR建模问题 2 移动平均模型 MA Model2.1 MA模型的数学表示2.1.1 MA(1)模型2.2.2 MA(q)模型 2.2 MA建模问题 ARIMA模型是AR模型(自回归模型&…

求西北地区网站建设专家 西安沉睡网络 官方网址?网站建设行业细分

1.Three.js 实现模型材质局部辉光效果 2.解决辉光效果影响场景背景图显示的问题 相关API的使用: 1. EffectComposer(渲染后处理的通用框架,用于将多个渲染通道(pass)组合在一起创建特定的视觉效果) 2. …

简单的网站建设步骤网站图片居中代码

文字排版--粗体 我们还可以使用css样式来改变文字的样式:粗体、斜体、下划线、删除线,可以使用下面代码实现设置文字以粗体样式显示出来。 p span{font-weight:bold;} 在这里大家可以看到,如果想为文字设置粗体是有单独的css样式来实现的&…

企业网站建设大概的费用清远市发布

深度优先搜索DFS搜索 DFS:从根节点出发,寻找子节点,到最深层返回到上一层继续递归搜索。 B3621 枚举元组 题目传送 题面 题目描述 n 元组是指由 n 个元素组成的序列。例如 (1,1,2) 是一个三元组、(233,254,277,123)是一个四元组。 给定…

网站设计论文答辩问题及答案品划做网站

反转字符串中的元音字符Given a string and we have to eliminate/ remove all vowels from the string using C program. 给定一个字符串,我们必须使用C程序从字符串中消除/删除所有元音。 To eliminate/remove the vowels 消除/删除元音 We will traverse (reac…