收藏 分销(赏)

动态编程技术JSP.pptx

上传人:w****g 文档编号:10021631 上传时间:2025-04-17 格式:PPTX 页数:199 大小:5.34MB
下载 相关 举报
动态编程技术JSP.pptx_第1页
第1页 / 共199页
动态编程技术JSP.pptx_第2页
第2页 / 共199页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,第,2,章,Web,动态编程技术,JSP,2.1 JSP,的概念及特性,2.1.1 JSP,与,ASP,脚本语言的比较,1,JSP,与,ASP,处理机制的比较,JSP,与,Microsoft,的,ASP,技术非常相似。两者都提供在,HTML,代码中混合某种程序代码、由语言引擎解释执行程序代码。,在,ASP,或,JSP,环境下,,HTML,代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。,普通的,HTML,页面只依赖于,Web,服务器,而,ASP,和,JSP,页面需要附加的语言引擎分析和执行程序代码,。程序代码的执行结果被重新嵌入到,HTML,代码中,然后一起发送给浏览器。,ASP,和,JSP,都是面向,Web,服务器的技术,客户端浏览器不需要任何附加的软件支持。,ASP,的编程语言是基于,VB,的脚本语言,,JSP,使用的是,Java,,这是两者最明显的区别。,ASP,与,JSP,还有一个更为本质的区别:两种语言引擎用完全不同的方式处理页面中嵌入的程序代码。在,ASP,下,基于,VB,的脚本代码被,ASP,引擎解释执行;在,JSP,下,代码被编译成,Servlet,并由,Java,虚拟机执行,这种编译操作仅在对,JSP,页面的第一次请求时发生。,2,JSP,与,ASP,的性能比较,表,2-1 JSP,与,ASP,的性能比较,2.1.2 JSP,运行环境,Sun,公司的,JSP,主页在,需要在服务器上安装,JSP,引擎,Tomcat,。以安装到,E,盘为例,安装,Tomcat,之后,将源文件放在,E:tomcatwebappsROOT,目录下,执行,E:tomcatbinstartup.bat,命令即可启动服务器。默认配置下服务器在端口,8080,监听,使用,localhost:8080,即可打开缺省页面。,2.1.3 JDK,的安装与配置,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),设置,CLASSPATH,环境变量:环境变量的配置位置同上。新建一个系统变量,命名为,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,,然后双击目录里名为,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,目录,运行,run.bat,文件,运行后的界面如图,2.5,所示。,图,2.5 JBoss,服务器完全启动后的示意图,JBoss,的配置文件在,D:jboss-3.2.6serverdefaultdeployjbossweb-tomcat50.sarserver.xml,如图,2.6,所示。注:这里以,JBoss,装在,D,盘下为例。,图,2.6 JBoss,配置文件,server.xml,设置端口为,8088,2.1.6 JSP,的基本语法,功能:写在,JSP,程序中,但不发给客户。,JSP,语法:,例程,2.1 JSP,注释,(comment.html),A Comment Test,A Test of Comments,描述,:,用隐藏注释标记的字符会在,JSP,编译时被忽略掉。,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,时自动转换成的。,中止:当,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,页面包括,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),到何处查找起支持作用的,Java,类别:,(2),出现,Java,运行问题时,通过,errorPage,将用户引向何处:,1,include,指令,include,指令用于把其它的文本文件或,JSP,文件加入到当前的,JSP,文件中,同时解析这个文件中的,JSP,语句。,include,指令可以把你的内容分成更多可管理的元素,比如包括一个普通页面页眉或页脚的元素。包含的网页可以是一个固定的,HTML,页面或更多的,JSP,内容,形式如:,指令将会在,JSP,编译时插入一个包含文本或代码的文件,当你使用,指令时,这个包含的过程相当于静态的。静态的包含就是指这个被包含的文件将会被插入到,JSP,文件中去。这个包含的文件可以是,JSP,文件、,HTML,文件或文本文件。如果包含的是,JSP,文件,则这个包含的,JSP,文件中的代码将会被执行。,这个被包含文件可以是,HTML,文件、,JSP,文件、文本文件,或者只是一段,Java,代码。但是得注意,在这个包含文件中不能使用,、,、,、,标记,因为这将会影响在原,JSP,文件中同样的标记,有时还会导致错误。,如果这个包含文件被改变,则包含此文件的,JSP,文件将被重新编译。,属性:,file=relativeURL,:这个包含文件的路径名一般来说是指相对路径,不需要什么端口、协议和域名,如,error.jsp,、,templates/onlinestore.html,、,/beans/calendar.jsp,如果这个路径以,“,/,”,开头,那么这个路径主要是参照,JSP,应用的上下关系路径;如果路径是以文件名或目录名开头的,那么这个路径就是正在使用的,JSP,文件的当前路径。,例程,2.2 include,指令,(include.jsp),An Include Test,The current date and time are,被包含文件,date.jsp:,图,2.10 include.jsp,的运行效果,2,page,指令,功能:定义,JSP,文件中的全局属性。,JSP,语法:,或者,flush=true ,/,例:,相关描述:,元素允许包含动态文件和静态文件,这两种包含文件的结果是不同的。如果文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到,JSP,文件中去;如果这个文件是动态的,那么这个被包含文件也会被,JSP,编译器执行,(,与,ASP,相似,),。,不能从文件名上判断一个文件是动态的还是静态的,比如,aspcn.jsp,就有可能只是包含一些信息而已,并不需要执行。,能够同时处理这两种文件,因此就不需要包含时还要判断此文件是动态的还是静态的。,如果这个包含文件是动态的,那么还可以用,来传递参数名和参数值。,相关属性:,page=relativeURL|,:参数为一相对路径,或者是代表相对路径的表达式。,flush=true,:表示是否要立即打印出来。如果要立即打印出来,则必须使用,flush=true,,不能使用,false,值。缺省值为,false,。,/,:,子句能传递一个或多个参数给动态文件。在一个页面中可使用多个,来传递多个参数。,2,动作,功能:重定向一个,HTML,文件、,JSP,文件或者是一个程序段。,JSP,语法:,/,或者,/,例:,或者,相关描述:,标签从一个,JSP,文件向另一个文件传递一个包含用户请求的,request,对象。,标签以下的代码,将不能执行。,能够向目标文件传送参数和值。在上面的例子中传递的参数名为,username,,值为,jsmith,。如果使用了,标签的话,则目标文件必须是一个动态的文件,且能够处理参数。,如果使用了非缓冲输出的话,那么使用,时就要小心。如果在使用,之前,JSP,文件已经有了数据,那么文件执行就会出错。,相关属性:,page=relativeURL|,:这里是一个表达式或一个字符串,用于说明将要定向的文件或,URL,。这个文件可以是,JSP,程序段,或者是其它能够处理,request,对象的文件,(,如,asp,、,cgi,、,php),。,/,:向一个动态文件发送一个或多个参数,这个文件一定是动态文件。,如果想传递多个参数,则可以在一个,JSP,文件中使用多个,。,name,指定参数名,,value,指定参数值。,3,动作,功能:执行一个,applet,或,bean,,有可能的话还要下载一个,Java,插件执行它。,JSP,语法:,text message for user,例:,Unable to load applet,相关描述:,元素用于在浏览器中播放或显示一个对象,(,典型的就是,applet,和,bean),,而这种显示需要浏览器的,Java,插件。,当,JSP,文件被编译并送往浏览器时,,元素将会根据浏览器的版本替换成,或者,元素。注意,,用于,HTML 4.0,,,用于,HTML 3.2,。,一般来说,,元素会指定对象是,applet,还是,bean,,同样也会指定,class,的名字及位置。另外,还会指定将从哪里下载这个,Java,插件。,相关属性:,type=bean|applet,:将被执行的插件对象的类型。必须得指定是,bean,还是,applet,,因为这个属性没有缺省值。,code=classFileName,:将会被,Java,插件执行的,Java Class,的名字,必须以,.class,结尾。这个文件必须存在于,codebase,属性指定的目录中。,codebase=classFileDirectoryName,:将会被执行的,Java Class,文件的目录,(,或者是路径,),。如果没有提供此属性,那么使用,的,JSP,文件的目录将会被使用。,name=instanceName,:是,bean,或,applet,实例的名字,它将会在,JSP,其它的地方调用。,archive=URIToArchive,.,:一些由逗号分开的路径名。这些路径名用于预装一些将要使用的,class,,这会提高,applet,的性能。,4,动作,功能:创建一个,Bean,实例并指定它的名字和作用范围。,JSP,语法:,|,other elements ,例:,相关描述:,JavaBean,类似于,ActiveX,控件,它们都能提供常用功能并且可以重复使用。,JavaBean,的值是通过一些属性获得的,可通过这些属性访问,JavaBean,设置。,相关属性:,id=beanInstanceName,:在所定义的范围中确认,Bean,的变量,能在后面的程序中使用此变量名来分辨不同的,Bean,,这个变量名对大小写敏感。,scope=page|request|session|application,:,Bean,存在的范围以及,id,变量名的有效范围。缺省值是,page,,以下是详细说明:,page,:能在包含,元素的,JSP,文件以及此文件中的所有静态包含文件中使用,Bean,,直到页面执行完毕向客户端发回响应或转到另一个文件为止。,request,:在任何执行相同请求的,JSP,文件中使用,Bean,,直到页面执行完毕向客户端发回响应或转到另一个文件为止。能够使用,request,对象访问,Bean,,比如,request.getAttribute(beanInstanceName),。,session,:从创建,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,中示例一个,Bean,。这个,class,不能是抽象的,必须有一个公用的、没有参数的构造器。这个,package,的名字区别大小写。,5,动作,功能:设置,Bean,中的属性值。,JSP,语法:,例:,相关描述:,元素使用,Bean,给定的,setter,方法,在,Bean,中设置一个或多个属性值。在使用这个元素之前必须使用,声明此,Bean,。这是因为,和,是联系在一起的,同时它们使用的,Bean,实例的名字也应当相匹配,(,就是说,在,中的,name,的值应当和,中,id,的值相同,),。,能使用多种方法利用,来设定属性值:,可以通过用户输入的所有值,(,被作为参数储存在,request,对象中,),来匹配,Bean,中的属性;,通过用户输入的指定的值来匹配,Bean,中指定的属性;还可以在运行时使用一个表达式来匹配,Bean,的属性。,相关属性:,name=beanInstanceName,:表示已经在,中创建的,Bean,实例的名字。,property=*,:储存用户在,JSP,输入的所有值,用于匹配,Bean,中的属性。在,Bean,中的属性的名字必须和,request,对象中的参数名一致。,从客户传到服务器上的参数值一般都是字符类型,这些字符串为了能够在,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,对象的参数值中有空值,那么对应的,Bean,属性将不会设定任何值。同样地,如果,Bean,中有一个属性没有与之对应的,request,参数值,那么这个属性同样也不会设定。,property=propertyName param=parameterName ,:使用,request,中的一个参数值来指定,Bean,中的一个属性值。在这个语法中,,property,指定,Bean,的属性名,,param,指定,request,中的参数名。如果,Bean,属性和,request,参数的名字不同,那么就必须得指定,property,和,param,;如果它们同名,那么只需要指明,property,就行了;如查参数值为空,(,或未初始化,),,则对应的,Bean,属性不被设定。,property=propertyName value=string|,:使用指定的值来设定,Bean,属性。这个值可以是字符串,也可以是表达式。如果是字符串,那么它就会被转换成,Bean,属性的类型,(,查看上面字符串转化为其它类型的方法,),;如果是一个表达式,那么它的类型就必须和它将要设定的属性值的类型一致;如果参数值为空,那么对应的属性值也不会被设定。另外,不能在一个,中同时使用,param,和,value,。如果使用了,property=*,,那么,Bean,的属性没有必要按,html,表单中的顺序排序。,6,动作,功能:获取,Bean,的属性值,用于显示在页面中。,JSP,语法:,例:,Calendar of,相关描述:,元素将获得,Bean,的属性值,并可以将其使用或显示在,JSP,页面中。在使用,之前,必须用,创建它。,元素有一些限制:,不能使用,来检索一个已经被索引了的属性;,能够和,JavaBeans,组件一起使用,,但是不能与,Enterprise Bean,一起使用。,相关属性:,name=beanInstanceName,:,Bean,的名字,由,指定。,property=propertyName,:指定,Bean,的属性名。,在,Sun,的,JSP,参考中提到:如果使用,来检索的值是空值,那么,NullPointerException,将会出现;同时,如果使用程序段或表达式来检索其值,那么在浏览器上出现的是,null(,空,),。,例程,2.3,numguess.jsp,NumberGuess,Congratulations!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.java(,例程,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(NumberFormatException 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;,/,复位,:,重新设置猜数答案,并初始化属性值,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,的运行效果,2.2.3 JSP,脚本,1,JSP,声明,JSP,声明用来定义页面级变量,以保存信息或定义,JSP,页面的其余部分可能需要的支持方法。如果发现代码太多,则通常把它们写成一个独立的,Java,类别。声明一般都在“,”,标记中。一定要以分号,(,;,),结束变量声明。例:,。,可以一次性声明多个变量和方法,只要以,;,结尾就行。当然,这些声明在,Java,中应是合法的。,可以直接使用在,中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明。,一个声明仅在一个页面中有效。如果你想让每个页面都用到一些声明,则最好把它们写成一个单独的文件,然后用,或,元素包含进来。,2,JSP,表达式,JSP,表达式的结果会被转换成一个字符串,并且被直接包括在输出页面之内。,JSP,表达式包含在“,”,标记中,没有分号。,例:,表达式元素表示的是一个在脚本语言中被定义的表达式,在运行后被自动转化为字符串,然后插入到这个表达式在,JSP,文件的位置显示。因为这个表达式的值已经被转化为字符串,所以你能在一行文本中插入这个表达式。,3,Scriptlet,Scriptlet,是一段可以在处理请求时间执行的,Java,代码。,Scriptlet,包括在,之间,它可以产生输出,并将输入发到客户的输出流里;也可以是一些流程控制语句。当然,在它中间还可以包含一些合法的,Java,注释。,在被编译的类里,多个,Scriptlet,可以按在,JSP,中出现的顺序合并成一个,Scriptlet,。,Scriptlet,像其它的,Java,代码或者方法一样,可以修改在它内部的对象,作为方法引用的结果。在一段,Scriptlet,中创建的对象,可以在另一个,Scriptlet,中使用。在编译后的,Servlet,中,,Srciptlet,被包含在,Servlet,的,Service,方法中。,Scriptlet,的语法是:,。,2.3 Session,元素,2.3.1 Session,对象,Session,翻译为中文是“会话”的意思。,Session,其实是指访问者从到达某个特定主页到离开的时间段内,服务器给他分配的一个用来存储信息的全局变量的集合。这些变量可以是自动生成的,也可以是程序员在服务器端脚本程序中定义的。因此,,Session,实际上是服务器与客户端之间的“会话”。,Session,可以用来存储访问者的一些特定信息,如访问者姓名、性别、所使用浏览器类型、显示器分辨率以及停留时间。主机服务器就是根据,Session,来跟踪这些信息的。,用户在,Web,应用程序中访问同一页面时,,Session,变量始终存在。当用户在应用程序的页面间跳转时,存储在,Session,对象中的变量也不会清除。当然,也可以使用,Session,方法来结束一个会话或设置空闲会话的超时期限。,Session,在,JSP,程序中是一个内置对象。,Session,存放数据的格式与,Cookie,一样,是以,“,索引键,(,名字,)/,值,”,的格式来存放的。不同的是,在,Session,对象存储的值可以是复杂的对象类型,而不限于简单的字符串;另外,,Session,存放数据的对象存放在,Web,服务器端,而,Cookie,存放数据的对象存放在,Web,客户端,因此,Session,比,Cookie,更安全。在,JSP,程序中,通常不需要特别的声明就可以直接使用,Session,对象。,不过,为了确认,可以加入以下代码,以表示需要启动,Session,功能:,如果设置,Session,的值为,false,,则说明禁用,Session,功能。,Session,对象类为,HttpSession,,它提供了很多使用方法,在下一节中将详细介绍。,2.3.2 Session,对象方法,Session,对象类是,HttpSession,。,HttpSession,由服务器的程序实现,提供,HTTP,服务器和,HTTP,客户端之间的会话。会话被用来在多页面请求中保持状态和用户认证。会话实际是通过使用,Cookie,或,Query,字段来保持的。为了测试客户端是否支持,Cookie,,,HttpSession,定义了一个,isCookieSupportDetermined,方法和一个,isUsingCookies,方法。,Session,对象常用方法如表,2-3,所示。,表,2-3 Session,对象常用方法,2.3.3 Session,示例,在应用中使用最多的是,getAttribute,和,setAttribute,。现以一个简单的例子来说明,Session,的应用,程序示例为例程,2.5(,信息写入,Session,并显示,Session,相关信息,),和例程,2.6(,从,Session,读出信息,),。,例程,2.5 Page1.jsp,显示,Session,相关信息并设置,session,显示,Session,相关信息并设置,session,转向,page2,例程,2.6,page2.jsp,获取,session,2.4 Cookie,元素,2.4.1 Cookie,对象,1,什么是,Cookie,浏览器用一个或多个限定的文件支持,Cookie,,这些文件在,Windows,机器上叫做,Cookie,文件,被网站用来存储,Cookie,数据,网站可以在这些,Cookie,文件中插入信息。,Cookie,也为一些网络黑客提供了可乘之机,例如,有的程序可以通过某些途径读取,Cookie,文件,所以有的用户认为,Cookie,增加了安全隐患,甚至是对自身隐私的侵犯。尽管如此,由于,Cookie,的高效灵活等特性,它在应用程序中还是得到了广泛的应用。,2.Cookie,的工作原理,Cookie,将通过,HTTP Headers,从服务器返回到浏览器上,服务器首先在响应中利用,Set-Cookie Header,来创建一个,Cookie,,服务器端在响应请求的,Cookie Header,中就会返回这个,Cookie,来完成浏览器的认证。,服务器可以根据,Cookie,来跟踪用户,这对于需要区别用户的场合,(,如电子商务,),特别有用。服务器也可以据此收集用户的信息,因此,为了保证安全,多数浏览器可以设置是否使用,Cookie,。,选择,IE,浏览器的,【,工具,】【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,的构造方法中,第一个参数是键,第二个参数是值。,如果服务器想从用户硬盘上获取,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(,读,Cookie),。,例程,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),/,如果没有任何,cookie,out.println(,没有,cookie,记录,);,else,out.println(cookie,个数:,+cookies.length);,for(int i=0;i,下面再举一例,先从客户端中读出,Cookie,键的值,然后将指定的一对,Cookie,的键,/,值写回客户端。,例程,2.9 JspCookie.jsp,JspCookie,%,/,从客户请求中取得所有的,Cookie,Cookie cookies=request.getCookies();,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,写到浏览器,所以看不到打印出来的,Cookie,。以后每次刷新都会有新的,Cookie,出现,还会看到一个特殊的,Cookie,:,JSESSIONID,,它代表了当前,Session,的,Session ID,。,如果把,IE,浏览器的本地,Intranet,的安全级别设为禁用,Cookie,,再运行,jspCookie.jsp,时,将会出现异常。,JSP,网站开发模式(一),JSP,JavaBean,(或,EJB,),JSP,页面独自响应请求并将处理结果返回客户。,所有的数据通过,Bean,来处理,,JSP,实现页面的表现。,缺点,页面被嵌入大量的脚本语言或者,Java,代码段。,代码开发和维护变为复杂。,客户端,Web,容器,JSP,(视图),Java Bean,(模型),数据库,请求,响应,JSP,网站开发模式(二),JSP,Servlet,JavaBean,(或,EJB,),通过,JSP,来表现页面,通过,Servlet,技术来完成事务处理工作,它创建,JSP,需要的,Bean,对象,然后根据用户的请求行为,决定将那个,JSP,页面发送给用户。,优点,充分利用了,JSP,和,Servlet,两种技术原有的优点,清楚的开发者角色划分,使界面设计人员和编程人员发挥各自的优势。,客户端,Web,容器,Servlet,(控制),JSP,(视图),Java Bean,(模型),重定向,实例化,数据库,请求,响应,JSP,网站开发模式(二),JSP,Servlet,JavaBean,(或,EJB,),通过,JSP,来表现页面,通过,Servlet,技术来完成事务处理工作,它创建,JSP,需要的,Bean,对象,然后根据用户的请求行为,决定将那个,JSP,页面发送给用户。,优点,充分利用了,JSP,和,Servlet,两种技术原有的优点,清楚的开发者角色划分,使界面设计人员和编程人员发挥各自的优势。,客户端,Web,容器,Servlet,(控制),JSP,(视图),Java Bean,(模型),重定向,实例化,数据库,请求,响应,2.5 JSP,通过,JavaBean,访问数据库的综合实例,2.5.1,数据库访问的基本方法,数据库访问大体分为两种,一种是通过,JDBC-ODBC,桥来连接,一种是直接用,JDBC,来连接。前者需要建立数据源,比较简单易懂,但是访问速度较慢;后者可直接访问,不需要任何配置,访问速度较快,但必须安装特定驱动,或者包含一些必要的包。,2.5.2,通过,JDBC-ODBC,桥访问数据库,本章只对,JDBC-ODBC,桥进行讨论,我们用,Microsoft Access,进行举例。直接通过,JDBC,访问数据库将在第,4,章进行详细讲解并举例。,1,数据源的配置,要想通过,JDBC-ODBC,桥访问数据库,必须建立数据源
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服