JSP内置对象之application对象
2018-01-16 12:19
302 查看
1. 让JSP和Servlet共享数据
该对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或者Servlet之间共享变量。application通过setAttribute()方法将一个值放入某个属性,该属性的值对整个Web 应用有效,因此Web 应用的每个JSP 页面或Servlet都可以访问该属性,访问属性的方法为getAttribute 。
看下面的put-application.jsp页面,该页面仅仅声明了一个整型变量,每次刷新该页面时,该变量值加1,然后将该变量的值放入application 内。下面是页面的代码:
<%@ page language="java" contentType="text/html; charset=gb2132"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>APPLICATION测试</title>
</head>
<body>
<!-- JSP声明 -->
<%! int i;
%>
<!-- 将i值自加后放入application的变量内 -->
<%application.setAttribute("counter",String.valueOf(++i));%>
<!-- 直接输出application变量值 -->
<%=application.getAttribute("counter"); %>
</body>
</html>
上面代码第13行实现了每次刷新该页面时,该变量都会先自加,并被设为application的counter属性值,即每次application的counter属性值都会加1。
看下面另一个JSP页面:
注意:application不仅可以用于两个JSP页面间进行共享数据。我们可以把application理解成一个Map对象,任何的jsp、servlet对象都可以将某个变量放入application中进行保存,并为之指定一个属性名; 而该应用中的其他JSP、servlet页面就可以根据这个属性名来得到这个变量。如下面的这Servlet代码所示:
在上面的代码中,由于Servlet中并没有application内置对象,所以上面程序第18行代码显示获取了该web应用的ServletContext实例。每个web应用只有一个ServletContext实例,在JSP中只有通过application内置对象访问该实例,而在Servlet中则必须代码获取。
提示:该Servlet同样要编译成class文件才可以使用,实际上Servlet还需要部署。编译Servlet时可能由于没有添加环境变量出现异常,如果安装Java EE SDK,只需将Java EE SDK路径下的javaee.jar文件添加到ClASSPATH环境变量中去;如果没有安装Java EE SDK,可以将tomcat的lib路径下的jsp-api.jar、servlet-api.jar添加到CLASSPATH环境变量中去。
最后要指出的是:虽然使用application(即ServletContext实例)可以方便JSP、Servlet共享数据,但不要为了共享数据就将数据放入application对象中!由于application对象代表整个应用,所以通常只应该把web应用的状态数据放入application中。
2. 获得web应用配置参数
application还有一个重要的用处:可用于web应用的配置参数。请看如下的JSP页面,该页面访问数据,但访问数据所用的驱动、URL、用户名和密码都在web.xml文件中给出。
上面的程序中第10行至第17行代码使用了application的getInitParameter(String paramName)来获取web应用的配置参数。这些配置参数应该在web.xml文件中使用context-param元素进行配置,每个context-param配置一个参数,该元素下有如下两个子元素:
(1) param-name:配置web参数名
(2) param-value:配置web参数值
为了给web应用配置参数,应该在web.xml文件中增加以下代码: <!--配置第一个参数driver-->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.driver</param-value>
</context-param>
<!--配置第二个参数url-->
<context-param>
<param-name>url</param-name>
<param-value&g
4000
t;jdbc:mysql://localhost:3306/javaee</param-value>
</context-param>
<!--配置第一个参数user-->
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
<!--配置第一个参数pass-->
<context-param>
<param-name>pass</param-name>
<param-value>32147</param-value>
</context-param> 在浏览器中浏览getWebParam.jsp页面时,可以看到数据库连接、数据查询完全成功。可见,使用application可以访问Web应用的配置参数。注意:通过这种方式,可以将一些信息放置在web.xml文件中进行配置,避免使用一些硬编码方式写在代码中,从而更好地提高程序的可移植性。
该对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或者Servlet之间共享变量。application通过setAttribute()方法将一个值放入某个属性,该属性的值对整个Web 应用有效,因此Web 应用的每个JSP 页面或Servlet都可以访问该属性,访问属性的方法为getAttribute 。
看下面的put-application.jsp页面,该页面仅仅声明了一个整型变量,每次刷新该页面时,该变量值加1,然后将该变量的值放入application 内。下面是页面的代码:
<%@ page language="java" contentType="text/html; charset=gb2132"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>APPLICATION测试</title>
</head>
<body>
<!-- JSP声明 -->
<%! int i;
%>
<!-- 将i值自加后放入application的变量内 -->
<%application.setAttribute("counter",String.valueOf(++i));%>
<!-- 直接输出application变量值 -->
<%=application.getAttribute("counter"); %>
</body>
</html>
上面代码第13行实现了每次刷新该页面时,该变量都会先自加,并被设为application的counter属性值,即每次application的counter属性值都会加1。
看下面另一个JSP页面:
<%@ page language="java" contentType="text/html; charset=gb2132" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>APPLICATION测试2</title> </head> <body> <!-- JSP声明 --> <%! int i; %> <!-- 直接输出application变量值 --> <%=application.getAttribute("counter"); %> </body> </html>上面的代码的13行也直接输出application的属性值。虽然这个页面和put-application页面没有任何的关系,但它同样能够访问到application的属性,因为application的属性对于整个Web应用的JSP、Servlet来说都是共享的。
注意:application不仅可以用于两个JSP页面间进行共享数据。我们可以把application理解成一个Map对象,任何的jsp、servlet对象都可以将某个变量放入application中进行保存,并为之指定一个属性名; 而该应用中的其他JSP、servlet页面就可以根据这个属性名来得到这个变量。如下面的这Servlet代码所示:
package ppp; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GetApplication extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html;cahrset = gb2132"); PrintWriter out = response.getWriter(); out.println("<html><head><title>"); out.println("测试Application"); out.println("</title></head><body>"); ServletContext sc = getServletConfig().getServletContext(); out.println("application当前的counter值为:"); out.println(sc.getAttribute("counter")); out.println("</body></html>"); } }
在上面的代码中,由于Servlet中并没有application内置对象,所以上面程序第18行代码显示获取了该web应用的ServletContext实例。每个web应用只有一个ServletContext实例,在JSP中只有通过application内置对象访问该实例,而在Servlet中则必须代码获取。
提示:该Servlet同样要编译成class文件才可以使用,实际上Servlet还需要部署。编译Servlet时可能由于没有添加环境变量出现异常,如果安装Java EE SDK,只需将Java EE SDK路径下的javaee.jar文件添加到ClASSPATH环境变量中去;如果没有安装Java EE SDK,可以将tomcat的lib路径下的jsp-api.jar、servlet-api.jar添加到CLASSPATH环境变量中去。
最后要指出的是:虽然使用application(即ServletContext实例)可以方便JSP、Servlet共享数据,但不要为了共享数据就将数据放入application对象中!由于application对象代表整个应用,所以通常只应该把web应用的状态数据放入application中。
2. 获得web应用配置参数
application还有一个重要的用处:可用于web应用的配置参数。请看如下的JSP页面,该页面访问数据,但访问数据所用的驱动、URL、用户名和密码都在web.xml文件中给出。
<%@ page language="java" contentType="text/html; charset=gb2132" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>APPLICATION测试</title> </head> <body> <% //从配置参数中获取驱动 String driver = application.getInitParameter("driver"); //从配置参数中获取数据库URL String url = application.getInitParameter("url"); //从配置参数中获取用户名 String user = application.getInitParamter("user"); //从配置参数中获取密码 String pass = application.getInitParamter("pass"); //注册驱动 Class.forName(driver); //获取数据库连接 Connection conn = DriverManager.getParameter("url,user,pass"); //创建Statement对象 Statement stmt = conn.createStatement(); //执行查询 ResultSet rs = stmt.executeQuery("Select * from newsinf"); %> <table bgcolor="9999dd" border="1" align="center"> <% //遍历结果集 while (rs.next()) { %> <tr> <td><%=rs.getString(1)%></td> <td><%=rs.getString(2)%></td> </tr> <% } %> </table> </body> </html>
上面的程序中第10行至第17行代码使用了application的getInitParameter(String paramName)来获取web应用的配置参数。这些配置参数应该在web.xml文件中使用context-param元素进行配置,每个context-param配置一个参数,该元素下有如下两个子元素:
(1) param-name:配置web参数名
(2) param-value:配置web参数值
为了给web应用配置参数,应该在web.xml文件中增加以下代码: <!--配置第一个参数driver-->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.driver</param-value>
</context-param>
<!--配置第二个参数url-->
<context-param>
<param-name>url</param-name>
<param-value&g
4000
t;jdbc:mysql://localhost:3306/javaee</param-value>
</context-param>
<!--配置第一个参数user-->
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
<!--配置第一个参数pass-->
<context-param>
<param-name>pass</param-name>
<param-value>32147</param-value>
</context-param> 在浏览器中浏览getWebParam.jsp页面时,可以看到数据库连接、数据查询完全成功。可见,使用application可以访问Web应用的配置参数。注意:通过这种方式,可以将一些信息放置在web.xml文件中进行配置,避免使用一些硬编码方式写在代码中,从而更好地提高程序的可移植性。
相关文章推荐
- jsp小结08 - 9个内置对象01 application
- JAVA-JSP内置对象之application对象获得其他信息
- 02_07 JSP内置对象之application
- jsp九大内置对象:request、response、session、application、out、page、pageContext、config、exception
- JAVA-JSP内置对象之application范围
- JSP内置对象:request, reponse, out, session, application, config, pagecontext, page, exception
- jsp内置对象之application
- JSP的9个内置对象-application
- jsp内置对象之application对象
- jsp内置对象【06】application对象详解
- JSP内置对象---application
- JSP内置对象之session application page pageContext config exception
- JSP脚本的9个内置对象(一)——简述、Application对象
- JSP内置对象----application
- jsp内置对象之application对象
- jsp九大内置对象之session和application
- jsp九大内置对象之application对象
- jsp笔记——内置对象application
- JSP内置对象之application对象
- JSP的内置对象(application)