当前位置: 首页 > 面试题库 >

Servlet容器是否应该为每个传入请求创建新的javax.servlet.http.HttpServlet实例?

云季萌
2023-03-14
问题内容

我有一堂课 public class GAE_SERVLETREQUESTServlet extends HttpServlet {

不确定规范对HTTPServlet的回收有何评论:servlet容器是否应该在每个传入请求上创建此类的新实例,或者实现可以在请求之间重用类?

我正在调查一个有趣的问题,其中似乎是在GAE_SERVLETREQUESTServlet实例上创建的Map保持了请求之间的状态。


问题答案:

对于一般情况-非分布式,多线程的,可以保证只有servlet的一个实例。根据Servlet 3.0规范:

2.1请求处理方法

基本的Servlet接口定义了用于处理客户端请求的服务方法。对于servlet容器路由到servlet实例的每个请求,都会调用此方法。处理对Web应用程序的并发请求通常需要Web
Developer设计Servlet,这些Servlet可以处理在特定时间在服务方法内执行的多个线程。通常,Web容器通过在不同线程上并发执行service方法来处理对同一servlet的并发请求。

2.2实例数

Servlet声明(通过第8章“注释和可插入性”中所述的批注或第14章“ Deployment
Descriptor”中描述的包含该Servlet的Web应用程序的部署描述符的一部分)控制Servlet容器的方式提供Servlet的实例。
对于未在分布式环境中托管的servlet(默认设置),每个servlet声明中servlet容器只能使用一个实例
。但是,对于实现SingleThreadModel接口的servlet,该servlet容器可以实例化多个实例以处理繁重的请求负载并序列化对特定实例的请求。

如果将servlet作为部署描述符中标记为可分发的应用程序的一部分进行部署,则每个Java虚拟机(JVM™)1的每个servlet声明中,一个容器只能具有一个实例。但是,如果可分发应用程序中的Servlet实现SingleThreadModel接口,则容器可以在容器的每个JVM中实例化该Servlet的多个实例。



 类似资料:
  • 我有一个遗留的Java1.6运行localhostTomcat 7应用程序使用JSP页面,一个带有框架的框架集,javascript,但没有像Struts这样的框架。我使用请求或会话从servlet传递一个对象以在页面中显示,这很好。 然而,我最近做了一些更改,现在我无法从会话或请求中检索到相同的对象。它以前工作得很好,所以我不确定是什么坏了,但我甚至无法将字符串值从JSP返回到servlet。

  • 我有一个类,下面的类作为RequestScope bean:

  • 这是一个简单的场景: 用户从Web应用程序的网页触发一些操作。这个操作很重,需要更多的时间。 在操作在服务器端完成之前,用户触发器会用一些不同的参数表示相同的操作。因此,第二个请求的第二个操作也将开始处理。 在这种情况下,是否有两个不同的线程,比如第一个线程处理第一个请求,另一个线程处理第二个请求?或者它只是一个线程处理两个请求,第一个操作只是为了执行第二个请求而被中断(未完成)? 在这里,我不想

  • 问题内容: 因此,我四处阅读,对于拥有CSRF令牌感到非常困惑,但是我应该为每个请求还是每小时生成一个新令牌? 但是,我们最好每小时生成一个令牌,然后我需要两个会话:令牌,到期, 我将如何处理该表格?只需将echo $ _SESSION [‘token’]放在隐藏值表单上,然后在提交时进行比较? 问题答案: 如果您按照表单请求进行操作-那么基本上就可以消除CSRF攻击的发生,并且可以解决另一个常见

  • 我尝试分析一个gRPC java服务器。我主要看到下面的一组线程池。 null

  • 问题内容: 我刚刚启动了一个简单的Java测试项目,该项目使用Hibernate管理某些实体,并提供REST接口来操纵这些对象并提供一些其他业务逻辑。REST接口是使用RESTEasy和Jetty创建的。 到目前为止,一切工作正常,但是我感觉我实际上写了太多样板代码。由于我在这些Java框架中没有太多经验,所以我只是想知道是否有人可以给我提示如何改善这种情况。 每个请求创建hibernate会话