版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,JSP编程,2,JSP工作原理 JSP脚本元素 JSP指令元素 JSP动作组件 JSP内置对象,3,JSP初识,JSP(Java Server Pages)是一种实现普通静态HTML和动态HTML混合编码的技术。,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段 和JSP标记(tag),从而形成JSP文件(*.jsp) Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能 JSP是在服务器端执行的,通常返回给客
2、户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览,4,JSP工作原理,JSP页面文件 被转译 成一个Servlet类(.java文件) .java文件被 编译 生成字节码文件执行,5,JSP示例, 你好,今天是 号, 星期 ,import java.util.*; response.setContentType(text/html; charset=gb2312); out = pageContext.getOut(); out.write(“rnrnrn rn你好,今天是rn); Date today=new Date(); out.print(today.getDate(); o
3、ut.write(号,星期); out.print(today.getDay(); out.write( rn rnrn );,JSP文件,Servlet文件,http:/localhost:8080/Test/Test.jsp,Tomcatwork Test.java .class,6,JSP页面转换后的class,都从HttpJspBase继承 函数Service 直接转成Java代码放到Service函数里面 HTML代码直接被写到writer回馈给用户 对应为response.setContentType()的语句 ,认识JSP转换后的.java文件,7,JSP特点,内容的生成和显示进
4、行分离 网页设计人员和Java程序员的工作关系不再那么紧密 可移植性(一次编写、各处运行) JSP具有广泛的平台适用性 JSP连接多种数据库 简单、容易入门 ,8,JSP工作原理 JSP脚本元素 JSP指令元素 JSP动作组件 JSP内置对象,9,脚本元素,脚本元素:在和之间,添加以的Java代码 包括: “注释” “表达式” “声明” “脚本段”/ “代码段” ,10,脚本元素注释,HTML注释: 这种注释发送到客户端,但不直接显示,在源代码中可以查看到。 JSP 隐藏注释: 不发送到客户端。 Java注释方式: /单行注释 /* */,11, 你好 ,程序1:expression.jsp(
5、添加注释后),12,脚本元素表达式,输出表达式的计算结果 语法: 表达式中的变量必须是已声明过的变量 与之间不能有空格且表达式后面不需要分号,13, 你好 ,程序1:expression.jsp(表达式),14,脚本元素声明,JSP 声明语法格式如下: 任何内容必须是合法的Java语句,因此变量声明总是用分号来结束 例如:,15,声明,声明的类型: 变量声明 声明的变量成了 JSP 页面被转换和编译后的 Servlet 类的实例变量 语法: ,16,声明,方法声明 方法将编译成的 Servlet 类的方法 可以由页面上所有脚本元素访问 ,17, 您是第 个访问本站的客户。 ,程序2:state
6、ment_vary.jsp,表达式,变量声明,18,使用方式声明的变量是类成员变量: 变量的内存空间直到服务器关闭才释放 当多个客户请求一个JSP页面时,JSP引擎为每个客户启动一个线程 线程由JSP引擎服务器来管理,线程共享JSP页面的成员变量,因此任何一个用户对JSP页面成员变量操作的结果,都会影响到其他用户,19,脚本元素程序段,JSP 脚本段语法格式如下: ,20, ); break; case 1: out.println(You must select condition 1!+); break; default: out.println(Your select not in 0,
7、 1, select again! + ); % ,21,%!、%= 和 %之间的区别,变量声明%!后面必须带分号 表达式可以包含任何语言表达式,并不以分号结束 代码段中,如果语言要求语句以分号结束,则必须提供分号,22, JSP Declarations 内的变量 void method() % 内的变量 % count: i: ,变量声明和区别,23,原先声明在内的变量和方法是一个类内的变量和方法也就是成员变量和成员方法。 声明在内的变量是一个方法的变量也就是局部变量。 成员变量会被多个对象共享,而局部变量单独对象访问。,变量声明和区别,24,JSP工作原理 JSP脚本元素 JSP指令元素
8、 JSP动作组件 JSP内置对象,25,JSP指令是从JSP向Web容器发送的消息,它们不产生任何可见的输出,告诉JSP引擎对JSP页面处理。 注意:指令的作用范围仅限于包含指令本身的JSP页面。,JSP的指令格式为: ,26,JSP指令包括page、include和taglib page用于定义JSP文件中的全局属性。 include把内容分割成更多的可管理元素 taglib用来创建自定义标记,27,page指令,page指令用于定义JSP文件中的全局属性 JSP 语法格式如下: 默认情况下会导入: java.lang.*、 javax.servlet.*、javax.servlet.jsp
9、.*、javax.servlet.http.*,28, session=“true|false” /决定JSP网页是否可以使用session对象 buffer=“none | 8kb | sizekb” /设置JSP网页的缓冲区,如果属性值为none,不缓冲,输出直接通过ServletResponse的printWriter输出,29, autoFlush=true | false 设置如果buffer溢出,是否自动刷新 该属性的默认值为true,表示当缓冲区满时,到客户端的输出将会自动刷新 若该属性为false,则当缓冲区满时,出现缓冲区溢出异常 当buffer = none,autoFlu
10、sh属性值不能设置为false。因为butter=none时,表明没有设置缓冲区,因而JSP页面的jspWriter本身将会自动刷新新缓冲区。 isThreadSafe=“true | false” 设置Jsp文件是否能多线程使用,处理多个用户的请求 默认值true, 在运行JSP页面时,可能会同时接受多个客户的请求。当该属性取值为false时,一个JSP处理器将会逐个的接受客户的请求。,30, info=“text” 在该属性中定义了一个任意的字符串,用来说明JSP页面中待说明的信息 Servlet.getServletInfo()方法查到该信息的详细情况 errorPage=relativ
11、eURL 该属性用于表示当发生异常错误时调用的JSP页面 isErrorPage=“true | false” 设置此页是否为出错页, 谁呀? +s); % ,31,contentType contentType指定了服务器响应的 HTTP 内容类型(MIME类型)、 charset 指定了JSP页面回应时的字符编码方式 默认contentType= text/html, charset=ISO-8859-1,MIME类型: (Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型 设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件
12、被访问的时候,浏览器会自动使用指定应用程序来打开 常见的MIME类型(通用型): 超文本标记语言文本 .html text/html xml文档 .xml text/xml 普通文本 .txt text/plain ,pageEncoding pageEncoding指明了JSP页面本身的编码格式,跟页面显示的编码没有关系 默认contentType= text/html, charset=ISO-8859-1,32,JSP要经过两次的“编码”: jsp编译成Servlet(.java)文件,根据pageEncoding的设定读取jsp,翻译成统一的UTF-8 JAVA源码(即.java) S
13、ervlet文件(.java)到Java字节码文件(.class),从UTF-8到UTF-8。在这一阶段中,不论JSP编写时候用的是什么编码方案,JAVAC用UTF-8的encoding读取java源码,编译成UTF-8编码的二进制码(即.class)。这一过程是由JVM的内在规范决定的,不受外界控制 从服务器到浏览器,这在一过程中用到的指令是contentType。服务器载入和执行由第二阶段生成出来JAVA二进制码,输出的结果,就是在客户端可见到的结果,在输出过程中,由contentType属性中的charset来指定,将UTF8形式的二进制码以charset的编码形式来输出 容器根据pag
14、eEncoding的设定将JSP转化为内部使用的Unicode,而页面显示的时候将内部的Unicode转换为contentType指定的编码后显示页面内容,33,contentType-charset、pageEncoding相互影响和作用域,以及先后作用顺序 JSP页面本身的字符编码 如果pageEncoding属性存在,那么JSP页面本身的字符编码方式就由pageEncoding决定 否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1 JSP页面回应时的字符编码方式需要通过contentType-c
15、harset设定 Tomcat中如果在jsp中设定了pageEncoding,则contentType也跟着设定成相同的编码了,总结:通常在JSP页面设定即可,34,对于page指令,需要说明的是: 可以在一个页面中引用多个指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(import语句引入的是Java语言中的类),所以此属性就能多用几次。 无论把指令放在JSP的文件的哪个地方,它的作用范围 都是整个JSP页面。不过,为了JSP程序的可读性,及好的编程习惯,最好还是把它放在JSP文件的顶部。,35,include指令
16、 向JSP页面内某处静态插入一个文件,这个文件 可以是HTML文件、JSP文件或其他文本文件。 JSP 语法格式: ,include指令,36,注意,37, include 示例 ,程序4:include.jsp,在当前页面中加入copyright.html源代码然后再编译整个文件,使用include指令把一个页面分成不同的部分,最后合成一个完整的文件,有助于实现jsp页面的模块化,示例1,38, Gantry HTML All the rights are reserved ,copyright.html,copyright.html,39, include 示例 ,示例2,40, 您是第
17、个访问本站的客户。 ,copyright.jsp,41,taglib指令,42,43,JSP工作原理 JSP脚本元素 JSP指令元素 JSP动作组件 JSP内置对象,44,JSP动作组件,动态插入文件、调用JavaBean等动作元素,45,常见的JSP动作组件共有以下几种: :在页面被请求的时候引入一个文件。 :把请求转到一个新的页面。 :在动作组件中引入参数信息。 :插入一个applet或Bean 。 :设置JavaBean的属性。 :输出某个JavaBean的属性。 :寻找或者实例化一个JavaBean。,JSP动作组件,46,include动作组件把指定文件插入正在生成的页 面。 其语法
18、如下: ,flush属性: flush=true ,在缓存累积了一定数据时,服务器会先提供一部分数据给浏览器,并等待后续内容。在简单页面中,该属性不纳入考虑,而在页面包含大量数据时,为缩短客户端延迟,可将一部分内容先行输出。,jsp:include,47,程序5:includeaction.jsp, include 示例 ,48,copyright.jsp, 您是第 个访问本站的客户。 ,copyright.jsp,49,include动作组件, 指令元素 动作指令,前者: , 读入指定页面的内容并和原来的页面融合到 一起,合成一个文件后被jsp容器将它转化成servlet(.java文件)
19、后者: jsp:include动作指令引入页面时, 实际只是引用了插入文件被转化并被编译后产生的servlet类文件(.class文件). 插入文件是作为一个单独的文件在执行后才被.jsp文件运行时调用 运行后,一个新的.java文件和.class文件,50,include动作组件,主要有两个方面的不同: 一:执行时间上: 是在翻译阶段执行在请求处理阶段执行.,二:引入内容的不同: 引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.引入执行页面或servlet所生成的应答文本.,51,forward动作组件:控制从一个页面传到另一个页面 (在向目标文件转发
20、过程中,可以向目标文件传送参数和值) 其语法如下: ,jsp:forward,52,程序6:forward.jsp, 当前推荐图书清单: 0.5) % ,53, 国画 梅次故事 朝夕之间 ,1.jsp,54, J2EE 编程技术 J2EE服务器端高级编程 JSP高级编程 ,2.jsp,55,param动作组件:用于传递参数信息,必须配合或或动作组件一起使用。 语法如下: 当该组件与一起使用时,可以将param组件中的值传递到include动作组件要加载的文件中去。,jsp:param,56, 加载文件效果: ,示例1,57, 从到的连续和是: ,add.jsp,58, 向jsp:forward
21、传递参数示例: 向jsp:forward传递参数示例: ,示例2,59, 欢迎您! ,welcome.jsp,60,Plugin动作组件:用于在浏览器中播放或显示一个对象(典型的就是applet和Bean) ,必要的话还要下载Java插件用于执行它。 在页面中使用普通的HTML标记可以让客户下载运行一个java applet小应用程序,但并不是所有的客户的浏览器都支持java apple小程序。使用plugin动作标签可以保证客户端能执行小应用程序,jsp:plugin,61,JSP 语法格式如下: jsp:plugin type=“bean | applet” /plugin将执行的对象的类
22、型。必须指定Bean或applet,因为这个属性没有默认值 code=“classFileName” /plugin将执行的JAVA类文件名字, 以.class结尾,这个文件必须存在于codebase属性指定的目录中 codebase=“classFileDirectoryName” /类文件的路径,62,name=“instanceName” /这个Bean或applet实例的名字,它将会在JSP其它的地方调用 archive=“URIToArchive, .” /逗号隔开的路径名列表,该路径列表用于预装一些将要使用的类,这会提高applet的性能 align=“bottom | top |
23、 middle | left | right” /对齐方式 height=“displayPixels” /高度 width=“displayPixels” /宽度 hspace=“leftRightPixels” /在屏幕左右所留的空间大小 vspace=“topBottomPixels” /在屏幕上下所留的空间大小,63, jreversion=“JREVersionNumber | 1.1” /applet或Bean要求的JAVA运行时环境(JRE)的版本 nspluginurl=“URLToPlugin” /用户使用Netscape Navigator浏览器时需下载JRE插件的URL
24、iepluginurl=“URLToPlugin” /用户使用Internet Explorer浏览器时需下载JRE插件的URL,64, / + /传递给applet或Bean的参数和值。为了传递多个参数和值,可以在jsp:params元素中使用多个标签. Applets取得参数是通过java.applet.Applet.getParameter方法 text message for user /如果plugin插件不能使用时,显示给用户的信息 ,65,import java.applet.Applet; import java.awt.Color; import java.awt.Graph
25、ics; public class Circle extends Applet public void paint(Graphics g) g.setColor(new Color(255,0,255); g.fillArc(0,0,50,50,0,360); ,Applet示例1(与JSP同目录下建立一个Circle.class),66, Plugin tag OBJECT or EMBED not supported by browser. ,程序9:plugin.jsp,67,import java.applet.Applet; import java.awt.Graphics; pub
26、lic class show extends Applet String name; public void init() name = getParameter(name); public void paint(Graphics g) g.drawString(This shows the+ name +a parameter,60,25); ,Applet示例2,68, 用plugin加载Applet 用plugin加载Applet ,程序10:plugin.jsp,69,程序10:plugin.jsp, ,70,JSP工作原理 JSP脚本元素 JSP指令元素 JSP动作组件 JSP内置对
27、象,71,JSP内置对象,JSP提供了某些内置对象,开发者不用事先声明就可以使用标准的变量来访问这些对象 request:包含客户端所有传送到服务器上的请求信息 response 用于服务器端向客户端发送响应信息 out 用来传送响应的输出 session 一次连接请求期间的会话 application 指服务器上正在执行的程序 page 指JSP网页本身 pageContext 用来对网页属性进行管理 config 提供一些配置信息 Exception 用来捕获jsp执行时抛出的异常,72,从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成,所
28、以如果具备较好的Java基础,可以参考相应的类说明。,73,74,request对象 代表客户端的请求,封装了用户提交的信息,该对象调用相应的方法可以获取封装的信息。通过该对象能了解客户的需求,做出响应 当客户端请求一个JSP页面时,JSP容器会创建一个request对象。可以通过request对象的相关方法来获取这些客户端信息(例如请求的方式、参数、客户端IP地址等),request对象,75,request对象是HttpServletRequest类的实例,包含方法: 1. object getAttribute(String name) 返回名称为name的对象 2. Enumerati
29、on getAttributeNames() 返回可用属性名的枚举 3. String getCharacterEncoding() 返回字符编码方式 4. int getContentLength() 返回请求体的长度(以字节数) 5. String getContentType() 得到请求体的MIME类型,76,6. ServletInputStream getInputStream() 得到请求体中一行的二进制流 7. String getParameter(String name) 返回name指定参数的参数值 8. Enumeration getParameterNames() 返
30、回可用参数名的枚举 9. String getParameterValues(String name) 返回包含参数name的所有值的数组,77,10. String getProtocol() 返回请求用的协议类型及版本号 11. String getScheme() 返回当前页面使用的协议,例如http 12. String getServerName() 返回接受请求的服务器主机名 13. int getServerPort() 返回服务器接受此请求所用的端口号 14. String getRemoteAddr() 返回发送此请求的客户端IP地址 15. String getRemote
31、Host() 返回发送此请求的客户端主机名 16. void setAttribute(String key, Object obj) 设置属性的属性值 ,参数name与form表单中的name属性对应,或者与提交链接的参数名对应,如果参数值不存在,则返回null值,该方法的返回值类型是String。,request对象通过getParameter()方法来获取用户提交的数据获取请求参数的使用格式如下:,获取请求参数String getParameter(String name),String name = request.getParameter(“name”),在进行请求转发操作时,把一些
32、数据带到转发后的页面处理。 可以使用request对象的setAttribute()方法将数据设置在request范围内存取。 设置转发数据的方法使用格式如下:,setAttribute(String key, Object obj) 设置属性,request. setAttribute(String key, Object obj),参数key为String类型的键名。在转发后的页面取数据时,通过这个键名来获取数据 Object obj为key的值,代表需要保存在request范围内的数据,在request作用域中,获取转发数据的方法: Object object=request.getAt
33、tribute(“key”),request.getParameter()方法是获取Http提交过来的数据(客户端重定向点击了链接或提交按扭时传值用),即用于在使用表单(form)或url重定向传值时接收数据用,String getParameter(String name) 与object set/getAttribute(String name) 区别,例如1.jsp和2.jsp之间为链接关系,1.jsp中有以下代码:超链接 或者: 请输入用户姓名: 在2.jsp中通过request.getParameter(username)方法来获得请求参数username:,用上面getParame
34、ter()得到的值如果下次不提交或保存起来的话,下次重定向后就没啦? setAttribute 是服务器把对象放在页面所对应的一块内存中,当该页面服务器转发到另一个页面时,服务器会把这块内存拷贝另一个页面所对应的内存中,String getParameter(String name) 与object getAttribute(String name) 区别,String getParameter(String name) 与object set/getAttribute(String name) 区别,例如2.jsp和3.jsp之间为转发关系。2.jsp希望向3.jsp传递当前的用户名字,如何
35、传递这一数据呢?先在2.jsp中调用setAttribute()方法: 在3.jsp中通过getAttribute()方法获得用户名字:,request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据 request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。这两个方法能够设置Object类型的共享数据。,String getParameter(String name) 与o
36、bject getAttribute(String name) 区别,一个是从前台获取数据的 比如前台有个表单提交到当前servlet,然后表单中有文本框name属性为username 在后台你写 request.getParameter(username); 就可以获得文本框里的值 如果从servlet里传参数到一个页面可以用request.setAttribute(“name”,username) ;再下一个页面(只能下一个页面)可以用request.getaAttributr(name)接受,就可以获得数值了,String getParameter(String name) 与objec
37、t getAttribute(String name) 区别,85, 客户使用的协议是: 获取接受客户提交信息的页面: ,接受客户提交信息长度: 客户提交信息的方式: 获取客户的IP地址: ,86, JSP 用户名: ,87, 获取文本框提交的信息: 获取按钮的名字: ,从Jsp页面页面传递参数到Servlet显示中文乱码 方式一:request.setCharacterEncoding 是指提交内容的编码,指定后可以通过getParameter()直接获得正确的字符串,如果不指定,默认时(getParameter)会以iso8859-1编码处理,因此需要进一步处理 iso-8859-1是JA
38、VA网络传输使用的标准 字符集,而gb2312是标准中文字符集,当你作出提交表单等需要网络传输的操作的时候,就需要把 iso-8859-1转换为gb2312字符集显示,否则如果按浏览器的gb2312格式来解释iso-8859-1字符集的话,由于2者不兼容,所以会 是乱码 在执行setCharacterEncoding()之前,不能执行任何getParameter() 该指定只对POST方法有效,对GET方法无效,显示用户注册表单页面 账号: , Email地址: 性别: ,dealwith.jsp: % String account = new String(request.getParame
39、ter(account) .getBytes(ISO8859_1), GBK); String password = new String(request.getParameter(password) .getBytes(ISO8859_1), GBK); String realname = new String(request.getParameter(realname) .getBytes(ISO8859_1), GBK); String email = new String(request.getParameter(email).getBytes( ISO8859_1), GBK);,从
40、Jsp页面页面传递参数到Servlet显示中文乱码 方式二: new String ( request.getParameter(account).getBytes(ISO8859_1), GBK“ ): getBytes(charset)是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset编码,并以字节方式表示 字符串在java内存中总是按 unicode编码(最统一的编码,可以用来表示所有语言的字符)存储的。比如“中文”,正常情况下存储为“4e2d 6587”;如果charset为“gbk”,则被编码为“d6d0 cec4”,然后返回字节“d6 d0 ce c
41、4”;如果charset为“utf8”则最后是“e4 b8 ad e6 96 87”;如果是iso8859-1,则由于无法编码,最后返回 3f 3f(两个问号) new String(),dealwith.jsp String sex = new String(request.getParameter(sex).getBytes( ISO8859_1), GBK); request.setAttribute(account, account); request.setAttribute(password, password); request.setAttribute(realname, re
42、alname); request.setAttribute(email, email); request.setAttribute(sex, sex); % ,showUserInfo.jsp: 账号: ,showUserInfo.jsp: 真实姓名: Email地址: 性别: ,94,response对象,“response” 对象代表的是对客户端的响应,通过“response”对象来组织发送到客户端的数据。如果是向客户端发送文字时直接使用“out” 对象即可。,95,response对象包含了响应客户请求的有关信息,是HttpServletResponse类的实例 1. String se
43、tCharacterEncoding() 设置响应的字符编码 2. ServletOutputStream getOutputStream() 返回响应的一个二进制输出流 3. PrintWriter getWriter() 返回可以向客户端输出字符的一个对象 4. void setContentLength(int len) 设置响应头长度 5. void setContentType(String type) 设置响应MIME类型,96,6. sendRedirect(java.lang.String location) 重新定向客户端的请求 7. sendError(int number
44、):使用指定的状态码向客户发送错误响应。 8. sendError(int number,String msg):使用指定的状态码和描述性消息向客户发送错误响应,97,response缓冲区: 缓冲可以有效地在服务器与客户之间传输内容 flushBuffer() :强制把缓冲区中的内容发送给客户 getBufferSize():返回响应所使用的实际缓冲区大小 如果没使用缓冲区,则该方法返回0 setBufferSize(int size):为响应的主体设置首选的缓冲区大小 boolean isCommitted():表示响应是否已经提交,提交的响应已经写入状态码 reset():清除缓冲区存在
45、的任何数据,同时清除状态码, 缓冲区大小: 缓冲区设置之前 输出的内容是否提交: 缓冲区设置之后 输出的内容是否提交: , 我正在学习response对象的 setContentType方法 将当前页面保存为word文档吗? ,100,Out在客户端页面输出信息,“out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。,101,out对象是JspWriter类的实例,是向客户端输出内容常用对象 1. void clear() 清除缓
46、冲区的内容 2. void clearBuffer() 清除缓冲区的当前内容 3. void flush() 清空流 4. int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0 5. int getRemaining() 返回缓冲区还剩余多少可用 6. boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常 7. void close() 关闭输出流 8. print/println,102, 谁呀? +s); % ,103,session对象,“session” :服务器与客户端的交互过程称为session。 从一个客户打开浏览器连
47、接到服务器,到客户关闭浏览器离开这个服务器称做一个会话,104,session对象初识,过程 HTTP是无状态(stateless)协议Web Server 对每一个客户端请求都没有历史记忆; 当一个客户访问一个服务器时,可能会在这个服务器的几个页面反复连接、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种办法知道这是同一个客户,这就需要session(会话)对象。 session机制采用的是在服务器端保持状态的方案,105,Step 1:当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,这个session对象调用相应的方法可以存储客户在访问各
48、个页面期间提交的各种信息,比如,姓名、号码等信息。 Step 2:这个session对象被分配了一个String类型的Id号,JSP引擎同时将这个Id号发送到客户端,存放在客户的Cookie中。这样,session对象和客户之间就建立起一一对应的关系,即每个客户都对应着一个session对象(该客户的会话),这些session对象互不相同,具有不同的Id号码。,106,Step 3:当客户再访问连接该服务器的其它页面时,或从该服务器连接到其它服务器再回到该服务器时,JSP引擎不再分配给客户新session对象,而是使用完全相同的一个,直到客户关闭浏览器后,服务器端该客户的session对象被取
49、消,和客户的会话对应关系消失。 当客户重新打开浏览器再连接到该服务器时,服务器为该客 户再创建一个新的session对象。,107,session对象指的是客户端与服务器的一次会话,从客户连连接到服务器开始,直到断开连接为止。它是HttpSession类的实例. long getCreationTime() 返回SESSION创建时间 public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号 long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间 int getMaxInactiveInterval() 返回两
50、次请求间隔多长时间SESSION被取消 String getValueNames() 返回一个包含此SESSION中所有可用属性数组 void invalidate() 取消SESSION,使SESSION不可用 boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入 void removeValue(String name) 删除SESSION中指定的属性 void setMaxInactiveInterval() 设置两次请求间隔的时间SESSION被取消,108,客户在服务器的三个页面之间进行连接,只要不关闭浏览器,三个页面的session对象是完全相同的
51、 session.jsp: 您的session对象的ID是: 输入你的姓名连接到tom.jsp ,109,tom.jsp: 我是Tom页面 您的在Tom页面中的session对象的ID是: 点击超链接,连接到Jerry的页面。 欢迎到Jerry屋来! ,110,jerry.jsp: 我是Jerry页面 您在Jerry页面中的session对象的ID是: 点击超链接,连接到session的页面。 欢迎到session屋来! ,111,session对象使用,当需要在不同的JSP页面中保留客户信息的情况下使用,如在线购物、客户轨迹跟踪等。 “session” 对象建立在cookie的基础上,所以使
52、用时应注意判断一下客户端是否打开了cookie。 cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:使用一个本地文件保存从所有站点接收的Cookie信息。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。,创建与获取客户端session,Session对象的常用方法: Public void setAttribute(String key,Object obj) Session对象可以调用该方法将参数Object指定的对象obj添加到session对象中,并为添加的对象指定了一个索引关键字key。 Public Objec
53、t getAttribute(String key) 获取session对象中含有关键字是key的对象,由于任何对象都可以添加到session对象中,因此用该方法取回对象时,应强制转化为原来的类型。,移除指定session中的对象,Session对象的常用方法: Public Enumeration getAttributeNames() Session对象调用该方法产生一个枚举对象,该枚举对象使用nextElements()方法遍历session对象中所含有的全部对象。 Public void removeAttribute(String key) 从当前session对象中删除关键字是ke
54、y的对象。 void invalidate() 在JSP页面中,可以通过session对象中invalidate()方法删除已经保存到session中所有对象。,session超时管理,一个用户在某个Web服务目录的session对象的生存期限依赖于 客户是否关闭浏览器、 session对象是否调用invalidate()方法使得session无效 session对象达到了设置的最长的“发呆”状态时间 “发呆”状态时间是指用户对某个Web服务目录发出的两次请求之间的间隔时间。可以修改Tomcat服务器下的web.xml,重新设置个Web服务目录下的session对象的最长“发呆”时间。 30
55、,session超时管理,session对象可以使用下列方法获取或设置与生存时间有关的信息: public long getCreationTime() 获取session创建的时间 public long getLastAccessedTime() 获取session最后一次被操作时间 public int getMaxInactiveInterval() 获取最长“发呆”时间 public void setMaxInactiveInterval(int interval) 设置session最长“发呆”时间 public boolean isNew() 判断session是否是一个新建的对
56、象 invalidate() 使session无效,session实现局部网页计数器-示例,使用session编写局部网页计数器, 首先,设置int类型的变量number,并将该对象初始化为1。 然后,通过获取session中getAttribute()方法获取number对象,并判断该对象是否为null,如果不为null,则将获取的内容赋值给number变量。 最后,将该变量自动加1并显示在页面中。 实现代码如下:, ,内置对象对通信的控制,resquest、response和session是JSP内置对象中的重要3个对象,这3个对象体现了服务器端与客户端进行交互通信的控制。resquest
57、、response和session对象的通信过程:,JSP通过request对象控制客户浏览器的请求; 通过response对客户浏览器进行响应; 而session就维持这个反反复复的过程中会话期间需要传递的数据信息。,120,“application” 部署在服务器上的Web应用程序与所有客户的交互过程,称之为application。一个application可以包括多个session application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。 全局性信息,
58、是所有用户共享的信息,如可以记录有多少用户现在登录过本网站,并把该信息展示给所有用户,application对象,121,application对象是ServletContext类的实例 1. Object getAttribute(String name) 返回给定名的属性值 2. Enumeration getAttributeNames() 返回所有可用属性名的枚举 3. void setAttribute(String name, Object obj) 设定属性的属性值 4. void removeAttribute(String name) 删除一属性及其属性值 5. String
59、 getServerInfo() 返回JSP(SERVLET)引擎名及版本号 6. String getRealPath(String path) 返回一虚拟路径的真实路径 7. ServletContext getContext(String uripath) 返回指定WebApplication的application对象,122,8.int getMajorVersion() 返回服务器支持的Servlet API的最大版本号 9.int getMinorVersion() 返回服务器支持的Servlet API的最大版本号 10.String getMimeType(String file) 返回指定文件的MIME类型 11.URL getResource(String path) 返回指定资源(文件及目录)的URL路径 12.InputStrea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修工程施工现场管理方案
- 施工材料质量验收方案
- 2026河南郑州市第一〇七高级中学招聘23人备考题库【易错题】附答案详解
- 2026安徽池州市直学校招聘教师14人备考题库及完整答案详解【历年真题】
- 2026广东阳江市阳春市招聘乡村公益性岗位12人备考题库(第六批)带答案详解(完整版)
- 2026长春光机所春季招聘334人备考题库含答案详解(预热题)
- 2026江苏苏州太仓农商行招聘2人备考题库及答案详解【夺冠系列】
- 钢结构安全防护设施方案
- 2026重庆青年镇招聘公益性岗位人员4人备考题库附参考答案详解【满分必刷】
- 2026上海复旦大学化学系舒校坤课题组招聘全职博士后备考题库含答案详解【典型题】
- 2026年国网江苏省电力有限公司高校毕业生招聘约825人(第二批)笔试模拟试题及答案解析
- 2026上半年新疆维吾尔自治区招聘事业单位工作人员分类考试4474人笔试备考题库及答案解析
- GB/T 18570.9-2025涂覆涂料前钢材表面处理表面清洁度的评定试验第9部分:水溶性盐的现场电导率测定法
- 高中实验室安全教育课件
- 安徽省合肥市2025-2026学年上学期期末八年级数学试卷(含答案)
- 2026年甘肃省交通运输厅所属事业单位招聘笔试易考易错模拟试题(共500题)试卷后附参考答案
- 电信公司客户服务部门员工绩效考评表
- 安徽合肥市人力资源服务有限公司招聘笔试题库2026
- GB/T 1883.1-2025往复式内燃机词汇第1部分:发动机设计和运行术语
- 2025年支部存在的问题及整改措施
- 差速器工作原理课件
评论
0/150
提交评论