COMPUTER LEARNING CENTERWWW.HUUKHANG.COM
Moân hoïc: Java Server Pages Baøi 1 Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong khoaù hoïc: 9 Caøi ñaët JRUN. o Caøi ñaët JDK1.3. o Caøi ñaët JRUN. o Caáu hình öùng duïng JSP 9 Giôùi thieäu JSP. o Script. o Khai baùo chæ muïc.
1. CAØI ÑAËT JRUN 1.1. Caøi ñaët JDK Ñeå caáu hình JRUN 4.0 treân Windows, tröôùc tieân baïn caøi ñaët boä JDK1.3 hay JDK 1.4 leân ñóa cöùng C hay D, sau khi caøi ñaët thaønh coâng baïn neân boot maùy laïi, trong oå ñóa seõ xuaát hieän thö muïc JDK1.3 vôùi caùc thö vieän cuûa chuùng.
1.2. Caøi ñaët JRUN
Ñeå caøi ñaët JRUN, baïn mua ñóa CD vôùi öùng duïng JRUN 4.0, sau ñoù caøi ñaët chuùng vaøo maùy coù caøi ñaët JDK. Trong khi caøi ñaët thì JRUN coù yeâu caàu choøn thö muïc nôi baïn caøi ñaët JDK. Trong khi caøi ñaët JRUN, coù theå yeâu caàu baïn caøi ñaët chuùng döôùi daïng moät dòch vuï cuûa hôïp ñoàng haønh (maëc ñònh laø Yes), khi ñoù JRUN seõ caøi ñaët vôùi hai dòch vuï laø JRUN Admin vaø JRUN Default trong cöûa soå Services (trong Control Panel hay Administrative Tools) cuûa heä ñieàu haønh Windows nhö hình 1-1 sau:
Hình 1-1: Dòch vuï JRUN trong Servies
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTERWWW.HUUKHANG.COM
Baïn phaûi baûo daûm raèng chuùng ñang ôû cheá ñoä Started, trong tröôøng hôïp ñang ôû cheá ñoä STOP thì baïn choïn dòch vuï naøy vaø nhaán nuùt Start. Neáu JRUN ñang ôû cheá ñoä Start thì baïn seõ goõ http://localhost:8000 treân trình duyeät vaø cung caáp username cung vôùi password ñeå ñaêng nhaäp vaøo maøn hình uqaûn trò JRUN neáu muoán chöông. Neáu JRUN Default Server ñang ôû cheá ñoä Start thì baïn coù theå goõ ñòa chæ sau treân browser http://localhost:8100 ñeå chaïy öùng duïng maëc ñònh cuûa JSP. Ngoaøi ra, neáu baïn khoâng caøi ñaët JRUN nhö moät dòch vuï cuûa heä ñieàu haønh Windows thì moãi laàn baïn muoán chaïy öùng duïng JSP thì phaøi Start noù leân baèng caùch choïn Start | Programs | JRUN 4.0 | JRUN Default Server hay JRUN Admin Server roi sau do khôûi ñoäng JRUN Default Server, phaàn naøy seõ trình baøy trong phaàn caáu hình.
1.3. Caáu hình öùng duïng JSP Ñeå trieäu goïi trang JSP (teân môû roäng .jsp) treân trình duyeät, baïn coù theå caáu hình moät torng hai caùch sau:
1.3.1. Caùch 1: Neáu khoâng muoán taïo öùng duïng Web cho rieâng mình maø söû duïng thö muïc maëc ñònh thì baïn coù theå khai baùo caùc trang JSP vaø boû vaøo thö muïc JRUN4/Servers/Defaul/ defaultear/ default-war/. sau:
Chaúng haïn, trong tröôøng hôïp naøy chuùng ta khai baùo trang test.jsp vôùi noäi dung nhö
Test JSP <%=”Hello JSP”%>
Ñeå kieåm tra trang JSP naøy, baïn khai baùo treân trình duyeät nhö sau: http://localhost1:8100/test.jsp
Tuy nhieân, baïn coù theå khai baùo caùc thö muïc con beân trong cuûa thö muïc maëc ñònh naøy, sau ñoù trieäu goïi treân trình duyeät theo teân thö muïc, chaúng haïn http://localhost:8100/qlda/danhmucphongban.jsp.
1.3.2. Caùch 2: Ñeå caáu hình öùng duïng JSP treân JRUN baïn coù theå thao taùc theo caùc böôùc sau: 1. Baïn ñaêng nhaäp vaøo JRUN Admin vôùi http://localhost:8000 baèng caùch cung caáp username/pwd nhö hình 1-2 sau.
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTERWWW.HUUKHANG.COM
Hình 1-2: Ñaêng nhaäp JRUN Admin
2. Taïo thö muïc löu tröõ web site treân oå ñóa, chaúng haïn trong tröôøng hôïp naøy khai baùo thö muïc jspsample nhö hình 1-3.
Hình 1-3: Khai baùo thö muïc ñeå löu tröõ trang JSP
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTERWWW.HUUKHANG.COM
3. Choïn vaøo menu Home, JRUN seõ lieät keâ danh saùch caùc server ñang caáu hình treân JRUN nhö hình 1-4.
Hình 1-4: Danh saùch caùc Server treân JRUN
4. Choïn URL coù teân laø Create New Server treân menu naèm ôû ñaàu trang, trong cöûa soå vöøa xuaát hieän (Creating a New JRun Application Server) baïn cung caáp caùc tham soá trong hình 1-5 nhö sau: •
Host Name:localhost (hoaëc ñòa chæ IP, teân server)
•
JRun Server Name: Choïn teân cuûa öùng duïng, ví duï trong tröôøng hôïp naøy choïn jspsample.
•
JRun Server Directory: Thö muïc cuûa öùng duïng baïn vöøa taïo ra, chaúng haïn D:/jspsample (hay D:/thuvien/hr).
5. Nhaán nuùt Create chôø trong giaây laùt cöûa soå cuûa HOME page seõ xuaát hieän teân öùng duïng web baïn vöøa taïo (jspsample), nhaán nuùt Start ñeå khôûi ñoäng öùng duïng naøy. Trong tröôøng hôïp phaùt sinh loãi do port bò ñuïng ñoä, maëc ñònh cuûa site default laø 8100 (admin laø 8000), khi baïn taïo öùng duïng xong, moät port naøo ñoù ñöôïc gaùn cho öùng duïng cuûa baïn vì duï nhö 8101 nhö hình 1-6. Tuy nhieân, baïn coù theå thay ñoåi port naøy baèng caùch edit ñeå caäp nhaät.
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTERWWW.HUUKHANG.COM
Hình 1-5: Taïo website
Hình 1-6: Taïo öùng duïng JSP thaønh coâng
Sau khi taïo thaønh coâng, teân öùng duïng vöøa taïo seõ xuaát hieän trong danh saùch server cuûa JRUN nhö hình 1-7. Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTERWWW.HUUKHANG.COM
Hình 1-7: Teân site vöøa taïo
Xem treân baûng danh saùch server öùng vôùi jspsample coù phaàn HTTP Port laø 8101, sau ñoù treân http, baïn goõ http://localhost:8101/test.jsp, keát quaû seõ xuaát hieän nhö hình 1-8.
Hình 1-8: Keát quaû trang test.jsp Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTERWWW.HUUKHANG.COM
2. GIÔÙI THIEÄU JSP 2.1. Yeâu caàu JSP döïa treân cuù phaùp cuûa ngoân ngöõ laäp trình Java, chính vì vaäy khi laøm vieäc vôùi JSP baïn phaûi laø ngöôøi coù kieán thöùc veà ngoân ngöõ naøy. Neáu baïn xaây döïng öùng duïng JSP coù keát noái cô sôû döõ lieäu thì kieán thöùc veà cô sôû döõ lieäu SQL Server hay Oracle laø ñieàu caàn thieát.
2.2. Giôùi thieäu JSP laø kòch baûn trình chuû (Server Script) ñöôïc chaïy treân neàn JDK 1.3 trôû veà sau, cuøng vôùi öùng duïng Web Server ñeå quaûn lyù chuùng. Web Server thöôøng söû duïng laø Tomcate, Java Web Server, JRUN, WebLogic vaø Apache, ... Tieàn thaân cuûa JSP laø xuaát phaùt töø Java Servlet, khi laøm vieäc vôùi Java Servlet thì haàu heát caùc laäp trình viweân gaëp khoù khaên khi xuaát nhaäp döõ lieäu, cuï theå laø giao dieän vôùi ngöôøi söû duïng. Chính vì vaäy SUN Microsystem cung caáp kòch baûn JSP laø phaàn môû roäng cuûa Java Servlet ñeå cho pheùp quaù trình laäp trình öùng duïng Web trôû neân ñôn giaûn hôn. Tuy nhieân, nhöõng trang JSP naøy khi bieân dòch ñeà thoâng qua trang trung gian laø Java Sevrlet.
2.3. Bieân dòch trang JSP Khi ngöôøi söû duïng goïi trang JSP laàn ñaàu tieân, Web Server trieäu goïi trình bieân dòch dòch trang JSP (trong tröôøng hôïp naøy laø JDK) thaønh taäp tin Java, keá ñeán taäp tin java (Java Servlet) naøy seõ bieân dòch ra Class . Sau ñoù, trang class thöïc thi vaø traû veà keát quaû cho ngöôøi söû duïng nhö hình 1-9.
Parse
Request
Taäp tin JSP
Java Engine (JSK)
Call Web Server
Taäp tin Java Servlet
Instantiate
Request
Compile
Response
Taäp tin Class
Response Instantiate Process and Render
Hình 1-10: Quaù trình bieân dòch trang JSP Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTERWWW.HUUKHANG.COM
2.4. Kòch baûn (script) Noäi dung cuûa JSP coù theå khai baùo laãn loän vôùi HTML, chính vì vaäy baïn söû duïng caëp daáu <%= %> ñeå khai baùo maõ JSP. Chaúng haïn, chuùng ta khai baùo:
1-Giaù trò bieán Str: <%=str%> 2-Giaù trò bieán i: <%=i%> 3-Giaù trò cuõ theå: <%=10%>
Trong tröôøng hôïp coù nhieàu khai baùo, baïn söû duïng Scriptlet, ñeàu naøy coù nghóa laø söû duïng caëp daáu treân nhö <%%> vôùi caùc khai baùo JSP vôùi cuù phaùp cuûa Java nhö sau: <% int i=0; String str=”Select * from tblABC”; out.println(str); %> -Khai baùo treân laø Scriptlet Giaù trò cuûa i:
<%=i%> -Khai baùo naøy laø Script
3. KEÁT LUAÄN Trong baøi naøy, chuùng ta taäp trung tìm hieåu caùch caøi ñaët JSK vaø JRUN, sau ñoù caáu hình öùng duïng JSP trong JRUN hay söû duïng caáu hình maëc ñònh cuûa chuùng. Ngoaøi ra, baïn laøm quen caùch khai baùo maõ JSP trong trang .jsp cuøng vôùi script hay scriptlet.
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Moân hoïc: Java Server Pages Baøi 2
Baøi hoïc naøy chuùng ta seõ laøm quen vaø tìm hieåu cuù phaùp vaø moät soá phöông thöùc cô baûn cuûa JSP: 9 9 9 9 9
Caâu leänh. Bieán vaø kieåu döõ lieäu. Haèng. Baûng daõy Moät soá phöông thöùc cô baûn
1. KHAÙI NIEÄM VEÀ CUÙ PHAÙP JSP
Cuù phaùp JSP chính laø cuù phaùp trong ngoân ngöõ Java, caùc baïn laøm quen vôùi ngoân ngöõ Java thì coù lôïi theá trong laäp trình JSP. Ñeå laäp trình baèng ngoân ngöõ JSP caàn chuù yù nhöõng ñieåm sau: Cuoái caâu leänh coù daáu ; Moãi phöông thöùc ñeàu baét ñaàu { vaø ñoùng baèng daáu } Khi khai baùo bieán thì kieãu döõ lieäu naèm tröôùc teân bieán Neân coù giaù trò khôûi ñaàu cho bieán khai baùo Phaûi coù chi chuù (comment) cho moãi feature môùi Söû duïng daáu // ñeå giaûi thích cho moãi caâu ghi chuù Söû duïng /* vaø */ cho moãi ñoaïn ghi chuù Khai baùo bieán coù phaân bieät chöõ hoa hay thöôøng Teân file vaø lôùp cuõng nhö nhö khai baùo bieán
2. KHAI BAÙO BIEÁN Khi thöïc hieän moät vieäc khai baùo bieán trong java, baïn caàn phaûi bieát tuaân thuû quy ñònh nhö: kieãu döõ lieäu tröôùc teân bieán vaø coù giaù trò khôûi ñaàu Xuaát phaùt töø nhöõng ñieàu ôû treân, khai baùo bieán trong Java nhö sau: Datatype variable name [initial value]; int licount=0; String lsSQL=”Select * from tblusers where active=1”; double account[]; boolean checkerror=false;
3. KIEÅU DÖÕ LIEÄU Baûng caùc kieåu döõ lieäu thoâng thöôøng Type
Bytes
Boolean
2
Range
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Byte
1
Char
2
Double
8 cho aâm, 4 soá döông
Float
4
Int
4
Long
8
Short
2
Connection Statement ResultSet
3.1. Kieåu Array Kieãu maûng laø moät maûng soá lieäu do ngöôøi duøng ñònh nghóa, chuùng coù cuù phaùp nhö sau: double account[]; // maûng soá double hay coù theå khai baùo nhö sau double account[]={0,0,1,45.95,6.5}; thöù töï index trong maûng baét ñaàu töø vò trí 0. Neáu nhö baïn khai baùo maûng hai chieàu, thì cuù phaùp khai baùo nhö sau: double account[][]=new double[2][5]; Chaúng haïn khai baùo nhö sau: <% double account[][]=new double[2][100]; account[0][3]=43.95; account[1][3]=43.95000; out.println(“Account 0-3 is ” + account[0][3] ); out.println(“Account 1-3 is ” + account[1][3] ); %>
Khai baùo bieán String
<% String strSQL=”select * from tblusers ”; String strWhere=” where active=0”;
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
out.println(“SQL Statement is ” + strSQL+strWhere ); %> Khai baùo vôùi nhieàu loaïi döõ lieäu <% boolean bo; byte by; char c; short s; int i; long l; float f; double d; object o; int[] intArray = new int[2]; object[] objectArray = new Object[2]; out.println("boolean: "+bo); out.println("byte: "+by); out.println("char: "+c); out.println("short: "+s); out.println("int: "+i); out.println("long: "+l); out.println("float: "+f); out.println("double: "+d); out.println("Object: "+o); out.println("int[2]: "+intArray[0]+" "+intArray[1]); out.println("Object[2]: "+objectArray[0]+" "+objectArray[1]); %>
4. CAÙC PHÖÔNG THÖÙC VAØ PHÖÔNG THÖÙC TRONG JAVA 4.1. Phöông thöùc traû veà chieàu daøi maûng Khi quan taâm ñeán chieàu daøi cuûa maûng thì baïn caàn theo cuù phaùp sau: Array.length Giaû söû raèng, baïn khai baùo bieán vôùi chieàu daøi maõng moät vaø hai chieàu <% double account[]={88,11,2.5,77}; double sum; sum=account.length;
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
out.println(“Length of Account is ” + sum);%>
4.2. Chuyeån sang kieåu chuoãi sau:
Khi baïn caàn chuyeãn ñoåi töø kieåu soá lieäu khaùc sang kieåu chuoãi, thì caàn khai baùo nhö String.valueOf(data); Ví duï chuyeån ñoåi kieåu sang kieåu chuoãi
<% double account[]={88,11,2.5,77}; String str; str=String.valueOf(account[2]); out.println(“String of Account 2 is ” + str); %>
4.3. Noái chuoãi Khi caàn thieát noái hai hay nhieàu chuoåi laïi vôùi nhau, baïn söû duïng phöông thöùc concat, thoâng thöôøng chuùng ta hay dung pheùp toaùn + ñeå noái hai hay nhieàu chuoãi laïi vôùi nhau. Cuù phaùp concat nhö sau: Str1.conact(Str2); Keát noái chuoãi <% String str1=”Select * from tblemplyers”; String str2=” where paid=1”; str1=str1.conact(str2); out.println(“String of Str1 is ” + str1); %>
4.4. Chuoãi con Khi baïn caàn laáy moät chuoãi con trong chuoãi lôùn, baïn caàn duøng ñeán phöông thöùc vôùi cuù phaùp nhö sau: str1=str2.substring(start,chieàu daøi) Ví duï khai baùo ñeå laáy chuoãi con <% String str1=”Select * from tblemplyers”; String str2=str1.substring(9,5); out.println(“Sub String of Str1 is ” + str2);
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
%> Nhöng neáu coù nhu caàu laáy ra moät kyù töï naøo ñoù trong chuoãi, thì baïn khoâng caàn duøng substring maø chæ söû duïng cuù phaùp charAt nhö sau: Char=Str1.charAt(number); Chaúng haïn, khai baùo ñeå laáy 1 kyù töï <% String str1=”Select * from tblemplyers”; String str2=str1.charAt(5); Out.println(“charAt of Str1 is ” + str2); %>
4.5. Chuyeãn ñoåi String sang Array Thoâng thöôøng trong khi tính toaù chuoãi, ñoâi khi cuõng caàn ñeán chuùng nhö moät maõng, lyù do ñoù chuùng ta coù phöông thöùc chuyeãn ñoåi nhö sau: char char1[]=str1.toCharArray(); Chuyeån chuoãi sang maûng <% String str1=”Select * from tblemplyers”; char char1=str1.toCharArray(); out.println(“Char of Str1[1] is ” + char1[5]); %>
4.6. Thay theá chuoãi Khi caàn thay theá moät chuoãi con naøo ñoù trong chuoãi meï thaønh chuoãi con khaùc, chuùng ta caàn ñeán phöông thöùc replace coù cuù phaùp nhö sau: str1=str2.replace(“’”,”’’”); str1=str2.replace(“a”,”k”); Ví duï khai baùo thay theá chuoãi <% String str1=”Select * from tblemplyurs”; str1= replaceString (str1,“u”,”o”); str1= replaceString (str1,“’”,”’’”); out.println(“Char of Str1 is ” + str1); %> Trong ñoù, khai baùo phöông thöùc replaceString nhö sau
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
<%! public String replaceString(String sStr,String oldStr,String newStr) { sStr=(sStr==null?"":sStr); String strVar=sStr; String tmpStr=""; String finalStr=""; int stpos=0,endpos=0,strLen=0; while (true) { strLen=strVar.length(); stpos=0; endpos=strVar.indexOf(oldStr,stpos); if (endpos==-1) break; tmpStr=strVar.substring(stpos,endpos); tmpStr=tmpStr.concat(newStr); strVar=strVar.substring(endpos+oldStr.length()>sStr.length()?endpos:endpos+old Str.length(),strLen); finalStr=finalStr.concat(tmpStr); stpos=endpos; } finalStr=finalStr.concat(strVar); return finalStr; } %>
4.7. Vò trí kyù töï trong chuoãi Khi caàn bieát vò trí cuõa kyù töï hay chuoãi con naøo ñoù trong chuoãi, baïn söû duïng phöông thöùc sau: virti=str1.indexOf(“select”); virti=str1.indexOf(“o”); Chaúng haïn tìm vò trí chuoãi hay kyù töï trong Chuoãi <%
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
String str1=”Select * from tblemplyurs”; int vitri=str1.indexOf(“o”); Out.println(“Location of \”o\” is ” + vitri); %>
4.8. Kieåu chöõ Neáu muoán chuyeãn ñoåi chöõ hoa sang thöôøng hay ngöôïc laïi, thì baïn duøng phöông thöùc coù cuù phaùp nhö sau: Töø hoa sang thöôøng: str1.toLowerCase(); Töø thöôøng saung hoa: str1.toUpperCase(); Ví duï <% String str1=”Select * from tblemplyors”; str1=str1.toLowerCase(); out.println(“LowerCase is ” + str1); str1=str1.toUpperCase(); out.println(“UpperCase is ” + str1); %>
5. TOÙM TAÉT Trong baøi hoïc naøy chuùng toâi giôùi thieäu ñeán cho caùc baïn caùch khai baùo bieán, caùc kieåu döõ lieäu, ñoàng thôøi giuùp cho caùc baïn nhöõng phöông thöùc treân chuoãi vaø kyù töï trong JSP.
Giaùo vieân: Phaïm Höõu Khang
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Baøi 3 PHEÙP TOAÙN VAØ PHAÙT BIEÅU COÙ ÑIEÀU KIEÄN TRONG JSP Chöông naøy chuùng ta seõ laøm quen vaø tìm hieåu toaùn töû, phaùt bieåu coù ñieàu kieän vaø voøng laëp cuûa JSP. Nhöõng 9 9 9 9
vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy Toaùn töû. Pheùp gaùn trong Java Phaùt bieåu coù ñieàu khieån. Voøng laëp.
1. KHAÙI NIEÄM VEÀ CAÙC TOAÙN TÖÛ TRONG JSP
Khi baïn laäp trình treân JSP laø söû duïng cuù phaùp cuûa ngoân ngöõ Java. Töông töï nhö nhöõng ngoân ngöõ laäp trình khaùc, toaùn töû giuùp cho baïn thöïc hieän nhöõng pheùp toaùn nhö soá hoïc hay treân chuoãi. Java
Baûng sau ñaây giuùp cho baïn hình dung ñöôïc nhöõng toaùn töû söû duïng tron
Java ñòng nghóa toaù töû toaùn hoïc, quan heä, soá hoïc, bit, caste, class, selection, vaø noät soù pheùp toaùn gaùn. Loaïi toaùn töû
Dieãn giaûi
Ví duï
Arithmetic
+ * / %
Addition Subtraction Multiplication Division Modulus
a + a a * a / a % b
b b b b
Relational
> < >= <= != ==
Greater than Less than Greater than or equal Less than or equal Not equal Equal
a a a a a a ==
> < >= <= != b
b b b b b
Not
!a a
&&
b
Logical
[email protected]
Toaùn töû
! &&
3-1
COMPUTER LEARNING CENTER
||
WWW.HUUKHANG.COM
AND OR
a || b
~ & | ^ << >> >>>
Complement AND OR Exclusive OR Left shift Right shift Zero-filled right shift
~a a & a | a ^ a << a >> a >>> b
Assignment
= ++ -+= -= *= /= %= |= &= ^= <<= >>= >>>=
Assignment Increment and assign Decrement and assign Add and assign Subtract and assign Multiply and assign Divide and assign Take modulus and assign OR and assign AND and assign XOR and assign Left shift and assign Right shift and assign Zero-filled left shift and assign
a = a++ a-a += a -= a *= a /= a %= a |= a &= a ^= a <<= a >>= a >>>= b
Caste
(type)
Convert to type
(char) b
Instance
instance of
Is instance of class?
a instanceof b
Allocation
new
Create a new object of a class
new A()
Selection
? :
If...Then selection
a ? b : c
Bitmanipulation
b b b b B
b
b b b b b b b b b b
2. GIÔÙI THIEÄU TOAÙN TÖÛ
Khi noùi ñeán toaùn töû, chuùng ta luoân lieân töôûng ñeán thöù töï xöû lyù, cuõng nhö trong toaùn hoïc, toaùn töû trong java cuõng co ñoä öu tieân add-subtract-multi-divide. 2.1. Toaùn töû AND
Khi thöïc hieän moät vieäc taêng leân giaù trò thì baïn söû duïng cuù phaùp nhö sau: int i=0,j=0;
[email protected]
3-2
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
j=i++;// i taêng sau khi gaùn i vaøo j, chính vì vaäy sau khi gaùn i vaøo j, j vaãn khoâng thay ñoåi j=++i;// i taêng tröôùc khi gaùn i vaøo j, chính vì vaäy sau khi gaùn i vaøo j, j thay ñoåi. Ví duï 3.1: Pheùp toaùn AND. <% int i=0,j=0; j=i++; out.println(“Value of j is ” + j); j=++i; out.println(“Value of j is ” + j); %> 2.2. Toaùn töû Not: ~ And !
Toaùn töû ~ ñaûo nghòch taát caû caùc bit cuûa tham soá, coøn toaùn töû ! ñaûo nghòch giaù trò cuûa giaù trò tröôùc ñoù Ví duï 3.2: Pheùp toaùn ~ and ! <% short i=32767; boolean b=true; out.println(“Value of ~ short is ” + ~i); out.println(“Value of !b is ” +!b); %> 2.3. Toaùn töû nhaân vaø chia: * and /
Baïn coù theå tham khaûo ví duï sau Ví duï 3.3: Pheùp toaùn * vaø /, + vaø <% int i=767; double j=10.5; out.println(“Value of multi is ” + i*j); out.println(“Value of divide is ” +i/5);
[email protected]
3-3
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
out.println(“Value of add is ” +i+5); out.println(“Value of subtract is ” +i-5); %> 2.4. Toaùn töû modulus: %
Khi chia moät soá cho moät soá, baïn caàn keát quaû laø soá dö cuûa pheùp chia ñoù thì duøng toaùn töû modulus Ví duï 3.4: Pheùp toaùn % <% int i=10; int j=3; out.println(“Value of i%j is ” + i%j); %> 2.5. Toaùn töû quan heä: >=,>,<,<=,==,!=
Khi caàn so saùnh keát quaû giöõa hai toaùn haïn vôùi nhau, thoâng thöôøng baïn nghó ñeán pheùp toaùn so saùnh nhö laø baèng, lôùn hôn, nhoû hôn, ví duï sau dieãn giaûi cho baïn caùc toaùn töû treân: Ví duï 3.5: Pheùp toaùn >,>=,<,<=,==,!= <% int i=10; int j=3; if(i>=j) out.println(“result is true”); else out.println(“result is false”); if(i!=j) out.println(“result is not equals”); else out.println(“result is equals”); %>
[email protected]
3-4
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
2.6. Toaùn töû && vaø ||
&& laø toaù töû and trong soù hoïc || laø toaùn töû or trong soá hoïc Hai toaùn töû naøy raát thöôøng duøng trong khi laäp trình treân Java, ví duï döôùi ñaây dieãn giaûi cho baïn ñaày ñuû hai toaùn töû naøy. Chuù yù raèng khi söû duïng toaùn töû ñeàu coù keøm phaùt bieåu coù ñieàu kieän. Ví duï 3.6: Pheùp toaùn && vaø || <% boolean b=true; int j=3; if((j>=3) &&(b!=true)) out.println(“result is true”); if((j<3) ||(b==true)) out.println(“result is false”); %> 2.7. Toaùn töû ?:
Toaùn töû naøy thay theá cho phaùt bieåu coù ñieàu kieän if.. then .. else, khi baïn caàn laáy keát quaû theo ñieàu kieän naøo ñoù, neáu coù theå khoâng caàn phaùt bieåu if-else, thì haõy thay theá baèng toaùn töû ?:, cuù phaùp cuûa chuùng nhö sau: str1=str2.equals(”khang”)?”Welcome to Java”:”Good bye JSP”; Ví duï 3.7: Pheùp toaùn ?: <% String str1=”Pham Huu Khang”; String str2 =“Khang”; out.println(“result is true”+ (str1.equals(str2)?”Welcome to Java”:”Good bye JSP”)); %>
[email protected]
3-5
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
3. PHEÙP GAÙN
Khi gaùn moät giaù trò hay bieán vaøo moät bieán trong Java, baïn phaûi duøng ñeán pheùp gaùn, nhöng trong Java cuõng gioángnhö trong C thì coù nhöõng pheùp gaùn ñöôïc ñôn giaûn hoaù hay noùi ñuùng hôn laø chuaån hoaù ñeå ruùt goïn laïi trong khi vieát. 3.1. Pheùp gaùn thoâng thöôøng nhaát nhö sau:
int
j=i;
String str1 =” Hello!”; boolean
b=true;
3.2. Pheùp gaùn theâm moät giaù trò laø 1
int k=0; k++; 3.3. Pheùp gaùn theâm moät vôùi chính noù giaù trò
int k=0,j=1; k+=j; töông töï nhö vaäy chuùng ta coù k*=2, nghóa laø k=k*2 4. PHAÙT BIEÅU COÙ ÑIEÀU KIEÄN
Caùc phat bieåu coù ñieàu kieän nhö : IF (ñieàu kieän) { caâu leänh; } IF (ñieàu kieän) { caâu leänh; }ELSE { caâu leänh; } switch (ñieàu kieän) { case Value1 caâu leänh1; break; } While (ñieàu kieän) Do - While (ñieàu kieän) Break Continue
[email protected]
3-6
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
4.1. Phaùt bieåu IF (ñieàu kieän) { caâu leänh; }
Söû duïng phaùt bieåu if ñeå choïn loïc keát quaû khi ñieàu kieän ñuùng, ví duï nhö sau: Ví duï 3.8: Phaùt bieåu IF <% boolean b=true; int j=3; if((j>=3) &&(b!=true)) out.println(“result is true”); if((j<3) ||(b==true)) out.println(“result is false”); %> 4.2. Phaùt bieåu IF (ñieàu kieän) { caâu leänh; }ELSE { caâu leänh; }
Söû duïng phaùt bieåu if ñeå choïn loïc keát quaû khi ñieàu kieän ñuùng, vaø xuaát ra keát quaû khi ñieàu kieän sai, ví duï nhö sau: Ví duï 3.9: Phaùt bieåu IF - ELSE <% boolean b=true; int j=3; if((j>=3) &&(b!=true)) out.println(“result is true”); else out.println(“result is false”); %> 4.3. Phaùt bieåu Switch (ñieàu kieän)
Phaùt bieåu switch laø phaàn cuûa phaùt bieåu if else nhieàu nhaùnh, khi coù nhieàu ñieàu kieän choïn löïa thì baïn söû duïng switch, cuù phaùp cuûa chuùng nhö sau: Switch(ñieàu kieän) {
[email protected]
3-7
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
case Value1 caâu leänh1; break; case Value2 caâu leänh2; break; … default: caâu leänh default; } Break: duøng ñeå thoaùt ra khoûi switch khi thoaû moät case naøo ñoù trong switch, default: khi khoâng coù baát kyø giaù trò naøo thoaûn trong caùc case thì giaù trò cuoái cuøng laø defaule statement Ví duï 3.10: Phaùt bieåu Switch <% int j=3; switch(j) { case 1: out.println(“Today is Monday”); break; case 2: out.println(“Today is Thurday”); break; case 3: out.println(“Today is Tueday”); break; default: out.println(“Today is Sunday”); } %>
[email protected]
3-8
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
4.4. Phaùt bieåu While(ñieàu kieän)
Phaùt bieåu while thöïc thi nhöõng caâu leänh trong while khi ñieàu kieän coø ñuùng. Ví duï 3.11: Phaùt bieåu While <% int j=1; while(j<=30) { out.println(“Number of j” + j); j++; %> 4.5. Phaùt bieåu For
sau:
Phaùt bieåu for duøng cho voøng laëp coù giôùi haïn cho tröôùc, cuù phaùp coù daïng nhö int i=0; for(i=1;i<10;i++) { caâu leänh; }
Ví duï 3.12: Phaùt bieåu For <% int mang[]={3,5,6,7,8,9}; for (int j=0;j<mang.length;j++) { out.println(“Phan tu mang “+j+” : ”+mang[j]); } %> 5. TOÙM TAÉT
Trong baøi hoïc naøy chuùng toâi giôùi thieäu ñeán cho caùc baïn caùc pheùp gaùn, caùc toaùn töû, ñoàng thôøi giuùp cho caùc baïn hieåu theâm vaøo caùc phaùt bieåu coù ñieàu kieän nhö while, for, switch, ….
[email protected]
3-9
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Baøi 4 ÑOÁI TÖÔÏNG SESSION, REQUEST, RESPONSE TRONG JSP Chöông naøy chuùng ta seõ laøm quen caùc ñoái töôïng thöôøng söû duïng trong quaù trình thieát keá trang JSP. Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy 9 Ñoái töôïng Request. 9 Ñoái töôïng Response.
1. ÑOÁI TÖÔÏNG REQUEST Khi muoán laáy giaù trò töø moät theû nhaäp lieäu ñeä trình (submit) töø form hay töø chuoãi QueryString, ñieàu naøy coù nghóa laø cho pheùp laáy giaù trò töø client gôûi leân server, ñoái tröôøng hôïp naøy baïn söû duïng ñoái töôïng Request. Ñoái töôïng naøy thuoäc lôùp javax.servlet.ServletRequest.
1.1. Request vôùi töø theû nhaäp lieäu Ví duï chuùng ta khai baùo trang HTML hay JSP coù theû form, beân trong theû form khai baùo caùc theû nhaäp lieäu nhö input, select, textarea nhö ví duï 4-1. <%@ page contentType="text/html; charset=UTF-8" %>
JSP's Objects <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8">
Registration
[email protected]
3-1
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Khi ngöôøi söû duïng goïi trang JSP naøy treân trình duyeät vaø nhaäp caùc thoâng tin yeâu caàu nhö hình 4-1.
Hình 4-1: Nhaäp lieäu Ñeå laáy ñöôïc giaù trò cuûa caùc phaàn ñaõ nhaäp treân hình 4-1, chuùng ta söû duïng phöông thöùc getParameter cuûa ñoái töôïng request nhö ví duï 4-2. <%@ page contentType="text/html; charset=UTF-8" %>
JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8">
Confirmation <% String name=request.getParameter("txtname"); String province=request.getParameter("province"); String desc=request.getParameter("txtdesc"); out.println("Name is "+ name +"
"); out.println("Province is " + province +"
"); out.println("Description is " + desc +"
"); %>
Keát quaû trình baøy nhö hình 4-2 neáu thoâng tin nhaäp gioáng nhö hình 4-1.
[email protected]
3-2
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 4-2: Söû duïng phöông thöùc getParameter
1.2. Request vôùi töø tham soá treân QueryString Töông töï nhö treân, trong tröôøng hôïp baïn muoán laáy caùc giaù trò cuûa caùc tham soá treân QueryString, baïn cuõng söû duïng phöông thöùc getParameter cuûa ñoái töôïng rquest. Chaúng haïn, chuùng ta khai baùo trang JSP coù theû input vaø söû duïng phöông thöùc get trong theû form nhö ví duï 4-3. <%@ page contentType="text/html; charset=UTF-8" %>
JSP's Objects <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8">
Tim kiem va Liet ket
Khi ngöôøi söû duïng nhaäp moät töø khoaù naøo ñoù vaø nhaán Submit, trang ex4.jsp seõ ñöôïc trieäu goïi. Chaúng haïn, chuùng ta nhaäp töø khoaù laø SQL Server nhö hình 4-3.
[email protected]
3-3
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 4-3: Phöông thöùc GET Khi trang ex4.jsp trieäu goïi, treân chuoãi QueryString http://localhost:81/jsp/chapter04/ex4.jsp?keyword=SQL+Server nhö hình 4-4.
xuaát
hieän
Hình 4-4: Laáy giaù trò töø QueryString Ñeå laáy giaù trò töø chuoãi QueryString, chuùng ta söû duïng phöông thöùc getParemeter cuûa ñoái töôïng request nhö ví duï 4-4. <%@ page contentType="text/html; charset=UTF-8" %> <%
[email protected]
3-4
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
// Laáy giaù trò keyword töø trang ex3.jsp String keyword=request.getParameter("keyword"); // Laáy giaù trò sort töø trang QueryString String sort=request.getParameter("sort");
%>
JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8">
Result &sort=ItemName">ItemName &sort=UnitPrice">Unit Price <% // xuaát giaù trò laáy ñöôïc out.println("Keyword is "+ keyword +"
"); sort=(sort==null)?"ItemName":sort; out.println("Sort by " + sort +"
"); %>
1.3. Request vôùi maûng tham soá Neáu nhö coù nhieàu theû treân form hay tham soá treân QueryString cuøng teân, chuùng ta phaûi söû duïng phöông thöùc getParameterValues cuûa ñoái töôïng request. Ví duï, chuùng ta khai baùo trang JSP coù nhieàu theû input daïng checkbox cuøng teân nhöng khaùc giaù trò nhö ví duï 4-5. <%@ page contentType="text/html; charset=UTF-8" %>
JSP's Objects <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8">
Khi trieäu goïi trang JSP naøy treân trình duyeät, baèng caùch choïn moät vaøi phoøng ban ñeå xoaù baïn coù giao dieän nhö hình 4-5.
Hình 4-5: Theû cuøng teân vaø khaùc giaù trò Nhö hình treân, baïn choïn caùc phoøng ban coù giaù trò laø 1,5,6,8, khi submit form naøy trang ex6.jsp seõ ñöôïc trieäu goïi, ñeå laáy ñöôïc giaù trò 1,5,6,8 nhö ñaõ choïn baèng caùch söû duïng phöông thöùc getParameterValues, baïn khai baùo nhö ví duï 4-6. <%@ page contentType="text/html; charset=UTF-8" %>
JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8">
Delete
[email protected]
3-6
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
<% String[] deleterecord=null; String delStr=""; deleterecord=request.getParameterValues("chkid"); if(deleterecord!=null){ for(int k=0;k<deleterecord.length;k++){ delStr+= deleterecord[k]+","; } delStr=delStr.substring(0,delStr.length()-1); } out.println("Select values are : " + delStr); %>
Khi ñoù, keát quaû trình baøy treân trình duyeät nhö hình 4-6, trong thöïc teá baïn coù theå gaùn giaù trò naøy vôùi chuoãi SQL vaø söû duïng pheùp toaùn IN hay NOT IN ñeå truy vaán hay thao taùc trong döõ lieäu.
Hình 4-6: Keát quaû laáy maûng giaù trò
1.4. Request keát hôïp vôùi JavaScript Ngoaøi caùc caùch treân, khi laøm öùng duïng thöôøng chuùng ta trình baøy danh saùch maåu tin phuï thuoäc vaøo giaù trò choïn treân theû select hay checkbox hoaëc readiobutton, baïn coù theå söû duïng phöông thöùc getParameter cuûa ñoái töôïng request ñeå thöïc hieän yù ñònh naøy nhö ví duï 4-7. <%@ page contentType="text/html; charset=UTF-8" %> <% // Laáy giaù trò choïn trong theû select coù teân selectid int selectid=0; // Chuyeån qua soá nguyeân neáu coù choïn if (request.getParameter("selectid")!=null) { try { selectid=Integer.parseInt(request.getParameter("selectid"));
[email protected]
3-7
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
} catch(Exception ex) { selectid=0; }
} %>
JSP's Objects <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8">
Laàn ñaàu tieân goïi ñeán trang ex7.jsp thì keát quaû trình baøy laø 10 phoøng ban, neáu ngöôøi söû duïng choïn giaù trò trong phaàn Show “Greater than ” thì soá maåu tin trình baøy lôn hôn hoaëc baèng giaù trò ñang choïn nhö hình 4-7.
[email protected]
3-8
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 4-7: Trình baøy maåu tin choïn loïc
2. ÑOÁI TÖÔÏNG RESPONSE Khi muoán traû giaù trò töø server xuoáng client thì söû duïng ñoái töôïng response. Ñoái töôïng naøy thuoäc lôùp javax.servlet.ServletResponse. Chaúng haïn, sau khi kieåm tra giaù trò username vaø password hôïp leä thì töï ñoäng chuyeån ñeán trang myaccount.jsp trong trang login_authentication.jsp. Ñeå laøm ñieàu naøy, chuùng ta khai baùo trang login.jsp coù hai theû nhaäp lieäu laø username vaø password nhö ví duï 4-8. <%@ page contentType="text/html; charset=UTF-8" %>
JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> <script language="JavaScript"> // Khai baùo kieåm tra giaù trò nhaäp treân trình khaùch function checkinput(){ if(document.form1.username.value==""){ alert("Xin vui long nhap username"); document.form1.username.focus(); return false; } if(document.form1.password.value=="" ){ alert("Xin vui long nhap password"); document.form1.password.focus(); return false; } return true;
[email protected]
3-9
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
}
Khi trieäu goïi trang login.jsp treân trình duyeät nhö hình 4-8, neáu baïn khoâng nhaäp giaù trò cho username hay password thì cöûa soå thoâng baùo yeâu caàu xuaát hieän, quaù trình submit leân server chæ xaûy ra khi baïn nhaäp caû hai giaù trò hôïp leä.
[email protected]
3-10
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 4-8: Ñaêng nhaäp Khi submit thaønh coâng, trang login_authentication.jsp ñöôïc goïi, neáu username vaø password baïn nhaäp töông öùng laø khang, 123456 thì trang myaccount.jsp troû ñeán ngöôïc laïi thì goïi laïi trang login.jsp nhö ví duï 4-9. <% String username=""; String password=""; username= request.getParameter("username"); password= request.getParameter("password"); if (username.equals("khang")){ if(password.equals("123456")){ response.sendRedirect("myaccount.jsp"); } else{ /*sai password*/ response.sendRedirect("login.jsp"); } } else{ /*sai user*/ response.sendRedirect("login.jsp"); } %>
3. TOÙM TAÉT
Trong baøi hoïc naøy chuùng toâi giôùi thieäu ñeán cho caùc baïn hai ñoái töôïng chính laø request vaø response. [email protected]
3-11
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Baøi 5 ÑOÁI TÖÔÏNG SESSION TRONG JSP Trong baøi tröôùc chuùng ta seõ laøm quen caùc ñoái töôïng thöôøng söû duïng trong quaù trình thieát keá trang JSP nhö Request, Response. Trong baøi naøy chuùng ta tieáp tuïc laøm vieäc vôùi ñoái töôïng Session. Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy 9 Ñoái töôïng Session. 9 ÖÙng duïng ñoái töôïng Session. 1. ÑOÁI TÖÔÏNG SESSION Khi muoán truyeàn giaù trò töø trang trang web naøy sang trang web khaùc trong moät phieân laøm vieäc thì söû duïng duïng ñoái töôïng Session. Ñoái töôïng naøy thuoäc lôùp HttpSession. http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpSession.html
1.1. Nhaän daïng moät phieân laøm vieäc Moãi khi coù moät phieân laøm vieäc ñöôïc taïo ra, thì trình chuû web seõ caáp moät ñònh danh laø moät chuoãi bao goàm caùc kyù töï vaø soá cho phieân laøm vieäc ñoù. Chaúng haïn, baïn môû moät browser vaø goïi trang jsp töø web site, khi ñoù phieân laøm vieäc ñöôïc taïo ra cuøng vôùi ñònh danh duy nhaát. Khi keát thuùc phieân laøm vieäc, ñònh danh naøy bò thu laïi vaø phaân phaùt laïi cho phieân laøm vieäc khaùc môùi taïo ra. Ñeå laáy ñöôïc ñònh danh naøy, baïn söû duïng phöông thöùc getId nhö ví duï 5-1. <%@ page contentType="text/html; charset=UTF-8" %> JSP's Objects <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> Identify ID: <%=session.getId()%>
Khi ngöôøi söû duïng goïi trang JSP naøy treân trình duyeät giaù trò cuûa ñònh danh trình baøy nhö hình 41.
[email protected]
3-1
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 5-1: Ñònh danh cuûa phieân laøm vieäc
1.2. Khôûi taïo vaø gaùn giaù trò cho session Khi caàn truyeàn gt töø trang JSP naøy sang trang JSP khaùc, baèng caùch khôûi taïo dt Session vaø gaùn cho chuùng thôøi gian töông öùng, sau ñoù baïn coù theå truy caäp vaøo ñoái töôïng naøy trong trang JSP khaùc trong cuøng phieân laøm vieäc. Ñeå laøm ñieàu naøy, baïn söû duïng phöông thöùc setValue voùi cuù phaùp nhö sau: session.putValue(“teân session”,”giaù trò”);
Ví duï sau khi cung caáp username/password vaø nhaán nuùt Submit töø trang login.jsp nhö hình 5-2, trang login_authentication.jsp seõ ñöôïc trieäu goïi.
Hình 5-2: Trang login.jsp
[email protected]
3-2
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Neáu username laø khang vaø password laø 123456 thì trang myaccount.jsp seõ ñöôïc trieäu goïi. Tröôùc khi trieäu goïi trang myaccount.jsp, chuùng ta khôûi taïo moät soá session duøng ñeå söû duïng cho phieân laøm vieäc naøy chaúng haïn userid, username, fullname, email nhö ví duï 5-2 (login_authentication.jsp).
%>
<% String username=""; String password=""; username= request.getParameter("username"); password= request.getParameter("password"); if (username.equals("khang")){ if(password.equals("123456")){ session.putValue("userid","123"); session.putValue("username",username); session.putValue("fullname","huukhang.com"); session.putValue("email","[email protected] "); response.sendRedirect("myaccount.jsp"); } else{ /*sai password*/ response.sendRedirect("login.jsp"); } } else{ /*sai user*/ response.sendRedirect("login.jsp"); }
1.3. Laáy giaù trò töø session Sau khi ñaêng nhaäp thaønh coâng, nhöõng ñoái töôïng session ñöôïc taïo ra, baèng caùch söû duïng phöông thöùc getValue, baïn coù theå laáy giaù trò töø caùc session naøy nhö ví duï 5-3 (myaccount.jsp).
[email protected]
3-3
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 5-3: Laáy giaù trò töø Session Ñeå laáy giaù trò töø caùc session khai baùo trong trang login_authentication.jsp vaø trình baøy treân trang myaccount.jsp, baïn khai baùo nhö ví duï 5-3. <%@ page contentType="text/html; charset=UTF-8" %> JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> Welcome to JSP logout userid: =<%=session.getValue("userid")%> username: =<%=session.getValue("username")%> fullname: =<%=session.getValue("fullname")%> email: =<%=session.getValue("email")%>
1.4. Huyû session Sau khi khoâng söû duïng ñoái töôïng session, baïn caàn söû duïng phöông thöùc ñeå huyø session ñoù thaøy vì ñeå chuùng toàn taïi, bôûi ví neáu chuùng khoâng söû duïng maø vaãn toàn thì web server vaãn phaûi quaûnl lyù. Chaúng haïn, khi chuùng ta logout khoûi öùng duïng website thì trang logout.jsp seõ ñöôïc tieäu goïi, ba72ng caùch söû duïng caùc phöông thöùc removeValue ví duï 5-4.
[email protected]
3-4
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
<% session.removeValue("userid"); session.removeValue("username"); session.removeValue("fullname"); session.removeValue("email"); response.sendRedirect("login.jsp"); %>
Neáu baïn trieäu goïi laïi trang trang myaccount.jsp treân trình duyeät, thì keát quaû trình baøy nhö hình 54.
Hình 5-4: Huyû caùc session Nhö hình treân, khi session chöa taïo ra, neáu baïn truy caäp ñeán giaù trò cuûa chuùng thì giaù trò ñoù laø null, chính vì vaäy trong moät soá trang baét buoäc ngöôøi söû duïng phaûi ñaêng nhaäp roài môùi söû duïng thì baïn caàn phaûi kieåm tra session, neáu session baèng null thì troû ñeán trang login.jsp. Chaúng haïn trong tröôøng hôïp naøy chuùng ta coù ví duï 5-5, cho pheùp söû duïng khi ngöôøi söû duïng ñaõ ñaêng nhaäp, ñieàu naøy coù nghóa laø session coù teân userid phaûi toàn taïi. <%@ page contentType="text/html; charset=UTF-8" %> <% if (session.getValue("userid")==null) response.sendRedirect("login.jsp"); %> JSP
[email protected]
3-5
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
<META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8">
2. TOÙM TAÉT
Trong baøi hoïc naøy chuùng toâi giôùi thieäu ñeán cho caùc baïn ñoái töôïng chính laø session, sau khi coù ñoái töôïng naøy, baïn coù theå keát hôïp vôùi hai ñoái töôïng request vaø response ñeå xaây döïng chöùc naêng ñaêng nhaäp heä thoáng.
[email protected]
3-6
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Baøi 6 PHÖÔNG THÖÙC VAØ CHEØN TAÄP TIN Khi xaây döïng öùng duïng Web noùi chung vaø öùng duïng JSP noùi rieâng, vieäc thoáng nhaát hoaù giao dieän laø ñieàu caàn thieát, chaúng haïn moïi trang JSP cuûa öùng duïng ñeàu phaûi coù kích thöôùc phaàn top, left, right, bottom vaø thaân gioáng nhau. Töông töï nhö vaäy moïi font chöõ vaø kích thöôùc cho töøng phaàn noäi dung cuõng laø ñieàu baïn phaûi thöïc hieän ñeå öùng duïng mang tính chuyeân nghieäp hôn Ngoaøi ra, nhö nhöõng baøi keá tieáp chuùng ta söû duïng chuoãi keát noái hay khai baùo ñoái töôïng Connection söû duïng trong moãi trang, taát caû nhöõng ñieàu naøy ñeàu daãn ñeán vieäc quaûn lyù khoù khaên khi caàn thay ñoåi moät trong nhöõng phaàn lieân quan. Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy 9 Xaây döïng taäp tin ñònh daïng noäi dung 9 Thoáng nhaát kích thöôùc cuûa moïi trang JSP 9 Khai baùo haøm vaø thuû tuïc duøng chung 9 Söû duïng haøm vaø thuû tuïc duøng chung 1. XAÂY DÖÏNG TAÄP TIN ÑÒNH DAÏNG NOÄI DUNG Khi trình baøy noäi dung treân trang HTML hay trang JSP, ñeå thoáng nhaát ñònh daïng chuoãi trong theû body hay theû div chaúng haïn baïn caàn khai baùo theû style trong theû . <style> A{ COLOR: #003063; TEXT-DECORATION: none } A:hover { COLOR: #003063; TEXT-DECORATION: underline } A:link { FONT-WEIGHT: bold; COLOR: red; TEXT-DECORATION: none } A:visited { FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none } .title { FONT-WEIGHT: normal; FONT-SIZE: 22px } .text{ FONT: 11px Arial, Helvetica, sans-serif }
[email protected]
3-1
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Trong ñoù, A töông öùng vôùi lieân keát (chuoãi trong theû ) coù ñònh daïng öùng vôùi tröôøng hôïp lieân keát, di chuyeån con chuoät, choïn lieân keát. A{ COLOR: #003063; TEXT-DECORATION: none } A:hover { COLOR: #003063; TEXT-DECORATION: underline } A:link { FONT-WEIGHT: bold; COLOR: red; TEXT-DECORATION: none } A:visited { FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none }
Chaúng haïn, chuùng ta khai baùo trang JSP vôùi noäi dung ñöôïc aùp duïng vôùi kieåu ñònh daïng khai baùo trong theû style nhö vuù duï 6-1. Ví duï 6-1: Khai baùo theû style <%@ page contentType="text/html; charset=UTF-8" %> Style trong JSP <style> A{ COLOR: #003063; TEXT-DECORATION: none } A:hover { COLOR: #003063; TEXT-DECORATION: underline } A:link { FONT-WEIGHT: bold; COLOR: red; TEXT-DECORATION: none } A:visited { FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none } .title { FONT-WEIGHT: normal; FONT-SIZE: 22px; COLOR: #003063; } .text{ FONT: 11px Arial, Helvetica, sans-serif }
[email protected]
3-2
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Style Tag *** Quaûn Trò SQL Server 2000 *** Tìm hieåu caùch caøi ñaët, caáu hình, quaûn trò, backup & restore, import & export, thieát keá, laäp trình, töï ñoäng hoaù taùc vuï quaûn trò, baûn sao döõ lieäu, baûo maät vaø choáng thaâm nhaäp döõ lieäu baèng. SQL Injection .
Welcome to www.huukhang.com
Khi trieäu goïi trang ex1.jsp treân trình duyeät, noäi dung cuûa trang web ñöôïc ñònh daïng theo theû style nhö hình 6-1.
Hình 6-1: AÙp duïng theû style
[email protected]
3-3
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Töông töï nhö vaäy khi baïn muoán thoáng nhaát noäi dung trong nhöõng theû khaùc cuûa moät trang web thì khai baùo moät ñònh daïng trong theû style. Tuy nhieân, khi ñaët teân truøng vôùi theû HTML, moïi theû ñoù trong trang seõ cuøng chung moät ñònh daïng. Chaúng haïn, baïn khai baùo ñònh daïng cho theû td nhö sau: TD {
FONT: 10px Arial, Helvetica, sans-serif
}
Moïi noäi dung trình baøy trong theû td seõ coù ñònh daïng nhö treân. Neáu baïn muoán coù ñònh daïng khaùc thì khai baùo thuoäc tính class cho theû td ñoù, ví duï söû duïng ñònh daïng khaùc cho theû td: ABC
Thay vì chuoãi ABC seõ coù ñònh daïng laø FONT: 10px Arial, Helvetica, sans-serif thì chuùng seõ coù ñònh daïng cuûa FONT: 11px Arial, Helvetica, sans-serif. Chuù yù raèng, trong moãi trang web baïn phaûi khai baùo theû style vaø ñònh nghóa thoáng nhaát cho caùc theû. Khi coù söï thay ñoåi baïn phaûi thay ñoåi trong moïi trang web. Ñeå söû duïng chung cho moïi trang web trong öùng duïng, baïn caàn xaây döïng moät taäp tin style, taäp tin ñöôïc bieát ñeán vôùi teân goïi custom style sheet (css). Baát kyø trang web naøo trong öùng duïng, muoán aùp duïng kieåu ñònh daïng trong taäp tin css thì khai baùo lieân keát taäp tin css baèng theû link. Ví duï, chuùng ta khai baùo taäp tin style.css bao goàm caùc ñònh daïng nhö ví duï 6-2. Ví duï 6-2: Khai baùo taäp tin css A{ COLOR: #003063; TEXT-DECORATION: none
} A:hover { COLOR: #003063; TEXT-DECORATION: underline } A:link { FONT-WEIGHT: bold; COLOR: red; TEXT-DECORATION: none } A:visited { FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none } .title { FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #003063; } .text{ FONT: 11px Arial, Helvetica, sans-serif }
Sau ñoù trong trang JSP, baïn khai baùo lieân keát taäp tin naøy baèng theû link, neáu muoán aùp duïng ñònh daïng naøy trong moãi theû HTML baïn söû duïng thuoäc tính class nhö khai baùo ñònh daïng cuûa theû style ngay trong trang ñoù nhö ví duï 6-3. Ví duï 6-3: Khai baùo söû duïng taäp tin css
[email protected]
3-4
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Welcome to Link Style Sheet File <META http-equiv=Content-Type content="text/html; charset=utf-8"> Style File *** Quaûn Trò SQL Server 2000 *** Tìm hieåu caùch caøi ñaët, caáu hình, quaûn trò, backup & restore, import & export, thieát keá, laäp trình, töï ñoäng hoaù taùc vuï quaûn trò, baûn sao döõ lieäu, baûo maät vaø choáng thaâm nhaäp döõ lieäu baèng. SQL Injection .
Welcome to www.huukhang.com
Trieäu goïi trang ex.jsp treân trình duyeät nhö hình 6-3, maøu vaø kích thöôùc font cuøng vôùi kieåu chöõa cuûa noäi dung khoâng thay ñoåi so vôùi ex1.jsp, bôûi vì phaàn theû style ñöôïc taùch ra thaønh taäp tin style.css, sau ñoù duøng theû link ñeå lieân keát taäp tin css naøy vaøo trang jsp trôû laïi.
[email protected]
3-5
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 6-3: Lieân keát taäp tin css Chuù yù raèng, neáu khai baùo thuoäc tính class trong theû thì nhöõng noäi dung trong theû seõ coù ñònh daïng theo ñònh daïng khai baùo trong thuoäc tính class. Töông töï, neáu khai baùo thuoäc tính class trong theû thì noäi dung trong theû seõ coù ñònh daïng gioáng nhö ñònh daïng khai baùo trong thoâng tin class.
2. THOÁNG NHAÁT KÍCH THÖÔÙC CUÛA MOÏI TRANG JSP Khi xaây döïng öùng duïng web chuyeân nghieäp, ñieàu ñaàu tieân baïn neân quan taâm laø söï thoáng nhaát veà kích thöôùc cuûa caùc phaàn treân trang web. Ñieàu naøy coù nghóa laø khi ngöôøi söû duïng thay ñoåi trang web khi duyeät, phaàn top, left, right, bottom coù kích thöôùc nhö nhau. Ñeå laøm ñieàu naøy, baïn chia trang web ra thaønh 5 phaàn: top, left, right, body vaø bottom. Phaàn top thöôøng trình baøy caùc thuoäc tính nhö quaûn caùo (baner), logo (bieåu töôïng cuûa coâng ty), menu (thöïc ñôn cuûa öùng duïng) vaø moät soá thoâng tin khaùc. Phaàn left laø thoâng tin veà caùc menu phuï hay coøn goïi laø menu cuûa menu chính, beân caïnh menu con naøy trang web thöôøng coù caùc lieân keát veà lieân heä, quaûng caùo, mailing list (ñaêng kyù email), gôûi ñeán baïn beø (send to friend), .... Ñoái vôùi phaàn right, thöôøng laø phaàn giôùi thieäu veà caùc thoâng ñaëc bieät vaø quaûng caùo, chaúng haïn ñoái vôùi öùng duïng baùn saùch, phaàn right thöôøng laø danh saùch caùc nhoùm saùch baùn chaïy, saép phaùt haønh, ... Phaàn bottom thöôøng thoâng tin lieân laïc cuûa coâng ty, chuû nhaân cuûa web site vaø baûn quyeàn. Ngoaøi ra, phaàn bottom ñoâi khi laø danh saùch caùc menu con khaùc. Toùm laïi, tuyø thuoäc vaøo yù töôûng thieát keá moãi phaàn nhö treân bao goàm caùc thuoäc tính maø nhaø thieát keá caàn trình baøy sao cho phuø hôïp. Tuy nhieân, phaàn body laø phaàn trình baøy noäi dung chính cuûa moãi trang web. Ngoaøi ra, tuyø vaøo töøng tröôøng hôïp cuï theå, trang web coù theå khoâng coù phaàn left vaø right.
[email protected]
3-6
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Nhö vaäy, chuùng ta seõ chia trang web ra thaønh 5 phaàn, phaàn body chính laø phaàn chính cuûa trang web ñoù, coøn 4 phaàn coøn laïi ñöôïc cheøn vaøo khi coù nhu caàu. Chaúng haïn, coù nhöõng trang web do thoâng tin trình baøy trong phaàn body nhieàu, neân caàn khoâng gia lôùn hôn, baïn coù theå khoâng caàn söû duïng hai phaàn left vaø right. Ñeå laøm ñieàu naøy, tröôùc tieân chuùng ta thieát keá trang sample.jsp coù 5 phaàn nhö hình 6-3.
Hình 6-3: Trang sample.jsp ------------------------------------------------------------------------------------------Löu yù: •
Taïo moät table goàm 3 haøng 3 coät vaø khai baùo border=1 ñeå ñeã canh leà sau ñoù baïn coù theå khai baùo laïi thuoäc tính naøy baèng 0.
•
Phaàn top vaø bottom laø moät haøng vaø merge 3 coät thaønh 1.
•
Beân trong moãi phaàn coù theå coù moät hay nhieàu theû table khaùc.
•
Coù theå khoâng coù phaàn left vaø right nhöng baét buoäc phaàn top vaø bottom phaûi coù.
•
Baïn coù theå söû duïng chieàu roäng cuûa table theo kích thöôùc töông ñoái (%) hay soá chæ ñònh, ñoái vôùi maøn hình 600*800 thì chieàu roäng thöôøng söû duïng laø 780, khi ngöôøi söû duïng choïn ñoä phaân giaûi cuûa maøn hình lôùn hôn thì kích thöôùc cuûa table naøy khoâng thay ñoåi, trong khi ñoù noäi dung seõ phuû ñaày maøn hình khi baïn khai baùo kích thöôùc theo 100%.
------------------------------------------------------------------------------------------Ñeå coù giao dieän nhö trang sample.jsp nhö treân, baïn coù theå khai baùo nhö ví duï 6-3. Ví duï 6-3: Noäi dung trang sample.jsp Welcome to Including File <META http-equiv=Content-Type content="text/html; charset=utf-8">
[email protected]
3-7
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
TOP LEFT BODY RIGHT BOTTOM
Trong tröôøng hôïp baïn muoán coù ñöôøng phaân caùch giöõa moãi phaàn baèng image, baïn coù theå khai baùo laïi trang sample.jsp coù 5 haøng vaø 5 coät nhö template.jsp nhö hình 6-4.
Hình 2-4: Phaân caùch coù vieàng Ñeå trình baøy trang tempale.jsp nhö hình 6-4, baïn khai baùo noäi dung trang naøy nhö ví duï 6-4. Ví duï 6-4: Khai baùo template.jsp
[email protected]
3-8
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Welcome to Including File <META http-equiv=Content-Type content="text/html; charset=utf-8"> TOP LEFT BODY RIGHT BOTTOM
Sau ñoù taùch trang template.jsp naøy thaønh 5 trang khaùc nhau ñöôïc ñaët teân töông öùng laø top.htm, left.htm, right.htm vaø bottom.htm, trong ñoù phaàn body töông öùng vôùi trang templates.jsp. Ñeå khai baùo cheøn taäp tin trong trang jsp, baïn söû duïng cuù phaùp nhö sau: <%@include file=”filename”%>
Trong ñoù trang templates.jsp khai baùo cheøn top.htm, left.htm, right.htm vaø bottom.htm nhö ví duï 6-5. Ví duï 6-5: Khai baùo cheøn taäp tin trong templates.jsp Welcome to HUUKHANG.COM
[email protected]
3-9
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
<META http-equiv=Content-Type content="text/html; charset=utf-8"> <%@include file="top.htm"%> <%@include file="left.htm"%> BODY <%@include file="right.htm"%> <%@include file="bottom.htm"%>
Khi trieäu goïi trang templates.jsp, noäi dung cuûa 4 tang left.htm, right.htm, top.htm, bottom.htm cheøn vaøo trang templates.jsp nhö hình 6-5.
[email protected]
3-10
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 6-5: Trang templates.jsp sau khi cheøn Trong ñoù, noäi dung cuûa trang top.htm ñònh nghóa töông töï nhö ví duï 6-5-1. Ví duï 6-5-1: Noäi dung trang top.htm
[email protected]
3-11
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Noäi dung cuûa taäp tin left.htm ñöôïc ñònh nghóa töông töï nhö ví duï 6-5-2. Ví duï 6-5-2: Noäi dung trang left.htm
Neáu coù söû duïng trang right.htm thì noäi dung cuûa taäp tin naøy ñöôïc ñònh nghóa töông töï nhö ví duï 6-53. Ví duï 6-5-3: Noäi dung trang right.htm
Töông töï nhö vaäy, trang bottom.htm coù noäi dung nhö ví duï 6-5-4. Ví duï 6-5-4: Noäi dung trang bottom.htm HUUKHANG.COM Copyright ©2000-2005. All Rights Reserved.
Chuù yù raèng, trong moãi trang khai baùo cheøn khoâng coù caùc theû ñoùng vaø môû html, body bôûi khi cheøn thì noäi dung cuûa taäp tin ñöôïc cheøn seõ ñöôïc cheøn vaøo taäp tin bò cheøn vaø trong taäp tin bò cheøn ñaõ coù hai theû naøy. Kòch baûn trình chuû jsp hoã trôï caùc taäp tin ñöôïc cheøn vôùi caùc teân môû roäng nhö htm, jsp, inc, lib, html. Do thöïc chaát cuûa vieäc khai baùo cheøn laø cheøn ñoaïn maõ trong taäp tin cheøn vaøo taäp tin boï cheøn, trong tröôøng hôïp naøy trang cheøn htm hay jsp ñeàu gioáng nhau ñoù laø lyù do taïi sao caùc trang cheøn ôû treân ñeàu coù teân môû roäng laø htm. Tuy nhieân, khi baïn goïi trang cheøn naøy moät mình ví duï tom.htm, neáu beân trong coù maõ jsp thì maõ ñoù khoâng ñöôïc thoâng dòch. Neáu nhöõng trang cheøn naøy coù nhu caàu goïi moät mình thì baïn coù theå chuyeån chuùng thaønh trang jsp thay vì htm nhö ñaõ trình baøy. Sau khi coù ñöôïc trang templates.jsp, baïn coù theå söû duïng trang naøy laø maãu cho caùc trang khaùc baèng caùch save as thaønh caùc trang jsp khaùc khi laäp trình. Khi khai baùo cheøn taäp tin, baïn coù theå söû duïng ñöôøng daãn töông ñoái hoaëc tuyeät ñoái cuûa taäp tin cheøn so vôùi aäp tin bò cheøn.
[email protected]
3-12
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
3. KHAI BAÙO HAØM VAØ THUÛ TUÏC DUØNG CHUNG Sau khi khai baùo cheøn taäp tin thaønh moät taäp tin maãu, chuùng ta coù theå söû duïng taäp tin naøy ñeå save as thaønh trang nhieàu trang jsp khaùc. Chaúng haïn, chuùng ta khai baùo moät trang jsp coù teân common.jsp, trong taäp tin bao goàm nhöõng phöông thöùc söû duïng nhieàu laàn trong caùc trang jsp khaùc. Ví duï chuùng ta khai baùo phöông thöùc nhaän giaù trò kieåm tra, neáu giaù trò null htì traû veà roãng nhö ví duï 6-6. Ví duï 6-6: Noäi dung thuû tuïc getVal trong common.jsp public String getVal(String strVal,String def) { return (strVal==null?def:strVal); }
Töông töï nhö vaäy, chuùng ta khai baùo phöông thöùc nhaän moät chuoãi cha sStr, chuoãi con oldStr vaø chuoãi thay theá newStr neáu tìm thaáy chuoãi con, sau ñoù tìm kieám trong chuoãi cha, neáu tìm thaáy chuoãi con thì thay theá chuoãi thay theá nhö ví duï 6-7. Ví duï 6-7: Noäi dung thuû tuïc replaceString trong common.jsp public String replaceString(String sStr,String oldStr,String newStr) { sStr=(sStr==null?"":sStr); String strVar=sStr; String tmpStr=""; String finalStr=""; int stpos=0,endpos=0,strLen=0; while (true) { strLen=strVar.length(); stpos=0; endpos=strVar.indexOf(oldStr,stpos); if (endpos==-1) break; tmpStr=strVar.substring(stpos,endpos); tmpStr=tmpStr.concat(newStr); strVar=strVar.substring(endpos+oldStr.length()>sStr.length()?endpos:e ndpos+oldStr.length(),strLen); finalStr=finalStr.concat(tmpStr); stpos=endpos; } finalStr=finalStr.concat(strVar); return finalStr; }
Löu yù raèng, khi khai baùo phöông thöùc trong JSP ñeå duøng chung baïn söû duïng caëp daáu <%! %> Ñeå söû duïng phöông thöùc naøy, baïn khai baùo cheø taäp tin common.jsp vaøo trang jsp vaø goïi caùc phöông thöùc naøy nhö phöông thöùc ñöôïc khai baùo ngay trong trang jsp ñoù. Ví duï, chuùng ta khai baùo trang login.jsp cho pheùp ngöôøi söû duïng nhaäp username vaø password, sau ñoù submit, trong trang login_authentication.jsp seõ laáy hai thôøi gian naøy baèng caùch söû duïng ñoái töôïng Request. Tuy nhieân, trong tröôøng hôïp ngöôøi söû duïng nhaäp giaù trò coù daáu ‘ hay giaù trò laø null thì keát noái cô sôû döõ lieäu seõ phaùt sinh loãi. Chính vì vaäy trong tröôøng hôïp naøy chuùng ta söû duïng phöông thöùc getVal vaø replaceString trong taäp tin common.jsp ñeå thay theá neáu tìm thaáy daáu ‘ trong giaù trò vöøa laáy ra nhö ví duï 6-8.
[email protected]
3-13
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Ví duï 6-8: Duøng thuû tuïc replaceString trong common.jsp <%@include file="common.jsp"%> <% String username=""; String password=""; username= getVal(request.getParameter("username"),""); password= getVal(request.getParameter("password"),""); username= replaceString(username,"'","''"); password= replaceString(password,"'","''"); if (username.equals("khang")){ if(password.equals("123456")){ response.sendRedirect("myaccount.jsp"); } else{ /*sai password*/ response.sendRedirect("login.jsp"); } } else{ /*sai user*/ response.sendRedirect("login.jsp"); } %>
4. KEÁT CHÖÔNG Trong baøi naøy chuùng ta taäp trung tìm hieåu caùch khai baùo taäp tin duøng chung sau ñoù cheøn vaøo trang jsp. Ngoaøi ra, baïn tham khaûo chi tieát caùc khai baùo bieán, phaùt bieåu, haøm, thuû tuïc trong taäp tin jsp, sau ñoù khai baùo cheøn vaø söû duïng caùc khai baùo naøy. Trong baøi keá tieáp, chuùng ta tieáp tuïc tìm hieåu caùch töông taùc vôùi cô sôû döõ lieäu.
[email protected]
3-14
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Moân hoïc: Java Server Pages
BAØI 7: JAVA DATABASE CONNECTIVITY JavaSoft Inc giôùi thieäu JDBC (Java Database Connectivity) cho pheùp caùc öùng duïng Java truy caäp vaøo cô sôû döõ lieäu. vôùi JDBC baïn coù theå caäp nhaät, theâm vaø truy vaán döõ lieäu baát kyø. Ñeå keát noái cô sôû döõ lieäu SQL Server trong Java, chuùng ta coù nhieàu caùch öùng vôùi nhieàu phöông thöùc keát noái cô sôû döõ lieäu, trong phaàn naøy chuùng ta taäp trung tìm hieåu caùch keát noái cô sôû döõ lieäu SQL Server töø Java baèng caàu noái JDBC-ODBC vaø caùc goùi hoã trôï khaùc. Nhöõng 9 9 9 9 9
vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy Giôùi thieäu JDBC API Caùc ñoái töôïng keát noái cô sôû döõ lieäu. Khai baùo ODBC. Söû duïng caàu noái JDBC-ODBC Truy vaán, caäp nhaät, theâm, xoaù döõ lieäu
1. GIÔÙI THIEÄU JDBC API JDBC API (Application Programming Interface) laø moät taäp ñaët taû cho pheùp ñònh nghóa laøm theá naøo ñeå Java keát noái vôùi cô sôû döõ lieäu. JDBC API ñöôïc phaùt trieån bôûi coâng ty JavaSoft. Nhieàu khaùi nieäm cuûa JDBC API ñöôïc vay möôïn töø caùc taøi nguyeân khaùc nhö ODBC (Open Database Connectivity) cuûa Microsoft.
1.1. Trình ñieàu khieån cuûa JDBC JDBC API ñònh nghóa ñeå theå hieän döõ lieäu nhö theá naøo, thöïc thi taäp leänh ñeå theâm, xoaù hay caäp nhaät döõ lieäu nhö theá naøo töø yeâu caàu cuûa ngöôøi söû duïng.
1.2. Saûn phaåm cuûa JDBC Saûn phaåm cuûa JDBC bao goàm ba loaïi chính laø goùi java.sql, Test suite, caàu noái JDBC-ODBC vaø java.sql.package. JDBC API laø taäp caùc interface vaø class cho pheùp keát noái cô sôû döõ lieäu, chuùng chöùa ñöïng tong gôùi java.sql vaø nhöõng interface naøy bao goàm: • CallableStatement: Chöùa ñöïng caùc phöông thöùc ñeå thöïc thi thuû tuïc SQL coù hoã trôï caùc tham soá In vaø Out. • Connection: Baûo trì vaø theo gioûi keát noái cô sôû döõ lieäu. • DatabaseMetaData: Cung caáp caùc thoâng tin cuûa cô sôû döõ lieäu. • Driver: Taïo ra ñoái töôïng keát noái. • PrepareStatement: Bieân dòch phaùt bieåu SQL tröôùc khi thöïc thi. • ResultSet: Cung caáp caùc phöông thöùc ñeå truy caäp döõ lieäu töø phaùt bieåu SQL.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
• ResultSetMetaData: Thu thaäp thoâng tin sieâu döõ lieäu phuø hôïp vôùi ñoái töôïng ResultSet cuoái cuøng. • Statement: Thöïc thi phaùt bieåu SQL vaø truy vaán döõ lieäu traû veà töø ñoái töôïng ResultSet.
1.2.1. Test Suite Test Suite duøng ñeå kieåm tra caùc chöùc naêng cuûa trình ñieàu khieån JDBC, noù baûo ñaûm raèng taát caû phöông thöùc vaø lôùp caøi ñaët trong JDBC API ñöôïc caøi ñaët.
1.2.2. Caàu noái JDBC-ODBC Caàu noái JDBC-ODBC laø trình ñieàu khieån JDBC cho pheùp chöông trình Java söû duïng ODBC ñeå keát noái cô sôû döõ lieäu. Trong tröôøng hôïp naøy chuùng ta söû duïng ODBC cuûa heä ñieàu haønh Windows ñeå keát noái cô sôû döõ lieäu Windows hoã trôï.
1.3. Caùc trình ñieàu khieån JDBC JDBC Driver bao goàm 4 loaïi chính: JDBC-ODBC Bridge, Native API Java, JDBC Network vaø Native Protocol.
2. CAÙC ÑOÁI TÖÔÏNG KEÁT NOÁI CÔ SÔÛ DÖÕ LIEÄU Nhö giôùi htieäu ôû treân, chuùng ta seõ coù 3 ñoái töôïng chình ñeå laøm vieäc vôùi cô sôû döõ lieäu laø Connection, Statement vaø ResultSet. Tröôùc khi söû duïng caùc ñoái töôïng naøy, baïn phaûi khai baùo import java.sql.* vaø khai baùo trình ñieàu khieån JdbcODBC nhö sau: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
2.1. Connection Connection laø ñoái töôïng duøng ñeå môû keát noái cô sôû döõ lieäu baèng trình ñieàu khieån JDBC, baèng caùch söû duïng phöông thöùc DriverManager.getConnection cuûa ñoái töôïng Connection baïn coù theå môû keát noái cô sôû döõ lieäu vôùi loaïi cô sôû döõ lieäu cuøng vôùi caùc tham soá khaùc.
2.1.1. Khai baùo Khai baùo ñoái töôïng Connection, baïn söû duïng cuù phaùp nhö sau: Connection con = DriverManager.getConnection("jdbc:odbc:Northwind","hocvien","");
Hay Connection con = null; con = DriverManager.getConnection("jdbc:odbc:Northwind","hocvien","");
2.1.2. Taïo ñoái töôïng Statement Sau khi môû keát noái cô sôû döõ lieäu baèng ñoái töôïng Connection, baïn coù theå söû duïng phöông thöùc createStatement ñeå traû veà ñoái töôïng Statement baèng cuù phaùp: con.createStatement();
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
2.1.3. Ñoùng keát noái Ñeå ñoùng keát noái cô sôû döõ lieäu, baïn söû duïng cuù phaùp: con.close();
2.1.4. Giaûi phoùng keát noái Töông töï nhö treân, khi khoâng coù nhu caàu söû duïng ñoái töôïng connection, baïn caàn huyû ñoái töôïng naøy ñeå giaûi phoùng boä nhôù maø ñoái töôïng ñaõ chieám. con.dispose();
2.2. Statement Ñoái töôïng Statament duøng ñeå thöïc thi phaùt bieåu SQL duøng cho haønh ñoäng truy vaán vaø caäp nhaät, thay ñoåi xoaù döõ lieäu.
2.2.1. Khai baùo Khai baùo ñoái töôïng Statement, baïn söû duïng cuù phaùp nhö sau: Statement st = con.createStatement();
Hay Statement st = null; st = con.createStatement();
2.2.2. Thöïc thi phaùt bieåu SQL Sau khi môû keát noái cô sôû döõ lieäu baèng ñoái töôïng Connection vaø khai baùo ñoái töôïng Statement, baïn coù theå söû duïng phöông thöùc executeUpdate ñeå thöïc thi phaùt bieåu SQL daïng haønh ñoäng: st.executeUpdate(sql);
Hay khai baùo bieán int ñeå nhaän soá maåu tin ñöôïc thöïc thi int records= st.executeUpdate(sql);
2.2.3. Ñoùng ñoái töôïng Ñeå ñoùng keát noái cô sôû döõ lieäu, baïn söû duïng cuù phaùp: st.close();
2.2.4. Giaûi phoùng ñoái töôïng Töông töï nhö trong tröôøng hôïp ñoái töôïng connection, khi khoâng coù nhu caàu söû duïng ñoái töôïng statement, baïn caàn huyû ñoái töôïng naøy ñeå giaûi phoùng boä nhôù maø ñoái töôïng ñaõ chieám. st.dispose();
2.3. ResultSet Ñoái töôïng ResultSet naém giöõ moät taäp döõ lieäu cho pheùp baïn thao taùc treân taäp döõ lieäu baèng caùc phöông thöùc vaø thuoäc tính cuûa noù.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
2.3.1. Khai baùo Khai baùo ñoái töôïng ResultSet, baïn söû duïng cuù phaùp nhö sau: ResultSet rs = st.executeQuery(sql);
Hay ResultSet rs = null; // hoaëc ResultSet rs; rs= st.executeQuery(sql);
2.3.2. Ñoïc döõ lieäu töø ñoái töôïng ResultSet Sau khi môû keát noái cô sôû döõ lieäu baèng ñoái töôïng Connection, baïn coù theå söû duïng phöông thöùc createStatement ñeå traû veà ñoái töôïng Statement, baïn coù theå ñoïc taäp döõ lieäu ñeå ñieàn vaøo ñoái töôïng ResultSet vaø coù theå ñoïc ñoái töôïng baèng phöông thöùc next() nhö sau: rs.next()
Neáu caàn kieåm tra ñoái töôïng toàn taïi maåu tin hay khoâng, baïn coù theå söû duïng phaùt bieåu oif nhö sau: if(rs.next()) { }
Trong tröôøng hôïp duyeät töøng maåu tin beân trong ñoái töôïng, baïn söû duïng phaùt bieåu while nhö sau: while(rs.next()) { }
Ñeå ñoïc giaù trò töø field, baïn söû duïng phöông thöùc cuûa ñoái töôïng naøy, chaúng haïn ñoái vôùi tröôøng hôïp naøy chuùng ta söû duïng phöông thöùc getString(fieldname) nhö sau: string x=rs.getString("CustomerID")
2.3.3. Ñoùng ñoái töôïng ResultSet Ñeå ñoùng ñoái töôïng ResultSet, baïn söû duïng cuù phaùp: rst.close();
2.3.4. Giaûi phoùng ñoái töôïng ResultSet Töông töï nhö treân, khi khoâng coù nhu caàu söû duïng ñoái töôïng ResultSet, baïn caàn huyû ñoái töôïng naøy ñeå giaûi phoùng boä nhôù maø ñoái töôïng ñaõ chieám. rst.dispose();
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
3. KHAI BAÙO ODBC Ñeå söû duïng ODBC trong khai baùo caàu noái JDBC-ODBC, tröôùc tieân baïn khai baùo trình ñieàu khieån trong ODBC. Ñeå laøm ñieàu naøy, baïn choïn ODBC trong Cntrol panel hay töø Administrative Tools, cöûa soå xuaát hieän nhö hình 9-1 sau:
Hình 9-1: Taïo Data Source Name Choïn vaøo DSN System | Add ñeå theâm teân tham chieáu, cöûa soå xuaát hieän yeâu caàu baïn nhaäp teân (seõ söû duïng trong khai baùo) vaø chæ ñònh server (tröôøng hôïp naøy duøng daáu . töông ñöông vôùi SQL cuûa maùy cuïc boä) nhö hình 9-2. Böôùc keá tieáp choïn vaøo ñaët quyeàn keát noái cô sôû döõ lieäu baèng SQL hay Windows, trong tröôøng hôïp naøy chuùng ta choïn vaøo tuyø choïn thöù hai nhö hình 9-3. Khi choïn vaøo tuyø choïn naøy, baïn caàn cung caáp username vaø password ñeå ñònh nghóa cô sôû döõ lieäu SQ Server. Neáu caùc tham soá treân cung caáp hôïp leä, choïn Next cöûa soå keá tieáp xuaát hieän nhö hình 9-4 yeâu caàu baïn choïn teân cô sôû döõ lieäu caàn laøm vieäc. Löu yù raèng, cô sôû döõ lieäu maëc ñònh chính laø cô sôû döõ lieäu khai baùo maëc ñònh trong SQL Server khi ngöôøi söû duïng vôùi username ñoù ñöôïc taïo ra. Choïn Next vaø ñeán böôùc cuoái cuøng, baïn coù theå kieåm tra keát noái cô sôû döõ lieäu vöøa choïn coù thaønh coâng hay khoâng baèng caùch nhaán vaøo nuùt Test Conneciton nhö hình 9-5.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 9-2: Khai baùo DSN
Hình 9-3: Nhaäp username vaø password
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 9-4: Choïn teân cô sôû döõ lieäu
Hình 9-5: Kieåm tra keát noái cô sôû döõ lieäu
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
4. SÖÛ DUÏNG CAÀU NOÁI JDBC-ODBC Sau khi khai baùo xong ODBC vôùi teân chæ ñònh, giaû söû trong tröôøng hôïp naøy chuùng ta choïn teân SQL vôùi cô sôû döõ lieäu Northwind cuøng vôùi taøi khoaûn sa vaø password laø sa. try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:SQL","sa","sa"); ... } catch(Exception e) { System.out.println("Error : " + e); } }
5. SÖÛ DUÏNG ÑOÁI TÖÔÏNG CONNECTION, STATEMENT VAØ RESULTSET 5.1. Söû duïng phöông thöùc executeQuery Trôû laïi taäp tin java, baïn coù theå khai baùo ñeå keát noái cô sôû döõ lieäu vaø truy vaán döõ lieäu baïn coù theå khai baùo vaø söû duïng phöông thöùc executeQuery vaø ñoái töôïng Resultset nhö ví duï sau: ... try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:SQL","sa","sa"); Statement st = con.createStatement(); String sql = "Select * from Customers"; ResultSet rs = st.executeQuery(sql); while(rs.next()) { out.println(rs.getString("CustomerID")); } con.close(); } catch(Exception e) { out.println("Error : " + e); } } ...
Chaúng haïn, chuùng ta tham khaûo ví duï veà chöùc naêng ñaêng nhaäp heä thoáng baèng caùch söû duïng ODBC-JDBC nhö sau: <%@ page import="java.sql.*" %> <%@ include file="common.jsp"%> <% int err=0; String userid=""; String username=""; String email=""; String password=""; String fullname=""; try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); username= request.getParameter("username"); username=replaceString(username,"'", "''"); session.putValue("username",username); password= request.getParameter("password"); String strSQL=""; String pwd=""; strSQL="select * from tblusers where username = '" + username + "'"; rst=smt.executeQuery(strSQL); if (rst.next()){ userid= rst.getString("UserID"); pwd=rst.getString("Password"); fullname= rst.getString("Fullname"); email= rst.getString("Email"); if(pwd.equals(password)){ session.putValue("userid",userid); session.putValue("email",email); session.putValue("fullname",fullname); response.sendRedirect("myaccount.jsp"); } else{ /*sai password*/ session.putValue("userid","0"); response.sendRedirect("login.jsp"); } } else{ /*sai user*/ session.putValue("userid","-1"); response.sendRedirect("login.jsp"); } smt.close(); cn.close(); } catch (Exception e){ /*sai ket noi*/ session.putValue("userid","-2"); out.println(e); response.sendRedirect("login.jsp"); } %>
Töø trang login.jsp, ngöôøi söû duïng nhaäp username/password vaø nhaán OK, baïn trieäu goïi trang login_authentication.jsp, baèng caùch söû duïng 3 ñoái töôïng Connection, Statement vaø Resultset ñeå keát noái cô sôû döõ lieäu vaø kieåm tra. Neáu username/password hôïp leä thì trang myaccount.jsp seõ ñöïôc trieäu goïi, neáu khoâng chuùng ta seõ trôû veà trang login.jsp.
5.2. Söû duïng phöông thöùc executeNonQuery Trong tröôøng hôïp theâm hay caäp nhaät, theâm, xoaù döõ lieäu hay thöïc thi SP baïn söû duïng phöông thöùc executeUpdate, baïn coù theå khai baùo nhö ví duï sau: try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:SQL","sa","sa"); Statement st = con.createStatement(); String sql = "Delete from Customers where Country=’Vietnam’"; int records = st.executeUpdate(sql);
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
out.println("Effected records : " + records.ToString()); con.close(); } catch(Exception e) { out.println("Error : " + e); } }
Chaúng haïn, chuùng ta khai baùo trang them.jsp ñeå theâm maåu tin vaøo baûng tblCategories nhö sau: %@ page import="java.sql.*" %> <%@ include file="common.jsp"%> <% try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); String strSQL=""; strSQL="insert into tblCategories values('ABC')"; smt.executeNonQuery(strSQL); smt.close(); cn.close(); } catch (Exception e){ /*sai ket noi*/ out.println(e); } %>
6. KEÁT LUAÄN Trong baøi naøy, chuùng ta tìm hieåu JDBC API, caùc ñoái töôïng laøm vieäc vôùi cô sôû döõ lieäu, khai baùo ODBC vaø caùc phöông thöùc cuûa caùc ñoái töôïng Connection, Statement vaø ResultSet. Trong baøi keá tieáp chuùng ta tieáp tuïc tìm hieåu veà caùc caùch trình baøy döõ lieäu baèng 3 ñoái töôïng treân vôùi cô sôû döõ lieäu SQL Server.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Moân hoïc: Java Server Pages
BAØI 8: THEÂM, XOAÙ, CAÄP NHAÄT DÖÕ LIEÄU Sau khi chuùng ta ñaõ laøm quen vôùi JDBC (Java Database Connectivity), baïn coù theå söû duïng caàu noái JDBC-ODBC hay caùc goùi keát noái khaùc ñeå xoaù, caäp nhaät, theâm vaø truy vaán döõ lieäu baát kyø. Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy 9 Theâm döõ lieäu 9 Xoaù döõ lieäu 9 Caäp nhaät döõ lieäu 9 Thöïc thi thuû tuïc noäi taïi cuûa SQL Server 1. THEÂM DÖÕ LIEÄU Ñeå theâm maåu tin vaøo baûng döõ lieäu SQL Server, baïn söû duïng phöông thöùc executeUpdate nhö ví duï trang insert.jsp sau: <%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %> <%@ include file="common.jsp"%> Theâm maåu tin vaøo cô sôû döõ lieäu trong JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> <% boolean isok=false; try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); String strSQL=""; strSQL="insert into tblCategories values('Database')"; smt.executeUpdate(strSQL); isok=true; smt.close(); cn.close(); } catch (Exception e) { /*sai ket noi*/ out.println(e); isok=false; } if( isok) out.println("Theâm maåu tin thaønh coâng"); else out.println("Theâm maåu tin khoâng thaønh coâng ");
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
%>
2. CAÄP NHAÄT DÖÕ LIEÄU Trong tröôøng hôïp caäp nhaät döõ lieäu cuõng töông töï nhö theâm maåu tin, baïn söû duïng phöông thöùc executeUpdate ñeå thöïc thi phaùt bieåu SQL daïng Update. Chaúng haïn, chuùng ta tham khaûo ví duï veà caäp nhaät döõ lieäu nhö trang update.jsp sau: <%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %> <%@ include file="common.jsp"%> Caäp nhaät maåu tin vaøo cô sôû döõ lieäu trong JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> <% boolean isok=false; int j=0; try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); String strSQL=""; strSQL="update tblCategories set CateName='Databases' " strSQL+= " where CateID=41"; j= smt.executeUpdate(strSQL); isok=true; smt.close(); cn.close(); } catch (Exception e) { /*sai ket noi*/ out.println(e); isok=false; } if( isok) out.println("Caäp nhaät " + j + " maåu tin thaønh coâng"); else out.println("Caäp nhaät maåu tin khoâng thaønh coâng "); %>
3. XOAÙ MAÅU TIN Trong tröôøng hôïp xoaù maåu tin trong cô sôû döõ lieäu baïn cuõng söû duïng phöông thöùc executeUpdate nhö trang delete.jsp sau: <%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %>
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
<%@ include file="common.jsp"%> Xoaù maåu tin vaøo cô sôû döõ lieäu trong JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> <% boolean isok=false; int j=0; try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); String strSQL=""; strSQL="delete from tblCategories where CateID>=30 "; j= smt.executeUpdate(strSQL); isok=true; smt.close(); cn.close(); } catch (Exception e) { /*sai ket noi*/ out.println(e); isok=false; } if( isok) out.println("Xoaù " + j + " maåu tin thaønh coâng"); else out.println("Xoaù maåu tin khoâng thaønh coâng "); %>
4. THÖÏC THI THUÛ TUÏC NOÄI TAÏI CUÛA SQL SERVER 4.1. Thuû tuïc khoâng coù giaù trò traû veà Baïn coù theå thöïc thi moät thuû tuïc noäi taïi khoâng coù giaù trò traû veà cuûa SQL Server cuõng nhö moät phaùt bieåu SQL daïng haønh ñoäng, chaúng haïn chuùng ta coù thuû tuïc theâm maåu tin vaøo tblCategories nhö trang procedure.jsp sau: create proc AddCategories @name nvarchar(50) as Insert into tblCategories values(@name)
Löu yù raèng, khi goïi thuû tuïc naøy trong SQL Server baïn söû duïng cuù phaùp nhö sau: AddCategories ‘Phan Tich‘
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Sau ñoù, töø trang JSP baïn khai baùo ñeå thöïc thi thuû tuïc naøy nhö sau: <%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %> <%@ include file="common.jsp"%> Theâm maåu tin vaøo cô sôû döõ lieäu trong JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> <% boolean isok=false; int j=0; try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); String myName ="Phan Tich"; String strSQL=""; strSQL="AddCategories '" + myName +"'"; j= smt.executeUpdate(strSQL); isok=true; smt.close(); cn.close(); } catch (Exception e) { /*sai ket noi*/ out.println(e); isok=false; } if( isok) out.println("Theâm " + j + " maåu tin thaønh coâng"); else out.println("Theâm maåu tin khoâng thaønh coâng "); %>
4.2. Thöïc thi thuû tuïc coù giaù trò traû veà Baïn coù theå thöïc thi moät thuû tuïc noäi taïi coù giaù trò traû veà cuûa SQL Server cuõng nhö moät phaùt bieåu SQL daïng Select, chaúng haïn chuùng ta coù thuû tuïc theâm maåu tin vaøo tblCategories vaø laáy soá töï ñoäng laø maõ cuûa Category ñoù phaùt sinh nhö trang procedurewithvalue.jsp sau: create proc getCategoryID @name nvarchar(50) as insert into tblCategories values(@name) select @@identity as No
Löu yù raèng, khi goïi thuû tuïc naøy trong SQL Server baïn söû duïng cuù phaùp nhö sau:
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
getCategoryID ‘Phan Tich He Thong‘
Thì keát quaû traû veà laø soá töï ñoäng töông öùng vôùi maõ Category. Sau ñoù, töø trang JSP baïn khai baùo ñeå thöïc thi thuû tuïc naøy baèng ñoái töôïng ResultSet nhö trang procedurewithvalue.jsp sau: <%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %> <%@ include file="common.jsp"%> Theâm maåu tin vaøo cô sôû döõ lieäu trong JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> <% boolean isok=false; int j=0; try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); String myName ="Phan Tich He Thong"; String strSQL=""; strSQL="getCategoryID '" + myName +"'"; rst= smt.executeQuery(strSQL); if (rst.next()) j=rst.getInt("No"); isok=true; smt.close(); cn.close(); } catch (Exception e) { /*sai ket noi*/ out.println(e); isok=false; } if( isok) out.println("CategoryID is " + j); else out.println("Theâm maåu tin khoâng thaønh coâng "); %>
4.3. Thöïc thi thuû tuïc coù giaù trò traû veà laø taäp döõ lieäu Baïn coù theå thöïc thi moät thuû tuïc noäi taïi coù giaù trò traû veà laø moät taäp döõ lieäu cuûa SQL Server cuõng nhö moät phaùt bieåu SQL daïng Select, chaúng haïn chuùng ta coù thuû tuïc thöïc thi nhöõng haønh ñoäng naøo ñoù, sau ñoù lieät keâ maåu tin cuûa baûng tblCategories nhö trang procedurewithresultset.jsp sau: create proc getResultset @id int
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER as
WWW.HUUKHANG.COM
--Nhieàu tính toaùn vaø haønh ñoäng ô ñaây select * from tblCategories where CateID>@id
Löu yù raèng, khi goïi thuû tuïc naøy trong SQL Server baïn söû duïng cuù phaùp nhö sau: getResultset 20
Thì keát quaû traû veà laø danh saùch maåu tin coù maõ Category lôùn hôn 20. Sau ñoù, töø trang JSP baïn khai baùo ñeå thöïc thi thuû tuïc naøy baèng ñoái töôïng ResultSet nhö trang procedurewithresulset.jsp sau: <%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %> <%@ include file="common.jsp"%> Lieät keâ maåu tin vaøo cô sôû döõ lieäu trong JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> <% boolean isok=false; int j=0; try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); String strSQL=""; strSQL="getResultset '" + j +"'"; rst=smt.executeQuery(strSQL); while(rst.next()) { out.println(rst.getString("CateID")+"-"); out.println(rst.getString("CateName")); out.println(" "); } isok=true; smt.close(); cn.close(); } catch (Exception e) { /*sai ket noi*/ out.println(e); isok=false; } if(!isok) out.println("Lieät keâ maåu tin khoâng thaønh coâng "); %>
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
5. LIEÄT KEÂ DÖÕ LIEÄU THEO TUYØ CHOÏN Baèng caùch lieät keâ danh saùch cuûa baûng coù quan heä cha, cho pheùp ngöôøi söû duïng choïn moät phaàn töû, baïn coù theå lieät keâ danh saùch caùc maåu tin coù quan heä trong baûng coù quan heä N. Ñeå laøm ñieàu naøy, tröôùc tieân baïn lieât keâ danh saùch trong baûng tblCategories treân theû select, sau ñoù moãi laàn ngöôøi söû duïng choïn moät CategoryID thì baïn lieât keâ danh saùch caùc maåu tin trong baûng tblSubCategories nhö ví duï trang chooseandshow.jsp. <%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.sql.*" %> <%@ include file="common.jsp"%> Lieät keâ maåu tin trong JSP <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> Category: <select name=cateid onchange="document.form1.submit();"> <% //Laáy giaù trò töø theû select coù teân cateid neáu coù submit String cateid=request.getParameter("cateid"); Connection cn; Statement smt; ResultSet rst=null; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); try{ // Lieät keâ danh saùch Category trong theû select coù teân cateid String strSQL="select * from tblCategories"; rst=smt.executeQuery(strSQL); while(rst.next()) { String id=rst.getString("CateID") ; out.println(""); out.println(rst.getString("CateName")); out.println(" "); } } catch (Exception e) { /*sai ket noi*/ out.println(e); } out.println(" "); rst.close(); //Neáu coù submit thì lieät danh saùch subcategory theo cateid if(cateid!=null) { int j=0; try{ String strSQL=""; strSQL="select * from tblSubCategories Where cateid='" + cateid +"'";
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
rst=smt.executeQuery(strSQL); while(rst.next()) { j++; out.println(rst.getString("SubCateID")+"-"); out.println(rst.getString("SubCateName")); out.println(" "); } } catch (Exception e) { /*sai ket noi*/ out.println(e); } rst.close(); if(j==0) out.println("SubCategory not found!");
} smt.close(); cn.close(); %>
6. KEÁT LUAÄN Trong baøi naøy, chuùng ta tìm hieåu trình baøy döõ lieäu, theâm, xoaù, caäp nhaät vaø thöïc thi thuû tuïc noäi taïi SQL Server baèng 3 ñoái töôïng Connection, Statement vaø ResultSet vôùi cô sôû döõ lieäu SQL Server.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Moân hoïc: Java Server Pages
BAØI 9: THEÂM, XOAÙ, CAÄP NHAÄT DÖÕ LIEÄU Sau khi chuùng ta ñaõ laøm quen vôùi thao taùc cô sôû döõ lieäu, trong baøi naøy chuùng ta tieáp tuïc tìm hieåu xaây döïng chöùc naêng ñaêng nhaäp heä thoáng öùng duïng. Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy 9 Moâ hình chöùc naêng ñaêng nhaäp 9 Login, Trang chính vaø Logout 1. MOÂ HÌNH CHÖÙC NAÊNG ÑAÊNG NHAÄP Rong moïi öùng duïng Web, neáu cho pheùp ngöôøi söû duïng ñaêng nhaäp heä thoáng baïn ñeàu phaûi söû duïng trang login, trang chính sau khi ñaêng nhaäp thaønh coâng vaø trang logout theo moâ hình sau.
Begin
Username vaø Password
Client Validate
Huyû taát caû Session
No
Database Validate Khôûi taïo moät soá Session
Yes Ñaêng nhaäp thaønh coâng Database
Logout
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
1. Ngöôøi söû duïng nhaäp username vaø password. 2. Nhaán nuùt Login. 3. Kieåm tra treân client (JavaScript) ngöôøi söû duïng ñaõ nhaäp username (email) vaø Password (neáu baét buoäc phaûi coù Password). Neáu username vaø password hôïp leä thì nhaûy ñeán böôùc 4, ngöôïc laïi trôû veà böôùc 1. 4. Keát noái cô sôû döõ lieäu vaø kieåm tra username coù toàn taïi hay khoâng? •
•
Neáu toàn taïi thì so saùnh Password
Neáu truøng Password thì khôûi taïo moät soá Session caàn thieát vaø troû ñeán trang chính cuûa taøi koaûn ngöôøi söû duïng.
Ngöôïc laïi thì trôû veà böôùc 1 vôùi thoâng baùo “Sai password”.
Trong tröôøng hôïp khoâng toàn taïi thì trôû veà böôùc 1 vôùi thoâng baùo “Khoâng toàn taïi username”.
5. Sau khi ñaêng nhaäp thaønh coâng, neáu ngöôøi söû duïng Logout thì huyû taát caû caùc Session ñaõ taïo ra vaø trôû veà böôùc 1.
Löu yù: Döïa vaøo ñaâu chuùng ta trình baøy chuoãi thoâng baùo trong trang login. 1. Laàn ñaàu tieân hay sau khi logout neáu ngöôøi söû duïng goïi trang login thì chuùng ta thoâng baùo “Xin vui loøng cung caáp username vaø password ñeå ñaêng nhaäp heä thoáng”. 2. Trong tröôøng hôïp sai password maø goïi laïi trang login thì chuùng ta thoâng baùo “ Sai password, xin vui loøng nhaäp laïi password”. 3. Töông töï nhö vaäy, khi kieåm tra khoâng tìm thaáy username maø goïi laïi trang login thì chuùng ta thoâng baùo “ Khoâng toàn taïi username, xin vui loøng nhaäp laïi username”. Nhö vaäy, chuùng ta döïa vaø session coù teân userid, neáu ñaêng nhaäp thaønh coâng thì session coù giaù trò laø soá id cuûa ngöôøi söû duïng. Trong tröôøng hôïp sai password thì chuùng ta gaùn giaù trò cho session naøy laø 0, neáu username khoâng toàn taïi thì giaù trò gaùn laø –1. Khi loãi phaùt sinh thì gaùn giaù trò laø 2.
2. LOGIN, TRANG CHÍNH VAØ LOGOUT 2.1. Trang LOGIN Ñeå xaây döïng trang login, baïn khai baùo thaønh ba phaân ñoaïn, tröôùc tieân laø khai baùo ñoaïn JavaScript ñeå kieåm tra username / password nhö ví duï sau: <script language="JavaScript"> function checkinput(){ if(document.form1.username.value==""){ alert("Xin vui long nhap username"); document.form1.username.focus(); return false; } if(document.form1.password.value=="" ){ alert("Xin vui long nhap password"); document.form1.password.focus(); return false; }
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
return true; }
Sau ñoù, döïa vaøo giaù trò cuûa session coù teân userid, baïn coù theå thoâng baùo chuoãi thoâng baùo nhö sau: <%
String userid=getVal((String)session.getValue("userid"),""); String err="Xin vui loøng nhaäp username vaø password"; if(userid.equals("0")){ err="Sai password,Xin vui lòng nhaäp password ";} if(userid.equals("-1")){ err="Sai username,Xin vui lòng nhaäp username ";} if(userid.equals("-2")){ err="Loãi heä thoáng, Xin vui loøng thöû laïi ";}
%>
Sau ñoù, khai baùo theû form cuøng vôùi caùc theû input cho pheùp ngöôøi söû duïng nhaäp username/password vaø goïi phöông thöùc checkinput():
WWW.HUUKHANG.COM
Khi ngöôøi söû duïng trieäu goïi trang login laàn ñaàu tieân, maøn hình xuaát hieän nhö hình 9-1.
Hình 9-1: Trang login Neáu ngöôøi söû duïng khoâng nhaäp user/password maø nhaán nuùt “Ñaêng nhaäp” thì cöûa soå thoâng baùo do phöông thöùc checkinput khai baùo ôû treân phun ra nhö hình 9-2.
Hình 9-2: Thoâng baùo yeâu caàu nhaäp username/password
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Trong tröôøng hôïp ñaõ nhaäp username maø chöa cung caáp passwprd thì cöûa soå xuaát hieän nhö hình 9-3.
Hình 9-3: Yeâu caàu nhaäp password Löu yù raèng, sau khi thoâng baùo yeâu caàu ngöôøi söû duïng cung caáp username hay password, neáu ngöôøi söû duïng nhaán nuùt IK laäp töùc con troû seõ chæ vaøo textbox töông öùng. Neáu caû hai giaù trò ñeáu cung caáp, trang khai baùo trong thuoäc tính action cuûa theû form seõ ñöôïc trieäu goïi. Trong tröôøng hôïp naøy chính laø trang login_authentication.jsp.
2.2. Trang kieåm tra cô sôû döõ lieäu Sau khi submit ñeán trang login_authentication.jsp, baïn keát noái cô sôû döõ lieäu vaø ñoïc trong baûng tblusers vôùi phaùt bieåu Select vaø meänh ñeà Where öùng vôùi coät username. Neáu tìm thaáy maåu tin toàn taïi baïn tieáp tuïc so saùnh giaù trò trong coät password vôùi passsword nhaäp töø trang login.jsp, neáu password hôïp leä thì khôûi taïo session vaø troû ñeán trang myaccount.jsp. Trong tröôøng hôïp khoâng tìm thaáy maåu tin naøo coù username baèng vôùi username maø ngöôøi söû duïng cung caáp thì baïn trôû veà trang login.jsp vôùi giaù trò cuûa session coù teân userid laø –1. Ñoái vôùi tröôøng hôïp so saùnh password khoâng baèng nhau thì baïn trôû veà trang login.jsp vôùi giaù trò cuûa session coù teân userid laø 0. Neáu loãi phaùt sinh do keát noái cô sôû döõ lieäu thì baïn baïn trôû veà trang login.jsp vôùi giaù trò cuûa session coù teân userid laø –2. <%@ page import="java.sql.*" %> <%@ include file="common.jsp"%> <% int err=0; String userid=""; String username=""; String email=""; String password=""; String fullname=""; try{ Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); username= request.getParameter("username"); username=replaceString(username,"'", "''"); session.putValue("username",username);
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
password= request.getParameter("password"); String strSQL=""; String pwd=""; strSQL="select * from tblusers where username = '" + username + "'"; rst=smt.executeQuery(strSQL); if (rst.next()){ userid= rst.getString("UserID"); pwd=rst.getString("Password"); fullname= rst.getString("Fullname"); email= rst.getString("Email"); if(pwd.equals(password)){ session.putValue("userid",userid); session.putValue("email",email); session.putValue("fullname",fullname); response.sendRedirect("myaccount.jsp"); } else{ /*sai password*/ session.putValue("userid","0"); response.sendRedirect("login.jsp"); } } else{ /*sai user*/ session.putValue("userid","-1"); response.sendRedirect("login.jsp"); } smt.close(); cn.close(); } catch (Exception e){ /*sai ket noi*/ session.putValue("userid","-2"); out.println(e); response.sendRedirect("login.jsp"); } %>
Chuùng ta thay theá giaù trò nhaäp coù daáu ‘ thaønh hai daáu nhaùy ñôn lieân tieáp baèng phöông thöùc replaceString khai baùo trong trang common.jsp nhö sau: username= request.getParameter("username"); username=replaceString(username,"'", "''");
Löu yù raèng, khi username vaø password ñeàu hôïp leä thì chuùng ta khai baùo nhö sau: if(pwd.equals(password)) { session.putValue("userid",userid); session.putValue("email",email); session.putValue("fullname",fullname); response.sendRedirect("myaccount.jsp"); }
Neáu sai password thì baïn khai baùo nhö sau: else{
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
}
WWW.HUUKHANG.COM
/*sai password*/ session.putValue("userid","0"); response.sendRedirect("login.jsp");
Trong tröôøng hôïp khoâng tìm thaáy username toàn taïi trong cô sôû döõ lieäu thì baïn khai baùo nhö sau: else{ /*sai user*/ session.putValue("userid","-1"); response.sendRedirect("login.jsp"); }
Neáu loãi phaùt sinh do heä thoáng hay keát noái cô sôû döõ lieäu, baïn khai baùo trong phaùt bieåu catch nhö sau: catch (Exception e){ /*sai ket noi*/ session.putValue("userid","-2"); response.sendRedirect("login.jsp"); }
Sau khi ñaêng nhaäp thaønh coâng, trang myaccount.jsp xuaát hieän nhö hình 9-4.
Hình 9-4: Trang myaccount.jsp Baïn coù theå trình baøy nhieàu loaïi thoâng tin trong trang naøy, tuy nhieân chuùng toâi chæ xuaát ra giaù trò cuûa session coù teân laø fullname nhö ví duï sau.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
<%@ page contentType="text/html; charset=UTF-8" %> <%@ include file="common.jsp"%> <%@ include file="checksession.jsp"%> Du lich <META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=utf-8"> Xin chaøo baïn ñeán vôùi WebSite Baùn Haøng Logged as: <%=getVal((String)session.getValue("fullname"),"")%> Logout
Tuy nhieân, trang myaccount.jsp chæ ñöôïc söû duïng khi ngöôøi söû duïng ñaõ ñaêng nhaäp, ñieàu naøy coù nghóa laø baïn phaûi kieåm tra session userid phaûi coù giaù trò lôùn hôn 0 môùi cho pheùp trình baøy thoâng tin treân trang naøy neáu khoâng thì trieäu goïi trang login.jsp ñeå yeâu caàu ngöôøi söû duïng ñaêng nhaäp. Trong tröôøng hôïp naøy chuùng khai baùo tröùc tieáp trong trang myaacount.jsp hay khai baùo thaønh trang söû duïng chung laø checksession.jsp sau ñoù khai baùo cheøn vaøo myaccount.jsp. <% String userid=getVal((String)session.getValue("userid"),""); if(userid.equals("")|| userid.equals("0") || userid.equals("-1")|| userid.equals("-2")) response.sendRedirect("login.jsp"); %>
Treân trang myaccount.jsp chuùng ta khai baùo moät URL cho pheùp ngöôøi söû duïng thoaùt (logout) khoûi öùng duïng baèng caùch trieäu goïi trang logout.jsp. Trang naøy thöïc hieän quaù trình huyû taát caû caùc session ñaõ taïo ra trong quaù trình söû duïng cuûa ngöôøi duøng vaø troû ñeán trang login.jsp. <% session.putValue("userid",""); session.putValue("username",""); session.putValue("email",""); session.putValue("fullname",""); response.sendRedirect("login.jsp"); %>
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
3. KEÁT LUAÄN Trong baøi naøy, chuùng ta tìm hieåu chöùc naêng ñaêng nhaäp heä thoáng, baøi keá tieáp chuùng ta tieáp tuïc tìm hieåu veà xaùo döõ lieäu daïng maûng control treân form. Löu yù raèng, caùc trang jsp treân khoâng söû duïng cheø taäp tin, trong thöïc teá baïn caàn khai baùo caùc trang top, left, right vaø bottom sau ñoù cheøn vaøo moãi trang web khaùc.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Moân hoïc: Java Server Pages
BAØI 10: XOAÙ, CAÄP NHAÄT DÖÕ LIEÄU DAÏNG MAÛNG Trong baøi tröôùc chuùng ta ñaõ laøm quen vôùi caùch xoaù maåu tin trong cô sôû döõ lieäu SQL Server. Ñoái vôùi tröôøng hôïp xoaù moät luùc nhieàu maåu tin, chuùng ta phaûi xaây döïng trang JSP coù söû duïng theû input daïng checkbox. Nhöõng vaán ñeà chính seõ ñöôïc ñeà caäp trong baøi hoïc naøy 9 Lieät keâ döõ lieäu daïng danh saùch 9 Xoaù nhieàu maåu tin 9 Caäp nhaät nhieàu maåu tin 1. LIEÄT KEÂ DÖÕ LIEÄU Ñeå xoaù nhieàu maåu tin cuøng moät luùc, tröôùc tieân baïn khai baùo trang JSP ñeå lieät keâ danh saùch maåu tin trong maûng döõ lieäu chaèng haïn, moãi laäp trình xuaát hieän moät checkbox töông öùng. Checkbox naøy coù giaù trò laø maõ nhaän daïng cuûa maåu tin ñoù. Trong tröôøng hôïp naøy chuùng ta duøng coät khoaù cuûa maõ saùch trong baûng tblItems. Tuy nhieân, ñeå cho pheùp laáy ñöôïc nhieàu giaù trò choïn cuûa saûn phaåm, baïn khai baùo caùc checkbox naøy cuøng teân (giaû söû teân laø chkid) vaø giaù trò trò laø ItemID cuûa moãi saûn phaåm nhö ví duï 10-1 trong trang deletesach.jsp. try{ rst=smt.executeQuery(strSQL); while(rst.next()) { ID=rst.getString("ItemID"); out.println(" "); out.println(""+ID+" "); strO =rst.getString("ItemName"); out.println(""); out.println( strO + " "); strO =rst.getString("ListPrice"); out.println(""); out.println( strO + " "); strO =getVal(rst.getString("SalesDiscount"),""); out.println(""); out.println( strO + " "); strO =getVal(rst.getString("SalesPrice"),""); out.println(""); out.println( strO + " "); strO =rst.getString("ItemStyle"); out.println(""); out.println( strO + " "); out.println( " "); totalRecords++; } ...
Tuy nhieân, do nhieàu cuoán saùch thuoäc caùc taùc giaû khaùc nhau, chính vì vaäy baïn khai baùo danh saùch taùc giaû treân theû select cho pheùp ngöôøi söû duïng lieät keâ saùch theo nhoùm taùc giaû nhö hình 10-1.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 10-1: Lieät keâ danh saùch saùch Ñeå lieät keâ danh saùch taùc giaû trong baûng tblAuthors, baèng caùch khai baùo phöông thöùc nhaän chuoãi SQL daïng Select vaø giaù trò maëc ñònh traû veà nhieàu phaàn töû theû option trong taäp tin database.jsp nhö ví duï 10-2. <%! public String getOption(String strSQL,String strSelect) { String OptionString=""; Connection cns; Statement smts; ResultSet rsts; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cns = DriverManager.getConnection(odbc,sysuser,syspwd); smts = cns.createStatement(); String ID=""; String strO; String strU; rsts=smts.executeQuery(strSQL); while(rsts.next()) { ID=rsts.getString("ID"); OptionString+="
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
if(!strSelect.equals("")) if(strSelect.equals(ID)) OptionString+=" selected "; strO =rsts.getString("Name"); strU=new String(strO.getBytes("ISO-8859-1"),"UTF-8"); OptionString+= ">" + strO + ""; } rsts.close(); smts.close(); cns.close(); } catch (Exception e){ OptionString=e.toString(); } return OptionString; } %>
Sau ñoù, goïi phöông thöùc naøy trong trang deletesach.jsp nhö ví duï 10-3. <%@ include file="database.jsp"%> <% String strID=getVal(request.getParameter("selectid"),""); String strOptions="Tat ca tac gia "; strOptions+=getOption("Select AuthorID AS ID, AuthorName AS NAME from tblAuthors",strID); %>
Laàn ñaàu tieân baïn coù theå choïn maëc ñònh moät taùc giaû hoaëc lieät keâ taát caû, khi ngöôøi söû duïng choïn taùc giaû naøo ñoù thì trang deletesach.jsp seõ lieät keâ danh saùch saùch cuûa taùc giaû ñoù. Ñeå laøm ñieàu naøy, baïn khai baùo theû form vôùi theû select nhö ví duï 10-4. Danh sách Sách Taùc giaû: <select name=selectid onchange="document.frmSelect.submit();"> <%=strOptions%>
Khi ngöôøi söû duïng choïn caùc maåu tin nhö hình 10-2 vaø nhaán nuùt Delete, döïa vaøo giaù trò cuûa nuùt coù teân action (trong tröôøng hôïp naøy laø Delete), baïn coù theå khai baùo bieán ñeå laáy giaù trò choïn baèng caùch khai baùo nhö ví duï 10-5. deleterecord=request.getParameterValues("chkid"); if(deleterecord!=null){ for(int k=0;k<deleterecord.length;k++){ delStr+="'"+deleterecord[k]+"'"+","; } delStr=delStr.substring(0,delStr.length()-1); }
Döïa vaøo theû hidden khai baùo trong caùc trang trình baøy danh saùch maåu tin nhö sau:
Baïn coù theå bieát töø trang naøo goïi ñeán trang dosql.jsp ñeå quay trôû veà khi thöïc hieän xong taùc vuï xöû lyù.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Ngoaøi ra, döïa vaøo giaù trò cuûa nuùt action ñeå thöïc hieän phaùt bieåu SQL. Chaúng haïn, trong tröôøng hôïp naøy neáu ngöôøi söû duïng nhaán huùt Delete thì baïn khai baùo nhö ví duï 10-6 sau: if(action.equals("Delete")) { strSQL=" delete from tblItems Where ItemID "; msg="Xoá sách thành công"; }
Sau ñoù, söû duïng ñoái töôïng Connection, Statement baïn coù theå thöïc thi phaùt bieåu SQL vöøa khai baùo ôû treân nhö ví duï 10-7. if(!strSQL.equals("") ) { strSQL+=" in (" + delStr +")"; Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); smt = cn.createStatement(); int i = smt.executeUpdate(strSQL); smt.close(); cn.close(); }
Löu yù raèng, baïn cuõng neân khai baùo try catch trong khi laøm vieäc vôùi cô sôû döõ lieäu. Ngoaøi ra, baïn cuõng phaûi xaùc nhaän tröôùc khi thöïc thi haønh ñoäng xoaù maåu tin choïn baèng caùch khai baùo ñoaïn Javascript nhö sau: <script> function isok() { return confirm('Are you sure to delete?'); }
Sau ñoù goïi trong bieán coá onsubmit cuûa form nhö sau:
2. CAÄP NHAÄT NHIEÀU MAÅU TIN Töông töï nhö tröôøng hôïp Delete, khi baïn duyeät (approval) moät soá maåu tin theo moät coät döõ lieäu naøo ñoù, chaúng haïn, trong tröôøng hôïp naøy chuùng ta cho pheùp söû duïng nhöõng saûn phaåm ñaõ qua söï ñoàng yù cuûa nhaø quaûn lyù thì coät döõ lieäu Activate cuûa baûng tbltems coù giaù trò laø 1. Ñeå laøm ñieàu naøy, tröôùc tieân baïn lieät keâ danh saùch saûn phaåm nhö hình 10-3.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 10-3: Lieät keâ danh saùch saûn phaåm duyeät hay chöa Maëc ñònh laø danh saùch saûn phaåm chöa duyeät, ñeå laøm ñieàu naøy baïn hai baùo hai theû input loaïi radio vaø maëc ñònh laø choïn vaøo tuyø choïn thöù nhaát, trong tröôøng hôïp ngöôøi söû duïng choïn vaøo tuyø choïn thöù hai thì sau khi submit baïn choïn laïi tuyø choïn thöù hai nhö ví duï 10-8.
Ñeå laáy giaù trò ngöôøi söû duïng choïn treân hai tuyø choïn naøy, baïn khai baùo nhö sau: String strStatus=getVal(request.getParameter("selectstatus"),"0");
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Maëc ñònh phaùt bieåu SQL daïng select coù meänh ñeà Where vôùi coät Activate tuyø thuoäc vaøo giaù trò choïn cuûa moät trong hai tuyø choïn treân baïn khai baùo nhö ví duï 10-9: String strSQL="select ItemID, ItemName,ListPrice, SalesPrice, ItemStyle,Activate from tblItems ";
SalesDiscount,
strSQL+=" where Activate='" + strStatus+ "' "; if(!strID.equals("")) strSQL+=" and AuthID='" + strID+ "'";
Tuyø thuoäc vaøo soá maåu tin lieät keâ thuoäc traïng thaùi chöa duyeät thì nuùt Approve hieän ra, ngöôïc laïi laø nuùt Unapprove. Ñieàu naøy coù nghóa laø nuùt Approve duøng cho nhöõng maåu tin chöa duyeät vaø ngöôïc laïi. Ñeå laøm ñieàu naøy baïn khai baùo nhö ví duï 10-10. Unapprove<%}else{%>Approve<%}%>">
Nhö vaäy, döïa vaøo nuùt action coù giaù trò laø Delete, Approve hay Unapprove baïn ñònh nghóa phaùt bieåu SQL trong trang dosql.jsp. Ñoái vôùi tröôøng hôïp naøy chuùng ta khai baùo theâm trong trang dosql.jsp nhö ví duï 10-11. if(action.equals("Approve")) { strSQL=" update tblItems set Activate=1 Where ItemID "; msg="Duyeät saùch thaønh coâng"; } if(action.equals("Unapprove")) { strSQL=" update tblItems set Activate=0 Where ItemID "; msg="Huyû duyeät saùch thaønh coâng"; }
3. KEÁT LUAÄN Trong baøi naøy, chuùng ta tìm hieåu chöùc naêng xoaù, caäp nhaät nhieàu maåu tin baèng caùch söû duïng theû input loaïi checkbox cuøng teân vaø khaùc giaù trò, baøi keá tieáp chuùng ta tieáp tuïc tìm hieåu veà caùch tìm kieám vaø phaân trang trong JSP.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Moân hoïc: Java Server Pages
BAØI 11: TÌM KIEÁM, PHAÂN TRANG Chuùng ta vöøa laøm quen caùch trình baøy döõ lieäu döôùi nhieàu hình thöùc khaùc nhau. Trong chöông naøy, chuùng ta tieáp tuïc tìm hieåu caùch xaây döïng cô sôû döõ lieäu vaø trang JSP cho pheùp ngöôøi söû duïng tìm kieám theo hình thöùc ñôn giaûn hay phöùc taïp. Sau khi cung caáp caùc tieâu chuaån tìm kieám, neáu ngöôøi söû duïng submit thì trang keát quaû seõ trình baøy danh saùch maåu tin thoaû ñieàu kieän ñoù. Trong tröôøng hôïp soá maåu tin lieät keâ coù soá löôïng nhieàu, baïn coù theå phaân chia ra nhieàu trang nhaèm giuùp cho ngöôøi söû duïng deã xem thoâng tin do hoï tìm kieám. Caùc vaán ñeà chính seõ ñöôïc ñeà caäp: 9 Xaây döïng baûng döõ lieäu phuïc vuï tìm kieám 9 Tìm kieám ñôn giaûn 9 Tìm kieám naâng cao 9 Phaân trang vaø ñieàu höôùng
1. XAÂY DÖÏNG BAÛNG DÖÕ LIEÄU PHUÏC VUÏ TÌM KIEÁM
Khi thieát keá döõ lieäu, baûng löu tröõ thoâng tin chi tieát cuûa saûn phaåm coù theå coù nhieàu coät, neáu ngöôøi söû duïng cung caáp moät töø khoaù ñeå tìm kieám maåu tin thoaû yeâu caàu naøy, baïn phaûi khai baùo phaùt bieåu Select coù meänh ñeà Where döïa treân caùc coät döõ lieäu cho pheùp tìm. Tuy nhieân, khi ngöôøi söû duïng cung caáp töø khoaù tìm kieám khoâng thuoäc ñeà taøi cuûa cuoán saùch maø chæ coù moät chöông hay phaàn naøo ñoù trình baøy veà vaán ñeà ñoù, ñoái vôùi tröôøng hôïp naøy chuùng ta xöû lyù nhö theá naøo. Ñeå cho pheùp keát quaû tìm kieám traû veà öùng vôùi töø khoaù do ngöôøi söû duïng cung caáp maø cuoán saùch coù theå cuøng ñeà taøi hay moät phaàn cuûa chuùng trình baøy veà vaán ñeà coù töø khoaù naøy, chuùng ta khai baùo coät döõ lieäu coù teân keywords. Coät keywords cho pheùp baïn nhaäp taát caû caùc töø khoaù chính maø saûn phaåm coù ñeà caäp. Chaúng haïn, chuùng ta coù baûng tblItems löu tröõ danh saùch nhieàu loaïi saùch, trong baûng naøy coù coät keywords löu tröõ caùc töø khoaù nhö: COM, COM+, DLL, API, Access, Excel, World, PowerPoint, Outlook, Crystal Report, Unicode, Grid, SQL öùng vôùi cuoán saùch “Kyõ xaûo laäp trình Visual Basic 6.0” vaø SQL Server, Database, Servlet, JSP, JavaScript, SQL, Access, Shopping Cart, Payment, RMI, EJB, Class öùng vôùi cuoán saùch “Xaây döïng öùng duïng thöông maïi ñieän töû baèng JSP vaø Servlet”.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Nhö vaäy, khi ngöôøi söû duïng tìm kieám töø khoaù SQL thì nhöõng cuoán saùch coù trình baøy veà SQL seõ ñöôïc lieät keâ, ñoái vôùi tröôøng hôïp naøy hai cuoán saùch treân vaãn naèm trong danh saùch lieät keâ maëc duø ñeà taøi cuoán saùch laø Java vaø JSP. Vôùi caáu truùc nhö treân, baïn söû duïng thuaät toaùn tìm kieám theo ñoä öu tieân vaø taùch chuoãi ñeå lieät keâ nhöõng cuoán saùch coù töïa ñeà veà ñeà taøi naøy lieät keâ tröôùc sau ñoù lieät keâ nhöõng cuoán saùch coù trình baøy moät phaàn veà SQL. Toùm laïi, baïn khai baùo coät keywords ñeå löu tröõ taát caû caùc töø khoaù maø cuoán saùch coù trình baøy veà chuùng. Thay vì so saùnh chuoãi tìm kieám theo yeâu caàu cuûa ngöôøi söû duïng treân nhöõng coät döõ lieäu lieân quan thì baïn chæ caàn so saùnh treân chính coät naøy. Ñoái vôùi tröôøng hôïp naøy, baïn söû duïng pheùp toaùn LIKE vôùi kyù hieäu % chaúng haïn, cho pheùp baïn so saùnh gaàn ñuùng vôùi chuoãi yeâu caàu tìm kieám. Tuy nhieân, Microsoft cung caáp moät dòch vuï tìm kieám goïi laø Full-Text Search cho pheùp baïn söû duïng caùc haøm cuûa SQL Server ñeå tìm kieám töø treân moïi coät cuûa baûng döõ lieäu. 2. TÌM KIEÁM ÑÔN GIAÛN
Sau khi khai baùo coät döõ lieäu coù teân keywords trong baûng tblItems, baïn coù theå nhaäp caùc töø khoaù cuûa töøng saûn phaåm coù toaøn boä hay moät phaàn noäi dung trình baøy veà töø khoaù naøy vaøo coät keywords. Töø öùng duïng JSP, baïn thieát keá trang tìm kieám ñôn giaûn (basic search) nhö hình 11-1 vôùi textbox cho pheùp ngöôøi söû duïng Internet nhaäp töø khoaù baát kyø. Löu yù raèng, trang naøy coù theå laø moät trang hay moät phaàn trong trang chính khaùc.
Hình 11-1: Trang tìm kieám ñôn giaûn
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Ñeå thöïc hieän ñieàu naøy, baïn khai baùo noäi dung HTML cuûa phaàn body trong trang timkiemcoban.jsp nhö ví duï 11-1. Ví duï 11-1: Phaàn BODY cuûa trang tìm kieám ñôn giaûn ... Trong ví duï treân, chuùng ta söû duïng phöông thöùc GET cho theû form nhaèm cho pheùp truyeàn giaù trò tìm kieám cuûa ngöôøi söû duïng leân QueryString thay vì duøng phöông thöùc Post. Ngoaøi ra, baïn khai baùo ñoaïn JavaScript ñeå yeâu caàu nhaäp töø khoaù tröôùc khi nhaán nuùt Tìm Kieám trong trang timkiemcoban.jsp nhö ví duï 11-2. Ví duï 11-2: Phaàn khai baùo cheøn file <SCRIPT language=JavaScript> function checkinput() Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
{ if (document.frmView.keyword.value=="" ) { alert("Xin vui long nhap ten, tua de, ten tac gia, nha xuat ban"); document.frmView.keyword.focus(); return false; } return true; } Sau khi ngöôøi söû duïng nhaäp chuoãi ASP vaøo phaàn töø khoaù nhö hình 11-2 vaø nhaán nuùt Tìm Kieám, trang ketquacoban.jsp seõ ñöôïc trieäu goïi, keát quaû trình baøy nhö hình 11-3.
Hình 11-2: Tìm kieám töø khoaù Ñeå laáy giaù trò nhaäp töø trang timkiemcoban.jsp vaø keát noái cô sôû döõ lieäu, keá ñeán lieät keâ nhöõng maåu tin trong baûng tblItems coù töø truøng vôùi töø ASP taïi coät keywords thì baïn khai baùo meänh ñeà Where trong trang ketquacoban.jsp baïn nhö ví duï 11-3. Ví duï 11-3: Khai baùo tìm kieám ñôn giaûn if (!(keyword==null)){ strShow += keyword + ", "; strWhere+= " and (ItemName like '%" ;
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
}
strWhere+= strWhere+= strWhere+= strWhere+= strWhere+= strWhere+=
WWW.HUUKHANG.COM
keyword; "%' or Keywords like '%" ; keyword; "%' or SubCateName like '%" ; keyword; "%')";
Trong ñoù, phaàn ñònh nghóa phaùt bieåu SQL daïng Select vôùi giaù trò tìm kieám töø trang tìm kieám nhö ví duï 11-4 sau: Ví duï 11-4: Khai baùo kieåm tra <% String strShow=""; String strWhere=""; String keyword=request.getParameter("keyword"); if (keyword==null) { response.sendRedirect("timkiemcoban.jsp"); } if (!(keyword==null)){ strShow += keyword + ", "; strWhere+= " and (ItemName like '%" ; strWhere+= keyword; strWhere+= "%' or Keywords like '%" ; strWhere+= keyword; strWhere+= "%' or SubCateName like '%" ; strWhere+= keyword; strWhere+= "%')"; } %> Keát quaû tìm kieám lieät keâ nhö hình 11-3 bao goàm danh saùch caùc saûn phaåm coù moät trong nhöõng töø khoaù baèng ASP.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 11-3: Keát quaû tìm kieám Ñeå laøm ñieàu naøy, baïn khai baùo keát noái cô sôû döõ lieäu vaø ñoïc caùc field trình baøy nhö ví duï 11-5. Ví duï 11-5: Khai baùo tìm kieám ñôn giaûn <% Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); String strSQL="select * from vwItems where ItemID>0 " ; strSQL += " " + strWhere; String sorts=request.getParameter("sort"); String x="ItemName,ProName,AuthorName"; if( !(sorts==null) && (x.indexOf(sorts)!=-1) ) { strSQL=strSQL + " order by CustomerRating ASC,"; strSQL=strSQL + sorts; strSQL=strSQL + " ASC"; Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
} String qryString="keyword=" + keyword ; smt = cn.createStatement(); int viewrow=1; try{ rst=smt.executeQuery(strSQL); while(rst.next()) { %> 3. TÌM KIEÁM NAÂNG CAO
Tìm kieám naâng cao laø cho pheùp ngöôøi söû duïng cung caác tieâu chuaån tìm kieám phöùc taïp hôn, chaúng haïn trong tröôøng hôïp naøy chuùng ta thieát keá trang timkiem.jsp nhö hình 11-4.
Hình 11-4: Tìm kieám naâng cao
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Ñoái vôùi trang naøy, yeâu caàu ngöôøi söû duïng ít nhaát phaûi nhaäp giaù trò öùng vôùi field, baèng caùch khai baùo ñoaïn JavaScript ñeå kieåm tra quaù trình raøng buoäc naøy. Ví duï 11-6: Khai baùo raøng buoäc tìm kieám naâng cao <SCRIPT language=JavaScript> function checkinput() { if(document.frmView.word.value=="" && document.frmView.subject.value=="" && document.frmView.name.value=="" && document.frmView.author.value=="" && document.frmView.publish.value=="" && document.frmView.ISBN.value=="") { alert("Xin vui long nhap tu khoa/ten/tua de/ten tac gia/nha xuat ban de tim kiem"); document.frmView.word.focus(); return false; } return true; } Sau khi nhaán nuùt Tìm kieám, trang ketqua.jsp seõ ñöïôc trieäu goïi, töông töï nhö tröôøng hôïp tìm kieám cô baûn, baïn khai baùo meänh ñeà Where nhö ví duï 11-7. Ví duï 11-7: Khai baùo meänh ñeà Where <% Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); String strSQL="select * from vwItems where ItemID>0 " ; String strCount="select count(*) as No from vwItems where ItemID>0 "; strSQL += " " + strWhere; strCount+=strWhere; String sorts=request.getParameter("sort"); String x="ItemName,ProName,AuthorName"; if( !(sorts==null) && (x.indexOf(sorts)!=-1) ) { strSQL=strSQL + " order by CustomerRating ASC,"; strSQL=strSQL + sorts; strSQL=strSQL + " ASC"; } Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
String qryString="keyword=" + keyword + "&name=" + name +"&subject="+subject+"&author="+author+"&publish="+pu blish+"&isbn="+isbn+"&sort=" + sorts; smt = cn.createStatement(); int viewrow=1; try{ rst=smt.executeQuery(strSQL); while(rst.next()) { %> Giaû söû baïn tìm kieám töø khoaù SQL, keát quaû traû veà nhö hình 11-5.
Hình 11-5: Keát quaû tìm kieám naâng cao 4. PHAÂN TRANG VAØ ÑIEÀU HÖÔÙNG
Khi trình baøy döõ lieäu treân trang keát quaû tìm kieám hay lieät keâ, soá maåu tin coù theå vöôïc quaù khoâng gian trang web coù theå theå hieän, chính vì vaäy phaân trang laø ñieàu caàn thieát.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Giaû söû raèng, baïn muoán trình baøy baøy 10 maåu tin treân moãi trang, moã laàn xuaát hieän 5 trang, neáu soá trang nhieàu hôn 5 seõ xuaát hieän theâm lieân keát Next cho pheùp trình baøy 5 trang keá tieáp. Töông töï nhö vaäy, khi ngöôøi söû duïng ñang ñöùng sau 5 trang ñaàu tieân, xuaát hieän lieân keá Previous cho pheùp ngöôøi söû duïng trôû veà 5 trang tröôùc ñoù. Ñeå laøm ñieàu naøy, chuùng ta söû duïng nhöõng thuoäc tính vaø phöông thöùc cuûa ñoái töôïng ResultSet baèng Absolute(i): Troû con troû ñeán maåu tin ñaàu tieân cuûa trang thö i. Chaúng haïng, khi lieät keâ danh saùch saûn phaåm theo alphabet, soá löôïng maåu tin laø 23 maåu tin, baïn chia chuùng ra thaønh 5 trang moãi trang 5 maåu tin vaø moãi laàn trình baøy 3 trang nhö hình 13-7.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 11-6: Phaân trang Ñeå laøm ñieàu naøy, baïn khai baùo hai bieán record vaø pages töông öùng vôùi soá maåu tin caàn trình baøy treân moät trang vaø soá trang caàn trình baøy trong moät phaân ñoaïn: int pageCurrent=1; //trang lay tu QueryString int pages=5; if (request.getParameter("pages")!=null) { try { pages=Integer.parseInt(request.getParameter("pages ")); } catch(Exception ex) { pages=5; } } int record=5;// moi lan hien 5 mau tin if (request.getParameter("rows")!=null) { try { record=Integer.parseInt(request.getParameter("rows ")); } catch(Exception ex) { record=5; } } Keá ñeán, tröôùc khi söû duïng phöông thöùc executeQuery cuûa ñoái töôïng Statement vaø söû duïng thuoäc tính: if(pageCurrent>1) { row=(pageCurrent-1)*record; rst.absolute(row); } Moãi khi ngöôøi söû duïng trieäu goïi trang JSP naøy, baèng caùch söû duïng ñoái töôïng Request ñeå laáy soá trang töø tham soá page:
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
if (request.getParameter("page")!=null) {
try {
pageCurrent=Integer.parseInt(request.getParameter( "page")); } catch(Exception ex) { pageCurrent=1; } } Löu yù raèng, maëc ñònh trang thöù 1 ñöôïc goïi trong tröôøng hôïp trieäu goïi trang JSP ñaàu tieân. Sau khi coù ñöôïc trang thöù i caàn trình baøy, baèng caùch söû duïng phöông thöùc Absolute ñeå ñònh vò con troû ñeán maåu tin ñaàu tieân cuûa trang thöù i: if(pageCurrent>1) { row=(pageCurrent-1)*record; rst.absolute(row); } viewrow=1; while(rst.next()&& viewrow<=record) { Khi con troû ñöôïc ñònh vò traïi maåu tin ñaàu tieân cuûa trang thö i (bieán PageCurrent), baïn chæ caàn trình baøy ñuùng vôùi soá maåu tin döïa treân bieán record: while(rst.next()&& viewrow<=record) { %>
" height="100"> &aid=<%="AuthID"%>"> <%=rst.getString("ItemName")%>
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
<strong> <%=rst.getString("AuthorName")%> ánh giá c a khách hàng: <%String CR=rst.getString("CustomerRating");%> .gif" width="64" height="12"> Nhà xu t b n: <%=rst.getString("ProName")%> Giá bìa: <%=rst.getString("ListPrice")%> Gi m giá: <%=rst.getString("SalesDiscount")%>% Giá bán: <%=rst.getString("SalesPrice")%> Ki u bìa: <%=rst.getString("ItemStyle")%> <%=rst.getString("Available")%> <%viewrow++; } rst.close();
} catch (Exception e){ out.println(e); } smt.close(); cn.close();
Sau khi coù ñöôïc soá trang Pages, soá record maåu tin treân moät trang, moãi laàn trình baøy page trang vaø trang hieän haønh PageCurrent, baïn coù theå khai baùo ñoaïn maõ JSP ñeå coù ñöôïc chuoãi phaân trang nhö ví duï 13-7. Ví duï 13-7: Phaân trang <strong>Trang th : <%=pageCurrent%> %if (totalRecords>record){%>Trang: <%=getPage(pageCurrent,record, pages,totalRecords, totalPages, "ketqua.jsp?"+qryString)%><%}%> Nhö vaäy, ñeå söû duïng chung ñoaïn phaân trang naøy cho moïi trang JSP coù phaân trang, baïn khai baùo ví duï 13-7 thaønh moät taäp tin JSP vôùi hai bieán record vaø page cuøng vôùi haøm getPage nhö ví duï 11-8. Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Ví duï 13-8: phöông thöùc traû veà chuoãi phaân trang <%! public String getPage(int pageCurrent,int records, int pages, int totalRecords, int totalPages, String strURL) { int startNo=0;int endNo=0;int Segment=0; String strPage=""; totalPages=totalRecords/records; if((totalRecords%records)>0) totalPages+=1; if(totalPages<=1) strPage=""; else { Segment=pageCurrent/pages; if ((pageCurrent % pages)>0) Segment+=1 ; startNo=Segment*pages-pages+1; if (Segment*pages>totalPages) endNo=totalPages; else endNo=Segment*pages; if (Segment>1) { strPage=strPage + "Previous " ; } for (int No=startNo;No<=endNo;No++) { if (No==pageCurrent) strPage=strPage + " " + No + " "; else { strPage = strPage + " " + No + "  "; } } if (totalPages>pages*Segment) { strPage = strPage + " Next " ; }
}
} return strPage;
%>
Do haøm getPage trong trang paging.jsp seõ ñöôïc duøng chung cho moïi trang JSP, chính vì vaäy baïn khai baùo tham soá querystring ñeå nhaän teân cuûa trang JSP coù söû duïng haøm getPage khi phaân trang. Chuù yù raèng, neáu ngöôøi söû duïng choïn vaøo chöõ L laäp töùc danh saùch caùc cuoán saùch coù tieàn toá laø L ñöôïc trình baøy, nhö vaäy khi ngöôøi söû duïng choïn trang thöù i thì kyù töï L cuõng seõ ñöôïc gaùn cho tham soá al treân QueryString. Töông töï nhö vaäy trong tröôøng hôïp trình baøy keát quaû tìm kieám, baïn phaûi baûo ñaûm caùc tham soá trong trang tìm kieám ñöôïc xuaát hieän moãi khi ngöôøi söû duïng choïn trang thöù i. Ví duï, chuùng ta xaây döïng trang tìm kieám naâng cao coù teân timkiempaging.jsp coù caáu truùc nhö trang ketquapaging.jsp, khi ngöôøi söû duïng nhaäp caùc tieâu chuaån tìm kieám vaø nhaán nuùt Tìm Kieám thì trang ketquapaging.JSP ñöôïc trieäu goïi, keát quaû tìm kieám xuaát hieän nhö hình 11-6. 5. KEÁT LUAÄN
Chuùng ta vöøa taäp trung tìm hieåu caùch caøi ñaët phaân trang vaø ñieàu höôùng trong trang JSP. Trong chöông keá tieáp, chuùng ta tieáp tuïc tìm hieåu caùch trình baøy thoâng tin chi tieát cuûa saûn phaåm, xaây döïng gioû haøng vaø cho pheùp ngöôøi söû duïng ñôn ñaët haøng qua maïng.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Moân hoïc: Java Server Pages
BAØI 12: CHI TIEÁT SAÛN PHAÅM Sau khi trình baøy keát quaû tìm kieám, neáu ngöôøi söû duïng choïn moät saûn phaåm naøo ñoù thì baïn trình baøy caùc thoâng tin chi tieát cuûa saûn phaåm ñoù. Ngoaøi nhöõng thoâng tin chi tieát cuûa saûn phaåm, baïn neân trình baøy caùc thuoäc tính lieân quan khaùc nhö saûn phaåm boå sung, saûn phaåm thay theá, saûn phaåm ñöôïc caùc khaùch haøng khaùc mua khi choïn saûn phaåm naøy. Caùc vaán ñeà chính seõ ñöôïc ñeà caäp: 9 Chi tieát ñoä phaân giaûi 9 Saûn phaåm boå sung 9 Saûn phaåm cuûa khaùch haøng thöôøng mua
1. CHI TIEÁT SAÛN PHAÅM
Khi thieát keá döõ lieäu, baûng löu tröõ thoâng tin chi tieát cuûa saûn phaåm coù theå coù nhieàu coät, neáu ngöôøi söû duïng cung caáp moät töø khoaù ñeå tìm kieám maåu tin thoaû yeâu caàu naøy, baïn phaûi khai baùo phaùt bieåu Select coù meänh ñeà Where döïa treân caùc coät döõ lieäu cho pheùp tìm. Sau khi khaùch haøng choïn moät saûn phaåm treân trang keát quaû tìm kieám, toaøn boä thoâng tin chi tieát cuûa saûn phaåm ñoù caàn ñöôïc trình baøy. Nhöõng thoâng tin trình baøy tuyø thuoäc vaøo giaûi thuaät cuûa baïn, chaúng haïn, ngoaøi caùc thoâng tin chi tieát cuûa saûn phaåm, baïn trình baøy caùc thoâng tin lieân quan nhö saûn phaåm thay theá, saûn phaåm boå sung vaø nhöõng saûn phaåm maø ngöôøi söû duïng khaùc mua chuùng khi mua saûn phaåm naøy. Ñeå trình baøy thoâng tin chi tieát cuûa saûn phaåm, baïn coù theå khai baùo ñeå ñònh nghóa meänh ñeà Where nhö ví duï 12-1. Ví duï 12-1: Khai baùo meänh ñeà Where <% String strShow=""; String strWhere=" "; String id=request.getParameter("itemid"); if (id==null) { response.sendRedirect("ketqua.jsp"); } else { strWhere+= " and I.ItemID= '" + id + "'";
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
} %>
Hình 12-1: Chi tieát saûn phaåm Sau ñoù, baèng caùch ñònh nghóa phaùt bieåu Select nhö ví duï 12-2, baïn coù theå ñoïc döõ lieäu ñeå trình baøy nhö hình 12-1. Ví duï 12-2: Ñònh nghóa phaùt bieåu Select <% Connection cn; Statement smt; ResultSet rst; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); cn = DriverManager.getConnection(odbc,sysuser,syspwd); String strSQL="select ImagePathSmall,ItemName,AuthorName, ";
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
strSQL+="CustomerRating,ProName,ListPrice,SalesDiscount, "; strSQL+="SalesPrice, ItemStyle,Available,cast(Subjects "; strSQL+="As varchar(8000)) as Subj,cast(Descriptions "; strSQL+="As varchar(8000)) as Description"; strSQL+=" from tblitems I inner join tblitemdetails D on "; strSQL+=" I.ItemID=D.ItemID right join tblAuthors A "; strSQL+="on A.AuthorID=I.AuthID right join tblProductions "; strSQL+="P on P.ProID=I.ProID where Activate=1 " ; strSQL += " " + strWhere; smt = cn.createStatement(); try{
Baèng caùch söû duïng caùc phöông thöùc ñoïc döõ lieäu cuûa töøng coät, nhö ví duï 12-3. Ví duï 12-3: Chi tieát saûn phaåm " height="100"> &aid=<%="AuthID"%>"> <%Name=rst.getString("ItemName");%> <%=Name%> <strong><%=rst.getString("AuthorName")%> Đánh giá của khách hàng: <%CR=rst.getString("CustomerRating");%> .gif" width="64" height="12"> Nhà xuất bản: <%=rst.getString("ProName")%> Giá bìa: <%=rst.getString("ListPrice")%> Giảm giá: <%=rst.getString("SalesDiscount")%>% Giá bán: <%=rst.getString("SalesPrice")%> Kiểu bìa: <%=rst.getString("ItemStyle")%> <%=rst.getString("Available")%>
Sau ñoù, khai baùo nuùt cho pheùp ngöôøi söû duïng theâm saûn phaåm naøy vaøo gioû haøng cuøng vôùi caùc theû hidden lieân quan. Ví duï 12-4: Khai baùo nuùt ñeå theâm saûn phaåm vaøo gioû haøng
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Chaúng haïn, trong tröôøng hôïp naøy chuùng ta khai baùo theû hidden löu tröõ maõ vaø teân cuûa saûn phaåm ñang xem chi tieát la id, name vaø price. 2. SAÛN PHAÅM BOÅ SUNG
Saûn phaåm boå sung laø saûn phaåm ñöôïc söû duïng ñeå hoã trôï cho saûn phaåm tröôùc ñoù co hieäu quaû hoaøn thieän hôn. Chaúng haïn, khi baïn mua moät cuoán saùch Visual Basic 6.0 thì neân mua theâm cuoán saùch SQL Server bôû vì cuoán saùch SQL Server cung caáp kieán thöùc boå sung ñeå hoïc Visual Basic 6.0 toát hôn. Ñeå laøm ñieàu naøy, baïn khai baùo theâm coät GreateBuy löu tröõ maõ cuûa nhöõng saûn phaåm maø nhaø quaûn lyù cho laø coù theå boå sung cho saûn phaåm ñoù. Ví duï nhöõng coá saùch coù saûn phaåm boå sung laø nhö sau: select I.ItemID, ItemName, GreateBuy from tblItems I, tblItemDetails D Where I.ItemID=D.ItemID
Keát quaû trình baøy nhö hình 12-2 trong Query Analyzer nhö sau.
Hình 12-2: Saûn phaàm boå sung
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Baèng caùch laáy giaù trò trong coät GreateBuy cuûa töøng saûn phaåm, baïn coù theå khai baùo chuoãi Select öùng vôùi nhöõng saûn phaåm coù maõ naèm trong chuoãi giaù trò naøy: String GreateBuy=””; ... GreateBuy=rst.getString("GreateBuy"); ... strSQL="select I.ItemID, ItemName, GreateBuy "; strSQL+=" from tblItems I, tblItemDetails D strSQL+=" Where I.ItemID=D.ItemID"; strSQL+=" and I.ItemID in (" + GreateBuy + ")";
Sau ñoù duyeät taát caû saûn phaåm vaø trình baøy nhö hình 12-3.
Hình 12-3: Saûn phaåm boå sung
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Ñeå laøm ñieàu naøy, baïn khai baùo nhö sau: ... strSQL="select I.ItemID, ItemName, GreateBuy "; strSQL+=" from tblItems I, tblItemDetails D strSQL+=" Where I.ItemID=D.ItemID"; strSQL+=" and I.ItemID in (" + GreateBuy + ")"; rst=smt.executeQuery(strSQL); while(rst.next()) { id=rst.getString("ItemID"); %> <%=id%> "> <%=rst.getString("ItemName")%> <% } rst.close(); ...
3. SAÛN PHAÅM CUÛA KHAÙCH HAØNG THÖÔØNG MUA
Ngoaøi danh saùch caùc saûn phaåm boå sung, nhaø quaûn lyù neân cung caáp nhöõng cuoán saùch maø thuôøng khaùch haøng mua ñính keøm khi mua cuoán saùch hieän haønh. Ñeå laøm ñieàu naøy, baïn khai baùo coät döõ lieäu trong baûng tbltemDetails coù teân laø Relations. Baèng caùch khai baùo bieán Relations vaø laáy giaù trò töø coät naøy ra, sau ñoù khai baùo phaùt bieåu Select ñeå lieät keâ danh saùch caùc saûn phaåm naøy. String Relations=""; ... Relations=rst.getString("Relations"); ... strSQL="select I.ItemID, ItemName, GreateBuy "; strSQL+=" from tblItems I, tblItemDetails D Where " ; strSQL+=" I.ItemID=D.ItemID"; strSQL+=" and I.ItemID in (" + Relations + ")"; rst=smt.executeQuery(strSQL);
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Keát quaû trình baøy nhö hình 12-4.
Hình 12-4: Danh saûn phaåm lieân quan khaùc Ñeå laøm ñieàu naøy, baïn khai baùo ñoaïn chöông trình nhö sa: <% strSQL="select I.ItemID, ItemName, GreateBuy "; strSQL+=" from tblItems I, tblItemDetails D "; strSQL+=" Where I.ItemID=D.ItemID"; strSQL+=" and I.ItemID in (" + Relations + ")"; rst=smt.executeQuery(strSQL); while(rst.next()) { id=rst.getString("ItemID"); %> <%=id%>
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
"> <%=rst.getString("ItemName")%> <% } rst.close(); 4. KEÁT LUAÄN
Chuùng ta vöøa taäp trung tìm hieåu caùch caøi ñaët gioû haøng, cho pheùp ngöôøi söû duïng theâm, caäp nhaät soá löôïng vaø huyû gioû haøng baèng JSP.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Moân hoïc: Java Server Pages
BAØI 13: GIOÛ HAØNG VAØ CHI TIEÁT SAÛN PHAÅM Baát kyø öùng duïng thöông maïi ñieån töû naøo coù baùn haøng qua maïng ñeàu coù chöùc naêng gioû haøng, gioû haøng giuùp cho ngöôøi söû duïng löu tröõ saûn phaåm trong khi ñang choïn nhöõng saûn phaåm khaùc treân maïng. Sau khi keát thuùc quaù trình theâm vaøo gioû haøng, ngöôøi söû duïng coù theå xem, xoaù hay caäp nhaäp soá löôïng cuûa gioû haøng. Ngoaøi ra, ngöôøi söû duïng quyeát ñònh ñaët haøng sau khi xem xeùt gioû haøng. Caùc vaán ñeà chính seõ ñöôïc ñeà caäp: 9 Xaây döïng chöùc naêng gioû haøng 9 Caäp nhaät, xoaù gioû haøng 9 Ñaët haøng 1. XAÂY DÖÏNG GIOÛ HAØNG
Sau khi khaùch haøng choïn moät saûn phaåm treân trang keát quaû tìm kieám, toaøn boä thoâng tin chi tieát cuûa saûn phaåm ñoù caàn ñöôïc trình baøy.
Hình 13-1: Chi tieát saûn phaåm
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Ñeå xaây döïng gioû haøng trong JSP baïn coù theå söû duïng nhieàu caùch khaùc nhau nhö vector, session, cô sôû döõ lieäu, cookie. Tuy nhieân, ñoái vôùi baøi hoïc naøy chuùng ta söû duïng caùch duøng session keát hôïp vôùi maûng hai hcieàu ñeå xaây döïng vaø quaûn lyù gioû haøng trong JSP. Khi ngöôøi söû duïng choïn nuùt “Gio Hang” trong trang chi tieát saûn phaåm, thì trang them.jsp ñöôïc trieäu goïi. Trang naøy laáy 3 giaù trò chính khai baùo hidden trong trang chi tieát laø id, name,price vaø update ñeå xaây döïng gioû haøng. String String String String
id=getVal(request.getParameter("id"),""); name=getVal(request.getParameter("name"),""); price=getVal(request.getParameter("price"),"0"); update=getVal(request.getParameter("update"),"");
Baèng caùch söû duïng maûng döõ lieäu hai chieàu goàm toái ña 10 saûn phaåm vaø moãi saûn phaåm chuùng ta löu tröõ 4 thoâng tin chính laø maõ, teân, soá löôïng vaø ñôn giaù cuûa saûn phaåm. String cart[][] =new String[10][4]; int cartno=0;
Trong ñoù, bieán cart laø maûng löu tröõ thoâng tin cuûa saûn phaåm, cartno laø soá saûn phaåm coù trong maûng cart. Trong tröôøng hôïp laàn ñaàu tieân ngöôøi söû duïng theâm saûn phaåm vaøo gioû haøng, chuùng ta döïa vaøo bieán session coù teân session.getValue("cartno") vôùi giaù trò laø 0 thì theâm saûn phaåm vaøo gioû haøng taïi phaàn töû thöù 0, coøn caùc phaàn töû coøn laïi chuùng ta khôûi taïo giaù trò laø roãng nhö sau: }else { if(update.equals("")) { cart[0][0]=id; cart[0][1]=name; cart[0][2]="1"; cart[0][3]=price; for (int j=cartno+1;j
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Neáu saûn phaåm ñöôïc theâm vaøo trong laàn keá tieáp, chuùng ta laáy giaù trò töø bieán session coù teân cart vaø cartno, sau ñoù eùp kieåu sang maûng vaø kieåm tra neáu maõ saûn phaåm chöa toàn taïi thì theâm vaøo. if(cartno<=9) { boolean check=false; for (int j=0;j
Löu yù raèng, chæ cho pheùp theâm vaøo gioû haøng toái ña 10 saûn phaåm, chính vì vaäy chuùng ta chæ theâm khi giaù trò cuûa bieán cartno nhoû hoaëc baèng 9. Sau ñoù, chuùng ta trình baøy danh saùch nhöõng saûn phaåm ñaõ coù trong gioû haøng baèng caùch söû duïng voøng laëp for nhö sau:
Keát quaû trình baøy nhö hình 13-2.
Hình 13-2: Danh saûn phaåm trong gioû haøng Löu yù: Trong tröôøng hôïp khoâng coù saûn phaåm ñöôïc theâm vaøo gioû haøng hoaëc tröôøng hôïp caäp nhaät thì trang timkiem.jsp seõ ñöôïc trieäu goïi. 2. CAÄP NHAÄT GIOÛ HAØNG
Maëc ñònh cuûa moãi saûn phaåm khi theâm vaøo gioû haøng laø 1, sau khi trinh baøy nhö hình 13-2, baïn khai baùo nuùt Caäp Nhaät cho pheùp ngöôøi söû duïng thay ñoåi soá löôïng trong gioû haøng cho moãi saûn phaåm. Ñeå laøm ñieàu naøy, tröôùc tieân khai baùo theû input coù teân laø chk vaø maõ saûn phaåm nhö sau: ... Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Sau ñoù, baïn khai baùo bieán update ñeå laáy giaù trò cuûa nuùt Update khi ngöôøi söû duïng submit ñeå phaân bieät tröôøng hôïp caäp nhaät soá löôïng trong gioû haøng vôùi tröôøng hôïp khi theâm saûn phaåm vaøo gioû haøng töø trang chi tieát. String update=getVal(request.getParameter("update"),"");
Trong tröôøng hôïp naøy, döïa vaøo maõ saûn phaåm trong gioø haøng, chuùng ta caäp nhaät sl nhö sau: /*tröôøng hôïp theâm môùi töø trang chi tieát*/ else { for (int j=0;j
Löu yù raèng, chuùng ta chæ duyeät soá phaàn töû töø 0 ñeán soá phaàn töû ñang coù, vaø caäp nhaät phaàn töû soá löôïng baèng sôù löôïng töø maøn hình. Ngoaøi ra, baïn coù theå khai baùo ñoaïn Javascript ñeå kieåm soaùt soá nhaäp hôïp leä treân töøng phaàn soá löôïng cuûa saûn phaåm. Chaúng haïn, chuùng ta thay ñoåi soá löôïng cuûa saûn phaåm thöù nhaát leân 2 vaø saûn phaåm thöù hai thaønh 3, keát quaû trình baøy nhö hình 13-3.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 12-3: Caäp nhaät soá löôïng 3. HUYÛ GIOÛ HAØNG
Ñeå huyû gioø haøng, baïn söû duïng phöông thöùc removeAttribute ñeå huyû hai ñoái töôïng session coù teân cart vaø cartno. Ñeå laøm ñieàu naøy, baïn khai baùo trang xoa.jsp ñöôïc trieäu goïi, baïn khai baùo nhö sau: <%
session.removeAttribute("cart"); session.removeAttribute("cartno");%>
Sau khi xoaù gioû haøng, thoâng baùo xuaát hieän nhö hình 13-4.
Phaïm Höõu Khang
[email protected]
COMPUTER LEARNING CENTER
WWW.HUUKHANG.COM
Hình 13-4: Xoaù gioû haøng 4. KEÁT LUAÄN
Chuùng ta vöøa taäp trung tìm hieåu caùch caøi ñaët gioû haøng, cho pheùp ngöôøi söû duïng theâm, caäp nhaät soá löôïng vaø huyû gioû haøng baèng JSP.
Phaïm Höõu Khang
[email protected]
Related Documents