999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

利用WM L和JSP技術(shù)開(kāi)發(fā)WAP OPAC檢索平臺(tái)——以Melinets系統(tǒng)為例

2012-02-15 10:00:06侯新宇
圖書(shū)館研究 2012年2期
關(guān)鍵詞:頁(yè)面數(shù)據(jù)庫(kù)

侯新宇

(中國(guó)傳媒大學(xué)圖書(shū)館,北京 100024)

1 前言

WAP作為一項(xiàng)全球性的網(wǎng)絡(luò)通信協(xié)議,使移動(dòng)互聯(lián)網(wǎng)有了一個(gè)通行的標(biāo)準(zhǔn),把互聯(lián)網(wǎng)上HTML語(yǔ)言的信息轉(zhuǎn)換成用WML(Wireless Markup Language)描述的信息,顯示在移動(dòng)電話的顯示屏上。基于WAP技術(shù)的圖書(shū)館OPAC(Online Public Access Catalogue)系統(tǒng),可以利用現(xiàn)有OPAC系統(tǒng)與數(shù)據(jù)庫(kù)接口對(duì)數(shù)據(jù)進(jìn)行檢索操作,無(wú)需單獨(dú)建立數(shù)據(jù)庫(kù),保證了檢索數(shù)據(jù)的時(shí)效性、精確性,無(wú)冗余數(shù)據(jù)。

2 需求分析

中國(guó)傳媒大學(xué)圖書(shū)館(以下簡(jiǎn)稱我館)因書(shū)庫(kù)面積狹小,無(wú)法放置足夠的檢索終端,在借閱繁忙時(shí)段,檢索終端前讀者人數(shù)激增,讀者需要花費(fèi)較長(zhǎng)的時(shí)間才能借閱所需圖書(shū)。為了方便讀者檢索館藏文獻(xiàn),節(jié)省讀者檢索時(shí)間,我館基于北京郵電大學(xué)Melinets自動(dòng)化業(yè)務(wù)管理系統(tǒng),使用JSP腳本語(yǔ)言,結(jié)合WML標(biāo)記語(yǔ)言構(gòu)建了WAP OPAC檢索平臺(tái),讀者可以手機(jī)為檢索終端,直接進(jìn)入開(kāi)架書(shū)庫(kù),隨時(shí)隨地進(jìn)行檢索,提高了檢索效率.

3 基本W(wǎng)ML語(yǔ)言

WML1.1規(guī)范標(biāo)準(zhǔn)對(duì)于標(biāo)記格式的使用十分嚴(yán)格。一些智能手機(jī)平臺(tái)上安裝的第三方瀏覽器,如UC、Opera等手機(jī)瀏覽器雖然可以過(guò)濾一些腳本及頁(yè)面顯示錯(cuò)誤,但為了保證在非智能及智能手機(jī)平臺(tái)上的兼容性,我們應(yīng)確保頁(yè)面編寫(xiě)要嚴(yán)格使用規(guī)范的WML1.1標(biāo)記。

〈?xml version="1.0"encoding="UTF-8"?〉

〈!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml"〉〈wml〉

〈card id="index"title="WAP OPAC For CUC Library"〉

〈p〉

歡迎訪問(wèn)中國(guó)傳媒大學(xué)圖書(shū)館〈br/〉WAP OPAC 檢索系統(tǒng)! 〈br/〉〈br/〉

〈a href="search.wml"〉書(shū)刊檢索〈/a〉〈br/〉〈br/〉

〈a href="reader.wml"〉讀者信息〈/a〉〈br/〉〈br/〉

中國(guó)傳媒大學(xué)圖書(shū)館 版權(quán)所有All Rights Reserved

〈/p〉

〈/card〉

〈/wml〉

上面的代碼保存為index.wml,就是一個(gè)最簡(jiǎn)單的WML腳本,在WML語(yǔ)言中,〈?xml version="1.0"encoding="UTF-8"?〉〈!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml"〉是必須出現(xiàn)在*.wml文件(包括使用JSP腳本語(yǔ)言編寫(xiě)的*.jsp文件)前兩行的標(biāo)記中,否則瀏覽器就會(huì)報(bào)錯(cuò)。

〈wml〉〈/wml〉則像 html語(yǔ)言中〈body〉〈/body〉一樣,在其中編寫(xiě)代碼。〈card〉〈/card〉標(biāo)記則是WML語(yǔ)言特有的標(biāo)記,每個(gè)手機(jī)上顯示的內(nèi)容都是這個(gè)標(biāo)記中編寫(xiě)的代碼內(nèi)容。一個(gè)wml文件中可以擁有多個(gè)〈card〉〈/card〉標(biāo)記。

手機(jī)默認(rèn)只顯示第一個(gè)標(biāo)記中的內(nèi)容,使用〈ahref="#cardID"〉go〈/a〉超鏈接標(biāo)記實(shí)現(xiàn)在多個(gè)〈card〉〈/card〉標(biāo)記之間跳轉(zhuǎn),實(shí)現(xiàn)多個(gè)頁(yè)面的顯示內(nèi)容。

encoding="UTF-8"標(biāo)記表示此文件使用UTF-8編碼顯示,此標(biāo)記也可以不寫(xiě)或?qū)懗桑B2312",對(duì)于有多語(yǔ)種圖書(shū)的圖書(shū)館應(yīng)使用UTF-8編碼顯示,確保小語(yǔ)種字符的正確顯示。在保存*.wml和*.jsp文件時(shí)也應(yīng)將其文件保存為UTF-8編碼格式,與頁(yè)面顯示語(yǔ)言保持一致,否則瀏覽器顯示時(shí)也會(huì)顯示為亂碼。

4 WML語(yǔ)言中的參數(shù)傳遞

〈p〉

檢索詞: 〈input type="text"name="content"value=""/〉

〈anchor〉

〈go href="result.jsp"method="post"acceptcharset="UTF-8"〉

〈postfield name = "search_content"value = "$(content)"/〉

〈/go〉

查詢

〈/anchor〉

〈/p〉

上面的代碼是search.wml文件中的一段。用戶在輸入檢索詞內(nèi)容并點(diǎn)擊“查詢”后,系統(tǒng)將輸入框中的文本命名為search_content,并將內(nèi)容傳送給result.jsp文件,這樣就完成了一個(gè)簡(jiǎn)單的參數(shù)傳遞過(guò)程。在result.jsp文件中使用如下語(yǔ)句進(jìn)行參數(shù)獲取:

request.setCharacterEncoding("UTF-8");

String search_content= request.getParameter("search_content");

search.wml文件用 accept-charset="UTF-8"設(shè)置以UTF-8編碼傳送參數(shù),那么在result.jsp文件中也要將接收參數(shù)先設(shè)置接收編碼為UTF-8,這樣就可以正常的進(jìn)行頁(yè)面之間的參數(shù)傳送了。

5 JSP實(shí)現(xiàn)SQL語(yǔ)句檢索

〈?xml version="1.0"encoding="UTF-8"?〉〈!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml"〉

〈%@page contentType="text/vnd.wap.wml;

charset=UTF-8"language="java"%〉

〈%@page import="java.sql.*"%〉

〈wml〉

〈card title="檢索結(jié)果"〉〈p〉

〈%

Class.forName("com.sybase.jdbc2.jdbc.SybDriver");//裝載 JDBC 驅(qū)動(dòng)程序

String url="jdbc:sybase:Tds:IP:PORT/

melinets";//設(shè)置數(shù)據(jù)庫(kù)連接字符串

Connection conn=DriverManager.

getConnection(url,"username","password");//連接數(shù)據(jù)庫(kù)

request.setCharacterEncoding("UTF-8");//設(shè)置參數(shù)編碼是UTF-8格式

String search_content=request.get

Parameter("search_content").toUpperCase();//獲取檢索內(nèi)容,并將小寫(xiě)字母全部換成大寫(xiě)

String strSelect= "select rec_ctrl_id,title,authors,publisher,pubdate_date";

String strFrom = "from manager.index_title";String strWhere;

strWhere="where title_abs like%"+search_content+"%";//index_title表中title_abs字段存儲(chǔ)的都是已經(jīng)轉(zhuǎn)換為大寫(xiě)的字符

strOrder= "order by pubdate_date desc ";

String strSql=strSelect+strFrom+strWhere+strOrder;//SQL語(yǔ)句

ResultSet main_bibli_Rs=main_bibli_Stmt.executeQuery(strSql);//結(jié)果集對(duì)象

while{main_bibli_Rs.next()}{

String main_bibli_rec_ctrl_id=main_bibli_Rs.getString("rec_ctrl_id");

String main_bibli_title=main_bibli_Rs.get-String("title");

String main_bibli_authors=main_bibli_Rs.get-String("authors");

String main_bibli_publisher=main_bibli_Rs.getString("publisher");

main_bibli_title = main_bibli_title.replaceAll{"([u0000-u001F]|&|〈|〉)",""};//替換掉手機(jī)瀏覽器中不支持的不可見(jiàn)字符,和wml中的保留字符如“&”、“〈”、“〉”等。

main_bibli_authors=main_bibli_authors.

replaceAll{"([u0000-u001F]|&|〈|〉)",""};

main_bibli_publisher=main_bibli_

publisher.replaceAll{"([u0000-u001F]|&|〈|〉)",""};

%〉

〈%=main_bibli_title%〉〈br/〉

〈%=main_bibli_authors%〉〈br/〉

〈%=main_bibli_publisher%〉

〈% =main_bibli_Rs.getString("pubdate_date").substring(0,4)%〉〈br/〉

〈anchor〉

〈go href="detail.jsp"method="

post"accept-charset="UTF-8"〉

〈postfield name="sid"value="〈%=main_bibli_rec_ctrl_id%〉"/〉

〈/go〉

查看館藏信息

〈/anchor〉

〈%

main_bibli_Rs.close();

main_bibli_Stmt.close();

conn.close();

}%〉

〈/p〉〈/card〉

〈/wml〉

上面的代碼是result.jsp文件中的一段。文件在接收到search.wml傳送過(guò)來(lái)的檢索內(nèi)容后,對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢索查詢,并輸出檢索結(jié)果,配合WML標(biāo)記語(yǔ)言,實(shí)現(xiàn)手機(jī)瀏覽器的內(nèi)容顯示。由于WML1.1規(guī)范對(duì)于字符顯示比較嚴(yán)格,雖然UC、QQ瀏覽器等第三方瀏覽器可以自動(dòng)將一些不可見(jiàn)字符過(guò)濾,但對(duì)于非智能手機(jī),瀏覽器在接收到這些不可見(jiàn)字符后會(huì)出現(xiàn)錯(cuò)誤提示,無(wú)法正確顯示網(wǎng)頁(yè),所以要對(duì)從數(shù)據(jù)庫(kù)中提取的內(nèi)容進(jìn)行過(guò)濾,replaceAll{"([u0000-u001F]|&|〈|〉)",""}函數(shù)就是使用正則表達(dá)式將所有不可見(jiàn)字符使用十六進(jìn)制方式將其讀取并進(jìn)行過(guò)濾,對(duì)于“&”、“〈”、“〉”等這些WML中的保留字符,可以使用replace("&","&")函數(shù)將其轉(zhuǎn)換為可以顯示的轉(zhuǎn)義字符,其他類似字符這里就不再贅述。

由于篇幅所限,上述代碼中沒(méi)有對(duì)檢索結(jié)果進(jìn)行分頁(yè)顯示,對(duì)于符合WML1.1規(guī)范的非智能手機(jī),單個(gè)wml文件大小不能超過(guò)255 KB。如果超過(guò)這個(gè)限制,手機(jī)會(huì)自動(dòng)截?cái)囗?yè)面文件,從而造成了頁(yè)面中缺少〈/card〉或〈/wml〉等結(jié)尾標(biāo)記,導(dǎo)致頁(yè)面無(wú)法正常顯示而報(bào)錯(cuò)。所以,必須使用分頁(yè)顯示技術(shù),且每頁(yè)顯示記錄數(shù)不宜過(guò)多。

手機(jī)屏幕比普通顯示器要小,并且分辨率不高。因此,在一個(gè)頁(yè)面中不宜顯示過(guò)多數(shù)據(jù)。檢索結(jié)果應(yīng)當(dāng)簡(jiǎn)單明了,可顯示題名、著者、出版社、出版年等一些重要信息,讀者點(diǎn)擊查看館藏信息頁(yè)面detail.jsp時(shí)再顯示圖書(shū)的詳細(xì)信息。這樣一方面可以減少服務(wù)器負(fù)擔(dān),加快檢索速度;另一方面可以減少手機(jī)GPRS流量。

6 存儲(chǔ)過(guò)程的調(diào)用

Melinets系統(tǒng)在sybase數(shù)據(jù)庫(kù)端編寫(xiě)了大量存儲(chǔ)過(guò)程,如續(xù)借、預(yù)約等。我們?cè)谶M(jìn)行這些操作時(shí)調(diào)用這些編寫(xiě)好的存儲(chǔ)過(guò)程即可,如circul.up_renewal就是續(xù)借操作的存儲(chǔ)過(guò)程。將相應(yīng)的參數(shù)傳遞給存儲(chǔ)過(guò)程,執(zhí)行存儲(chǔ)過(guò)程,即可完成續(xù)借操作,下面的代碼就是一個(gè)簡(jiǎn)單的調(diào)用續(xù)借存儲(chǔ)過(guò)程,完成圖書(shū)續(xù)借操作。

〈?xml version="1.0"encoding="UTF-8"?〉〈!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml"〉

〈%@page contentType="text/vnd.wap.wml;

charset=UTF-8"language="java"%〉

〈%@include file="include/conn.jsp"%〉

〈wml〉

〈card title="讀者信息 -WAP OPAC For CUC Library"〉〈p〉

〈%

request.setCharacterEncoding("UTF-8");//設(shè)置參數(shù)編碼是UTF-8格式,或者用下面的字符轉(zhuǎn)換方法轉(zhuǎn)換編碼

String input_barcode=request.get

Parameter("username");//讀取用戶名

String input_pwd=request.get

Parameter("userpwd");//讀取密碼

String book_barcode=request.get

Parameter("book_barcode");//讀取圖書(shū)條碼

String library_id = "A";//圖書(shū)所在館

String note = "";//流通備注

String holdtype = "";//預(yù)約類型

String userid = "wap";//操作員代碼

StringstrProc= "{callcircul.up_renewal(?,?,?,?,?,?,?,?,?,?,?)}";//存儲(chǔ)過(guò)程語(yǔ)句

CallableStatementCStmt= conn.prepareCall(strProc);//準(zhǔn)備可調(diào)用語(yǔ)句對(duì)象

CStmt.setString(1,library_id);//設(shè)置輸入?yún)?shù)

CStmt.setString(2,book_barcode);

CStmt.setString(3,note);

CStmt.setString(4,holdtype);

CStmt.setString(5,userid);

CStmt.registerOutParameter(6,java.sql.Types.IN TEGER);//登記輸出參數(shù)

CStmt.registerOutParameter(7,java.sql.Types.DATE);

CStmt.registerOutParameter (8,java.sql.Types.INTEGER);

CStmt.registerOutParameter(9,java.sql.Types.IN TEGER);

CStmt.registerOutParameter(10,java.sql.Types.VA RCHAR);

CStmt.registerOutParameter (11,java.sql.Types.INTEGER);

CStmt.executeUpdate();//執(zhí)行該存儲(chǔ)過(guò)程并返回結(jié)果集

String strMsg=CStmt.getString(10);

int strRetu=CStmt.getInt(11);

if(strRetu == 0){//續(xù)借成功

%〉

續(xù)借成功! 〈br/〉

〈%=strMsg%〉〈br/〉

〈%

}

else{//續(xù)借失敗

%〉

續(xù)借失敗! 〈br/〉

〈%=strMsg%〉〈br/〉

〈%

}

CStmt.close();

conn.close();

%〉

〈/p〉〈/card〉

〈/wml〉

7 結(jié)束語(yǔ)

通過(guò)上述代碼編寫(xiě),一個(gè)簡(jiǎn)單的WAP OPAC檢索站點(diǎn)已經(jīng)建立。它擁有書(shū)刊檢索和讀者信息查詢、續(xù)借等常用功能,但還需完善。2011年9月試運(yùn)行以來(lái),極大地緩解了我館檢索終端不足的現(xiàn)狀,目前已很少出現(xiàn)排隊(duì)等待檢索的情況。

猜你喜歡
頁(yè)面數(shù)據(jù)庫(kù)
微信群聊總是找不到,打開(kāi)這個(gè)開(kāi)關(guān)就好了
大狗熊在睡覺(jué)
刷新生活的頁(yè)面
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)
同一Word文檔 縱橫頁(yè)面并存
數(shù)據(jù)庫(kù)
主站蜘蛛池模板: 毛片视频网| 国产男人的天堂| 国产一区亚洲一区| 手机成人午夜在线视频| 久久精品国产91久久综合麻豆自制| 国产福利一区二区在线观看| 久久精品亚洲专区| 中国国语毛片免费观看视频| 国产成人亚洲精品蜜芽影院| 99热这里只有精品2| 伊人久久综在合线亚洲2019| 国产亚洲美日韩AV中文字幕无码成人| 黄色污网站在线观看| 色综合五月婷婷| 欧洲亚洲一区| 无码免费的亚洲视频| 在线观看视频99| 欧美一级特黄aaaaaa在线看片| 伊人久久久久久久久久| 99热国产这里只有精品9九| 午夜视频www| 久热这里只有精品6| 亚洲伊人天堂| 18禁色诱爆乳网站| 国产精品一区在线麻豆| 亚洲色图综合在线| 尤物国产在线| 国产亚洲精品91| 一级黄色片网| 国产在线麻豆波多野结衣| 一级爆乳无码av| 午夜a视频| 日本欧美中文字幕精品亚洲| 国产在线无码av完整版在线观看| 欧美日韩专区| 伊在人亚洲香蕉精品播放| 亚洲性色永久网址| 日韩东京热无码人妻| 香蕉精品在线| 欧美区日韩区| 亚洲av综合网| 亚洲熟妇AV日韩熟妇在线| 国产在线观看第二页| 欧美亚洲日韩不卡在线在线观看| 亚洲无码电影| 欧美在线中文字幕| 色国产视频| 国产精彩视频在线观看| 国产青青操| 色悠久久久| 亚洲日韩欧美在线观看| 午夜少妇精品视频小电影| yjizz视频最新网站在线| 日韩精品一区二区三区swag| 国产色爱av资源综合区| 日韩大片免费观看视频播放| 99视频精品在线观看| 国产69精品久久| 亚洲欧美另类日本| 91探花在线观看国产最新| 国产在线观看99| 国产不卡网| www.亚洲国产| 91久久天天躁狠狠躁夜夜| av色爱 天堂网| 99视频在线观看免费| 97在线免费| 欧洲熟妇精品视频| 国产精品视频公开费视频| 91久久精品日日躁夜夜躁欧美| 美女一级毛片无遮挡内谢| 免费人成又黄又爽的视频网站| 国产精品伦视频观看免费| 亚洲小视频网站| 九九热精品视频在线| 国产第八页| 色妞永久免费视频| 亚洲人成网线在线播放va| 狠狠色综合久久狠狠色综合| 国产一级一级毛片永久| 欧美日韩午夜| V一区无码内射国产|