版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章Web动态编程技术JSP 2.1 JSP的概念及特性 2.2 JSP页面的组成 2.3 Session元素 2.4 Cookie元素 2.5 JSP通过JavaBean访问数据库的综合实例 2.6 Student_info实例在JBuilder中的实现 思考题 2.1 JSP的概念及特性 2.1.1 JSP与ASP脚本语言的比较1JSP与ASP处理机制的比较JSP与Microsoft的ASP技术非常相似。 两者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码。在ASP或JSP环境下, HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的HTML页
2、面只依赖于Web服务器,而ASP和JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。ASP和JSP都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。 ASP的编程语言是基于VB的脚本语言,JSP使用的是Java,这是两者最明显的区别。ASP与JSP还有一个更为本质的区别:两种语言引擎用完全不同的方式处理页面中嵌入的程序代码。在ASP下, 基于VB的脚本代码被ASP引擎解释执行;在JSP下,代码被编译成Servlet并由Java虚拟机执行,这种编译操作仅在对JSP页面的第一次请求时发生。 2JSP与ASP的性能比较
3、 表2-1 JSP与ASP的性能比较 2.1.2 JSP运行环境Sun公司的JSP主页在http:/products/jsp/index.html,从这里可以下载 JSP 规范。这些规范定义了供应商在创建 JSP 引擎时所必须遵从的一些规则。 执行JSP代码前, 需要在服务器上安装JSP引擎Tomcat。 以安装到E盘为例,安装Tomcat之后,将源文件放在E:tomcatwebappsROOT目录下,执行E:tomcatbinstartup.bat命令即可启动服务器。默认配置下服务器在端口 8080 监听,使用http:/localhost:8080即可打开缺省页面。 2.1.3 JDK的安
4、装与配置Java开发工具JDK(Java Development Kit)是许多Java专家最初使用的开发环境。尽管许多编程人员已经使用第三方的开发工具,但JDK仍被作为Java开发的重要工具。JDK的安装与安装其他软件一样,直接双击setup,按照安装要求就可以顺利安装成功。现在以1.4.0版本为例,假设安装到E盘。 JDK的安装及配置步骤如下:(1) 设置JAVA_HOME环境变量:右键单击【我的电脑】属性【高级】【环境变量】,新建一个系统变量,命名为JAVA_HOME,值为E:j2sdk1.4.0,单击【确定】完成配置。如图2.1所示。 图2.1 JAVA_HOME的配置 (2) 设置C
5、LASSPATH环境变量:环境变量的配置位置同上。新建一个系统变量,命名为CLASSPATH,值为E:j2sdk1.4.0libdt.jar;E:j2sdk1.4.0libtools.jar,单击【确定】完成当前配置。如图2.2所示。 图2.2 CLASSPATH的配置 至此,JDK环境变量配置完毕,单击【环境变量】属性框里的【确定】,可完成应用配置。这样,就完成了运行Tomcat的前提。 2.1.4 Tomcat的安装和配置一般来说,Tomcat可从网站直接下载,解压后即可使用。如果有安装程序,则直接点setup安装即可。以解压或安装到D盘为例:解压或安装完后,进入到d:tomcatbin,
6、然后双击目录里名为startup. bat的批处理文件就可以开启Tomcat服务器。如图2.3所示。 图2.3 Tomcat服务器启动后的示意图 注意:有些时候8080端口可能会被某个应用程序占用(如Oracle等),这时就需要修改Tomcat服务器的端口,可在D:tomcatconfserver.xml中修改,如图2.4所示。 图2.4 Tomcat配置文件server.xml 2.1.5 JBoss的安装和配置现今,越来越多的Web应用建立在JBoss Web服务器上,在此对JBoss的安装及配置进行简要介绍。在JBoss的安装目录下(如D:jboss-3.2.6)进入bin目录,运行ru
7、n.bat文件,运行后的界面如图2.5所示。 图2.5 JBoss服务器完全启动后的示意图 JBoss的配置文件在D:jboss-3.2.6serverdefaultdeployjbossweb-tomcat50.sarserver.xml,如图2.6所示。注:这里以JBoss装在D盘下为例。 图2.6 JBoss配置文件server.xml 设置端口为80882.1.6 JSP的基本语法功能:写在JSP程序中,但不发给客户。 JSP语法: 例程2.1 JSP注释(comment.html) A Comment Test A Test of Comments 描述: 用隐藏注释标记的字符会在J
8、SP编译时被忽略掉。JSP编译器不会对之间的语句进行编译,它不会显示在客户的浏览器中,也不会在源代码中看到。上面的例程如图2.7所示。从运行效果来看,代码里面的注释部分This comment will not be visible in the page source并没有出现在浏览器里。 图2.7 comment.html的运行效果 2.1.7 JSP生命周期JSP的生命周期主要包括初始化、请求处理和中止。初始化:在客户端第一次请求该JSP页时,调用jspInit()方法。请求处理:当客户请求到达时,容器调用jspService方法。该方法是JSP页面转换成Servlet时自动转换成的。中
9、止:当Web服务器和容器关闭时,容器调用JSP的jspDestroy()方法。 2.1.8 JSP执行流程JSP是通过JSP Container转换成Servlet并运用于网页的语言。JSP执行流程如图2.8所示。 图2.8 JSP执行流程示意图 当用户在客户端发出请求时,通过Web服务传到JSP容器,JSP容器将判断JSP页面在当前JSP容器中是否是第一次请求。如果是第一次请求,则将JSP文件编译成Servlet文件以应答客户请求,否则需判断JSP页面是否作过修改;如果作过修改,则需编译JSP文件,否则无需编译,直接调用上次编译后的应答类进行客户端的响应。 2.2 JSP页面的组成 JSP页
10、面包括JSP元素、注释及HTML元素,如图2.9所示。JSP指令:用于将消息传送到JSP引擎。JSP动作:使用XML语法格式的标记来控制JSP引擎的各种行为。JSP脚本:插入Java语言程序代码。 图2.9 JSP页面的组成 2.2.1 JSP指令JSP指令是为JSP引擎而设计的。该指令并不直接产生任何可见输出,而只是告诉引擎如何处理其余JSP页面。这些指令始终被括在“”标记中。两个最重要的指令是page和include。另外,taglib指令很少使用,在用JSP1.1创建自定义标记时可以使用它。 几乎在所有的JSP页面顶部都会看到page指令。尽管不是必需的,但page指令可以让你指定:(1
11、) 到何处查找起支持作用的Java类别:(2) 出现Java运行问题时,通过errorPage将用户引向何处:1include指令include指令用于把其它的文本文件或JSP文件加入到当前的JSP文件中,同时解析这个文件中的JSP语句。 include指令可以把你的内容分成更多可管理的元素,比如包括一个普通页面页眉或页脚的元素。包含的网页可以是一个固定的HTML 页面或更多的JSP内容,形式如: 指令将会在JSP编译时插入一个包含文本或代码的文件,当你使用指令时,这个包含的过程相当于静态的。静态的包含就是指这个被包含的文件将会被插入到JSP文件中去。这个包含的文件可以是JSP文件、HTML文
12、件或文本文件。如果包含的是JSP文件,则这个包含的JSP文件中的代码将会被执行。这个被包含文件可以是HTML文件、JSP文件、文本文件,或者只是一段Java代码。但是得注意,在这个包含文件中不能使用、标记,因为这将会影响在原JSP文件中同样的标记,有时还会导致错误。如果这个包含文件被改变,则包含此文件的JSP文件将被重新编译。 属性: file=relativeURL:这个包含文件的路径名一般来说是指相对路径,不需要什么端口、协议和域名,如error.jsp、templates/onlinestore.html、/beans/calendar.jsp 如果这个路径以“/”开头,那么这个路径主要
13、是参照JSP应用的上下关系路径;如果路径是以文件名或目录名开头的,那么这个路径就是正在使用的JSP文件的当前路径。 例程2.2 include指令(include.jsp)An Include Test The current date and time are 被包含文件date.jsp: 图2.10 include.jsp的运行效果 2page指令功能:定义JSP文件中的全局属性。JSP 语法:% page language=java extends=package.class import=package.class | package.*, . session=true | false
14、 buffer=none | 8KB | sizekb autoFlush=true | false info=text errorPage=relativeURL contentType=mimeType ;charset=characterSet | text/html; charset=ISO-8859-1 isErrorPage=true | false 例: 相关描述:指令作用于整个JSP页面,同样包括静态的包含文件。但是,指令不能作用于动态的包含文件,比如 。可以在一个页面中用多个指令,但是其中的属性只能用一次。不过也有个例外,那就是import属性。因为import属性和Java
15、中的import语句差不多(参照Java Language),所以就可以多用此属性几次。无论把指令放在JSP文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性以及好的编程习惯,最好还是把它放在JSP文件的顶部。 属性: language=java:声明脚本语言的种类,暂时只能用“java”。 extends=package.class:标明JSP编译时需要加入Java Class的全名,但是得慎重地使用它,它会限制JSP的编译能力。 import=package.class | package.* , .:指明需要导入的Java包的列表,这些包就作用于程序段、表达式以
16、及声明。 下面的包在JSP编译时已经导入了,所以不需要再指明:java.lang.* javax.servlet.*javax.servlet.jsp.* javax.servlet.http session=true | false:设定客户是否需要HTTP session。如果设定为true,那么session是有用的。 如果设定为false,那么就不能使用session对象,以及定义了scope=session的元素,这样使用会导致错误。缺省值是true。 buffer=none | 8KB | sizekb:buffer的大小被out对象用于处理执行后的JSP对客户浏览器的输出。缺省值
17、是8 KB。 autoFlush=true | false:设置如果buffer溢出,是否需要强制输出。如果其值被定义为true(缺省值),输出正常,如果它被设置为false,并且这个buffer溢出,就会导致一个意外错误的发生。如果把buffer设置为none,那么就不能把autoFlush设置为false。 isThreadSafe=true | false:设置JSP文件是否能多线程使用。缺省值是true,也就是说,JSP能够同时处理多个用户的请求。如果设置为false,则一个JSP文件一次只能处理一个请求。 info=text:一个文本在执行JSP时将会被逐字加入JSP中,能够使用Se
18、rvlet.GetServletInfo方法取回。 errorPage=relativeURL:设置处理异常事件的JSP文件。当页面出现一个设有捕获的异常时,指向另一个JSP页面的URL。 contentType=mimeType ;charset=characterSet | text/html;charset=ISO-8859-1:设置MIME类型。缺省MIME类型是text/html, 缺省字符集为ISO-8859-1。 isErrorPage=true | false:设置此页是否为出错页。如果被设置为true,则能使用exception对象。 3taglib指令功能:定义一个标签库及
19、其自定义标签的前缀。JSP 语法: uri:英文全称为Uniform Resource Identifier,其功能是根据标签的前缀对自定义的标签进行惟一的命名。 例: . 相关描述: 指令声明此JSP文件使用了自定义的标签,同时引用标签库,还指定了它们的标签的前缀。 自定义的标签含有标签和元素之分。因为JSP文件能够转化为XML,所以了解标签和元素之间的联系很重要。 标签只不过是一个在意义上被抬高了的标记,是JSP元素的一部分。 JSP元素是JSP语法的一部分,和XML一样有开始标记和结束标记。元素也可以包含其它的文本、标记、元素。 4隐藏对象隐藏对象也叫内置对象,是JSP自带的,不需在页面
20、声明就可直接使用。在脚本中使用隐藏对象,使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息,从而使对象开发者摆脱了很多繁琐的工作。隐藏对象包括: Request:请求对象。 Response:响应对象。 PageContext:页面上下文对象。 Session::会话对象。 Application:应用程序对象。 Out:输出对象。 Config:配置对象。 Page:页面对象。 Exception:例外对象。JSP内置对象映射表如表2-2所示。表2-2 JSP内置对象映射表 各对象的描述如下:(1) Request对象:代表的是来自客户端的请求,此请求包含来自GET/POS
21、T请求的参数,在服务器端接受并得到从客户端浏览器提交或上传的信息。Request 对象可以访问任何基于 HTTP 请求传递的所有信息,包括从Form表单用 POST 方法或 GET 方法传递的参数、cookie等。关于它的方法使用得较多的是getParameter、getParameterNames和getParameterValues。通过调用这几个方法,可获取请求对象中所包含的参数的值。 (2) Response对象:代表的是对客户端的响应,也就是说,可以通过Response对象组织发送到客户端的数据。但由于处于组织方式的底层,因此建议普通读者不使用。需要向客户端发送文字时,直接使用Out
22、对象即可。(3) PageContext对象:直译时可以称作“页面上下文”对象,代表的是当前页面运行的一些属性,常用的方法包括findAttribute、getAttribute、getAttributesScope和getAttributeNamesInScope。一般情况下PageContext对象用到的也不是很多。只有在项目所面临的情况比较复杂时,才会利用页面属性来辅助处理。 (4) Session对象:代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,例如,在线购物、客户轨迹跟踪等。Session对象建立在Cookie的基础上,所以使用时应注意判断客户
23、端是否打开了Cookie。常用的方法包括getId、getValue、getValueNames和putValue等。(5) Application对象:负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。 (6) Out对象:代表了向客户端发送数据的对象,与Response对象不同。通过Out对象发送的内容将是浏览器需要显示的内容,是文本一级的。可以通过Out对象直接向客户端输出一个由程序动态生成的HTML文件。 常用的方法除了Print和PrintIn之外, 还包括clear、clearBuffer、flush、getBufferS
24、ize和gerRemaining。因为Out对象内部包括了一个缓冲区,所以需要对缓冲区进行操作的方法。(7) Config对象:提供一些配置信息, 以获得Servlet初始化时的参数。 常用的方法有getInitParameter和getInitParameterNames。 (9) Exception对象:代表了JSP文件运行时所产生的例外对象。此对象不能在一般JSP文件中直接使用,只能在使用了“”的JSP文件中使用。这是因为JSP文件运行时产生的错误对象被向外抛出,只有被使用了“”标记,从而被具有拦截错误对象功能的JSP文件所拦截。最常用的方法就是getMessage,用以获得错误信息,此
25、外还会用到getLocalizedMessage和printStackTrace。 2.2.2 JSP动作JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。 利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码等。常见标准JSP动作(JSP 1.1规范Web包容器所支持的7个标准动作)有:用于在当前页面加入其它页面的内容,运行时加入;include指令在编译时就加入。:用于转发请求,page属性指定转发的目的页面,如:。:用于在使用include和forward操作时添加传递的参数。在被包括的页面或转发的页面进行r
26、equest访问时可以获得添加的参数,如:。:用于下载Java插件,且该动作在客户端执行。 1动作功能:包含一个静态或动态文件。 JSP 语法:jsp:include page=relativeURL | flush=true / 或者jsp:include page=relativeURL | flush=true jsp:param name=parameterName value=parameterValue | / 例: 相关描述: 元素允许包含动态文件和静态文件,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到JSP文件中去;如果这个文件是动
27、态的,那么这个被包含文件也会被JSP编译器执行(与ASP相似)。 不能从文件名上判断一个文件是动态的还是静态的,比如aspcn.jsp 就有可能只是包含一些信息而已,并不需要执行。能够同时处理这两种文件,因此就不需要包含时还要判断此文件是动态的还是静态的。如果这个包含文件是动态的,那么还可以用来传递参数名和参数值。 相关属性: page=relativeURL | :参数为一相对路径,或者是代表相对路径的表达式。 flush=true:表示是否要立即打印出来。如果要立即打印出来,则必须使用flush=true,不能使用false值。缺省值为false。 jsp:param name=param
28、eterName value=parameterValue |/:子句能传递一个或多个参数给动态文件。在一个页面中可使用多个来传递多个参数。 2动作功能:重定向一个HTML文件、JSP文件或者是一个程序段。JSP 语法:jsp:forward page=relativeURL | / 或者jsp:forward page=relativeURL | jsp:param name=parameterName value=parameterValue | / 例:或者 相关描述: 标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。标签以下的代码,将不能执行。 能够向目标文件
29、传送参数和值。在上面的例子中传递的参数名为username,值为jsmith。如果使用了标签的话,则目标文件必须是一个动态的文件,且能够处理参数。 如果使用了非缓冲输出的话,那么使用时就要小心。如果在使用之前JSP文件已经有了数据,那么文件执行就会出错。 相关属性: page=relativeURL | :这里是一个表达式或一个字符串,用于说明将要定向的文件或URL。这个文件可以是JSP程序段,或者是其它能够处理request对象的文件(如asp、cgi、php)。 jsp:param name=parameterName value=parameterValue | /:向一个动态文件发送一
30、个或多个参数,这个文件一定是动态文件。 如果想传递多个参数,则可以在一个JSP文件中使用多个。name指定参数名,value指定参数值。 3动作功能:执行一个applet或bean,有可能的话还要下载一个Java插件执行它。JSP 语法: jsp:param name=parameterName value=parameterValue | / text message for user 例:Unable to load applet 相关描述: 元素用于在浏览器中播放或显示一个对象(典型的就是applet和bean),而这种显示需要浏览器的Java插件。 当JSP文件被编译并送往浏览器时,元
31、素将会根据浏览器的版本替换成或者元素。注意,用于HTML 4.0,用于HTML 3.2。 一般来说,元素会指定对象是applet还是bean,同样也会指定class的名字及位置。另外,还会指定将从哪里下载这个Java插件。相关属性: type=bean | applet: 将被执行的插件对象的类型。必须得指定是bean还是applet,因为这个属性没有缺省值。 code=classFileName:将会被Java插件执行的Java Class的名字,必须以 .class结尾。这个文件必须存在于codebase属性指定的目录中。 codebase=classFileDirectoryName:将
32、会被执行的Java Class文件的目录(或者是路径)。如果没有提供此属性,那么使用的JSP文件的目录将会被使用。 name=instanceName:是bean或applet实例的名字,它将会在JSP其它的地方调用。 archive=URIToArchive, .:一些由逗号分开的路径名。这些路径名用于预装一些将要使用的class,这会提高applet的性能。 4动作功能:创建一个Bean实例并指定它的名字和作用范围。 JSP语法:jsp:useBean id=beanInstanceName scope=page | request | session | application clas
33、s=package.class | type=package.class | class=package.class type=package.class | beanName=package.class| type=package.class / | other elements 例: 相关描述: JavaBean类似于ActiveX控件,它们都能提供常用功能并且可以重复使用。 JavaBean的值是通过一些属性获得的,可通过这些属性访问JavaBean设置。相关属性: id=beanInstanceName:在所定义的范围中确认Bean的变量,能在后面的程序中使用此变量名来分辨不同的Bea
34、n,这个变量名对大小写敏感。 scope=page | request | session | application:Bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明: page :能在包含元素的JSP文件以及此文件中的所有静态包含文件中使用Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。 request :在任何执行相同请求的JSP文件中使用Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用request对象访问Bean,比如request.getAttribute(beanInstanceName)。 session :从
35、创建Bean开始,就能在任何使用相同session的JSP文件中使用Bean。这个Bean存在于整个session生存周期内,任何在分享此session的JSP文件都能使用同一个Bean。注意,在创建Bean的JSP文件的指令中必须指定session=true。 application :从创建Bean开始,就能在任何使用相同application的JSP文件中使用Bean。这个Bean存在于整个application生存周期内,任何在分享此application的JSP文件都能使用同一Bean。 class=package.class:使用new关键字以及class构造器从一个class中示
36、例一个Bean。这个class不能是抽象的,必须有一个公用的、没有参数的构造器。这个package的名字区别大小写。 5 动作功能:设置Bean中的属性值。JSP语法:jsp:setPropertyname=beanInstanceNameproperty= * | property=propertyName param=parameterName | property=propertyName value=string | / 例: 相关描述: 元素使用Bean给定的setter方法,在Bean中设置一个或多个属性值。在使用这个元素之前必须使用声明此Bean。这是因为和是联系在一起的,同时它
37、们使用的Bean实例的名字也应当相匹配(就是说,在中的name的值应当和中id的值相同)。 能使用多种方法利用来设定属性值: 可以通过用户输入的所有值(被作为参数储存在request对象中)来匹配Bean中的属性; 通过用户输入的指定的值来匹配Bean中指定的属性;还可以在运行时使用一个表达式来匹配Bean的属性。 相关属性: name=beanInstanceName:表示已经在中创建的Bean实例的名字。 property=*:储存用户在JSP输入的所有值,用于匹配Bean中的属性。在Bean中的属性的名字必须和request对象中的参数名一致。从客户传到服务器上的参数值一般都是字符类型,
38、这些字符串为了能够在Bean中匹配,就必须转换成其它的类型。下面列出了Bean属性的类型以及它们的转换方法。 java.lang.Boolean.valueOf(String)java.lang.Byte.valueOf(String)java.lang.Character.valueOf(String) java.lang.Double.valueOf(String)java.lang.Integer.valueOf(String)java.lang.Float.valueOf(String)java.lang.Long.valueOf(String)如果request对象的参数值中有空值,
39、那么对应的Bean属性将不会设定任何值。同样地,如果Bean中有一个属性没有与之对应的request参数值,那么这个属性同样也不会设定。 property=propertyName param=parameterName :使用request中的一个参数值来指定Bean中的一个属性值。在这个语法中,property指定Bean的属性名,param指定request中的参数名。 如果Bean属性和request参数的名字不同,那么就必须得指定property和param;如果它们同名,那么只需要指明property就行了;如查参数值为空(或未初始化),则对应的Bean属性不被设定。 proper
40、ty=propertyName value=string | :使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果是字符串,那么它就会被转换成Bean属性的类型(查看上面字符串转化为其它类型的方法);如果是一个表达式,那么它的类型就必须和它将要设定的属性值的类型一致;如果参数值为空,那么对应的属性值也不会被设定。另外,不能在一个中同时使用param和value。如果使用了property=*,那么Bean的属性没有必要按html表单中的顺序排序。 6动作功能:获取Bean的属性值,用于显示在页面中。JSP语法:例:Calendar of 相关描述: 元素将获得Bean的属
41、性值,并可以将其使用或显示在JSP页面中。在使用之前,必须用创建它。 元素有一些限制: 不能使用来检索一个已经被索引了的属性; 能够和JavaBeans组件一起使用,但是不能与Enterprise Bean一起使用。相关属性: name=beanInstanceName:Bean的名字,由指定。 property=propertyName:指定Bean的属性名。 在Sun的JSP参考中提到:如果使用来检索的值是空值,那么NullPointerException将会出现;同时,如果使用程序段或表达式来检索其值,那么在浏览器上出现的是null(空)。 例程2.3 numguess.jspNumbe
42、rGuessCongratulations! You got it.And after just tries.Care to try again? Welcome to the Number Guess game.Im thinking of a number between 1 and 100. Whats your guess? Good guess, but nope. Try .You have made guesses.Im thinking of a number between 1 and 100.Whats your guess? 例程2.4 NumberGuessBean.j
43、ava(例程2.3所用javabean文件)package num;import java.util.*;public class NumberGuessBean int answer;boolean success;String hint;int numGuesses;/构造函数执行初始化public NumberGuessBean() reset(); /设置guess属性值public void setGuess(String guess) numGuesses+;int g;try g = Integer.parseInt(guess); catch (NumberFormatExce
44、ption e) g = -1; if (g = answer) success = true; else if (g = -1) hint = a number next time; else if (g answer) hint = lower; /获得是否猜数成功属性public boolean getSuccess() return success; /获得提示属性public String getHint() return + hint; /获得猜数次数属性public int getNumGuesses() return numGuesses;/复位:重新设置猜数答案,并初始化属性
45、值public void reset() answer = Math.abs(new Random().nextInt() % 100) + 1; success = false; numGuesses = 0; 把JSP文件放到Tomcat的webapps/root/下面,把Java文件编译生成的class文件放到webapps/root/web-inf/classes/num下面。如果没有classes文件夹,则要自己新建一个,然后在classes下面再建一个包,对本例来说,就是num文件夹。numguess.jsp编译运行效果如图2.11所示。 图2.11 numguess.jsp的运行
46、效果 2.2.3 JSP脚本1JSP声明JSP声明用来定义页面级变量,以保存信息或定义JSP页面的其余部分可能需要的支持方法。如果发现代码太多,则通常把它们写成一个独立的Java类别。声明一般都在“”标记中。一定要以分号( ;)结束变量声明。例:。 可以一次性声明多个变量和方法,只要以;结尾就行。当然,这些声明在Java中应是合法的。 可以直接使用在中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明。一个声明仅在一个页面中有效。如果你想让每个页面都用到一些声明,则最好把它们写成一个单独的文件,然后用或元素包含进来。2JSP表达式 JSP表达式的结果会被转换成一个字符串,并且被直接包括
47、在输出页面之内。JSP 表达式包含在“” 标记中,没有分号。 例: 表达式元素表示的是一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后插入到这个表达式在JSP文件的位置显示。因为这个表达式的值已经被转化为字符串,所以你能在一行文本中插入这个表达式。 3ScriptletScriptlet是一段可以在处理请求时间执行的Java代码。Scriptlet包括在之间,它可以产生输出,并将输入发到客户的输出流里;也可以是一些流程控制语句。当然,在它中间还可以包含一些合法的Java注释。在被编译的类里, 多个Scriptlet可以按在JSP中出现的顺序合并成一个Scriptlet。Scri
48、ptlet像其它的Java代码或者方法一样,可以修改在它内部的对象,作为方法引用的结果。在一段Scriptlet中创建的对象,可以在另一个Scriptlet中使用。在编译后的Servlet中,Srciptlet被包含在Servlet的Service方法中。Scriptlet的语法是:。 2.3 Session元素 2.3.1 Session 对象Session翻译为中文是“会话”的意思。Session其实是指访问者从到达某个特定主页到离开的时间段内,服务器给他分配的一个用来存储信息的全局变量的集合。这些变量可以是自动生成的,也可以是程序员在服务器端脚本程序中定义的。因此,Session实际上是
49、服务器与客户端之间的“会话”。Session可以用来存储访问者的一些特定信息,如访问者姓名、性别、所使用浏览器类型、显示器分辨率以及停留时间。主机服务器就是根据Session来跟踪这些信息的。 用户在Web应用程序中访问同一页面时,Session变量始终存在。当用户在应用程序的页面间跳转时,存储在Session对象中的变量也不会清除。当然,也可以使用Session方法来结束一个会话或设置空闲会话的超时期限。Session在JSP程序中是一个内置对象。Session存放数据的格式与Cookie一样,是以“索引键(名字)/值”的格式来存放的。不同的是,在Session对象存储的值可以是复杂的对象类
50、型,而不限于简单的字符串;另外,Session存放数据的对象存放在Web服务器端,而Cookie存放数据的对象存放在Web客户端,因此Session比Cookie更安全。在JSP程序中,通常不需要特别的声明就可以直接使用Session对象。 不过,为了确认,可以加入以下代码,以表示需要启动Session功能:如果设置Session的值为false,则说明禁用Session功能。Session对象类为HttpSession,它提供了很多使用方法,在下一节中将详细介绍。 2.3.2 Session对象方法Session对象类是HttpSession。HttpSession由服务器的程序实现,提供H
51、TTP服务器和HTTP客户端之间的会话。会话被用来在多页面请求中保持状态和用户认证。会话实际是通过使用Cookie或Query字段来保持的。为了测试客户端是否支持Cookie,HttpSession定义了一个isCookieSupportDetermined方法和一个isUsingCookies方法。Session对象常用方法如表2-3所示。表2-3 Session对象常用方法 2.3.3 Session示例在应用中使用最多的是getAttribute和setAttribute。现以一个简单的例子来说明Session的应用,程序示例为例程2.5(信息写入Session并显示Session相关信
52、息)和例程2.6(从Session读出信息)。 例程2.5 Page1.jsp显示Session相关信息并设置session显示Session相关信息并设置session %/取得session的编号String Id = session.getId();out.println(session的编号:+Id);/取得session的建立时间Date startTime = new Date(session.getCreationTime();out.println(session建立时间:+startTime);/取得session的最后一次使用时间Date lastTime = new Da
53、te(session.getLastAccessedTime();out.println(最后使用session时间:+lastTime);/取得session的有效时间 int tmpTime = session.getMaxInactiveInterval();out.println(默认的session有效时间为:+tmpTime);/将session的有效时间设定为50分钟session.setMaxInactiveInterval(60*50);int changeTime = session.getMaxInactiveInterval();out.println(修改后sessi
54、on有效时间为:+changeTime);/将字符串保存到sessionsession.setAttribute(str,this is a session example);% 转向page2 例程2.6 page2.jsp获取session 2.4 Cookie元素 2.4.1 Cookie对象1什么是Cookie浏览器用一个或多个限定的文件支持Cookie,这些文件在Windows机器上叫做Cookie文件,被网站用来存储Cookie数据,网站可以在这些Cookie文件中插入信息。Cookie也为一些网络黑客提供了可乘之机,例如,有的程序可以通过某些途径读取Cookie文件,所以有的用户
55、认为Cookie增加了安全隐患,甚至是对自身隐私的侵犯。尽管如此,由于Cookie的高效灵活等特性,它在应用程序中还是得到了广泛的应用。 2. Cookie的工作原理Cookie将通过HTTP Headers从服务器返回到浏览器上,服务器首先在响应中利用 Set-Cookie Header来创建一个Cookie,服务器端在响应请求的Cookie Header中就会返回这个Cookie来完成浏览器的认证。服务器可以根据Cookie来跟踪用户,这对于需要区别用户的场合(如电子商务)特别有用。服务器也可以据此收集用户的信息,因此,为了保证安全,多数浏览器可以设置是否使用Cookie。选择IE浏览器的
56、【工具】【Internet选项】【隐私】即可设定Cookie,如图2.12所示。 图2.12 Internet选项的隐私设置 2.4.2 Cookie对象方法常用的Cookie方法如表2-4所示。 表2-4 Cookie对象常用方法 2.4.3 Cookie示例一个Cookie包含一对键/值。下面的代码生成一个Cookie并将它写到用户的硬盘上:Cookie the Cookie=new Cookie(cookieName, cookieValue);Response.addCookie(theCookie);在Cookie的构造方法中,第一个参数是键,第二个参数是值。如果服务器想从用户硬盘上
57、获取Cookie,则可以使用下面的方法从客户请求中取得所有的Cookie:Cookie cookies=request.getCookies(); 然后调用Cookie的getName方法获得Cookie的键,调用Cookie的getValue方法获得Cookie的值。此外,还可以通过Cookie的setMaxAge(int expire)方法来设置Cookie的有效期。超过参数expire指定的时间(以秒为单位),Cookie就会失效。先写Cookie信息,然后从Cookie中读出刚写入的信息,相关文件为writecookie.jsp(写Cookie)和readcookie.jsp(读Coo
58、kie)。例程2.7 writecookie.jsp写入cookie写入cookie示例读取cookie 例程2.8 readcookie.jsp读取cookie% Cookie cookies=request.getCookies();/将适用目录下所有Cookie读入并存入cookies数组中Cookie sCookie=null;String svalue=null;String sname=null;if(cookies=null)/如果没有任何cookieout.println(没有cookie记录);elseout.println(cookie个数:+cookies.length)
59、; for(int i=0;icookies.length;i+)/循环列出所有可用的CookiesCookie=cookiesi;sname=sCookie.getName();svalue=sCookie.getValue();out.println(cookie名字:+sname+,cookie值:+svalue);% 下面再举一例,先从客户端中读出Cookie键的值,然后将指定的一对Cookie的键/值写回客户端。例程2.9 JspCookie.jspJspCookie % /从客户请求中取得所有的Cookie Cookie cookies=request.getCookies();
60、if(cookies!=null) for(int i=0;i Cookie name: Cookie value: Old max age in seconds: New max age in seconds: JspCookie.jsp首先读取客户端所有的Cookie并把它们输出到网页上,然后修改Cookie的有效期,将修改前后Cookie的有效期输出到网页上,最后创建新的Cookie并把它写到客户端。JspCookie.jsp生成的网页如图2.13所示。 图2.13 JspCookie程序运行结果 在浏览JspCookie.jsp时,第一次访问时是将Cookie写到浏览器,所以看不到打印
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度销售合同:某服装品牌与经销商签订的销售合同2篇
- 基于AI的2024年度网络安全服务合同
- 私人过路协议书范本
- 2024版个人场地出租协议
- 2024年度碳排放交易咨询与减排服务协议2篇
- 房颤的抗栓治疗
- 2024年度二手房买卖及家居用品购买合同3篇
- 基于2024年度大数据分析的金融风控系统开发合同2篇
- 仁爱英语七年级下册导学案全册教案
- 2024年电子支付安全认证中心建设合同2篇
- 民用航空货物邮件运输安全保卫规则培训考试专项试卷
- 2020年国家公务员考试申论真题(副省级)
- 广东省东莞市塘厦初级中学2024-2025学年九年级上学期期中考试英语试题
- 第五单元分数四则混合运算(单元测试)-2024-2025学年六年级上册数学 苏教版
- 2023-2024学年广东省深圳市坪山区八年级(上)期末英语试卷
- 仓库管理培训资料
- 各种珍禽购销合同模板
- 部编版小学语文五年级上册期末总复习《古诗专项训练》附答案
- CQI-23模塑系统评估审核表-中英文
- 2024年河南省中考英语试题含解析
- DB11∕T 1071-2014 排水管(渠)工程施工质量检验标准
评论
0/150
提交评论