WEB应用与开发_08JAVA服务器小程序(ServLet)之Servlet链、编程应用_第1页
WEB应用与开发_08JAVA服务器小程序(ServLet)之Servlet链、编程应用_第2页
WEB应用与开发_08JAVA服务器小程序(ServLet)之Servlet链、编程应用_第3页
WEB应用与开发_08JAVA服务器小程序(ServLet)之Servlet链、编程应用_第4页
WEB应用与开发_08JAVA服务器小程序(ServLet)之Servlet链、编程应用_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 课题课题JAVA服务器小程序(服务器小程序(ServLet)之)之 Servlet链、编程应用链、编程应用 目的要求目的要求 掌握掌握Servlet链的含义及编程应用链的含义及编程应用 教学重点教学重点ServLet链的构建与链的构建与Shtml的使用的使用 教学难点教学难点 ServLet链的构建链的构建 教学课时教学课时 4(含(含2课时上机)课时上机) 教学方法教学方法 讲解、示例与启发式教学相结合讲解、示例与启发式教学相结合 教学内容和步骤教学内容和步骤 8.1 Servlet链链 8.1.1 什么是什么是servlet链链 Servlet链,它是链,它是JvavServer体系结构

2、的高级特征之一体系结构的高级特征之一, 与与UNIX和和DOS命令中的管道类似,你也可以将多个命令中的管道类似,你也可以将多个servlet 以特定顺序链接起来。在以特定顺序链接起来。在servlet链中,一个链中,一个servlet的输出的输出 被当作下一个被当作下一个servlet的输入,而链中最后一个的输入,而链中最后一个servlet的输的输 出被返回到浏览器。出被返回到浏览器。 8.1.2表过滤器表过滤器(Table Filter) 我们以表过滤器看看如何编写一个可以被用于链接的我们以表过滤器看看如何编写一个可以被用于链接的 servlet,这个表过滤器,这个表过滤器servlet将

3、分析另一个将分析另一个servlet的输出,的输出, 查找含有特殊表格式指令的查找含有特殊表格式指令的HTML注释,这些指令包括表有注释,这些指令包括表有 多少列、是否显示表头等等。在该表格式指令之后的所有行多少列、是否显示表头等等。在该表格式指令之后的所有行 将会被格式化成一个将会被格式化成一个HTML表格。这样,链中的前一个表格。这样,链中的前一个 servlet只要简单地将数据用逗号分割,数据就可以一行一行只要简单地将数据用逗号分割,数据就可以一行一行 地直接输出了,而无须将这些数据格式化成地直接输出了,而无须将这些数据格式化成HTML表格。同表格。同 样,当你决定修改这个表格的格式时,

4、你就不必修改产生数样,当你决定修改这个表格的格式时,你就不必修改产生数 据的据的servlet,而直接修改这个表过滤器,而直接修改这个表过滤器servlet就可以了。就可以了。 这个表过滤器这个表过滤器servlet实现了实现了HTTP服务的方法。首先,服务的方法。首先, 它必须重复它必须重复(echo)上一个上一个servlet中设置的头信息。这些信中设置的头信息。这些信 息包括内容类型、调用的息包括内容类型、调用的URL、远程主机等等。、远程主机等等。 TableFilter.java显示了设置这些头信息的必要代码。显示了设置这些头信息的必要代码。 例例1:TableFilter.java

5、 package javaservlets.samples; import javax.servlet.*; import javax.servlet.http.*; import java.io.BufferedReader; import java.io.InputStreamReader; public class TableFilter extends HttpServlet /* * Performs an HTTP service request * param req The request from the client * param resp The response fr

6、om the servlet */ public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException / Get all headers set by the previous servlet and echo them java.util.Enumeration e = req.getHeaderNames(); while (e.hasMoreElements() String header = (String)e.nextEl

7、ement(); String value = req.getHeader(header); resp.setHeader(header, value); /如下述代码所示,接下来的步骤是取得一个可如下述代码所示,接下来的步骤是取得一个可 以从前一个以从前一个servlet的输出流中讲读取数据的输入流,的输出流中讲读取数据的输入流, 如果该输入流的内容类型是某种我们可以分析的类如果该输入流的内容类型是某种我们可以分析的类 型型(如如HTML),我们就继续下一步骤;否则,我们,我们就继续下一步骤;否则,我们 就从输入流中读出所有字节并毫不修改地把它们写就从输入流中读出所有字节并毫不修改地把它们写

8、 回浏览器。回浏览器。 / Get the input and output streams ServletInputStream in = req.getInputStream(); ServletOutputStream out = resp.getOutputStream(); / Only process if this is a recognized MIME type String type = req.getContentType(); if (type.equals(text/html) | type.equals(text/table) | type.equals(appli

9、cation/x-www- form-urlencoded) resp.setContentType(text/html); / Create a buffered reader that we can use to read / a single line at a time BufferedReader br = new BufferedReader(new InputStreamReader(in); boolean inTable = false; int tableCols = 0; boolean headerRow = false; / Read until no more da

10、ta exists while (true) String s = br.readLine(); / null indicates end of file if (s = null) break; / If we are in the middle of a table command, process / the line if (inTable) / Search for the end of the table if (s.startsWith(!-end table) out.println(); inTable = false; else / Weve got a row of a

11、table - format it s = formatRow(s, tableCols, headerRow); headerRow = false; else / Search for the start of a table if (s.startsWith(= 0) / Get the number of columns String cols = s.substring(pos + 8); int endPos = cols.indexOf( ); if (endPos 0) cols = cols.substring(0, endPos); tableCols = Integer.

12、parseInt(cols); / Get the header flag. If yes the first / row of data is actually a header pos = s.indexOf(header=); if(pos = 0) String flag = s.substring(pos + 7); headerRow = flag.startsWith(yes); / If we have a valid number of columns, format / the table if (tableCols 0) out.println(s); s = ; inT

13、able = true; out.println(s); else / Unsupported MIME type; echo the contents unchanged while (true) int b = in.read(); if (b = -1) break; out.write(b); out.close(); /* * Formats the given line into a table row */ private String formatRow(String line, int cols, boolean header) String s = ; int pos =

14、line.indexOf(,); int lastPos = 0; / Loop for each column for (int i = 0; i cols; i+) if (pos 0) pos = line.length(); / Insert the proper HTML tag if (header) s += ; else s += ; / Find the next column data if (pos 0) s += line.substring(lastPos, pos); lastPos = pos; if (pos line.length() lastPos = po

15、s + 1; pos = line.indexOf(, lastPos); else pos = 0; / Insert the proper HTML tag if (header) s += ; else s += ; / Return the formatted line return s; /* * Initialize the servlet. This is called once when the * servlet is loaded. It is guaranteed to complete before any * requests are made to the serv

16、let * * param cfg Servlet configuration information */ public void init(ServletConfig cfg) throws ServletException super.init(cfg); /* * Destroy the servlet. This is called once when the servlet * is unloaded. */ public void destroy() super.destroy(); /* * Returns information about this servlet */ p

17、ublic String getServletInfo() return Table Filter for Chaining; 接下来的输入流分析就简单得多了。我们只接下来的输入流分析就简单得多了。我们只 要一行一行地读入表格中的数据,直至找到文件要一行一行地读入表格中的数据,直至找到文件 结束标记为止。对每一行,通过查找逗号来取得结束标记为止。对每一行,通过查找逗号来取得 每一个域,然后将它们格式化成表格的一行。每一个域,然后将它们格式化成表格的一行。 8.1.3 触发一个触发一个servlet链链 在将要链接在一起的在将要链接在一起的servlet组织好之后,你可组织好之后,你可 以通过别

18、名、以通过别名、MIME类型或者类型或者HTML请求来触发这请求来触发这 个个servlet链。每一种方式都其特殊的配置,下面链。每一种方式都其特殊的配置,下面 分别看看如何用分别看看如何用Java Web服务器和服务器和Live Software的的JRun来配置这些触发方法。其他服来配置这些触发方法。其他服 务器的设置也大致相同。务器的设置也大致相同。 servlet别名别名 servlet别名使你可以设置一个别名使你可以设置一个servlet名字或名字或 别名来表示一个或多个别名来表示一个或多个servlet。servlet链可以用链可以用 servlet列表表示,该列表中的列表表示,该

19、列表中的servlet用逗号分开,用逗号分开, 并按调用次序的先后排列在一起。并按调用次序的先后排列在一起。 Java Web Server 在配置在配置servlet别名以触发别名以触发servlet链之前,链之前, 一定要确认一定要确认servlet链接功能已经被启动。图链接功能已经被启动。图 4.4显示了站点设置管理屏幕,这里,你可以显示了站点设置管理屏幕,这里,你可以 启用启用servlet链接功能。链接功能。 增加一个增加一个servlet别名是非常直截了当的事。别名是非常直截了当的事。 当服务器接收到对当服务器接收到对“/Elemetns”的请求,它将的请求,它将 调用调用 “ja

20、vaservlets.samples.Elements”servlet, 取得输出后将其传给取得输出后将其传给 servlet“javaservlets.samples.TableFilter” 作为输入,最后将作为输入,最后将TableFilter的输出返回给浏的输出返回给浏 览器。如图览器。如图4.5所示,你只要简单地将所示,你只要简单地将servlet 名用逗号分隔开来,就可以将任意数量的名用逗号分隔开来,就可以将任意数量的 servlet链接在一起。链接在一起。 注意,在本书写作时,注意,在本书写作时,Java Web Server 1.1还不能完还不能完 全正确地支持全正确地支持se

21、rvlet链接。该问题将在后续版本中得到链接。该问题将在后续版本中得到 解决。解决。 Jrun 在在JRun中,中,servlet链接的配置是通过设置链接的配置是通过设置servlet 映射来实现的。映射来实现的。JRun中中servlet别名与别名与servlet是一一对是一一对 应的,一个应的,一个servlet只能与惟一的别名对应,所以只能与惟一的别名对应,所以 servlet别名不能支持别名不能支持servlet链接。而链接。而servlet映射可以映射可以 让你将一个名字与一系列让你将一个名字与一系列servlet或者或者servlet别名项对别名项对 应。图应。图4.6显示了如何在

22、显示了如何在JRun中使用中使用servlet映射。映射。 servlet别名链接的例子:别名链接的例子:Elements 为了说明如何使用为了说明如何使用servlet别名来触发别名来触发servlet链链 接,我们先编一个用接,我们先编一个用HTML表格列出元素周期表的表格列出元素周期表的 servlet。Elements Servlet要实现要实现doGet()来响应来响应 HTML GET命令。我们还要设置内容类型然后输出命令。我们还要设置内容类型然后输出 HTML首部信息。首部信息。Elements Servlet没有格式化输出没有格式化输出 HTML表格,我们将让它输出表过滤器表格

23、,我们将让它输出表过滤器servlet所需的所需的 表格格式信息,并简单地一行一行输出用逗号分隔的表格格式信息,并简单地一行一行输出用逗号分隔的 数据。数据。 例例2: elements package javaservlets.samples; import javax.servlet.*; import javax.servlet.http.*; /* * This is a simple servlet that will return a list of * periodic elements. */ public void doGet(HttpServletRequest req,

24、HttpServletResponse resp) throws ServletException, java.io.IOException / Create a PrintWriter to write the response java.io.PrintWriter out = new java.io.PrintWriter(resp.getOutputStream(); / Set the content type of the response resp.setContentType(text/html); / Print the HTML header out.println();

25、out.println(); out.println(Java Servlets Sample - + Periodic Elements); out.println(); out.println(); out.println(The Periodic Elements); out.println(); / Output special table formatting instructions for / the TableFilter servlet out.println(); / Output the table out.println(Symbol,Element); out.pri

26、ntln(Ac,Actinium); out.println(Ag,Silver); out.println(Al,Aluminum); /Etc. out.println(Y,Yttrium); out.println(Yb,Ytterbium); out.println(Zn,Zinc); out.println(Zr,Zirconium); out.println(); / Wrap up out.println(); out.flush(); out.close(); 在你浏览器的在你浏览器的URL中输出中输出“/Elements”调用我调用我 们在们在Jrun中配置的中配置的serv

27、let映射。映射。 在刷新时,浏览器向在刷新时,浏览器向Web服务器发出服务器发出URL请求,请求, Web服务器找到与这个服务器找到与这个URL信息对应的信息对应的servlet 映射,然后调用映射,然后调用Elemetns Servlet。Elements Servlet处理处理GET请求并返回未格式化的元素周请求并返回未格式化的元素周 期表数据给期表数据给Web服务器。之后,服务器。之后,Web服务器发服务器发 现存在现存在servlet链接,于是将链接,于是将Elements Servlet 的输出重定向为的输出重定向为servlet链接中下一个链接中下一个servlet, 也就是表过

28、滤器的输入。表过滤器重新设置所有也就是表过滤器的输入。表过滤器重新设置所有 HTTP首部,以适应表过滤器的需要,然后读入首部,以适应表过滤器的需要,然后读入 所有元素周期表数据,表过滤器使用指定的表格所有元素周期表数据,表过滤器使用指定的表格 格式信息来分析和处理这些数据,最后生成一个格式信息来分析和处理这些数据,最后生成一个 格式化的元素周期表。格式化的元素周期表。 Mime类型类型 触发触发servlet链接的另外一种方法是将一链接的另外一种方法是将一 个个servlet与特定与特定Mime类型联系起来。当这类型联系起来。当这 种种Mime类型的应答产生时,输出就会被发类型的应答产生时,输

29、出就会被发 送给与之相联系的送给与之相联系的servlet。由于。由于MIME类型类型 是在是在servlet向输出流中写入时才确定的,所向输出流中写入时才确定的,所 以用这种方法你可以轻易地将以用这种方法你可以轻易地将servlet的输出的输出 重定向到其他重定向到其他servlet。 Java Web Server 如前所述,在所有的工作之前,你必须确认如前所述,在所有的工作之前,你必须确认 servlet链接功能已经启用链接功能已经启用(见图见图4.4)。截止到本书发稿,。截止到本书发稿, 还没有可以管理还没有可以管理MIME类型和类型和servlet映射的图形用户映射的图形用户 接口接

30、口(GUI),所以你不得不手工编辑,所以你不得不手工编辑 “perties”文件。这个文件位于目文件。这个文件位于目 录录 “/properties/server/javawebserver /webpageservice”。下述代码给出了基本的内容。值。下述代码给出了基本的内容。值 得注意的是,得注意的是,MIME类型所映射的类型所映射的servlet名字实际上名字实际上 是该是该servlet的别名。的别名。 # This file maps mime-types to the servlets which process them # This is us

31、ed by the filter manager to set up chains of servlets # where the ouput of one servlet gets piped to the input of # another servlet based on the mime-type that the servlet specifies # with setContentType(mime-type) # # The default servlet for all mime-types is file.Do not set this # explicitly. # #

32、Entries in this file should be of the form # mime-type/servletname # ie. # foo/bar=fooServlet # where fooServlet is defined in perties java-internal/parsed-html=ssi java-internal/template-content=template Jrun 在在JRun中,你可以通过系统管理应用程序设置中,你可以通过系统管理应用程序设置 MIME类型映射。如图类型映射。如图4.10所示,你可以把一个所示,你可以

33、把一个 servlet和特定的和特定的MIME类型联系起来。类型联系起来。 MIME类型链接的例子类型链接的例子:Indy 500 为了说明如何通过为了说明如何通过MIME类型来触发类型来触发servlet链链 接,让我们编写一个列出接,让我们编写一个列出Indianapolis 500自自1911 年起的所有优胜者。就像年起的所有优胜者。就像Elements Servlet一样,一样, 我们直接将输入用逗号分隔的各行数据,并用表过我们直接将输入用逗号分隔的各行数据,并用表过 滤器将其格式化成滤器将其格式化成HTML表格形式输出。惟一的不同表格形式输出。惟一的不同 在于我们设置了一个不同的在于

34、我们设置了一个不同的MIME类型,通过这个类型,通过这个 MIME类型,类型,Web服务器将服务器将Indy 500 Servlet的输出的输出 重定向为表过滤器重定向为表过滤器servlet的输入的输入(见例见例3)。 例例3 Indy500.java package javaservlets.samples; import javax.servlet.*; import javax.servlet.http.*; /* This is a simple servlet that will return a list of * past Indianapolis 500 winners */

35、 public class Indy500 extends HttpServlet /* * Performs the HTTP GET operation * param req The request from the client * param resp The response from the servlet */ public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, java.io.IOException / Create a PrintWriter

36、to write the response java.io.PrintWriter out = new java.io.PrintWriter(resp.getOutputStream(); / Set the content type of the response resp.setContentType(text/table); / Print the HTML header out.println(); out.println(); out.println(Java Servlets Sample - + Past Indianapolis 500 Winners); out.print

37、ln(); out.println(); out.println(Past Indianapolis 500 Winners); out.println(); / Output special table formatting instructions for / the TableFilter servlet out.println(); out.println(Year,Driver,Average Speed); out.println(1997,Arie Luyendyk,145.827); out.println(1996,Buddy Lazier,147.956); out.pri

38、ntln(1995,Jacques Villenueve,153.616); /Etc. out.println(1912,Joe Dawson,78.719); out.println(1911,Ray Harroun,74.602); out.println(); / Wrap up out.println(); out.flush(); out.close(); 通过使用通过使用JRun中配置的中配置的MIME类型映射,调类型映射,调 用用Indy 500 Servlet的结果将会是格式化了的的结果将会是格式化了的 Indianapolis 500优胜者列表优胜者列表(如图如图4.12所

39、示所示)。 值得注意的是,我们只要设置值得注意的是,我们只要设置servlet的别名就的别名就 可以了,而无须指定它的全名。可以了,而无须指定它的全名。 再次重申,再次重申,Web浏览器向浏览器向Web服务器发送服务器发送 的是含有的是含有servlet名字的名字的HTTP请求,请求,Web服务服务 器调用了器调用了servlet(Indy 500),servlet设置了设置了 MIME类型类型“text/table”,而我们已经将这个,而我们已经将这个 MIME类型映射到表过滤器类型映射到表过滤器servlet。于是,。于是, Indy 500所产生的输出将被重定向为表过滤器所产生的输出将被

40、重定向为表过滤器 servlet的输入,表过滤器的输入,表过滤器servlet将数据格式化将数据格式化 为为HTML表格的形式,并将输出返回给表格的形式,并将输出返回给Web服服 务器。最后务器。最后Web服务器把这些服务器把这些HTML页发送给页发送给 浏览器。浏览器。 HTTP请求请求 触发触发servlet链接的另一种方法是在链接的另一种方法是在HTTP 请求中指定请求中指定servlet链接。不过不是所有的链接。不过不是所有的Web 服务器都支持这种方法。为了说明服务器都支持这种方法。为了说明HTTP请求请求 中的中的servlet链接,我们再来编写一个简单的链接,我们再来编写一个简单

41、的 servlet(Solar System),它将返回我们太阳系,它将返回我们太阳系 中所有行星的信息。例中所有行星的信息。例4给出了给出了Solar System Servlet的代码。的代码。 例例4: SolarSystem.java package javaservlets.samples; import javax.servlet.*; import javax.servlet.http.*; /* * This is a simple servlet that will return a list of * the planets in our solar system */ p

42、ublic class SolarSystem extends HttpServlet /* * Performs the HTTP GET operation * param req The request from the client * param resp The response from the servlet */ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException / Set the content ty

43、pe of the response resp.setContentType(text/html); / Create a PrintWriter to write the response java.io.PrintWriter out = new java.io.PrintWriter(resp.getOutputStream(); / Print the HTML header out.println(); out.println(); out.println(Java Servlets Sample - + Planets In Our Solar System); out.print

44、ln(); out.println(); out.println(Planets In Our Solar System); out.println(); / Output special table formatting instructions for / the TableFilter servlet out.println(); out.println(Planet,Avg. Distance from Sun, + Time to orbit,Time to spin,Moons); out.println(Mercury,58 million km,88 days,58.6 day

45、s,0); out.println(Venus,108 million km,225 days,243 days,0); out.println(Earth,150 million km,365.25 days,24 hours,1); out.println(Mars,228 million km,687 days,24.62 hours,2); out.println(Jupiter,778 million km,11.9 years,9.83 hours,16); out.println(Saturn,1427 million km,29.5 years,10.65 hours,19);

46、 out.println(Uranus,2870 million km,84 years,17.23 hours,15); out.println(Neptune,4497 million km,164.8 years,16 hours,8); out.println(Pluto,5913 million km,248 years,6.375 days,1); out.println(); / Wrap up out.println(); out.flush(); out.close(); /* * Initialize the servlet. This is called once whe

47、n the * servlet is loaded. It is guaranteed to complete before any * requests are made to the servlet * * param cfg Servlet configuration information */ public void init(ServletConfig cfg) throws ServletException super.init(cfg); /* * Destroy the servlet. This is called once when the servlet * is un

48、loaded. */ public void destroy() super.destroy(); 和前面的和前面的servlet一样,一样,Solar System Servlet将将 直接输出无格式的数据而将格式化的工作交由表过直接输出无格式的数据而将格式化的工作交由表过 滤器滤器servlet来完成。由于来完成。由于Java Web Server不支持不支持 用用HTTP请求触发请求触发servlet链接,我们将使用链接,我们将使用JRun。 图图4.14显示了显示了Solar System Servlet和表过滤器和表过滤器 servelt链接起来以后的输出结果。请注意调用链接起来以后

49、的输出结果。请注意调用 servlet时使用的时使用的URL,在这种情况下,在这种情况下,URL中包含中包含 了一个链接在一起的了一个链接在一起的servlet名字,它们之间用逗号名字,它们之间用逗号 来间隔。来间隔。 8.2 Java Servlet 编程及应用编程及应用 8.2.1服务器端包含服务器端包含 服务器端包含服务器端包含 (Server-Side Includes) 是是Web 页面设计中的一种常用技术,在一个输出很多网页页面设计中的一种常用技术,在一个输出很多网页 的系统中,经常会有一些网页的组成部分在多个网的系统中,经常会有一些网页的组成部分在多个网 页中同时出现。页中同时出

50、现。Server-Side Includes 是是Java Server 体系结构的一个高级特征,它可以在体系结构的一个高级特征,它可以在HTML 文档中嵌入文档中嵌入servlet,这样就可以利用一个或多个,这样就可以利用一个或多个 servlet 来组成最终的来组成最终的HTML 文档,这种特殊的包含文档,这种特殊的包含 了了Servlet 输出和输出和HTML 标记的文件用扩展名标记的文件用扩展名.shtml 表示。表示。 Servlet 标记的语法:标记的语法: servlet name=Servlet_name code=Servlet.class codebase=类路径类路径 名

51、称名称 1 = 参数值参数值 1 名称名称 2 = 参数值参数值 2 . 名称名称 n = 参数值参数值 n param name =名称名称 1 value = 参数值参数值 1 param name =名称名称 2 value = 参数值参数值 2 . param name =名称名称 n value = 参数值参数值 n /servlet 编程思路及技巧:下面是一个完整的简单编程思路及技巧:下面是一个完整的简单 的服务器包含的服务器包含(SSI)的实例,整个的实例,整个shtml 页面由页面由 2个个Servlet 组成,第组成,第1个个Servlet是是 Header.java,代表页

52、头,主要功能是显示标,代表页头,主要功能是显示标 题信息;第题信息;第2个个Servlet 是是Footer.java,代表,代表 页脚,主要功能是显示页脚的版权信息;页脚,主要功能是显示页脚的版权信息; Together.shtml 是将是将2个个Servlet 组合在一起组合在一起 显示的服务器包含,它应当从文档根目录显示的服务器包含,它应当从文档根目录(如如 root)中加载。中加载。 例例5: Header.java import javax.servlet.*; import java.io.*; public class Header extends GenericServlet

53、public void service(ServletRequest req,ServletResponse resp) throws ServletException, IOException res.setContentType(text/html;charset=gb2312 ); PrintWriter out =res.getWriter(); / Get the title of the page. Set to empty string if / no title parameter was given String titles = req.getParameterValues

54、(title); String title = ; if (titles != null) if (titles.length 0) title = titles0; Footer.java import javax.servlet.*; import java.io.*; public class Footer extends GenericServlet public void service(ServletRequest req,ServletResponse resp) throws ServletException, IOException res.setContentType(te

55、xt/html;charset=gb23 12); PrintWriter out =res.getWriter(); / Format the standard header out.println(hr; out.println(p align=centeri 版权所有,信息版权所有,信息 公司公司/i/p; / Wrap up out.flush(); out.close(); /* * pReturns information about this servlet */ public String getServletInfo() return Footer ; public void

56、 init(ServletConfig cfg) throws ServletException super.init(cfg); public void destroy() super.destroy(); 8.2.2使用使用Java Servlet API 进行会话进行会话 管理管理 javax.servlet.http.HttpSession 接口接口 封装了封装了HTTP 会话的细节,该会话与一段时会话的细节,该会话与一段时 间内特定的间内特定的Web 客户对客户对Web 服务器的多个服务器的多个 请求相关。管理会话数据主要涉及到请求相关。管理会话数据主要涉及到3个方个方 面:会话交换

57、、会话重定位和会话持久性,面:会话交换、会话重定位和会话持久性, 只有实现了只有实现了java.io.Serializable 接口的数接口的数 据对象才能够被交换、重定位和保持。这个据对象才能够被交换、重定位和保持。这个 接口主要是让对象具有序列化的能力,它可接口主要是让对象具有序列化的能力,它可 以将对象的状态信息写入任意的输出流中如:以将对象的状态信息写入任意的输出流中如: 文件、网络连接等。文件、网络连接等。 编程思路:下面是实现一个简单在商场购物的例子,编程思路:下面是实现一个简单在商场购物的例子, 当用户选购商品当用户选购商品(糖果、收音机和练习簿糖果、收音机和练习簿)放入购物袋中

58、,放入购物袋中, 保存选购的商品信息。保存选购的商品信息。 编程技巧说明:编程技巧说明: 在在Servlet 中进行会话管理时,首先要获得会话对象。中进行会话管理时,首先要获得会话对象。 HttpServletRequest.getSession()对象返回与请求相关的对象返回与请求相关的 当前当前HttpSession 对象,并且当该对象不存在时就新创建对象,并且当该对象不存在时就新创建 一个对象;一个对象;HttpServletRequest.getSession(true)实现相实现相 同的功能。如果参数是同的功能。如果参数是false,当不存在会话对象时,将返,当不存在会话对象时,将返 回一个回一个null 值。值。 8.3 小结小

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论