文档章节

Web应用使用application对象

smartstone_2015
 smartstone_2015
发布于 2016/09/18 00:03
字数 1046
阅读 35
收藏 1

        application对象代表Web应用本身,对于整个Web应用有效,一旦JSP,Servlet将数据放入application中,该数据将可以被该应用下其他所有的JSP,Servlet访问。application对象通常有两个作用:   
        1 在整个Web应用的多个JSP,Servlet之间共享数据                        
        2 访问Web应用的配置参数
       通过application对象在整个Web应用的多个JSP,Servlet之间共享数据:           
        application通过setAttribute(String attrName, Object value)方法将值value设置给application对象的属性attrName,该属性的值在整个Web应用有效,该Web应用的每个JSP页面和Servlet都可以通过调用getAttribute(String attrName)方法访问该属性。
        例如下面的页面set_application.jsp使用JSP声明语句声明一个变量count,又在JSP脚本中声明一个变量local_count,每次刷新该页面,都把count和local_count自增一次,然后将这两个变量的值放入application对象中,名称分别为access_count,local_count,代码清单如下:                                                            

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>set attribute of application</title>
</head>

<body>
   	<%-- JSP声明语句中定义的变量,会自动成为Servlet类型的属性 --%>
	<%!
		int count = 0;
	%>
	
	
	<%--JSP脚本中定义 的变量局部变量, 需要初始化 --%>
	<%
		int local_count = 0;
		application.setAttribute("access_count", String.valueOf(++count));
		application.setAttribute("local_count", String.valueOf(++local_count));
	%>
	<%=count %><br />
	<%=local_count %><br />
</body>
</html>

        然后在get_application.jsp页面中使用getAttribute(String attrName)方法分别访问这两个属性,代码清单如下:                                                                                                                                                              

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>get attribute of application</title>
</head>
<body>
	<%
		String access_count = application.getAttribute("access_count").toString();
		String local_count = application.getAttribute("local_count").toString();
	%>
	 
	<%="access_count = " + access_count	%><br />
	<%="local_count = " + local_count %><br />
</body>
</html>

        将set_application.jsp页面刷新3次,然后再访问get_application.jsp页面,结果如下:                                   

        可以看到经过3次刷新后,access_count属性值变成3,local_count值属性值为1,说明属性值确实成功设置到application对象中了,在其它JSP页面中可以访问。                    
        至于为什么access_count值变化了,local_count的值没有变化,是因为JSP声明语句中声明的变量会自动转换成Servlet的属性,而JSP脚本中声明的变量转换成了_jspService方法的局部变量,set_application.jsp对应的Servlet代码片段如下,从代码中可以看出来:                                                                                      


	//此处省略部分代码
public final class set_005fapplication_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

	int count = 0;
	
	//此处省略部分代码
  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

	//此处省略部分代码
	int local_count = 0;
  }
}

        所以刷新set_application.jsp页面时,count的值会保存,而local_count的值每次都会被重新初始化。 
        访问Web应用的配置参数                                                   
        在页面get_application_param.jsp通过application对象访问Web应用的配置参数,配置参数在web.xml中,分别分配了driver,url,username,password四个参数,表示数据库驱动的名称,标识,用户名及密码;这四项配置在web.xml中如下:                                                                                                                

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
	<context-param>
		<param-name>driver</param-name>
		<param-value>com.mysql.jdbc.Driver</param-value>
	</context-param>
	<context-param>
		<param-name>url</param-name>
		<param-value>jdbc:mysql://localhost:3306/db_note</param-value>
	</context-param>
	<context-param>
		<param-name>username</param-name>
		<param-value>zcj</param-value>
	</context-param>
	<context-param>
		<param-name>password</param-name>
		<param-value>zcj</param-value>
	</context-param>
</web-app>

        get_application_param.jsp页面代码清单如下:                                                                                      

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Get Application Parameters</title>
</head>
<body>
	<%
		String driver = application.getInitParameter("driver");
		String url = application.getInitParameter("url");
		String user = application.getInitParameter("username");
		String password = application.getInitParameter("password");
	%>
	
	<%="driver: " + driver %><br />
	<%="url: " + url %><br />
	<%="username: " + user %><br />
	<%="password: " + password %><br />
</body>
</html>

        在浏览器中访问get_application_param.jsp页面,内容如下:                                                                      

        最后要指出的是,虽然aplication对象可以方便的在JSP,Servlet之间共享数据,但不要仅为了JSP和Servlet之间共享数据就将数据放入application对象中,这样会导致滥用application对象,通常只把Web应用的状态数据放入application对象中。

© 著作权归作者所有

下一篇: PHP小知识点
smartstone_2015
粉丝 0
博文 18
码字总数 17117
作品 0
郑州
程序员
私信 提问
从零开始搭建论坛(二):Web服务器网关接口

在 从零开始搭建论坛(一):Web服务器与Web框架 中我们弄清楚了Web 服务器、Web 应用程序、Web框架的概念。对于 Python 来说,越来越多的 Web 框架面世,在给我们更多选择机会的同时,也限制...

selfboot
2016/08/07
0
0
关于Servlet的学习

一、Servlet接口 Servlet是一个接口,Servlet程序就是一个实现了这个接口的Java类,它由支持Servlet的Web服务器里的容器调用和启动执行。一个Servlet程序负责处理它所对应的一个或一组URL地址...

KYZGJ
2014/04/11
115
0
基于MVC的优点Advantages of an MVC-Based Web Application

ASP.NET MVC 框架具有以下优点: 它很容易通过将应用程序划分为模型、 视图和控制器管理的复杂性。 它不使用视图状态或基于服务器的窗体。这使得 MVC 框架特别适合开发人员想要完全控制应用程...

donny945
2015/07/03
73
0
ASP.NET內置對象的詳細介紹

ASP.NET的内置对象有:Request、Response、Server、Application、Session、Cookie 一:Request Request对象主要是让服务器取得客户端浏览器的一些数据,包括从HTML表单用Post或者GET方法传递的...

JeffTu
2013/01/02
77
0
【BS学习】ASP.NET北大青鸟视频总结

【背景】 前一段时间学习完了ASP.NET的北大青鸟视频,进行总结一下。 【内容】 第一章 Asp.net和Web窗体 第二章 ASP.NET中的对象 第三章 Web服务器控件 第四章 HTML控件和验证控件 第五章 Ap...

yym15732626210
2018/02/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部