四大作用域:
web应用中的变量存放在不同的jsp对象中,会有不一样的作用域,四种不同的作用域排序是 pagecontext < request < session < application;
1、pagecontext:页面域,仅当前页面有效,离开页面后,不论重定向还是转向(即无论是redirect还是forward),pagecontext的属性值都失效;
2、request:请求域,在一次请求中有效,如果用forward转向,则下一次请求还可以保留上一次request中的属性值,而redirect重定向跳转到另一个页面则会使上一次request中的属性值失效;
3、session:会话域,在一次会话过程中(从浏览器打开到浏览器关闭这个过程),session对象的属性值都保持有效,在这次会话过程,session中的值可以在任何页面获取;
4、application:应用域,只要应用不关闭,该对象中的属性值一直有效,并且为所有会话所共享。
利用servletcontextlistener监听器,一旦应用加载,就将properties的值存储到application当中
现在需要在所有的jsp中都能通过el表达式读取到properties中的属性,并且是针对所有的会话,故这里利用application作用域,
那么什么时候将properties中的属性存储到application呢?因为是将properties的属性值作为全局的变量以方便任何一次el的获取,所以在web应用加载的时候就将值存储到application当中,
这里就要利用servletcontextlistener:
servletcontextlistener是servlet api 中的一个接口,它能够监听 servletcontext 对象的生命周期,实际上就是监听 web 应用的生命周期。
当servlet 容器启动或终止web 应用时,会触发servletcontextevent 事件,该事件由servletcontextlistener 来处理。
具体步骤如下:
1、新建一个类propertylistenter实现 servletcontextlistener接口的contextinitialized方法;
2、读取properties配置文件,转存到map当中;
3、使用servletcontext对象将map存储到application作用域中;
/** * 设值全局变量 * @author meikai * @version 2017年10月23日 下午2:15:19 */ public class propertylistenter implements servletcontextlistener { /* (non-javadoc) * @see javax.servlet.servletcontextlistener#contextdestroyed(javax.servlet.servletcontextevent) */ @override public void contextdestroyed(servletcontextevent arg0) { // todo auto-generated method stub } /* (non-javadoc) * @see javax.servlet.servletcontextlistener#contextinitialized(javax.servlet.servletcontextevent) */ @override public void contextinitialized(servletcontextevent sce) { /** * 读取properties文件 * */ final logger logger = (logger) loggerfactory.getlogger(propertylistenter.class); properties properties = new properties(); inputstream in = null; try { //通过类加载器进行获取properties文件流 in = propertiesutil.class.getclassloader().getresourceasstream("kenhome-common.properties"); properties.load(in); } catch (filenotfoundexception e) { logger.error("未找到properties文件"); } catch (ioexception e) { logger.error("发生ioexception异常"); } finally { try { if(null != in) { in.close(); } } catch (ioexception e) { logger.error("properties文件流关闭出现异常"); } } /** * 将properties文件转存到map */ map pros = new hashmap((map)properties); /** * 将map通过servletcontext存储到全局作用域中 */ servletcontext sct=sce.getservletcontext(); sct.setattribute("pros", pros); } }
4、在web.xml中配置上面的的监听器propertylistenter:
com.meikai.listener.propertylistenter
配置好后,运行web应用,就能在所有的jsp页面中用el表达式获取到properties中的属性值了。
- jsp+servlet实现文件上传与下载功能
- EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常
- 在JSP中使用formatNumber控制要显示的小数位数方法
- 秒杀系统Web层设计的实现方法
- 将properties文件的配置设置为整个Web应用的全局变量实现方法
- JSP使用过滤器防止Xss漏洞
- 在JSP页面中动态生成图片验证码的方法实例
- 详解JSP 内置对象request常见用法
- 使用IDEA编写jsp时EL表达式不起作用的问题及解决方法
- jsp实现局部刷新页面、异步加载页面的方法
- Jsp中request的3个基础实践
- JavaServlet的文件上传和下载实现方法
- JSP页面的静态包含和动态包含使用方法