Java 杂谈善倾的知识体系构建之路

JSP 中的 application 内置对象

2018-09-02  本文已影响0人  善倾

application 对象是被设计用来存储整个 web 项目相关配置信息的,它的作用范围是整个 web 项目,所以整个 web 项目中的 jsp 和 Servlet 之间是共享这个 application 对象的。application 对象是 javax.servlet.ServletContext 接口的实例对象,也就是 Servlet 上下文信息的意思嘛。

Tomcat 一旦启动,就会给它管理的每一个 web 项目都创建一个对应的 application 对象( Tomcat 读取 confi/web.xml 和对应 web 应用 WEB-INF/web.xml 下两个文件的内容,对 application 对象进行初始化操作),各个对象之间互不干扰。Tomcat 关闭,application 对象就会被销毁。

所以,针对 application 对象的这种特点,它通常的用处就是保存 web 应用 web.xml 中的全局配置参数,然后供其他 jsp 和 servlet 使用。比如保存用户名、密码、url 等数据库连接信息。将配置信息放在配置文件中,可以提高程序的可移植性,避免硬编码带来的不可扩展性。

总结:对于这两个 web.xml 文件应该这样去理解,conf/web.xml 文件放置的是对所有 web 应用通用的部分,所以应该把 conf/web.xml 当成是 WEB-INF/web.xml 文件中的一部分来看待。Tomcat 在创建 application 对象的时候,会扫描这两个文件中的内容,然后给它进行初始化。

通过 application 对象获取应用配置信息

之前的笔记已经讲过,conf/web.xml 文件也可以作为 web 应用的描述信息的一部分,所以 application 对象也可以拿到 conf/web.xml 文件中的全局上下文参数。

尤其要注意的一点是,web.xml 文件千万不要写错了,只要有一点错误,就会,在访问动态组件的时候,就会返回 404 错误。对于全局参数信息应该用<context-param></context-param>元素,大小写、反斜杠一下都不能变哦!

具体使用方式如下:这是 WEB-INF/web.xml 文件中的内容,对于 conf/web.xml 文件是一样的

<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/javaee</param-value>
</context-param>

通过以下方法就可以拿到配置文件中的信息,具体如下:

String url = application.getInitParameter("url");

取得对应 web 项目的绝对路径

拿到 web 应用的真实物理路径在程序中有时候很重要,但是如何才能得到真实路径呢?而且通常还会配置虚拟目录,以保证项目安全性。所以只能通过请求 url 的目录得到项目的虚目录。然后就会通过回去 conf/server.xml 中找对应的虚目录,就可以得到项目的真实路径了。具体使用方式如下:

String docPath = application.getRealPath("/");
输出的 docPath 值为:/opt/apache-tomcat-9.0.0.M26/webapps/weba

其实按照 application 对象的创建方式,可知这些信息早就在 application 对象的内部存储了,所以它应该是通过获取参数的方式拿到的虚拟目录对应的真实路径。

上一篇 下一篇

猜你喜欢

热点阅读