null第4章 JSP的内置对象第4章 JSP的内置对象4.1 JSP内置对象简介4.1 JSP内置对象简介内置对象(Implicit Object)是在JSP页面中内置的一些缺省的对象,这些对象不需要预先声明就可以在脚本代码和表达式中随意使用。在不需要显示地声明情况下,每一个JSP页面中默认都可以使用9个内置对象。
学习目标
熟悉主要内置对象的概念
理解主要内置对象的作用域和生命期
理解主要内置对象的作用和关系
熟悉主要内置对象的使用方法
4.1 JSP内置对象简介4.1 JSP内置对象简介
与输入输出(Input/Output)有关的内置对象
request,请求对象
response,响应对象
out,输出对象
与上下文(Context)有关的内置对象:
pageContext,页面上下文对象
session,会话对象
application,应用程序对象
与Servlet有关的内置对象:
config,配置对象
page,页面对象
与错误(Error)处理有关的内置对象:
exception,例外对象JSP内置对象大致可分为如下四类:(共有九种)4.1 JSP内置对象简介4.1 JSP内置对象简介JSP内部对象的方法实际上都源于Servlet API包
中提供的各种类的成员方法。Servlet API包主
要包括:
① javax.servlet;
② javax.servlet.http;
③ javax.servlet.jsp。
4.1 JSP内置对象简介表4-1 JSP内部对象与对应Servlet API的关系 4.1 JSP内置对象简介4.1 JSP内置对象简介内置对象的作用范围:
JSP的四种属性范围
(1)Application范围
用ServletContext接口设置和读取Application范围属性
作用范围:应用实例的生命期内有效,即起始于服务器开始运行,终止于服务器关闭。
(2)Session范围
用HttpSession接口设置和读取Session范围。
作用范围:在session期间有效,即在客户端同服务器相连接的时间,直到其连接中断为止。
4.1 JSP内置对象简介4.1 JSP内置对象简介(3)Request范围
用HttpServletRequest接口设置和读取Request范围的属性。
作用范围:在HTTP请求服务期间才有效。
(4)Page 范围
用PageContext接口设置和读取Page范围的属性。
作用范围:只在单个JSP页面上下文中可见,直到这个页面的全部输出处理完毕后就失效。
4.1 JSP内置对象简介4.1 JSP内置对象简介 JSP属性范围的设置和读取
在JSP页面中,PageContext属性有一对方法setAttribute / getAttribute用来设置/读取属性。它们还为方便地处理其他范围的属性提供了重载方法:
public Object getAttribute(String name, int scope);
public void setAttribute(String name, Object value, int scope); 4.1 JSP内置对象简介4.1 JSP内置对象简介JSP属性范围的选择
Page范围适合于单个页面中的组件用来互相通讯的数据。
(1)如果数据只在一个页面用到,就用Page范围。
(2)如果数据在多个页面用到,就用Request范围。
(3)如果数据在多个请求中用到,就用Session范围。
(4)如果数据在多个Session中用到,就用Application范围。
(5)如果数据对于多个Session来说是可写的,就要考虑使用实体Bean或消息。4.1 JSP内置对象简介4.2 JSP内置对象详解4.2 JSP内置对象详解重点介绍
Request,请求对象
Response 应答对象
Session,会话对象
Application,应用程序对象
综述综述需要注意的问
是对象名的写法,包括这些对象方法的调用时也要
写正确,因为Java语言本身是大小写敏感的。4.2.1 Request对象 4.2.1 Request对象
在jsp中,内置对象request封装了用户提交的信息,那么通过调用该对象相应的方法可以获取封装的信息。
因此,使用request对象的方法,可以获取客户端和服务器端信息。如客户端主机名、IP地址、传递参数名、参数值、服务器主机名和IP地址等等。
如何利用request对象获取客户提交的信息?
①客户一般使用html表单向服务器的某个jsp页面提交信息,表单的一个格式
null提交手段通常包括通过文本框、列表、文本区等。例如:
该表单使用post方法向tom.jsp页面提交信息,提交信息的手段是在文本框输入信息
②Request对象可以使用getParameter(String s)方法获取该表单通过text提交的信息。比如;
Request.getParameter(“boy”);Request的
Request的工作流程第一步,用户在客户端通过窗体填写信息。
第二步,将填写的信息提交到服务器,这是数据的传递过程,主要有两种方法:Post与Get方法。Post方法的数据传递方式比Get隐蔽,它不会在浏览器窗口的地址栏中显示所传递的数据。
第三步,JSP中的Request对象取得用户提交到服务器的信息,执行相应的JSP文件。
第四步,将JSP文件处理的结果返回给用户。nullRequest对象包括很多方法,主要有:
getParameter(String name):以字符串的形式返回客户端传来的某一个请求参数的值,该参数名由name指定。当传递给此方法的参数名没有实际参数与之对应时,返回null
getContextPath():返回环境路径。对于JSP来说,一般是当前Web应用程序的根目录。
setCharacterEncoding(String) :设置请求的输入进行编码的字符集合
getCookies():返回客户端的cookie对象,结果是一个cookie数组。
getSession(boolean create):返回和当前客户端请求相关联的HttpSession对象,如果当前客户端请求没有和任何HttpSession对象关联,那么当create变量为true,则创建一个HttpSession对象并返回;反之,返回null
getRequestURI():获得发出请求字符串的客户端地址。
nullgetparameterNames():返回客户端传送给服务器端的所有的参数名,结果集是一个Enumeration(枚举)类的实例。当传递给此方法的参数名没有实际参数与之对应时,返回null。
getParameterValues(String name):以字符串数组的形式返回指定参数所有值。
getHeader(String name):获得http
定义的传送文件头信息 getAttribute(String name):返回name指定的属性值,若不存在指定的属性,就返回null。
getattributeNames():返回request对象所有属性的名字,结果集是一个Enumeration(枚举)类的实例。
setAttribute(String name,Java.lang.Object o):设定名字为name的request参数值,该值由Object类型的o指定。
getMethod():返回客户端向服务器端传送数据的方法,一般方法有GET、POST、PUT等类型。
getServletPath():获得客户端所请求的脚本文件的文件路径。nullgetServerName():获得服务器的名字,如果没有设定服务器名,则返回服务器IP地址。
getServerPort():获得服务器的端口号。
getRemoteAddr():获得客户端的IP地址。
getRemoteHost():获得客户端主机的名字,若失败,则返回客户端电脑的IP地址。
getProtocol():获取客户端向服务器端传送数据所依据的协议名称,如http/1.1。
getContentLength():以字节为单位返回客户端请求的大小。如果无法得到该请求的大小,则返回-1。
getContentType():获取客户端请求的MIME类型。如果无法得到该请求的MIME类型,那么返回-1。
4.1.1 获取表单提交的数据4.1.1 获取表单提交的数据图4-1 页面交互关系hello_request.html
页面hello_req.jsp页面提交null
hello_request.html 页面代码Hello_req.jsp页面代码Hello_req.jsp页面代码<%@ page contentType="text/html;gb2312" import="java.util.*" %>
你好,
<%! String Name;%>
<%
Name=request.getParameter("UserName");
%>
<%=Name%>,
今天是
<%
Date today=new Date();
%>
<%=today.getDate()%>号,星期<%=today.getDay()%>
Hello_req.jsp页面运行结果Hello_req.jsp页面运行结果
你好,
llwang,
今天是
9号,星期1
图4-2 页面交互关系图4-2 页面交互关系4.1.2获取表单提交的数据
[例子4.2]网上单选问答题
问题分析:
由一个页面输出单选
,由另一页面获取用户选择,统计考生得分。
程序结构:
ex4_2.jsp页面将用户选择的答案提交给answer.jsp页面。页面交互关系如图4-2所示。null程序算法:
ex4_2.jsp:
创建一表单,包含两组单选按钮。
answer.jsp
1.获取用户提交的答案
2.与正确答案比较,统计得分
3.输出考试结果null 程序代码:
ex4_2.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
null answer.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%
int n=0;
String s1=request.getParameter("r");
String s2=request.getParameter("P");
if(s1==null)
{s1="";}
if(s2==null)
{s2="";}
if(s1.equals("b"))
{ n++;}
if(s2.equals("a"))
{ n++;}
%>
您得了<%=n%>分
程序运行结果程序运行结果图4-3 页面交互关系图4-3 页面交互关系4.1.3获取客户环境信息
[例子4.3]获取客户和服务器有关信息
程序结构:
本程序由两个页面构成,request2.jsp页面提交客户信息给getInfo.jsp 页面。两页面的交互关系如图4-3所示。
程序算法:
request2.jsp
创建一表单。
getInfo.jsp
1.输出环境信息
2.输出表单信息null<%@ page contentType="text/html;charset=gb2312" %>
request
post.jsp代码post.jsp代码<%@ page contentType="text/html;charset=gb2312"%>
test
<%
out.println("用户名:"+request.getParameter("User")+"
");
out.println("密码:"+request.getParameter("pwd")+"
");
out.println("浏览器:"+request.getParameter("radio")+"
");
out.println("标题:"+request.getParameter("check1")+"
");
out.println("详细:"+request.getParameter("check2")+"
");
out.println("隐含:"+request.getParameter("hidden")+"
");
out.println("getContentLength()="+request.getContentLength()+"
");
null out.println("getContentType()="+request.getContentType()+"
");
out.println("getRequestURI()="+request.getRequestURI()+"
");
out.println("getServerPort()="+request.getServerPort()+"
");
out.println("getServerName()="+request.getServerName()+"
");
out.println("getProtocol()="+request.getProtocol()+"
");
out.println("getRemoteAddr()="+request.getRemoteAddr()+"
");
out.println("getHeaderNames()="+request.getHeaderNames()+"
");
out.println("getMethod()="+request.getMethod()+"
");
out.println("getServletPath()="+request.getServletPath()+"
");
out.println("isRequestedSessionIdValid()="+request.isRequestedSessionIdValid()+
"
");
%>
(获取服务器及客户端的信息)运行结果运行结果null图4-4 页面交互关系图4-4 页面交互关系4.1.4 登陆示例
[例子4.4]用户登录
程序结构:
本程序由4个页面构成,login1.jsp页面提交客户登陆信息给checklogin.jsp 页面。若用户名和密码都正确转向success.jsp,反之转向failure.jsp, 页面间的交互关系如图4-4所示。
程序算法:
login1.jsp
创建一表单。
checklogin.jsp
1.验证登陆信息
2.进行相应的跳转login1.jsp
页面checklogin .jsp
页面提交success .jsp
页面failure .jsp
页面4.1.2 Response对象4.1.2 Response对象response对象主要用于动态响应客户端请求(Request),将JSP处理数据后的结果返回到客户端浏览器,它被封装成javax.servlet.http.HttpServletResponse接口。使用response对象可以动态创建Web页面、改变HTTP标头、还可以自动将客户端重定向(Redirct)到一个指定的页面中。另外,如果要向客户端写入Cookies时,response对象也是一种很好的工具。
Response对象最常用的作用是提供一个类似于前面所述的
动作的方法—sendRedirect 语法为:response.sendRedirect(“网页路径/网页名称”);
常用方法:常用方法:setCharacterEncoding(String s):设置响应内容的字符编码
setContentType(String s):改变contentType的属性值,响应设置内容类型头
addCookie(Cookie cookie):添加一个Cookie对象,用来保存客户端的用户信息,用request的getCookies()方法可以获得这个Cookie。
addHeader(String head,String value): 向包里添加一个头(head)及对应值(value)
sendRedirect(URL url) :实现客户重定向
setStatus(int n) :设置响应的状态代码。
cookie是在Web上用于存储客户系统信息的对象。所有的信息都以每行一个cookie的形式存放在客户端的一个名为cookie.txt的文件里。Cookie在HTTP文件头中进行服务器与客户机之间的传输4.2.2 Response对象4.2.2 Response对象动态改变相应contentType属性
当一个客户请求访问一个jsp页面时,如果该页面用page指令设置页面
的contentType属性值为text/html,那么jsp引擎将按照这种属性做出相
应,将页面的静态部分返回给客户。如果想动态的改变这个属性的值来相
应客户,就需要使用response对象的setContentType(String s)方法来
改变contentType的属性值,格式如下:
public void setContentType(String s);
该方法动态设置相应的MIME属性,参数s可取text/html,text/plain,application/x-msexcel,application/msword等。nullresponse的HTTP文件头
我们知道客户访问一个页面时,会提交一个http头给服务器,同时相应也包括一些头。Response对象可以使用方法
addHeader(String head,String value);或者
setHeader(String head,String value)
动态添加新的响应头和头的值,并将这些头发送给客户的浏览器。
常用来实现页面的自动刷新和自动跳转nullresponse 重定向
在某些情况下,当响应客户时,需要将客户重新引导到另一个页面。这时就要用到response对象的重定向的方法:
sendRedirect(URL url)
response.sendRedirect(“网页路径/网页名称”);
注意:若导向的是本地Web服务器上的网页,既可以使用相对路径,也可以使用绝对路径;
若导向的是其它Web服务器,则需要用http地址。null3.响应包的状态行
服务器响应客户时,它发送到客户端的首行被称为状态行。状态行由3位数的状态代码和描述状态代码的文字组成。下面是对状态代码的分类描述:
1xx :1开头的3位数字,主要用于实验。
2xx :2开头的3位数字,表明客户端的请求已成功。
3xx :3开头的3位数字,表明处理客户的请求以前,应 做一些别的处理。
4xx :4开头的3位数字,表明浏览器请求是非法的或无 效的。
5xx :5开头的3位数字,表明服务器出现了问题。
我们一般不需要修改状态行,在出现问题时,服务器会自动响应,发送相应的状态代码到客户端。也可以使用setStatus(int n)方法来增加状态行的内容。4.状态代码表
下面是服务器响应客户时,发送到客户端的状态代码描述.4.状态代码表
下面是服务器响应客户时,发送到客户端的状态代码描述.nullnullnullnullnull4.1.1 控制页面的刷新频率
[例子4.1.1]自动刷新页面
程序结构:
本程序由1个页面构成,refresh.jsp实现页面自动刷新
程序算法:
refresh.jsp
null<%@page contentType="text/html;charset=gb2312"%>
页面自动刷新
<%!
int i = 0 ;
%>
<%
response.setHeader("refresh","1") ;
%>
<%=i++%>
现在的时间是:
<%
out.println(" "+new Date());
%>
refresh.jsp代码null4.1.2 自动跳转示例
[例子4.1.2]自动跳转页面
程序结构:
本程序由2个页面构成,header.jsp在3s以后自动跳转并传递参数到common.jsp页面
程序算法:
header.jsp
null<%@page contentType="text/html;charset=gb2312"%>
自动跳转并传参数
<%
response.setHeader("refresh","3;URL=common.jsp?ref=aaa") ;
%>
三秒后跳转!!!
如果没有跳转,请按这里!!!
header.jspnull<%@page contentType="text/html;charset=gb2312"%>
自动跳转并传参数
参数:<%=request.getParameter("ref")%>
Common.jspnull4.2.3 网页重定向
[例子4.2.3]实现从一个网页到另一个网页的重定向
程序结构:
本程序由两个JSP页面文件构成。login2.jsp页面向ex4_7.jsp页面提供姓名信息。两个页面的交互关系如图所示。null程序算法:
login2.jsp:
创建一表单,包含用于输入姓名的文本框。
ex4_7.jsp
1.获取表单的姓名信息
2.对姓名进行编码
3.如果登陆成功,则重新定向到 success.jsp页面,否则重新定向到login2.jsp。null<%@page contentType="text/html;charset=gb2312"%>
登录范例
<%
request.setCharacterEncoding("gb2312");
String name = request.getParameter("name");
String password = request.getParameter("password");
if("张三".equals(name)&&"111".equals(password)){
response.sendRedirect(request.getContextPath()+"/success.jsp"); }
else
{
response.sendRedirect(request.getContextPath()+"/login1.jsp");
}
%>
ex4_7.jsp4.1.3 Session对象session对象指的就是客户端与服务器端的一次会话。
session对象是JSP中一个很重要的内部对象,我们使用它来保存某个特定客户端(访问者)一次访问的一些特定信息。
在JSP网络编程中,有多种方法可以保存客户信息,但是最常用、最实用的还是session对象。
4.1.3 Session对象 Session对象简介http协议作为一个无状态协议,无法判断一个客户的分时段的连接是不是属于同一个客户。而一个客户在对一个服务器进行访问的时候,可能会在这个服务器的几个页面之间反复连接、反复刷新一个页面或者不断向一个页面提交信息等,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。 Session对象简介session 对象的idsession 对象的id当一个客户首次访问服务器上的一个jsp页面时,jsp引擎产生一个session对象,这个session对象调用相应的方法可以存储客户在访问各个页面期间提交的各种信息,比如,姓名、号码等信息。这个session对象被分配一个String类型的id号,jsp引擎同时将这个id号发送给客户端,存放在客户的cookie中。这样session对象和客户之间就建立起一个一一对应的关系。
session 对象与URL重写 session 对象与URL重写 session对象能和客户建立起一一对应的关系依赖于客户的浏览器是否支持cookie。否则服务器无法将id存放到客户端,就不能建立session对象和客户的一一对应关系。这时就需要URL重写来实现session对象的唯一性。
所谓URL重写,就是当客户从一个页面重新连接到另外一个页面时,通过向这个新的URL添加参数,把session对象的id传带过去,这样就可以保障客户在该网站各个页面中的session对象是完全相同的4.1.3 Session对象Session对象的作用
(1) session可以用来储存访问者的一些特定信息。主机服务器就是根据session来跟踪这些信息的。 (2) session可以创建访问者信息容器。 (3) session可以用来跟踪访问者的访问路径,从中挖掘有用的信息,如访问者的兴趣爱好、访问目的。 用户在Web应用程序中访问同一页面时,session变量始终存在,当用户在应用程序的页之间跳转时,存储在session对象中的变量也不会清除,当然也可以使用session方法显式地结束一个会话和设置空闲会话的超时期限。4.1.3 Session对象nullSession对象生命周期
从一个客户会话开始到会话结束这段时间称为session对象的生命周期。具体上说,指客户访问某web目录下的页面到关闭浏览器,离开该web目录,这段时间成为session对象的生命周期。4.1.3 Session对象4.1.3 Session对象 每一个客户端都有一个session对象用来存放于这个客户端相关的数据。
在JSP的程序中,通常不用任何代码,就可以直接使用session对象。不过为了确认,可以加入以下代码,以表示需要启动session功能 <%@page session=“true”%> 如果设置上述的session值为false,则说明禁用session功能。
常用的方法包括getId、 getAttribute、getAttributeNames和setAttribute等。null session对象的常用方法null
4.3.1 信息的保存和获取
[例子4.3.1]将购买者的姓名、商品名保存在session对象中,实现同一web目录下的页面对session对象中的信息共享。
问题分析:
创建三个页面,第一个页面输入姓名,第二个页面输入商品名,第三个页面实现结帐处理。
程序结构:
本程序包含三个JSP页面文件,三个页面文件保存在同一web目录中。 ex4_10.jsp页面接受姓名录入,并将姓名提交给first.jsp页面;first.jsp页面接受商品名的录入,并将商品名提交给account.jsp页面。三个页面的交互关系如图5-7所示。null图 页面交互关系程序算法:
ex4_10.jsp:
创建一个包含文本控件的表单,用此文本控件录入姓名
first.jsp:
1.获取客户端输入的姓名(xm)
2.将"属性名-值"对,即("name",xm)添加到session对象中
3.创建一个包含文本控件的表单,用此文本控件录入商品名
account.jsp:
1.定义一个对字符串s进行编码的方法:
public String getString(String s)
2.获取客户端录入的商品名(sp)
3.将"属性名-值"对,即("goods",sp)添加到session对象中
4.从session对象中获取姓名和商品名
5.将姓名和商品名输出到客户端null程序代码:
ex4_10.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
输入您的姓名连接到第一百货(first.jsp)
null
first.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%
String xm=request.getParameter("buy_name");
session.setAttribute("name",xm);
%>
这里是第一百货
输入您想购买的商品连接到结帐(account.jsp)
null
account.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%! //处理字符串的方法
public String getString(String s)
{
if(s==null)
{
s="";
}
try{
byte b[]=s.getBytes("ISO-8854-1");
s=new String(b);
}
catch(Exception e)
{
}
return s;
}
%>
null<%
String sp=request.getParameter("shangpin");
session.setAttribute("goods",sp);
%>
<%
String xinming=(String)session.getAttribute("name");
String shangpin=(String)session.getAttribute("goods");
xinming=getString(xinming); //对姓名进行编码
shangpin=getString(shangpin);//对商品名进行编码
%>
这里是结帐处
顾客的姓名是: <%=xinming%>
您选择购买的商品是: <%=shangpin%>
nullnull4.3.2显示客户会话ID
[例子]同一客户访问两个不同的web目录中的页面,查看该客户在不同web目录中的session对象的ID号。
问题分析:
创建两个web目录,并在其中部署JSP页面,然后通过表单或超连接,将两个web目录中的页面连接起来。
程序结构:
本程序由四个JSP页面文件构成。 三个页面 ex9_9.jsp、liu.jsp、wang.jsp部署在目录wang/ch4下面;file.jsp页面部署在目录ch2下面。下面是四个页面的交互关系如图所示。nullex9_9.jsp
页面liu.jsp
页面网页重定向wang.jsp
页面超链接file.jsp
页面超链接超链接null程序算法:
ex9_9.jsp:
1.获取访问本页面的客户的session对象ID号
2.输出ID号
3.创建表单,该表单提交时,将信息提交给liu.jsp页面
4.在创建表单,该表单提交时,将信息提交给file.jsp页面
liu.jsp:
1.获取访问本页面的客户的session对象ID号
2.输出ID号
3.设置超链接,链接到wang.jsp页面
wang.jsp:
1.获取访问本页面的客户的session对象ID号
2.输出ID号
3.设置超链接,链接到ex9_9.jsp页面
file.jsp:
1.获取访问本页面的客户的session对象ID号
2.输出ID号
3.设置超链接,链接到ex9_9.jsp页面null程序代码:
ex9_9.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%
String s=session.getId();
String str=response.encodeURL("liu.jsp");
%>
您在访问ex9_9.jsp页面
你的session对象的ID是:
<%=s%>
null liu.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%
String s=session.getId();
String str=response.encodeURL("wang.jsp");
%>
你在访问liu页面
您的session对象的ID是:
<%=s%>
单击超连接,连接到wang页面
欢迎到wang页面来!
null wang.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%
String s=session.getId();
String str=response.encodeURL("ex9_9.jsp");
%>
你在访问wang页面
您的session对象的ID是:
<%=s%>
单击超连接,连接到ex9_9页面
欢迎到ex9_9页面来!
null file.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<%
String s=session.getId();
%>
你在访问file页面
您的session对象的ID是:
<%=s%>
单击超链接,返回到ex9_9页面
欢迎到ex9_9页面来!
nullnullnull4.1.4 application对象4.1.4 application对象Application对象实现了不同网页之间的数据共享,而且还可以实现跨机共享数据。
这个对象开始于Web服务器的启动,结束于Web服务器的关闭,在这期间,Application对象的数据将一直保存。
application对象保存了一个应用系统中一些公用的数据。与session对象相比,application对象是所有客户共享的,而session对象则是每个客户专用的。
“application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getAttribute和getAttributeName等。
nullapplication对象生命期
application对象随着服务器启动而创建,随着服务器关闭而消失。application对象的生命周期指从application对象创建到服务器关闭这段时间。
application对象与线程
当多个客户点击同一页面时,JSP引擎为每个客户启动一个线程,这些线程共享同一个application对象.由于所有客户共享同一个application 对象,任何客户对application对象中数据的改变都会影响到其它的客户,因此,对该对象的操作需要实现同步处理。application对象的方法application对象的方法方法4.2.1 application对象实现网页计数器4.2.1 application对象实现网页计数器<%--用application对象实现网页计数器counterapp.jsp文件代码--%>
<%@ page contentType="text/html;charset=gb2312"%>
网页计数器
<% if (application.getAttribute("counter")==null)
application.setAttribute("counter","1");
else{
String strnum=null;
strnum=application.getAttribute("counter").toString();
int icount=0;
icount=Integer.valueOf(strnum).intValue();
icount++;
application.setAttribute("counter",Integer.toString(icount));
} %>
您是第<%=application.getAttribute("counter")%>位访问者!
运行结果(第一次访问)运行结果(第一次访问)刷新一次刷新一次null4.4.2读取系统信息
输出本页面所在的实际路径、使用的JSP引擎、application对象对应的字符串。
程序结构:
程序名:ex4_12.jspnull 程序代码:
<%@ page contentType="text/html;charset=GB2312" %>
读取系统信息
<%
String path="/ex4_12.jsp";
out.print("context数据的内容:");
out.print(application.getContext(path)+"");//读取p