利用ServletContextLinstener获取并缓存数据源

Unreal5从入门到精通之如何解决在VR项目在头显中卡顿的问题 以前我们使用Unity开发VR,Unity提供了非常便利的插件和工具来做VR。但是由于Unity的渲染效果不如Unreal,现在我们改用Unreal来做VR了,所有的VR相关的配置和操作都要重新学习。今天就来总结一下,我在开发VR过程中碰到的所有问题。好了,以上就是我目前做VR时碰到的一些问题,希望对你有所帮助。 阅读详情
 
           利用ServletContextLinstener获取数据源
我们在设计web应用程序的时候,在保证功能实现的基础上就会考虑增强应用程序的性能,我们通常会在web服务器开始时缓存一些静态数据或者完成一些代价昂贵的操作。一个最佳实践是使用实现了javax.sql.DataSource接口的JDBC连接池。
DataSource从JNDI树中获得。每调用一次SQL就要使用JNDI查找DataSource是非常昂贵的工作,而且严重影响了应用的性能。我不建议每次查找数据源建立连接等,相反,我们可以在服务器启动时就缓存DataSource,这样就可以大大提高性能。这一节我们就学习如何使用ServletContextLinstene来完成数据源的查找。
Servlet的应用程序时间管理机制可以使编程者方便的控制ServletContext,HttpSession和ServletResuqst的生命周期。在程序中使用动作监听器可以根据servlet的运行状态更加有效的使用Web服务器资源。
ServletContext监听器
ServletContext事件监听器包括两个监听器接口:ServletContextLinstener和ServletContextAttributeListener。在这里我们只关心ServletContext中ServletContextLinstener接口。
事件类型
解释
监听器接口
接口方法
ServletContext事件
Web应用程序(即ServletContext)刚被创建并能够处理web请求,或者web应用程序即将被关闭
Javax.servlet.
ServletContextLinstener
contextInitialized(ServletContextEvent event)
contextDestroyed(ServletContextEvent event)
 
 由于ServletContext先于其余的Servlet触发,所以我们可以在ServletContextLinstenercontextInitialized (ServletContext
Event event)方法中获取DataSource并将其防止在ServletContext中,这样应用程序就不必每次都要查找数据源,而在contextDestroyed(ServletContext
Event event)中删除DataSource
 
有了以上的思路,我们就可以动手编写我们的代码了:
Package  com.ty.lintener ;
 
import javax.naming.*;
import javax.servlet.*;
import javax.sql.DataSource;
 
 
publicclass ServletContextListenerImpl implements ServletContextListener {
 
   public ServletContextListenerImpl () {
      // TODO Auto-generated constructor stub
   }
 
   publicvoid contextDestroyed(ServletContextEvent event) {
      event.getServletContext().removeAttribute("DataSource") ;
   }
 
   publicvoid contextInitialized(ServletContextEvent event) {    
      ServletContext application = event.getServletContext() ;
      String name = application.getInitParameter("DataSource") ;
     
      if (name != null) {
         try {
            InitialContext context = new InitialContext() ;
            DataSource ds = (DataSource)context.lookup(name) ;
           
            if (ds != null) {
                application.setAttribute("DataSource", ds) ;
            }
         } catch (NamingException e) {
            e.printStackTrace();
         }
      }
   }
}
因为ServletContextListenerImpl是一个监听器,所以我们还要在web.xml中配置监听器:
<context-param>
       <param-name>DataSource</param-name>
       <param-value>java:comp/env/jdbc/bbs</param-value>
 </context-param>
 
<listener>
       <listener-class>
com.ty.listener. ServletContextListenerImpl
</listener-class>
 </listener>
在上面的配置中我们使用到了数据源的名称,所以才有<context-param>这个标签。
 
这样我们就在我们的web程序中完成了数据源的查找和缓存,调用的时候就可以使用
(DataSource)getServletContext().getAttribute("DataSource") 获取数据源了。
 
【100分】最长子字符串的长度 题目要求在一个环形字符串中找出字符 ‘o’ 出现了偶数次的最长子字符串长度。这里的字符串是一个环形的,即首尾相连。代码统计了字符串中字符 ‘o’ 的出现次数,根据其奇偶性返回相应的最长子字符串长度。当 ‘o’ 的数量为偶数时,直接返回字符串长度;当 ‘o’ 的数量为奇数时,返回长度减去 1。给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出 ‘o’ 字符出现了偶数次最长子字符串的长度。【最长子字符串的长度】 阅读详情

相关推荐

芒果YOLOv5改进55:损失函数篇之KLD:即插即用 芒果首发原创新颖|全网唯一更新KLD改进博客,通过 Kullback-Leibler 散度学习用于目标检测的高精度边界框,提升YOLOv5小目标

YOLOv5改进KLD损失函数:即插即用 原创新颖|芒果专栏独家首发

包括YOLOv5、YOLOv7、YOLOv8等模型改进 622

ServletContextLisenter

Servlet--->ServletContext---->ServletContextLisenter 1.Servlet:是在服务器上运行的小程序。这个词是在 Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。   工作模式:     a.客户端发送请求至

niuchaoying的专栏 1135

Colmap论文——《Structure-from-Motion Revisited》论文阅读笔记

  最近又将Colmap论文翻出来仔细阅读总结了一下,于是顺便写个博客记录一下。Structure-from-Motion Revisited是当前SOTA的增量式SfM算法Colmap的论文,发表于2016年计算机视觉顶会CVPR。它是增量式SfM里程碑式的作品。 论文地址:https://openaccess.thecvf.com/content_cvpr_2016/papers/Schonberger_Structure-From-Motion_Revisited_CVPR_2016_paper.p

zeeq的博客 1万+

JavaWebServletContext(读取resources文件的两种方式)

什么是ServletContext ServletContext代表是一个web应用的上下文对象(web应用对象),里面封装的都是web应用信息,一个ServletContext对应一个应用。 ServletContext的生命周期 在服务器一启动的时候就会创建,在服务器关闭的时候销毁。 如何获得上下文 通过init方法当中一个参数ServletConfig来获取 直接在HttpServlet当...

qq_42219004的博客 1764

Listener--ServletContextListener接口的使用详解

ServleContextListener ServleContextListener监听的是ServletContext域的创建与销毁。 实际上ServeltContextListener是生成ServeltContext对象之后调用的.生成ServeltContext对象之后,这些代码在我们业务实现之前就写好,它怎么知道我们生成类的名字.实际上它不需要知道我们的类名,类里面有方法.他们提供一...

吴声子夜歌的博客 842

ServletContextListener使用

 ServletContextListener 接口作用:监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。  ServletContextListener 接口主要有两个方法,一个在当Servlet 容器启动web应用时调用,另一个是在Servlet 容器终止web应用时调用。实现 ServletContextListener 接口需重写这两方法。 ...

累死的青蛙 5062

怎样使用ServletContextListener接口

ServletContext : 每一个web应用都有一个 ServletContext与之相关联。 ServletContext对象在应用启动的被创建,在应用关闭的时候被销毁。 ServletContext在全局范围内有效,类似于应用中的一个全局变量。   ServletContextListener: 使用listener接口,开发者能够在为客户端请求提供服务之前向ServletC

wangsenhong的专栏 995

servlet连接mysql数据库连接池_从连接池获取数据库连接

小编典典一次执行一次,ServletContextListener而不是每次在init()许多servlet中执行一次。contextInitialized()在webapp启动期间,该方法仅执行一次。public class Config implements ServletContextListener {private static final String ATTRIBUTE_NAME =...

weixin_39975122的博客 175

通过实现ServletContextListener接口创建数据库连接池(C3P0方式)

使用Listener步骤 1. 定义Listener实现类 2. 在web.xml中配置(或使用Annotation) 使用C3P0方式创建数据库连接池需要添加的jar包 1.c3p0-0.9.5.jar 2.c3p0-oracle-thin-extras-0.9.5.jar 3.mchange-commons-java-0.2.9.jar 1 package cn.sd...

weixin_30788731的博客 174

Servlet(ServletContext配置全局参数、ServletContext方法、属性文件中获取数据库连接参数)

通过ServletContext对象获取数据库全局配置在web.xml中的连接参数的值 配置文件web.xml中的代码 &lt;!-- 这是全局的数据库连接参数配置 --&gt; &lt;context-param&gt; &lt;param-name&gt;driver&lt;/param-name&gt; &lt;param-value&gt;com.mysql.jdbc....

weixin_43117449的博客 3978

ServletContextListener使用详解

在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。 当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListene

ETHAN IN IT 9万+

Servlet的Listener的使用

为什么80%的码农都做不了架构师?>>> ...

weixin_34396103的博客 201

【框架专题】——管理型容器——SpringBoot内置IOC容器/内置WEB容器原理

SpringBoot源码——内置Tomcat原理 SpringBoot源码——自动配置原理

weixin_44275259的博客 511

Spring boot之ServletContextInitializer

Spring Boot提供的在Servlet 3.0+环境中用于程序化配置ServletContext的接口。该接口 ServletContextInitializer主要被RegistrationBean实现用于往ServletContext容器中注册Servlet,Filter或者EventListener。这样设计的目的主要是旨在降低用于在war包中第三方库可能破坏spring boot 应用的风险,同时也方便spring容器管理这些beans。这些ServletContextInitializer实

bearboy80的专栏 3023

Servlet缓存-学习笔记

对于浏览器的刷新而言,当浏览器缓存中有资源,也会×××端要资源,只有在回车访问情况下,才找缓存 2)可以通过重写getLastModified()方法来阻止每次刷新都访问服务端,以减轻服务端的压力 3) 如果要实现一种高级功能,即客户端请求动态web资源时,动态web资源发现发给客户端的数据更新了,就给客户端发送最新的数据,如果发现数据没有更新,则动态web资源就要客户端就去访问它自己缓存的数据...

weixin_33928137的博客 146

ServletContextListener接口用法

ServletContextListener接口用于tomcat启动时自动加载函数,方法如下: 一、需加载的类必须实现ServletContextListener接口。 二、该接口中有两个方法必须实现: 1、contextInitialized(ServletContextEvent sce)该方法为服务器起动时加载内容。 2、contextDestroyed

菜鸟一缕清风的博客 5293

ServletContextListener 详解

1.首先来看一看源码 该类的源码 public interface ServletContextListener extends EventListener { /** * Receives notification that the web application initialization * process is starting. *

我是天才的专栏 2844

Java Web数据源详解

点击这里使用RSS订阅本Blog: <!-- main_sub="c1s67";more_subs="";--> Java Web数据源详解Java Web连接数据库一般有直接JDBC和数据源两种方式, 1、JDBC:在MySQL中创建数据库: drop  database if exists login; cr

小李专栏 4065

request.getServletContext()的问题

request.getServletContext()的问题因tomcat版本太低导致出错

灬王小乖灬的博客 3万+

ServletContextListener用法

ServletContextListener作为Web应用服务的一部分,处理Web应用的 servlet上下文(context)的变化的通知该接口有两个重要方法需要实现,分别是: ContextInitialized() ContextDestroyed() 它会监听Servlet容器,当应用开始的时候它会调用ContextInitialized()方法;当应用关闭的时候,它同样会调用Con

为了忘却的纪念 1004

ServletContext和ServletContextListener的关系

ServletContext : 每一个web应用都有一个 ServletContext。 它在应用启动的被创建,在应用关闭的时候被销毁。  ServletContextListener: 使用listener接口,为客户端请求提供服务之前, 向ServletContext中添加任意的对象。 这个对象在ServletContext启动的时候被初始化,然后在ServletContext整

tyust512的专栏 591

固态变压器SST技术资料合集.zip

固态变压器SST技术资料合集

ISO 2859-1-1999_Amd 1-2011.rar

ISO 2859-1-1999_Amd 1-2011.rar

上一篇: tomcat5.5配置数据源
下一篇: Useful window function
shadow841021
博客等级 码龄20年 4粉丝 9原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值