欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSP九大内置对象总结(一)

程序员文章站 2022-07-08 12:26:57
...

JSP(Java Server Page)是当今一项非常重要的动态Web开发技术,它充分继承了Java的众多优势,包括一次编写到处运行的承诺、高效的性能以及强大的可扩展能力。

 

一、概述

JSP内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显示声明即可使用。不过,在对JSP内置对象作进一步说明之前,首先来了解一下JSP内置对象的作用范围。

 

二、内置对象作用范围(Scope)

所谓内置对象的作用范围,是指每个内置对象的某个实例在多长的时间和多大的范围内有效,也即在什么样的范围内可以有效地访问同一个对象实例。在JSP中,定义了4种作用范围,分别是:Application、Session、Page和Request,它们代表了对象各自的“生命周期”。下面分别对其做介绍说明。

(一)Application Scope

1、作用范围:起始于服务器开始运行,application对象被创建之时;终止于服务器关闭之时。

2、说明:(1)任何页面在任何时候都可以访问application scope的对象。只要服务器还在正常运行;

(2)但另一方面,由于服务器自始自终都需要在内存中保存application对象的实例,因此application对象占据的资源是巨大的,一旦application对象数量过大,服务器运行效率也会大大降低。

(二)Session Scope

1、作用范围:在客户端同服务器相连接的时间,直到其连接中断为止。每个用户请求访问服务器时一般就会创建一个session对象,待用户终止退出则该session对象消失,即用户请求访问服务器时session对象开始生效,用户断开退出时session对象失效。

session的退出分为两种:

     (1)服务器对session对象有默认的时间限定,如果超过该时间限制,session会自动失效而不管用户是否已经终止连接,这主要是出于安全性的考虑。

      (2)使用java语句主动退出。

2、说明:有一个普遍的错误理解,就是认为关闭浏览器就关闭了session。正是由于关闭浏览器并不等于关闭了session,才会出现设置session有效时间的解决方法。

(三)Request Scope

1、作用范围:用户的一次请求过程。

2、说明:通常情况下,一次请求过程在用户访问到用户指定的页面后就结束了,但某些情况下,一次请求可能涉及到多个页面。

3、实例

// index.jsp
<%@ page contentType="text/html;charset=GB2312"%>
<%
request.setAttribute("username","july");
%>
<jsp:forward page="page1.jsp"/>

 

// page1.jsp
<%@ page contentType="text/html;charset=GB2312"%>
<% 
out.println("属性username的值为:"+request.getAttribute("username"));
%>
<a href="page2.jsp" target=_blank>page2.jsp</a>

 

// page2.jsp
<%@ page contentType="text/html;charset=GB2312"%>
<% 
out.println("属性username的值为:"+request.getAttribute("username"));
%>

 
JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 
 
JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 
 

(四)Page Scope

1、作用范围:只能够获取本页的数据。

2、说明:如果把上例中的page1.jsp和page2.jsp页面中的request对象全部替换成pageContext,然后重新执行,会发现连page2.jsp也无法读到username的属性。

 

三、JSP内置对象

(一)application对象

1、作用范围:application scope

2、说明:

(1)对于一个网站中所有的JSP页面,application对象只有一个。它们操作的是同一个application对象。

(2)注意:不要设置过多的application有效对象,造成服务器的负担。另外,不同的网站,使用不同的application对象。

3、实例:

(1)实现计数器 

application是一个全局变量,所有访问同一服务器的客户都可访问application对象。在counter.jsp中,我们应用application实现一个计数器来证明这一特点。

 

// application.jsp
<%@ page language="java" contentType="text/html;charset=GB2312"%>
<html>
<head>
<title>网站计数器</title>
</head>
<body>
<%
	if(application.getAttribute("count")==null){
		application.setAttribute("count","1");
		out.println("欢迎,您是第1位访客!");
	}else{
		int i = Integer.parseInt((String)application.getAttribute("count"));
		i++;
		application.setAttribute("count",String.valueOf(i));
		out.println("欢迎,您是第"+i+"位访客!");
	}
%>
<hr />
</body>
</html> 

 

(2)获取服务器系统相关信息

application对象负责提供应用程序在服务器中运行时的一些全局信息,因此我们可以利用application来获取一些系统相关信息。

 

<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head>
<title>application应用</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body>
<div align="center">
<h4 align="left">服务器信息:
  <%
  out.println(application.getServerInfo());
  %></h4>
  <h4 align="left">Java Servlet API 主版本号:
  <%
  out.println(application.getMajorVersion());
  %></h4>
  <h4 align="left">Java Servlet API 次版本号: 
    <%
  out.println(application.getMinorVersion());
  %></h4>
<h4 align="left"> 
本网页的真实路径: 
    <%out.println(application.getRealPath("index.jsp"));%>
  </h4>
 <%
     String str1="系统已提供了信息";
     application.log(str1);
 %>

  <h4 align="left">*注意: </h4>
  <p align="left">本网页已向日志文件中添加了如下信息:“ 
    <%out.println(str1);%>”</p>
</div>
</body>
</html>
 

 (二)config对象

1、说明:config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数及服务器的有关信息。

2、常用方法:

(1)getServletContext()方法

 (2)getInitParameter()方法

 (3)getInitParameterNames()方法

3、主要是对web.xml的数据进行读取。实际上是通过getServletContext()方法获得application对象,再根据application对象获得。

4、实例

(1)在web.xml文件中加入如下代码:

<servlet>
  	<servlet-name>aa</servlet-name>
  	<jsp-file>/index5.jsp</jsp-file>
  	<init-param>
  		<param-name>className</param-name>
  		<param-value>oracle.jdbc.driver.OracleDriver</param-value>
  	</init-param>
  	<init-param>
  		<param-name>url</param-name>
  		<param-value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</param-value>
  	</init-param>
  	<init-param>
  		<param-name>user</param-name>
  		<param-value>scott</param-value>
  	</init-param>
  		<init-param>
  		<param-name>pwd</param-name>
  		<param-value>tiger</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>aa</servlet-name>
  	<url-pattern>/aa</url-pattern>
  </servlet-mapping>

 创建一个index5.jsp,通过config对象获取xml文件中的数据并输出

<body>
	这个是index5.jsp!

	<%
	String className = config.getInitParameter("className");
	String url = config.getInitParameter("url");
	String user = config.getInitParameter("user");
	String pwd = config.getInitParameter("pwd");
%>


<%=className %> <br/>
<%=url %> <br/>
<%=user %> <br/>
<%=pwd %> <br/>
</body>

  

(三)exception对象

1、说明:当JSP页面发生错误时,会产生异常,而exception就是用来针对异常做出相应处理的对象,要使用该对象,必须在page命令中设定<%@ page isErrorPage="true"%>,否则编译会出现错误。

2、实例

 

// testError.jsp
<%@ page errorPage="handleError.jsp"%>
<%@ page contentType="text/html;charset=GB2312"%>
<html>
<body>
<%
      int i = 0;
      int j = 1/i;
%>
</body>
</html>
 
// handleError.jsp
<%@ page isErrorPage="true" contentType="text/html;charset=GB2312"%>
<html>
<body>
<h2>出错处理</h2>
在处理请求时发生了错误!
<p>
错误原因如下: <%= exception.getMessage() %>.
</body>
</html>
// 注意:没有isErrorPage=“true” ,则exception对象不会自动生成
 

 

(四)out对象

1、作用:主要用于向浏览器端输出数据。

2、out实际上是带有缓冲特性的PrinterWriter,可以称之为JspWriter。缓冲区容量是可以设置的,甚至也可以关闭,只要通过page指令的buffer属性就可以达到此目的。 

3、JSP文件代码中的文件内容会自动生成out.print()或者out.println()输出。

4、实例

 

<%@ page contentType="text/html;charset=gbk"%>
<%
int BufferSize=out.getBufferSize();
int Available=out.getRemaining();
%>
<%
String[] str = new String[5];
str[0] = "out";
str[1] = "输出";
out.println("<html>");
out.println("<head>");
out.println("<title>使用out对象输出HTML表格</title>");
out.println("</head>");
out.println("<body>");
out.println("<table>");
out.println("<tr>");
out.println("<td>BufferSize:</td>");
out.println("<td>"+BufferSize+ "</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>Available:</td>");
out.println("<td>"+Available+ "</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>数组序列</td>");
out.println("<td>数组值</td>");
out.println("</tr>");
for(int i=0;i<2;i++){
	out.println("<tr>");
	out.println("<td>str["+i+"]</td>");
	out.println("<td>"+str[i]+"</td>");
	out.println("</tr>");
}
BufferSize=out.getBufferSize();
Available=out.getRemaining();
out.println("<tr>");
out.println("<td>BufferSize:</td>");
out.println("<td>"+BufferSize+ "</td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>Available:</td>");
out.println("<td>"+Available+ "</td>");
out.println("</tr>");
out.println("</table>");
out.println("<body>");
out.println("</html>");
out.close();
%>

 效果:

 

JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 
 

(五)page对象

1、page对象指代JSP页面本身、代表了正在运行的由JSP文件产生的类对象。page对象很少在JSP中使用。

2、page对象在jsp生成的对应java文件中(转换过程后续会提到),可以用this代替。

 

关于内置对象的总结,先写这么多,之后会更新第二篇,关于request、response、pageContext和session的使用方法。

 

 谢谢您的关注和阅读,文章不当之处还请您不吝赐教~~~JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 

 

  • JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 
  • 大小: 27.4 KB
  • JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 
  • 大小: 27 KB
  • JSP九大内置对象总结(一)
            
    
    博客分类: JSP技术 JSP内置对象Web编程 
  • 大小: 931 Bytes