jsp

位置:IT落伍者 >> jsp >> 浏览文章

介绍一下JSP中application的用法?


发布日期:2024年02月13日
 
介绍一下JSP中application的用法?

application对象

?什么是application对象??

()?当Web服务器启动时Web服务器会自动创建一个application对象application对象一旦创建它将一直存在直到Web服务器关闭

一个Web服务器通常有多个Web服务目录?(网站)当Web服务器启动时它自动为每个Web服务目录都创建一个application对象这些application对象各自独立而且和Web服务目录一一对应

访问同一个网站的客户都共享一个application对象因此application对象可以实现多客户间的数据共享

访问不同网站的客户对应的application对象不同

()?application对象的生命周期从Web服务器启动直到Web服务器关闭

注意一个Web应用程序启动后将会自动创建一个application对象而且在整个应用程序的运行过程中只有一个application对象也即所有访问该网站的客户都共享一个application对象

()?application对象的作用范围application对象是一个应用程序级的对象它作用于当前Web应用程序也即作用于当前网站所有访问当前网站的客户都共享一个application对象

具体来说不管哪个客户来访问网站A也不管客户访问网站A下哪个页面文件都可以对网站A的application对象进行操作因为所有访问网站A的客户都共用一个application对象

因此当在application对象中存储数据后所有访问网站A的客户都能够对其进行访问实现了多客户之间的数据共享

()?application对象的基类是javaxservletServletContext类

注意有些Web服务器不直接支持使用application对象必须用ServletContext类来声明application对象再调用getServletContext()方法来获取当前页面的application对象

()?ServletContext类用于表示应用程序的上下文

一个ServletContext类的对象表示一个Web应用程序的上下文

具体来说在Web服务器中提供了一个Web应用程序的运行时环境专门负责Web应用程序的部署编译运行以及生命周期的管理通过ServletContext类可以获取Web应用程序的运行时环境信息

常识JSP引擎Servlet引擎JSP容器和Servlet容器都是指Web服务器Web服务器用于管理所有Web应用程序

()?application对象的常用方法如下所示

方法名描述String?getAttribute(String?name)根据属性名称获取属性值Enumeration?getAttributeNames()获取所有的属性名称void?setAttribute(String?name?Object?object)设置属性指定属性名称和属性值void?removeAttribute(String?name)根据属性名称删除对应的属性?ServletContext?getContext(String?uripath)获取指定URL的ServletContext对象String?getContextPath()获取当前Web应用程序的根目录String?getInitParameter(String?name)根据初始化参数名称获取初始化参数值int?getMajorVersion()获取Servlet?API的主版本号int?getMinorVersion()获取Servlet?API的次版本号String?getMimeType(String?file)获取指定文件的MIME?类型String?getServletInfo()获取当前Web服务器的版本信息String?getServletContextName()获取当前Web应用程序的名称void?log(String?message)将信息写入日志文件中

?使用application对象存储数据

()?设置application对象的属性和获取application对象的属性

测试代码

TestApplicationjsp

<%@?page?language=&#;java&#;?contentType=&#;text/html;?charset=GBK&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);%>

<html>

<body>

<form?name=&#;form&#;?action=&#;?method=&#;post&#;>

用户名

<input?type=&#;text&#;?name=&#;username&#;?value=&#;>

<br>

密?码

<input?type=&#;password&#;?name=&#;pwd&#;?value=&#;>

<br>

<input?type=&#;submit&#;?name=&#;btSubmit&#;?value=&#;提交&#;>

</form>

<%

applicationsetAttribute(&#;username&#;?requestgetParameter(&#;username&#;));

applicationsetAttribute(&#;pwd&#;?requestgetParameter(&#;pwd&#;));

%>

</body>

</html>

测试代码

TestCommonjsp

在TestCommonjsp?页面中通过application对象获取属性注意TestApplicationjsp和TestCommonjsp这两个页面之间没有任何关联只要通过application对象设置了属性那么就可以在任何页面通过application对象获取属性或者删除属性

<%@?page?language=&#;java&#;?contentType=&#;text/html;?charset=GBK&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);?%>

<html>

<body>

用户名<%=applicationgetAttribute(&#;username&#;)?%><br>

密?码<%=applicationgetAttribute(&#;pwd&#;)?%><br>

</body>

</html>

()?删除application对象的属性

测试代码

TestCommonjsp

在TestCommonjsp?页面中删除application对象的属性

<%@?page?language=&#;java&#;?contentType=&#;text/html;?charset=GBK&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);?%>

<html>

<body>

<%&#;删除属性&#;%>

<%

applicationremoveAttribute(&#;username&#;);

applicationremoveAttribute(&#;pwd&#;);

%>

用户名<%=applicationgetAttribute(&#;username&#;)%><br>

密?码<%=applicationgetAttribute(&#;pwd&#;)%><br>

</body>

</html>

?使用application对象实现网站计数器

测试代码

TestApplicationjsp

<%@?page?language=&#;java&#;?contentType=&#;text/html;?charset=GBK&#;%>

<%@?page?import=&#;javautil*&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);%>

<html>

<body>

<%!

ServletContext?application;

synchronized?void?countPeople()?{

application?=?getServletContext();

Integer?number?=(Integer)applicationgetAttribute(&#;number&#;);

if?(number?==?null)?{

number?=?new?Integer();

applicationsetAttribute(&#;number&#;?number);

}?else?{

number?=?new?Integer(numberintValue()?+?);

applicationsetAttribute(&#;number&#;?number);

}

}

%>

<%

if?(sessionisNew())?{

countPeople();

}

int?personCount?=?((Integer)applicationgetAttribute(&#;number&#;))intValue();

%>

<p>欢迎访问本网站您是第?<%=?personCount?%>?个访问用户!

</body>

</html>

?使用application对象获取初始化参数

()?一?般来说在webxml文件中设置初始化参数有如下两种方式

n?设置系统范围内的初始化参数

n?针对单个Servlet文件或JSP文件设置初始化参数

对于系统范围内的初始化参数可通过ServletContext?接口的getInitParameter(String?name)方法根据指定的参数名获取对应的参数值

对于针对单个Servlet文件或JSP文件设置初始化参数可通过ServletConfig接口的?getInitParameter(String?name)方法根据指定的参数名获取对应的参数值
()?如何设置系统范围内的初始化参数

在webxml文件中可利用contextparam元素来设置系统范围内的初始化参数contextparam元素应该包含paramnameparamvalue以及可选的description子元素如下所示
<contextparam>
<paramname>supportemail</paramname>
<paramvalue></paramvalue>
</contextparam>

webxml文件的示例

<?xml?version=&#;&#;?encoding=&#;UTF&#;?>

<webapp?version=&#;&#;

xmlns=&#;;

xmlns:xsi=&#;;?charset=GBK&#;?%>

<%?requestsetCharacterEncoding(&#;GBK&#;);?%>

<html>

<body>

<%&#;使用application对象获取系统范围内的初始化参数&#;%>

<font?color=&#;Red&#;>使用application对象获取初始化参数</font>

<br>

<%

String?appName?=?getServletContext()getInitParameter(&#;appName&#;);

String?appVersion?=?getServletContext()getInitParameter(&#;appVersion&#;);

%>

应用程序的名称<%=appName%><br>

应用程序的版本<%=appVersion%>

</body>

</html>

修改webxml文件添加蓝色字体部分

<?xml?version=&#;&#;?encoding=&#;UTF&#;?>

<webapp?version=&#;&#;

xmlns=&#;;

xmlns:xsi=&#;;?charset=GBK&#;

pageEncoding=&#;GBK&#;%>

<%?requestsetCharacterEncoding(&#;GBK&#;);?%>

<html>

<body>

<h>使用application对象获取Web应用程序的环境信息</h>

<p>

<font?color=&#;Red&#;>获取当前Web服务器的版本信息</font><%=?applicationgetServerInfo()?%><br>

<font?color=&#;Red&#;>获取Servlet?API的主版本号</font><%=?applicationgetMajorVersion()?%><br>

<font?color=&#;Red&#;>获取Servlet?API的次版本号</font><%=?applicationgetMinorVersion()?%>

<p>

<font?color=&#;Red&#;>获得指定URL的ServletContext对象</font>

<%

ServletContext?sc?=?applicationgetContext(&#;/ch/TestApplicationjsp&#;);

outprintln(scgetServerInfo());

%>

<p>

<%&#;需要在webxml设置?displayname?元素&#;%>

<font?color=&#;Red&#;>获取当前Web应用程序的名称</font><%=?applicationgetServletContextName()?%>

<p>

<font?color=&#;Red&#;>获取当前Web应用程序的上下文路径</font><%=?applicationgetContextPath()?%>

</body>

</html>

测试结果

session对象和application对象的比较

()?两者的作用范围不同

session对象是用户级的对象而application对象是应用程序级的对象

一个用户一个session对象每个用户的session对象不同在用户所访问网站的多个页面之间共享同一个session对象

一个Web应用程序一个application对象每个Web应用程序的application对象不同但一个Web应用程序的多个用户之间共享同一个application对象

在同一个网站下

n?每个用户的session对象不同

n?所用用户的application对象相同

在不同网站下

n?每个用户的session对象不同

n?每个用户的application对象不同

()?两者的生命周期不同

session对象的生命周期用户首次访问网站创建用户离开该网站?(不一定要关闭浏览器)?消亡

application对象的生命周期启动Web服务器创建关闭Web服务器销毁

上一篇:轻松应对JSP连接MySQL数据库问题[1]

下一篇:jsp如何获取当前路径