ServletContext参数:它们是每个实例还是每个服务器?

时间:2013-10-23 08:59:06

标签: java rest tomcat servlets web-applications

我有一个运行webapp的tomcat服务器。在webapp的启动中,我使用interface ServletContextListener的实现类设置了一些上下文参数。我在这里初始化的参数是在不同机器上运行的数据库的几个连接对象。

我怀疑的是我在这里创建的连接对象是否是每个实例的一个(因为tomcat为每个客户端请求创建一个实例),或者整个webapp本身是一个?

如果每个webapp一个,那么服务器是否可以处理大量的同时请求(按每秒一千个请求的顺序)来对数据库执行CRUD操作?

4 个答案:

答案 0 :(得分:3)

每个webApp创建一个

ServletContext。服务器从Web应用程序读取web.xml文件,并根据您在web.xml上提供的配置创建ServletContext。创建后,它将在Web应用程序的组件之间共享。如果您的服务器上安装了多个webapp,则会有多个ServletContext - 每个用于Web应用程序。

如需参考,请查看here

答案 1 :(得分:1)

webapp只有一个ServletContext实例,ServletContext中的atributes是应用程序作用域。

关于数据库连接,最好使用连接池(DataSource),而不是在ServletContext中添加Connection对象作为属性。

不确定你是否意味着这个,但请求是由Servlet处理的,而不是ServletContext。

答案 2 :(得分:0)

如果您在ServletContext设置属性,则该范围将适用于整个应用程序。

来自Java EE 7 Spec

  

ServletContext接口有一个实例对象   与部署到容器中的每个Web应用程序相关联。

答案 3 :(得分:0)

只会加载一个ServletContext,而不管请求的数量是多少。

这甚至是servlet相对于CGI的优势。

希望它有所帮助。