




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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將分析另一個將分析另一個servle
3、t的輸出,的輸出,查找含有特殊表格式指令的查找含有特殊表格式指令的HTML注釋,這些指令包括表有注釋,這些指令包括表有多少列、是否顯示表頭等等。在該表格式指令之后的所有行多少列、是否顯示表頭等等。在該表格式指令之后的所有行將會被格式化成一個將會被格式化成一個HTML表格。這樣,鏈中的前一個表格。這樣,鏈中的前一個servlet只要簡單地將數據用逗號分割,數據就可以一行一行只要簡單地將數據用逗號分割,數據就可以一行一行地直接輸出了,而無須將這些數據格式化成地直接輸出了,而無須將這些數據格式化成HTML表格。同表格。同樣,當你決定修改這個表格的格式時,你就不必修改產生數樣,當你決定修改這個表格的格
4、式時,你就不必修改產生數據的據的servlet,而直接修改這個表過濾器,而直接修改這個表過濾器servlet就可以了。就可以了。這個表過濾器這個表過濾器servlet實現了實現了HTTP服務的方法。首先,服務的方法。首先,它必須重復它必須重復(echo)上一個上一個servlet中設置的頭信息。這些信中設置的頭信息。這些信息包括內容類型、調用的息包括內容類型、調用的URL、遠程主機等等。、遠程主機等等。TableFilter.java顯示了設置這些頭信息的必要代碼。顯示了設置這些頭信息的必要代碼。例例1:TableFilter.javapackage javaservlets.samples;
5、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 from the servlet*/public void service(Http
6、ServletRequest req,HttpServletResponse resp)throws ServletException, java.io.IOException/ Get all headers set by the previous servlet and echo themjava.util.Enumeration e = req.getHeaderNames();while (e.hasMoreElements() String header = (String)e.nextElement();String value = req.getHeader(header);re
7、sp.setHeader(header, value); /如下述代碼所示,接下來的步驟是取得一個可如下述代碼所示,接下來的步驟是取得一個可以從前一個以從前一個servlet的輸出流中講讀取數據的輸入流,的輸出流中講讀取數據的輸入流,如果該輸入流的內容類型是某種我們可以分析的類如果該輸入流的內容類型是某種我們可以分析的類型型(如如HTML),我們就繼續下一步驟;否則,我們,我們就繼續下一步驟;否則,我們就從輸入流中讀出所有字節并毫不修改地把它們寫就從輸入流中讀出所有字節并毫不修改地把它們寫回瀏覽器。回瀏覽器。 / Get the input and output streamsServletI
8、nputStream in = req.getInputStream();ServletOutputStream out = resp.getOutputStream();/ Only process if this is a recognized MIME typeString type = req.getContentType();if (type.equals(text/html) |type.equals(text/table) |type.equals(application/x-www-form-urlencoded) resp.setContentType(text/html);
9、/ Create a buffered reader that we can use to read/ a single line at a timeBufferedReader br =new BufferedReader(new InputStreamReader(in);boolean inTable = false;int tableCols = 0;boolean headerRow = false;/ Read until no more data existswhile (true) String s = br.readLine();/ null indicates end of
10、 fileif (s = null) break;/ If we are in the middle of a table command, process/ the lineif (inTable) / Search for the end of the tableif (s.startsWith(!-end table) out.println();inTable = false;else / Weve got a row of a table - format its = formatRow(s, tableCols, headerRow);headerRow = false;else
11、/ Search for the start of a tableif (s.startsWith(= 0) / Get the number of columnsString cols = s.substring(pos + 8);int endPos = cols.indexOf( );if (endPos 0) cols = cols.substring(0, endPos);tableCols = Integer.parseInt(cols);/ Get the header flag. If yes the first/ row of data is actually a heade
12、rpos = 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 tableif (tableCols 0) out.println(s);s = ;inTable = true;out.println(s); else / Unsupported MIME type; echo the contents unchangedwhile (true)
13、 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 = line.indexOf(,);int lastPos = 0;/ Loop for each columnfor (int i = 0; i cols; i+) if (pos 0) pos = line.lengt
14、h();/ Insert the proper HTML tagif (header) s += ;else s += ;/ Find the next column dataif (pos 0) s += line.substring(lastPos, pos);lastPos = pos;if (pos line.length() lastPos = pos + 1;pos = line.indexOf(, lastPos);else pos = 0;/ Insert the proper HTML tagif (header) s += ;else s += ;/ Return the
15、formatted linereturn 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 servlet* param cfg Servlet configuration information*/public void init(ServletConfig cfg)throws ServletExceptionsuper.init(cfg);/* Dest
16、roy the servlet. This is called once when the servlet* is unloaded.*/public void destroy()super.destroy();/* Returns information about this servlet*/public String getServletInfo() return Table Filter for Chaining;接下來的輸入流分析就簡單得多了。我們只接下來的輸入流分析就簡單得多了。我們只要一行一行地讀入表格中的數據,直至找到文件要一行一行地讀入表格中的數據,直至找到文件結束標記為止。
17、對每一行,通過查找逗號來取得結束標記為止。對每一行,通過查找逗號來取得每一個域,然后將它們格式化成表格的一行。每一個域,然后將它們格式化成表格的一行。8.1.3 觸發一個觸發一個servlet鏈鏈 在將要鏈接在一起的在將要鏈接在一起的servlet組織好之后,你可組織好之后,你可以通過別名、以通過別名、MIME類型或者類型或者HTML請求來觸發這請求來觸發這個個servlet鏈。每一種方式都其特殊的配置,下面鏈。每一種方式都其特殊的配置,下面分別看看如何用分別看看如何用Java Web服務器和服務器和Live Software的的JRun來配置這些觸發方法。其他服來配置這些觸發方法。其他服務器
18、的設置也大致相同。務器的設置也大致相同。 servlet別名別名servlet別名使你可以設置一個別名使你可以設置一個servlet名字或名字或別名來表示一個或多個別名來表示一個或多個servlet。servlet鏈可以用鏈可以用servlet列表表示,該列表中的列表表示,該列表中的servlet用逗號分開,用逗號分開,并按調用次序的先后排列在一起。并按調用次序的先后排列在一起。 Java Web Server在配置在配置servlet別名以觸發別名以觸發servlet鏈之前,鏈之前,一定要確認一定要確認servlet鏈接功能已經被啟動。圖鏈接功能已經被啟動。圖4.4顯示了站點設置管理屏幕,這
19、里,你可以顯示了站點設置管理屏幕,這里,你可以啟用啟用servlet鏈接功能。鏈接功能。增加一個增加一個servlet別名是非常直截了當的事。別名是非常直截了當的事。當服務器接收到對當服務器接收到對“/Elemetns”的請求,它將的請求,它將調用調用“javaservlets.samples.Elements”servlet,取得輸出后將其傳給取得輸出后將其傳給servlet“javaservlets.samples.TableFilter”作為輸入,最后將作為輸入,最后將TableFilter的輸出返回給瀏的輸出返回給瀏覽器。如圖覽器。如圖4.5所示,你只要簡單地將所示,你只要簡單地將se
20、rvlet名用逗號分隔開來,就可以將任意數量的名用逗號分隔開來,就可以將任意數量的servlet鏈接在一起。鏈接在一起。注意,在本書寫作時,注意,在本書寫作時,Java Web Server 1.1還不能完還不能完全正確地支持全正確地支持servlet鏈接。該問題將在后續版本中得到鏈接。該問題將在后續版本中得到解決。解決。 Jrun在在JRun中,中,servlet鏈接的配置是通過設置鏈接的配置是通過設置servlet映射來實現的。映射來實現的。JRun中中servlet別名與別名與servlet是一一對是一一對應的,一個應的,一個servlet只能與惟一的別名對應,所以只能與惟一的別名對應,
21、所以servlet別名不能支持別名不能支持servlet鏈接。而鏈接。而servlet映射可以映射可以讓你將一個名字與一系列讓你將一個名字與一系列servlet或者或者servlet別名項對別名項對應。圖應。圖4.6顯示了如何在顯示了如何在JRun中使用中使用servlet映射。映射。 servlet別名鏈接的例子:別名鏈接的例子:Elements為了說明如何使用為了說明如何使用servlet別名來觸發別名來觸發servlet鏈鏈接,我們先編一個用接,我們先編一個用HTML表格列出元素周期表的表格列出元素周期表的servlet。Elements Servlet要實現要實現doGet()來響應來
22、響應HTML GET命令。我們還要設置內容類型然后輸出命令。我們還要設置內容類型然后輸出HTML首部信息。首部信息。Elements Servlet沒有格式化輸出沒有格式化輸出HTML表格,我們將讓它輸出表過濾器表格,我們將讓它輸出表過濾器servlet所需的所需的表格格式信息,并簡單地一行一行輸出用逗號分隔的表格格式信息,并簡單地一行一行輸出用逗號分隔的數據。數據。例例2: elementspackage javaservlets.samples;import javax.servlet.*;import javax.servlet.http.*;/* This is a simple se
23、rvlet that will return a list of* periodic elements.*/public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException, java.io.IOException/ Create a PrintWriter to write the responsejava.io.PrintWriter out =new java.io.PrintWriter(resp.getOutputStream();/ Set the content ty
24、pe of the responseresp.setContentType(text/html);/ Print the HTML headerout.println();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
25、servlet out.println();/ Output the tableout.println(Symbol,Element);out.println(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 upout.println();out.flush();out.clos
26、e();在你瀏覽器的在你瀏覽器的URL中輸出中輸出“/Elements”調用我調用我們在們在Jrun中配置的中配置的servlet映射。映射。在刷新時,瀏覽器向在刷新時,瀏覽器向Web服務器發出服務器發出URL請求,請求,Web服務器找到與這個服務器找到與這個URL信息對應的信息對應的servlet映射,然后調用映射,然后調用Elemetns Servlet。Elements Servlet處理處理GET請求并返回未格式化的元素周請求并返回未格式化的元素周期表數據給期表數據給Web服務器。之后,服務器。之后,Web服務器發服務器發現存在現存在servlet鏈接,于是將鏈接,于是將Element
27、s Servlet的輸出重定向為的輸出重定向為servlet鏈接中下一個鏈接中下一個servlet,也就是表過濾器的輸入。表過濾器重新設置所有也就是表過濾器的輸入。表過濾器重新設置所有HTTP首部,以適應表過濾器的需要,然后讀入首部,以適應表過濾器的需要,然后讀入所有元素周期表數據,表過濾器使用指定的表格所有元素周期表數據,表過濾器使用指定的表格格式信息來分析和處理這些數據,最后生成一個格式信息來分析和處理這些數據,最后生成一個格式化的元素周期表。格式化的元素周期表。 Mime類型類型觸發觸發servlet鏈接的另外一種方法是將一鏈接的另外一種方法是將一個個servlet與特定與特定Mime類
28、型聯系起來。當這類型聯系起來。當這種種Mime類型的應答產生時,輸出就會被發類型的應答產生時,輸出就會被發送給與之相聯系的送給與之相聯系的servlet。由于。由于MIME類型類型是在是在servlet向輸出流中寫入時才確定的,所向輸出流中寫入時才確定的,所以用這種方法你可以輕易地將以用這種方法你可以輕易地將servlet的輸出的輸出重定向到其他重定向到其他servlet。 Java Web Server如前所述,在所有的工作之前,你必須確認如前所述,在所有的工作之前,你必須確認servlet鏈接功能已經啟用鏈接功能已經啟用(見圖見圖4.4)。截止到本書發稿,。截止到本書發稿,還沒有可以管理還
29、沒有可以管理MIME類型和類型和servlet映射的圖形用戶映射的圖形用戶接口接口(GUI),所以你不得不手工編輯,所以你不得不手工編輯“perties”文件。這個文件位于目文件。這個文件位于目錄錄“/properties/server/javawebserver/webpageservice”。下述代碼給出了基本的內容。值。下述代碼給出了基本的內容。值得注意的是,得注意的是,MIME類型所映射的類型所映射的servlet名字實際上名字實際上是該是該servlet的別名。的別名。# This file maps mime-types to the servlet
30、s which process them# This is used 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 s
31、et this# explicitly.# Entries in this file should be of the form# mime-type/servletname# ie.# foo/bar=fooServlet# where fooServlet is defined in pertiesjava-internal/parsed-html=ssijava-internal/template-content=templateJrun在在JRun中,你可以通過系統管理應用程序設置中,你可以通過系統管理應用程序設置MIME類型映射。如圖類型映射。如圖4.10所示
32、,你可以把一個所示,你可以把一個servlet和特定的和特定的MIME類型聯系起來。類型聯系起來。MIME類型鏈接的例子類型鏈接的例子:Indy 500為了說明如何通過為了說明如何通過MIME類型來觸發類型來觸發servlet鏈鏈接,讓我們編寫一個列出接,讓我們編寫一個列出Indianapolis 500自自1911年起的所有優勝者。就像年起的所有優勝者。就像Elements Servlet一樣,一樣,我們直接將輸入用逗號分隔的各行數據,并用表過我們直接將輸入用逗號分隔的各行數據,并用表過濾器將其格式化成濾器將其格式化成HTML表格形式輸出。惟一的不同表格形式輸出。惟一的不同在于我們設置了一個
33、不同的在于我們設置了一個不同的MIME類型,通過這個類型,通過這個MIME類型,類型,Web服務器將服務器將Indy 500 Servlet的輸出的輸出重定向為表過濾器重定向為表過濾器servlet的輸入的輸入(見例見例3)。例例3 Indy500.javapackage javaservlets.samples;import javax.servlet.*;import javax.servlet.http.*;/*This is a simple servlet that will return a list of* past Indianapolis 500 winners*/publi
34、c 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 to write the re
35、sponsejava.io.PrintWriter out =new java.io.PrintWriter(resp.getOutputStream();/ Set the content type of the responseresp.setContentType(text/table);/ Print the HTML headerout.println();out.println();out.println(Java Servlets Sample - +Past Indianapolis 500 Winners);out.println();out.println();out.pr
36、intln(Past Indianapolis 500 Winners);out.println();/ Output special table formatting instructions for/ the TableFilter servletout.println();out.println(Year,Driver,Average Speed);out.println(1997,Arie Luyendyk,145.827);out.println(1996,Buddy Lazier,147.956);out.println(1995,Jacques Villenueve,153.61
37、6);/Etc. out.println(1912,Joe Dawson,78.719);out.println(1911,Ray Harroun,74.602);out.println();/ Wrap upout.println();out.flush();out.close();通過使用通過使用JRun中配置的中配置的MIME類型映射,調類型映射,調用用Indy 500 Servlet的結果將會是格式化了的的結果將會是格式化了的Indianapolis 500優勝者列表優勝者列表(如圖如圖4.12所示所示)。值得注意的是,我們只要設置值得注意的是,我們只要設置servlet的別名就的別名
38、就可以了,而無須指定它的全名。可以了,而無須指定它的全名。再次重申,再次重申,Web瀏覽器向瀏覽器向Web服務器發送服務器發送的是含有的是含有servlet名字的名字的HTTP請求,請求,Web服務服務器調用了器調用了servlet(Indy 500),servlet設置了設置了MIME類型類型“text/table”,而我們已經將這個,而我們已經將這個MIME類型映射到表過濾器類型映射到表過濾器servlet。于是,。于是,Indy 500所產生的輸出將被重定向為表過濾器所產生的輸出將被重定向為表過濾器servlet的輸入,表過濾器的輸入,表過濾器servlet將數據格式化將數據格式化為為H
39、TML表格的形式,并將輸出返回給表格的形式,并將輸出返回給Web服服務器。最后務器。最后Web服務器把這些服務器把這些HTML頁發送給頁發送給瀏覽器。瀏覽器。 HTTP請求請求觸發觸發servlet鏈接的另一種方法是在鏈接的另一種方法是在HTTP請求中指定請求中指定servlet鏈接。不過不是所有的鏈接。不過不是所有的Web服務器都支持這種方法。為了說明服務器都支持這種方法。為了說明HTTP請求請求中的中的servlet鏈接,我們再來編寫一個簡單的鏈接,我們再來編寫一個簡單的servlet(Solar System),它將返回我們太陽系,它將返回我們太陽系中所有行星的信息。例中所有行星的信息。
40、例4給出了給出了Solar System Servlet的代碼。的代碼。例例4: SolarSystem.javapackage 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*/public class SolarSystem extends HttpServlet/* Performs the HTTP GET opera
41、tion* 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 type of the responseresp.setContentType(text/html);/ Create a PrintWriter to write th
42、e responsejava.io.PrintWriter out = new java.io.PrintWriter(resp.getOutputStream();/ Print the HTML headerout.println();out.println();out.println(Java Servlets Sample - +Planets In Our Solar System);out.println();out.println();out.println(Planets In Our Solar System);out.println();/ Output special t
43、able formatting instructions for/ the TableFilter servletout.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 days,0);out.println(Venus,108 million km,225 days,243 days,0);out.println(Earth,150 million km,365.25 da
44、ys,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);out.println(Uranus,2870 million km,84 years,17.23 hours,15);out.println(Neptune,4497 million km,164.8 year
45、s,16 hours,8);out.println(Pluto,5913 million km,248 years,6.375 days,1);out.println();/ Wrap upout.println();out.flush();out.close();/* Initialize the servlet. This is called once when the* servlet is loaded. It is guaranteed to complete before any* requests are made to the servlet* param cfg Servle
46、t configuration information*/public void init(ServletConfig cfg)throws ServletExceptionsuper.init(cfg);/* Destroy the servlet. This is called once when the servlet* is unloaded.*/public void destroy()super.destroy();和前面的和前面的servlet一樣,一樣,Solar System Servlet將將直接輸出無格式的數據而將格式化的工作交由表過直接輸出無格式的數據而將格式化的工作交
47、由表過濾器濾器servlet來完成。由于來完成。由于Java Web Server不支持不支持用用HTTP請求觸發請求觸發servlet鏈接,我們將使用鏈接,我們將使用JRun。圖圖4.14顯示了顯示了Solar System Servlet和表過濾器和表過濾器servelt鏈接起來以后的輸出結果。請注意調用鏈接起來以后的輸出結果。請注意調用servlet時使用的時使用的URL,在這種情況下,在這種情況下,URL中包含中包含了一個鏈接在一起的了一個鏈接在一起的servlet名字,它們之間用逗號名字,它們之間用逗號來間隔。來間隔。 8.2 Java Servlet 編程及應用編程及應用8.2.1
48、服務器端包含服務器端包含服務器端包含服務器端包含 (Server-Side Includes) 是是Web 頁面設計中的一種常用技術,在一個輸出很多網頁頁面設計中的一種常用技術,在一個輸出很多網頁的系統中,經常會有一些網頁的組成部分在多個網的系統中,經常會有一些網頁的組成部分在多個網頁中同時出現。頁中同時出現。Server-Side Includes 是是Java Server 體系結構的一個高級特征,它可以在體系結構的一個高級特征,它可以在HTML 文檔中嵌入文檔中嵌入servlet,這樣就可以利用一個或多個,這樣就可以利用一個或多個servlet 來組成最終的來組成最終的HTML 文檔,這
49、種特殊的包含文檔,這種特殊的包含了了Servlet 輸出和輸出和HTML 標記的文件用擴展名標記的文件用擴展名.shtml 表示。表示。Servlet 標記的語法:標記的語法:servlet name=Servlet_name code=Servlet.class codebase=類路徑類路徑名稱名稱 1 = 參數值參數值 1名稱名稱 2 = 參數值參數值 2.名稱名稱 n = 參數值參數值 n param name =名稱名稱 1 value = 參數值參數值 1param name =名稱名稱 2 value = 參數值參數值 2.param name =名稱名稱 n value = 參
50、數值參數值 n /servlet編程思路及技巧:下面是一個完整的簡單編程思路及技巧:下面是一個完整的簡單的服務器包含的服務器包含(SSI)的實例,整個的實例,整個shtml 頁面由頁面由2個個Servlet 組成,第組成,第1個個Servlet是是Header.java,代表頁頭,主要功能是顯示標,代表頁頭,主要功能是顯示標題信息;第題信息;第2個個Servlet 是是Footer.java,代表,代表頁腳,主要功能是顯示頁腳的版權信息;頁腳,主要功能是顯示頁腳的版權信息;Together.shtml 是將是將2個個Servlet 組合在一起組合在一起顯示的服務器包含,它應當從文檔根目錄顯示的
51、服務器包含,它應當從文檔根目錄(如如root)中加載。中加載。例例5: Header.javaimport javax.servlet.*;import java.io.*;public class Header extends GenericServletpublic void service(ServletRequest req,ServletResponse resp)throws ServletException, IOException res.setContentType(text/html;charset=gb2312); PrintWriter out =res.getWrit
52、er();/ Get the title of the page. Set to empty string if / no title parameter was given String titles = req.getParameterValues(title); String title = ; if (titles != null) if (titles.length 0) title = titles0; Footer.javaimport javax.servlet.*;import java.io.*;public class Footer extends GenericServ
53、letpublic void service(ServletRequest req,ServletResponse resp)throws ServletException, IOException res.setContentType(text/html;charset=gb2312); PrintWriter out =res.getWriter(); / Format the standard header out.println(hr; out.println(p align=centeri 版權所有,信息版權所有,信息公司公司/i/p; / Wrap up out.flush();
54、out.close(); /* pReturns information about this servlet*/public String getServletInfo() return Footer ; public void init(ServletConfig cfg)throws ServletException super.init(cfg);public void destroy() super.destroy(); 8.2.2使用使用Java Servlet API 進行會話進行會話管理管理javax.servlet.http.HttpSession 接口接口封裝了封裝了HTT
55、P 會話的細節,該會話與一段時會話的細節,該會話與一段時間內特定的間內特定的Web 客戶對客戶對Web 服務器的多個服務器的多個請求相關。管理會話數據主要涉及到請求相關。管理會話數據主要涉及到3個方個方面:會話交換、會話重定位和會話持久性,面:會話交換、會話重定位和會話持久性,只有實現了只有實現了java.io.Serializable 接口的數接口的數據對象才能夠被交換、重定位和保持。這個據對象才能夠被交換、重定位和保持。這個接口主要是讓對象具有序列化的能力,它可接口主要是讓對象具有序列化的能力,它可以將對象的狀態信息寫入任意的輸出流中如:以將對象的狀態信息寫入任意的輸出流中如:文件、網絡連
56、接等。文件、網絡連接等。編程思路:下面是實現一個簡單在商場購物的例子,編程思路:下面是實現一個簡單在商場購物的例子,當用戶選購商品當用戶選購商品(糖果、收音機和練習簿糖果、收音機和練習簿)放入購物袋中,放入購物袋中,保存選購的商品信息。保存選購的商品信息。編程技巧說明:編程技巧說明:在在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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年陜西省西安交大附中中考物理三模試卷(含解析)
- 雞澤墻改梁施工方案
- 看臺土方開挖施工方案
- 酒店商鋪招商方案范本
- 鐵路旅客人身損害違約責任課件
- 中華兒童銘課件
- 大學生職業規劃大賽《輪機工程專業》生涯發展展示
- 臨時物流服務合同范本
- 個人職業防護課件
- 版舊房交易合同樣本
- 《高中信息技術課分層教學的探索與研究》課題研究開題報告結題報告
- 財產險水災現場勘查及理賠定損標準
- JB-T 2302-2022 雙筒網式過濾器 型式、參數與尺寸
- 船舶帶纜知識學習
- 導線懸垂合成絕緣子串絕緣子、金具機械強度計算
- 文化遺產與自然遺產學習通期末考試答案2023年
- 雞蛋的營養價值和功效
- 福樓拜-教學講解課件
- 《衛生應急管理》衛生應急管理概述-課件
- 感染性疾病的分子生物學檢驗技術-遺傳學疾病的分子生物學檢驗技術-醫學院課件
- 《現代世界形成》
評論
0/150
提交評論