有人可以解释什么是每个请求线程和每个连接线程吗?servlet使用哪种模型?如何分配线程来处理HTTP请求?是线程/请求还是连接?
假设我要在自己Servlet
的doGet()
方法中异步执行耗时的任务,那么我将使用Java执行程序启动一个新线程,以便在单独的线程中进行冗长的计算并立即发送响应。
现在,这是否可以确保我释放了正在处理我的线程,HttpServletRequest
或者由于子线程仍在运行而仍在使用它?
每个请求意味着在发出HTTP请求时,将创建一个线程或从一个池中检索一个线程来为其服务。一个线程服务整个请求。每个连接的线程将是同一件事,只是该线程用于整个连接,这可能是多个请求,并且两次请求之间可能有很多停滞时间。Servlet容器是每个请求的线程。可能有一些实现为每个连接提供线程,但是我不知道,这似乎非常浪费。
在另一个线程内创建线程不会建立任何特殊的关系,在大多数情况下,这样做的全部目的是让一个线程执行更多工作或终止,而另一个线程继续工作。在您的方案中,如您所料,使用其他线程来完成请求所要求的工作将允许立即发送响应。用来处理该请求的线程也将立即可用于其他请求,而不管您的其他线程需要花费多长时间。这几乎是在每个请求线程servlet容器中进行异步工作
的 方式。
注意: 如果您使用的是完整的Java
EE容器,则可能以某种方式为您管理线程,这使得生成自己的线程是个坏主意。在这种情况下,最好不要向容器询问线程,但是一般原理是相同的。
问题内容: 单个Servlet如何处理以用户请求形式出现的多个客户端请求?基于单例设计模式,我知道我们创建了一个servlet实例,但是单个servlet如何处理数百万个请求。对其所涉及的线程也感到困惑。 同样,这里提供了任何浏览器规范或设置,可用于跨请求发送请求或生成针对请求发送的线程。 所有框架都相同还是不同(例如,struts v / s springs)? 问题答案: Struts / S
我想让一个Servlet首先处理对JSP页面的所有请求。Servlet将用于根据所请求的JSP设置服务器端变量。 例如,我想要实现的是给出URL:example.com/index.JSP,Servlet首先通过解析出请求的JSP(index.JSP)来处理请求,设置特定于请求的index.JSP的变量(使用),然后分派到实际的index.JSP(例如/web-inf/index.JSP)。然后,
问题内容: 我在用Java应用程序服务器处理multipart / form-data请求时非常困难。从我发现的情况来看,servlet 3.0规范提供了诸如HttpServletRequest.getParts()之类的方法,这对于处理上传到我的servlet的表单数据是理想的。 但是,此方法是3.0 Servlet规范的一部分,并且我的应用程序服务器(Tomcat 6)尚不支持此方法。即使具有
问题内容: Java如何确定分配线程或进程的内核?有什么办法可以控制吗?防止两个大线程在同一内核上执行? 基本上,我要问的是有关Java中多线程如何工作或如何在Java中控制它的更多信息。 问题答案: 您不能为特定线程设置处理器关联。但是,如果将程序分为两个进程,则应该能够将这些进程分配给操作系统级别的特定处理器。 http://www.cyberciti.biz/tips/setting-pro
问题内容: 我有以下测试课: 问题似乎来自BaseTestConfiguration类: 我系统地得到了这个异常: 我不确定如何解决此问题。当我运行测试时,Spring不知何故正在寻找ServletContext并收到上述异常… 问题答案: 你的其中一门课程显然带有注释。这是如何结束在你的堆栈跟踪,因为它是进口的。 因此,尽管你认为自己不需要(因此也不需要),但实际上确实需要它,只是因为你正在使用
我知道PHP支持处理多个并发连接,并且根据服务器的不同,它可以像这个答案中提到的那样进行配置 服务器是如何管理多个连接的?它是为每个请求派生一个子进程,还是使用线程处理,还是使用线程池处理? 链接的答案说一个进程是分叉的,然后作者在评论中说是线程还是进程,这让人很困惑,如果请求是使用子进程、线程还是线程池提供的?