Quản lý công việc trên Website

Ñaây laø öùng duïng ñoäc laäp neàn neân noù coù theå chaïy treân caùc heä ñieàu haønh khaùc nhau nhö caùc heä thoáng Windows, Unix, . Do ñoù chuùng ta coù theå caøi ñaët heä ñieàu haønh thuoäc moät trong caùc heä thoáng treân vaø caùc phaàn meàm sau: - Jakarta-Tomcat laø moät Servlet/JSP container. Thaät ra theo lyù thuyeát, öùng duïng naøy coù theå chaïy treân baát kyø container hay web server naøo coù hoå trôï Servlet/JSP nhöng chuùng toâi chöa thöû nghieäm treân container khaùc Jakarta-Tomcat 3.1. - JDK 1.2 trôû leân. - MySQL Server 3.23.27 baûn beta. Hieän nay ñaõ ra baûn 4.0. - JDBC Driver loaïi boán hoå trôï cho MySQL Server: mm.msql-2.0.4. - Xalan vaø Xerces ñeå chuyeån XML thaønh HTML baèng caùch söû duïng XSLT. - Moät trong caùc web browser sau: Netscape, Inernet Explorer, Opera taát caû töø 4.0 trôû leân. ÖÙng duïng naøy ñaõ thöû nghieäm treân caùc web browser naøy. - VietKey hoaëc baát kyø boä goõ tieáng vieät naøo khaùc.

doc92 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2457 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Quản lý công việc trên Website, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
. Code 15: Java file package com.legiang.bean; import java .util.*; public class CurrentTimeBean { /*Data members*/ private int hours; private int minutes; /* Methods */ Code 15: Java file (tieáp theo) public CurrentTimeBean() { Date now = new Date(); this.hours = now.getHours(); this.minutes = now.getMinutes(); } public int getHours() { return hours; } public int getMinutes() { return minutes(); } } Code 16: JSP file <jsp:useBean id="time" class="com.legiang.bean.CurrentTimeBean"/> It is now minutes past the hour. Thuoäc tính mang giaù trò boolean. Code 17: Java file package com.legiang.bean; public class LogicBean { /*Data members*/ private boolean authorized; /*Methods*/ public LogicBean() { this.authorized = false; } public void setAuthorized(boolean authorized) { this.authorized = authorized; } public boolean isAuthorized() { Code 17: Java file (tieáp theo) return authorized; } } Code 18: JSP file <jsp:useBean id="logic" class="com.legiang.bean.LogicBean"/> Do you authorize? Answer: Thuoäc tính mang giaù trò maûng. Ví duï naøy seõ xaây döïng moät component maø coù theå thöïc hieän caùc tính toaùn tónh treân moät daõy soá. Code 19: Java file package com.legiang.bean; import java.util.*; public class StatBean { /*Data members*/ private double[] numbers; /*Methods*/ public StatBean() { numbers = new double[0]; } public double getAverage() { double sum = this.getSum(); if (sum == 0) return 0; else return sum/numbers.length; } public double getSum() { Code 19: Java file (tieáp theo) double sum = 0; for (int i=0; i < numbers.length; i++) sum += numbers[i]; return sum; } public double[] getNumbers() { return numbers; } public double getNumbers(int index) { return numbers[index]; } public void setNumbers(double[] numbers) { this.numbers = numbers; } public void setNumbers(int index, double value) { numbers[index] = value; } public int getNumbersSize() { return numbers.length; } } Code 20: JSP file <% double[] mynums = {100, 250, 150, 50, 450}; stat.setNumbers(mynums); %> The average of <% double[] numbers = stat.getNumbers(); for (int i=0; i < numbers.length; i++) { if (i != numbers.length) out.print(numbers[i] + ","); else Code 20: Java file (tieáp theo) out.println("" + numbers[i]); } %> is equal to Ngoaøi caùc loaïi thuoäc tính treân, Java coøn cung caáp moät soá thuoäc tính naâng cao khaùc duøng cho caùc Bean ñoà hoaï. Caùc giao tieáp boå trôï cho Bean. Trong khi ñieàu naøy khoâng phaûi laø yeâu caàu ñaëc bieät thì coù moät soá giao tieáp cho pheùp chuùng ta caøi ñaët vaøo Beans. Caùc giao tieáp naøy coù theå ñöôïc duøng ñeå môû roäng tính naêng caùc Bean cuûa chuùng ta ñoái vôùi caùc tình huoáng khaùc nhau. Giao tieáp BeanInfo Chuùng ta ñaõ bieát veà cô cheá töông phaûn (reflection) trong muïc tröôùc, nhöng coù phöông phaùp khaùc maø moät lôùp Bean coù theå baùo cho Bean container (nhö JSP container) bieát veà caùc thuoäc tính cuûa noù baèng caùch caøi ñaët giao tieáp BeanInfo. Giao tieáp BeanInfo cho pheùp chuùng ta taïo ra moät lôùp ñoàng haønh vôùi Bean cuûa chuùng ta maø ñònh nghóa caùc thuoäc tính vaø caùc caáp ñoä truy caäp cuûa noù. Giao tieáp coù theå ñöôïc duøng ñeå thích öùng vôùi caùc lôùp Java ñaõ coù ñoái vôùi vieäc söû duïng cuûa Bean maø khoâng caàn thay ñoåi giao tieáp ñaõ taïo. Noù cuõng ñöôïc söû duïng ñeå che daáu caùc thuoäc tính naøo ñöôïc truy caäp thöôøng xuyeân töø client, vì thænh thoaûng cô cheá reflection chuaån cuûa Java coù theå phôi baøy nhieàu thoâng tin maø chuùng ta laïi khoâng muoán nhö theá. Ñeå taïo lôùp BeanInfo chuùng ta chæ caàn ñaët teân lôùp cuøng vôùi tieáp vò ngöõ BeanInfo (nhö SimpleBeanBeanInfo) vaø caøi ñaët giao tieáp java.beans.BeanInfo. Quy taéc ñaët teân naøy laø caùch baùo cho Bean container (nhö JSP container) bieát ñeå xaùc ñònh lôùp BeanInfo thích hôïp cho Bean chuùng ta. Giao tieáp Serializable JavaBeans sau khi ñöôïc thieát keá vaø ñem vaøo söû duïng ngöôøi duøng seõ tuyø yù thay ñoåi caùc thuoäc tính maø Bean cung caáp. Tuy nhieân khi chaám döùt chöông trình thì caùc thuoäc tính naøy cuõng maát ñi. Laàn sau khi duøng caùc thuoäc tính naøy phaûi ñöôïc khôûi taïo vaø ñaët laïi giaù trò môùi. Nhö vaäy chu trình soáng cuûa Bean chæ haïn heïp trong quaù trình hoaït ñoäng cuûa chöông trình, khoâng söû duïng laïi sau naøy ñöôïc. Java cung caáp moät khaû naêng löu laïi caùc ñoái töôïng JavaBeans leân ñóa baèng cô cheá Serializable. Khi moät ñoái töôïng hay Bean ñöôïc löu xuoáng taäp tin nhò phaân thì taát caû bieán hay caùc ñoái töôïng con naèm beân trong lôùp cha ñeàu ñöôïc löu theo. Moät soá server hoå trôï cô cheá persistent session baèng caùch ghi baát kyø döõ lieäu naøo cuûa session vaøo ñóa giöõa caùc laàn server ngöøng hoaït ñoäng. Khi server hoaït ñoâng trôû laïi thì döõ lieäu ñöôïc serialization ñöôïc phuïc hoài trôû laïi. Moät nguyeân nhaân töông töï ñöa vaøo caùc server ñeå hoå trôï cho vieäc nhoùm caùc session laïi trong caùc moâi tröôøng truyeàn thoâng chaäm chaïp (do hoaït ñoäng nhieàu, ...). Nhieàu server söû duïng cô cheá serialization ñeå sao laëp döõ lieäu cuûa session giöõa caùc web server trong nhoùm. Neáu Beans cuûa chuùng ta khoâng caøi ñaët giao tieáp Serializable thì server khoâng theå löu tröõ hoaëc chuyeån Beans cuûa chuùng ta trong caùc tình huoáng naøy. Giao tieáp HttpSessionBindingListener Vieäc caøi ñaët giao tieáp HttpSessionBindingListener cuûa Servlet API trong Beans chuùng ta seõ cho pheùp caùc theå hieän nhaän ñöôïc thoâng baùo cuûa caùc söï kieän session. Giao tieáp naøy khaù ñôn giaûn, chæ caàn ñònh nghóa hai phöông thöùc: public void valueBound(HttpSessionBindingListener event) public void valueUnBound(HttpSessionBindingListener event) Phöông thöùc valueBound() ñöôïc goïi khi Bean ñöôïc löu tröõ trong session cuûa ngöôøi duøng. Trong tröôøng hôïp cuûa JSP, ñieàu naøy seõ thöôøng xaûy ra ngay khi Bean ñöôïc khôûi taïo bôûi tag maø coù xaùc ñònh phaïm vi “session” trong thuoäc tính scope. Phöông thöùc valueUnBound() ñöôïc goïi khi ñoái töôïng bò xoaù khoûi session. Coù vaøi tình huoáng laøm cho Bean cuûa chuùng ta seõ bò xoaù khoûi session. Khi JSP container döï ñònh chaám döùt moät session cuûa ngöôøi duøng vì hoaït ñoäng keùm, tröôùc tieân JSP container xoaù töøng muïc döõ lieäu trong session, roài kích hoaït valueUnBound(). Thöù hai, Söï kieän naøy seõ ñöôïc kích hoaït neáu servlet, scriptlet, hay ñoaïn maõ Java naøo ñoù xoaù boû Bean khoûi session vì moät soá lyù nguyeân nhaân. Moãi söï kieän keát hôïp vôùi giao tieáp HttpSessionBindingListener thì coù theå söû duïng ñeå ñaït ñöôïc söï truy caäp vaøo ñoái töôïng session. Vieäc caøi ñaët giao tieáp naøy seõ cho pheùp chuùng ta taùc ñoäng trôû laïi caùc söï kieän cuûa session. Ví duï ñoùng caùc noái keát khoâng caàn thieát, taïo caùc giao taùc hoaëc thöïc hieän caùc hoaït ñoäng baûo trì khaùc. Chöông III : TAG LIBRARIES Tag library laø gì ? Trong kyõ thuaät JavaServer Pages, caùc action laø caùc element coù theå taïo ra vaø truy caäp vaøo caùc ñoái töôïng cuûa ngoân ngöõ laäp trình vaø xuaát vaøo nhöõng luoàng xuaát chuaån nhö maøn hình, maùy in,… JSP ñònh nghóa ra chín action chuaån maø phaûi ñöôïc cung caáp bôûi baát kyø engine naøo. Ngoaøi caùc action chuaån naøy , töø JSP v1.1 trôû leân cho pheùp xaây döïng vaø phaùt trieån caùc module coù theå duøng laïi ñöôïc goïi laø custom action. Trong trang JSP, moät custom action ñöôïc trieäu goïi baèng caùch duøng custom tag . Moät tag library laø moät taäp caùc custom tag. Caùc öùng duïng coù theå ñöôïc thöïc hieän baèng custom action bao goàm xöû lyù form, truy caäp cô sôû döõ lieäu vaø caùc dòch vuï ôû möùc xí nghieäp khaùc nhö email, quaûn lyù thö muïc vaø ñieàu khieån luoàng. Tröôùc khi custom action xuaát hieän thì JSP coù moät cô cheá duøng laïi maõ laø caùc thaønh phaàn JavaBean keát hôïp vôùi scriplet. Tuy nhieân vôùi JavaBean coù moät baát lôïi laø xaây döïng phöùc taïp vaø khoù quaûn lyù. Caùc custom action laøm dòu ñöôïc vaán ñeà naøy baèng caùch mang laïi caùc lôïi ích döôùi goùc ñoä khaùc cuûa vieäc module hoaù tính söû duïng laïi cho caùc trang JSP. Caùc custom action goùi goïn laïi caùc taùc vuï ñeå chuùng coù theå ñöôïc duøng laïi trong hôn moät öùng duïng vaø taêng hieäu xuaát baèng caùch khuyeán khích phaân chia coâng vieäc giöõa caùc nhaø phaùt trieån thö vieän vaø ngöôøi söû duïng thö vieän. Caùc tag library cuûa JSP ñöôïc taïo bôûi caùc nhaø phaùt trieån, laø ngöôøi thaønh thaïo ngoân ngöõ laäp trình Java vaø laø chuyeân gia trong giao tieáp vôùi cô sôû döõ lieäu vaø caùc dòch vuï khaùc. Caùc tag library ñöôïc duøng bôûi caùc nhaø thieát keá öùng duïng web, laø ngöôøi coù theå chæ taäp trung vaøo caùch thöùc hieån thò hôn laø quan taâm ñeán caùch truy caäp cô sôû döõ lieäu vaø caùc dòch vuï khaùc. Moät soá ñaët tính cuûa caùc custom tag laø: Chuùng coù theå ñöôïc tuyø bieán thoâng qua caùc thuoäc tính töø moät trang ñang goïi. Chuùng ñöôïc pheùp truy caäp vaøo taát caû ñoái töôïng coù saün trong trang JSP. Chuùng coù theå thay ñoåi lôøi ñaùp maø ñöôïc phaùt sinh bôûi moät trang ñang goïi. Chuùng coù theå ñöôïc loàng vôùi nhau vaø cho pheùp caùc töông taùc phöùc taïp trong moät trang. Chuùng coù theå truyeàn thoâng vôùi nhau. Chuùng ta coù theå taïo vaø khôûi taïo moät thaønh phaàn JavaBean, taïo moät bieán tham chieáu ñeán Bean ñoù trong moät tag vaø sau ñoù söû duïng Bean naøy trong tag khaùc. Caùch duøng caùc tags trong JSP. Phaàn naøy trình baøy caùch thöùc maø taùc giaû cuûa trang web söû duïng tag library trong JSP vaø giôùi thieäu caùc loaïi tag khaùc nhau. Caùc ví duï trong phaàn naøy seõ ñöôïc ñònh nghóa trong phaàn III. Khai baùo caùc tag library. Trang JSP seõ söû duïng caùc tag ñöôïc ñònh nghóa trong moät tag library baèng caùch ñöa vaøo taglib directive trong trang tröôùc baát kyø custom tag ñöôïc söû duïng: Thuoäc tính uri tham chieáu tôùi URI ñoù laø ñònh danh duy nhaát cho tag library. URI coù theå laø URI töông ñoái hay tuyeät ñoái. Neáu URI töông ñoái thì noù phaûi ñöôïc aùnh xaï ñeán moät URI tuyeät ñoái trong taglib element cuûa boä moâ taû trieån khai öùng duïng Web, taäp tin caáu hình naøy cuøng vôùi öùng duïng Web ñöôïc phaùt trieån theo baûn ñaët taû Java Servlet vaø JavaServer Pages. Thuoäc tính prefix ñònh nghóa moät tieáp ñaàu ngöõ ñeå phaân bieät vôùi caùc tag library khaùc, do ñoù thuoäc tính naøy giaûi quyeát ñöôïc vaán ñeà xung ñoät veà caùc teân tag. Caùc loaïi tag. Nhöõng custom action ñöôïc dieãn ñaït baèng cuù phaùp XML. Chuùng coù start tag, noäi dung vaø end tag: body Moät tag maø khoâng coù noäi dung ñöôïc bieåu dieãn nhö sau: Caùc tag ñôn giaûn. Moät tag ñôn giaûn sau trieäu goïi moät action vaø xuaát ra lôøi chaøo “Hello World.”. Caùc tag coù thuoäc tính. Moät start tag cuûa custom action coù theå chöùa caùc thuoäc tính döôùi daïng attr = ‘value’. Caùc thuoäc tính naøy tuyø bieán caùc tham soá duøng trong caùc phöông thöùc cuûa moät lôùp java. Caùc thuoäc tính coù theå ñöôïc gaùn moät hay nhieàu tham soá trong moät ñoái töôïng request hoaëc töø moät haèng chuoåi. Chæ coù caùc kieåu thuoäc tính trong baûng sau môùi coù theå ñöôïc gaùn töø caùc giaù trò tham soá cuûa request vaø cuûa caùc haèng chuoåi Kieåu thuoäc tính Phöông thöùc valueOf chuyeån chuoåi boolean or Boolean java.lang.Boolean.valueOf(String) byte or Byte java.lang.Byte.valueOf(String) char or Character java.lang.Character.valueOf(String) double or Double java.lang.Double.valueOf(String) int or Integer java.lang.Integer.valueOf(String) float or Float java.lang.Float.valueOf(String) long or Long java.lang.Long.valueOf(String) Giaù trò thuoäc tính coù daïng ñöôïc tính vaøo thôøi gian yeâu caàu. Giaù trò cuûa bieåu thöùc tuyø thuoäc vaøo kieåu thuoäc tính ñöôïc xaùc ñònh trong ñoái töôïng caøi ñaët tag coøn goïi laø tag handler (tag handler trong phaàn ñònh nghóa caùc tag). Caùc tag coù noäi dung. Tag coù theå bao haøm caùc custom tag, scripting element, HTML, vaø noäi dung naèm giöõa start tag vaø end tag. Trong ví duï sau seõ ñöa ra thoâng tin “lôøi chaøo” ñöôïc cung caáp trong thaân tag thay vì trong thuoäc tính cuûa noù. DHBK Ha Noi Caùc tag ñònh nghóa caùc bieán kòch baûn. Moät tag coù theå ñònh nghóa ra moät bieán maø bieán naøy ñöôïc duøng trong cuøng moät trang. Ví duï sau ñaây minh hoaï caùch thöùc ñònh nghóa vaø söû duïng moät bieán chöùa moät ñoái töôïng ñöôïc traû veà. Keát hôïp caùc tag. Caùc tag keát hôïp vôùi nhau baèng caùc phöông phaùp cuûa caùc ñoái töôïng duøng chung. Trong ví duï sau, tag1 taïo moät ñoái töôïng coù teân laø obj1, sau ñoù ñöôïc söû duïng laïi bôûi tag2. Qui taéc naøy ñöôïc khuyeán khích bôûi baûng ñaët taû JSP, moät tag taïo ra moät teân vôùi thuoäc tính id vaø tag thöù hai coù thuoäc tính name ñeå duøng laïi teân naøy. Trong ví duï keát tieáp, duøng caùc tag loàng nhau töông töï nhö trong XML vaø HTML. Ñònh nghóa caùc tag. Ñeå söû duïng caùc custom tag trong trang JSP, chuùng ta caàn phaûi ñònh nghóa ba thaønh phaàn rieâng bieät: Phaùt trieån tag handler vaø caùc lôùp trôï giuùp cho tag. Khai baùo tag trong boä moâ taû thö vieän tag (tag library descriptor) döôùi daïng taäp tin XML. Taïo taäp tin JSP coù söû duïng custom tag. Phaàn naøy moâ taû caùc thuoäc tính cuûa tag handler vaø caùc boä moâ taû thö vieän tag, cuõng trình baøy caùch phaùt trieån tag handler vaø caùc element cuûa boä moâ taû thö vieän ñoái vôùi moãi loaïi tag ñöôïc giôùi thieäu trong phaàn tröôùc. Tag handler. Tag handler laø moät ñoái töôïng ñöôïc goïi leân bôûi JSP container ñeå ñònh trò cho custom tag trong xuoát quaù trình thöïc thi cuûa trang JSP coù tham chieáu tôùi moät tag naøo ñoù. Caùc phöông thöùc cuûa tag handler ñöôïc goïi bôûi lôùp caøi ñaët trang JSP vaøo caùc thôøi ñieåm khaùc nhau trong xuoát quaù trình ñònh trò cho tag. Khi gaëp start tag cuûa custom tag thì lôùp caøi ñaët trang JSP goïi caùc phöông thöùc ñeå khôûi taïo caùc giaù trò thích hôïp vaø sau ñoù trieäu goïi phöông thöùc doStartTag. Khi gaëp end tag cuûa custom tag thì phöông thöùc doEndtag ñöôïc goïi. Tuyø theo muïc ñích cuûa töøng custom tag maø chuùng ta xöû lyù caùc phöông thöùc thích hôïp trong töøng giao tieáp caøi ñaët. Baûng sau moâ taû caùc loaïi tag coù caùc phöông thöùc töông öùng ñeå xöû lyù. Loaïi tag handler Caùc phöông thöùc caàn xöû lyù Simple doStartTag, doEndTag, release Attributes doStartTag, doEndTag, set/getAttribute1...N Body, No Interaction doStartTag, doEndTag, release Body, Interaction doStartTag, doEndTag, release, doInitBody, doAfterBody Tag handler coù söï truy caäp vaøo API maø cho pheùp noù truyeàn thoâng vôùi trang JSP. Con ñöôøng vaøo API naøy laø ñoái töôïng pageContext, qua ñoù tag handler coù theå truy caäp vaøo moïi ñoái töôïng ngaàm ñònh khaùc nhö request, session, application töø trang JSP. Caùc ñoái töôïng ngaàm ñònh coù theå coù caùc thuoäc tính keát hôïp vôùi chuùng. Caùc thuoäc tính nhö theá ñöôïc truy caäp qua caùc phöông thöùc [get/set]Attribute thích hôïp. Neáu tag ñöôïc loàng nhau thì tag handler cuõng coù theå truy caäp handler naøy (ñöôïc goïi laø parent) cuøng vôùi toaøn boä tag. Caùc tag handler phaûi ñöôïc caøi ñaët hai giao tieáp hoaëc Tag hoaëc BodyTag. Caùc giao tieáp coù theå ñöôïc duøng ñeå laáy ñoái töôïng Java ñaõ toàn taïi vaø taïo ra moät tag handler. Ñeå ñònh nghóa caùc tag handler môùi chuùng ta coù theå duøng caùc lôùp TagSupport vaø BodyTagSupport nhö laø caùc lôùp cô sôû (xem III. 4. Tag handler ñöôïc trieäu goïi nhö theá naøo?). Tag library descriptor. Tag library descriptor (TLD) laø moät taøi lieäu XML duøng ñeå moâ taû thö vieän tag. Moät TLD chöùa toaøn boä thoâng tin veà thö vieän vaø moãi tag chöùa trong thö vieän. JSP container vaø caùc coâng cuï phaùt trieån JSP söû duïng TLD ñeå xaùc ñònh caùc tag. Caùc element cuûa TLD sau duøng ñeå ñònh nghóa thö vieän tag: Code 21: HelloWorldTag.java <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library1.1//EN" ""> ... ... Tag element yeâu caàu ñoái vôùi moïi tag ñeå xaùc ñònh moät lôùp coù trong thö vieän tag. classname ... Caùc ví duï. Ñeå taïo caùc custom tag chuùng ta caàn hai import goùi cô baûn: import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; // tag extension Caùc tag ñôn giaûn. Tag handler Ñoái vôùi caùc tag ñôn giaûn chæ caàn caøi ñaët hai phöông thöùc cuûa giao tieáp Tag laø doStartTag vaø doEndTag. doStartTag ñöôïc trieäu goïi khi JSP container gaëp start tag, noù traû veà SKIP_BODY vì thaân tag chaúng coù noäi dung naøo caû. Ngöôïc laïi khi gaëp end tag thì JSP container goïi doEndTag, traû veà EVAL_PAGE neáu phaàn coøn laïi cuûa trang caàn phaûi ñònh trò, neáu khoâng traû veà SKIP_PAGE. Lôùp tag handler seõ ñöôïc caøi ñaët nhö sau: Code 22: HelloWorldTag.java public HelloWorldTag extends TagSupport { public int doStartTag() throws JspException { try { pageContext.getOut().print("Hello World."); } catch (Exception ex) { throw new JspTagException("HelloWorldTag: " + e.getMessage()); } return SKIP_BODY; } public int doEndTag() { return EVAL_PAGE; } } TLD element Caùc tag maø khoâng coù thaân phaûi khai baùo noäi dung cuûa thaân laø roãng. Code 23: helloworld.tld <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" ""> <!--Neáu coù JSP v1.2 thì ñoåi laïi ""--> 1.0 1.1 legiang A tag library from authors at helloWorld com.legiang.HelloWorldTag Ví duï vôùi tag ñôn giaûn nhaát EMPTY JSP page Code 24: hello.jsp <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> Code 24: hello.jsp (tieáp theo) Caùc tag coù thuoäc tính. Ñònh nghóa caùc thuoäc tính trong tag handler. Ñoái vôùi moãi thuoäc tínch cuûa tag, chuùng ta phaûi ñònh nghóa theo phong caùch cuûa JavaBean, töùc laø phaûi coù phöông thöùc get/set[Attribute] trong tag handler. Haõy nhôù raèng, neáu thuoäc tính ñöôïc ñaët teân laø id vaø tag handler keát thöøa töø lôùp TagSupport thì chuùng ta khoâng caàn ñònh nghóa caùc phöông thöùc get/set[Attribute] bôûi vì nhöõng thöù naøy ñaõ ñöôïc TagSupport laøm saün. Lôùp tag handler seõ ñöôïc caøi ñaët nhö sau: Code 25: HelloWorldTag.java (söõa laïi trong Code 22 ) public HelloWorldTag extends TagSupport { private String name = “World.”; public void setName(String name) { this.name = name; } public int doStartTag() throws JspException { try { pageContext.getOut().print("Hello " + name); } catch (Exception ex) { throw new JspTagException("HelloWorldTag: " + e.getMessage()); Code 25: HelloWorldTag.java (söõa laïi trong Code 22) (tieáp theo) } return SKIP_BODY; } public int doEndTag() { return EVAL_PAGE; } } TLD element Ñoái vôùi moãi thuoäc tính chuùng ta phaûi xaùc ñònh thuoäc tính naøo ñöôïc yeâu caàu (baét buoäc) vaø giaù trò naøo coù theå ñöôïc xaùc ñònh bôûi bieåu thöùc. Neáu thuoäc tính cuûa tag khoâng baét buoäc thì tag handler neân cung aáp giaù trò maät ñònh. TLD cho tag handler ôû treân nhö sau: Code 26: TLD file (overwrite helloworld.tld) ... helloWorld com.legiang.HelloWorldTag Ví duï vôùi tag ñôn giaûn nhaát name false false EMPTY JSP page Code 27: paramtag.jsp <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> Code 27: paramtag.jsp (tieáp theo) Tag With Attributes Caùc tag coù noäi dung. Tag handler Tag handler cho loaïi naøy ñöôïc caøi ñaët khaùc nhau phuï thuoäc vaøo tag handler coù töông taùc vôùi thaân hay khoâng. Töông taùc coù nghóa laø tag handler ñoïc hoaëc söõa ñoåi noäi dung cuûa thaân hoaëc taïo ra giaù trò laëp laïi cho thaân tag. Caùc tag coù töông taùc vôùi phaàn thaân: neáu tag handler khoâng caàn töông taùc vôùi phaàn thaàn thì tag handler naøy neân caøi ñaët giao tieáp Tag hoaëc daãn xuaát töø lôùp TagSupport. Neáu thaân cuûa tag caàn ñònh trò thì doStartTag caàn phaûi traû veà EVAL_BODY_INCLUDE, ngöôïc laïi traû veà SKIP_BODY. Caùc tag coù töông taùc vôùi phaàn thaân: tag handler phaûi caøi ñaët giao tieáp BodyTag hoaëc BodyTagSupport, thöôøng caøi ñaët phöông thöùc doInitBody vaø doAfterBody. Hai phöông thöùc naøy töông taùc vôùi noäi dung cuûa thaân ñöôïc chuyeån vaøo tag handler bôûi lôùp caøi ñaët trang JSP. Ñoái töôïng BodyContent cung caáp vaøi phöông thöùc ñeå ñoïc vaø ghi noäi dung cuûa noù. Tag handler söû duïng caùc phöông thöùc getString, getReader cuûa BodyContent ñeå trích thoâng tin töø phaàn thaân vaø phöông thöùc writeOut(out) ñeå ghi caùc noäi dung cuûa thaân vaøo luoàng xuaát. Phöông thöùc getPreviousOut thöôøng ñöôïc söû duïng ñeå baûo ñaûm raèng keát quaû traû veà cuûa tag handler thì coù saún ñoái vôùi toaøn boä tag handler. Caùc phöông thöùc chính ñöôïc duøng trong loaïi tag naøy: doInitBody: ñöôïc goïi sau khi noäi dung cuûa thaân ñöôïc gaùn nhöng tröôùc khi ñöôïc ñònh giaù trò, thöôøng ñöôïc duøng ñeå thöïc hieän khôûi taïo giaù trò maø tuyø thuoäc vaøo noäi dung cuûa thaân. doAfterBody: ñöôïc goïi sau khi noäi dung cuûa thaân ñöôïc ñònh trò. Neáu thaân ñöôïc trò nhieàu laàn laëp ñi laëp laïi neân traû veà EVAL_BODY_TAG, ngöôïc laïi traû veà SKIP_BODY. release: tag handler neân xaùc laäp laïi traïng thaùi cuûa noù vaø giaûi phoùng caùc taøi nguyeân daønh rieâng baèng phöông thöùc release. Ví duï sau ñoïc noäi dung cuûa thaân, chuyeån noäi dung ñoù, vaø sau ñoù ghi laïi nhöõng thay ñoåi vaøo luoàng xuaát. Code 28: TransformTag.java public class TransformTag extends BodyTagSupport { public int doAfterBody() throws JspTagException { BodyContent bc = getBodyContent(); String body = bc.getString(); bc.clearBody(); try { getPreviousOut().print(body.transform()); } catch (IOException e) { throw new JspTagException("TransformTag: " + e.getMessage()); } return SKIP_BODY; } } TLD element TLD ôû ñaây chæ söõa ñoåi laïi caùc ví duï treân trong bodycontent tag vaø ñaët teân file laø transform.tld ... JSP Vôùi caùc tag coù phaàn thaân thì bodycontent tag coù hai giaù trò. Moät laø JSP, phaàn thaân bao goàm custom tag, scripting element vaø vaên baûn HTML. Taát caû caùc thöù coøn laïi coù giaù trò laø tagdependent. Chuù yù raèng giaù trò cuûa element naøy khoâng aûnh höôûng tôùi tieán trình thoâng dòch cuûa thaân. JSP page Code 29: transformtag.jsp <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> Tag With Body Tag With Body Hi! BKHN University Caùc tag ñònh nghóa caùc bieán kòch baûn. Tag handler Tag handler ñaûm nhaän vieäc taïo vaø gaùn ñoái töôïng ñöôïc tham chieáu bôûi bieán kòch baûn vaøo ngöõ caûnh coù theå truy caäp töø moät trang. Ñeå Laøm ñöôïc ñieàu naøy baèng caùch duøng hoaëc phöông thöùc pageContext.setAttribute(name, value, scope) hoaëc pageContext.setAttribute(name, value). Thoâng thöôøng moät thuoäc tính chuyeån vaøo custom tag phaûi xaùc ñònh “teân” cuûa bieán ñoái töôïng; Teân naøy coù theå truy xuaát baèng caùch goïi phöông thöùc get[Attribute] cuûa thuoäc tính (xem 2) Caùc tag coù thuoäc tính). Neáu giaù trò cuûa bieán kòch baûn phuï thuoäc vaøo ñoái töôïng hieän taïi trong tag handler thì noù coù theå truy xuaát ñoái töôïng naøy baèng caùch duøng pageContext.setAttribute(name, scope). Caùc giaù trò cuûa tham soá scope ñöôïc toùm taéc trong baûng sau: Phaïm vi Coù theå truy caäp töø Thôøi gian soáng page Trang hieän haønh Cho tôùi khi lôøi ñaùp gôûi trôû laïi user hoaëc yeâu caàu ñöôïc chuyeån tôùi trang môùi request Trang hieän haønh vaø baát kyø trang ñöôïc include hay forward naøo Cho tôùi khi lôøi ñaùp gôûi trôû laïi user session Yeâu caàu hieän haønh vaø baát kyø yeâu caàu tieáp theo trong cuøng browser Ñôøi soáng cuûa moät phieân laøm vieäc (session) application Baát kyø yeâu caàu hieän taïi vaø töông lai naøo töø cuøng moät öùng duïng Ñôøi soáng cuûa moät öùng duïng Ngoaøi vieäc caøi ñaët giaù trò cuûa bieán trong tag handler, chuùng ta coøn phaûi ñònh nghóa moät lôùp daãn xuaát töø lôùp TagExtrInfo. Lôùp naøy cung caáp thoâng tin cho JSP container veà ñaët tính cuûa cuûa bieán kòch baûn, phaûi caøi ñaët phöông thöùc getVariableInfo ñeå traû veà moät maûng caùc ñoái töôïng VariableInfo chöùa caùc thoâng tin sau: teân bieán, lôùp cuûa bieán, lieäu bieán naøy coù tham khaûo tôùi moät giaù trò ñoái töôïng môùi hay ñaõ coù, tính saún duøng cuûa bieán naøy. Baûng sau moâ taû tính saún duøng cuûa bieán kòch baûn vaø caùc phöông thöùc ñeå xaùc laäp vaø xaùc laäp laïi giaù trò cuûa bieán. Value Availability Methods NESTED Giöõa start tag vaø end tag. Trong doInitBody vaø doAfterBody ñoái vôùi tag handler caøi ñaët BodyTag; ngöôïc laïi trong doStartTag. AT_BEGIN Töø start tag cho ñeán cuoái trang. Trong doInitBody, doAfterBody, vaø doEndTag ñoái vôùi tag handler caøi ñaët BodyTag; ngöôïc laïi trong doStartTag vaø doEndTag. AT_END Sau end tag cho tôùi cuoái trang. Trong doEndTag. Lôùp tag handler sau laáy döõ lieäu töø JNDI lookup ñöôïc löu tröõ nhö laø thuoäc tính cuûa ñoái töôïng pageContext cuøng vôùi teân cuûa bieán kòch baûn. Code 30: LookupTag.java public LookupTag extends TagSupport { private String type; private String name; public void setName(String name) { this.name = name; } public void setType(String type) { this. type = type; } public int doStartTag() { return SKIP_BODY; } public int doEndTag() throws JspException { try { InitialContext context = new InitialContext(); Object obj = (Object)context.lookup(name); pageContext.setAttribute(getId(), obj); Code 30: LookupTag.java (tieáp theo) } catch(javax.naming.NamingException e) { throw new JspException("Unable to look up " + name + " due to " + e.getMessage()); } return EVAL_PAGE; } } Bieán kòch baûn seõ ñöôïc ñònh nghóa trong lôùp daãn xuaát töø lôùp TagExtraInfo. Do bieán ñöôïc truyeàn vaøo nhö caùc thuoäc tính cuûa tag neân seõ ñöôïc truy xuaát bôûi phöông thöùc getAttributeString cuûa lôùp TagData vaø duøng ñeå laáp ñaày haøm taïo cuûa VariableInfo. Ñeå cho pheùp bieán kòch baûn ñöôïc duøng trong phaàn coøn laïi cuûa trang thì phaïm vi cuûa bieán neân gaùn baèng AT_END. Code 31: LookupTagTei.java public class LookupTagTEI extends TagExtraInfo { public VariableInfo[] getVariableInfo(TagData data) { VariableInfo info1 = new VariableInfo( data.getAttributeString("id"), data.getAttributeString("type"), true, VariableInfo.AT_END); VariableInfo[] info = { info1 } ; return info; } } TLD element Chuùng ta caàn phaûi baùo cho JSP container bieát noù neân duøng lôùp TagExtraInfo ñeå taïo ra bieán kòch baûn vôùi phaïm vi thích hôïp. Ñoaïn TLD coù teân lookup.tld nhö sau: Code 32: TLD file ... com.legiang.LookupTag com.legiang.LookupTagTEI name true false type true false ... JSP page Code 33: JSP file ... <legiang:lookup id = "sv" type = "UserTransaction" name = "java:comp/ UserTransaction "> Tag handler ñöôïc trieäu goïi nhö theá naøo? Giao tieáp Tag ñònh nghóa moät qui öôùc truyeàn thoâng cô baûn giöõa tag handler vaø lôùp caøi ñaët trang JSP. Giao tieáp naøy ñònh nghóa chu kyø soáng vaø caùc phöông thöùc ñöôïc trieäu goïi khi gaëp phaûi start tag vaø end tag cuûa moät action. Lôùp caøi ñaët trang JSP trieäu goïi caùc phöông thöùc setPageContext, setParent, vaø caùc phöông thöùc caøi ñaët thuoäc tính tröôùc khi goïi phöông thöùc doStartTag. Lôùp naøy cuõng baûo ñaûm raèng phöông thöùc release seõ ñöôïc goïi trong tag handler tröôùc khi keát thuùc trang. Ví duï sau thöïc hieän töøng böôùc caùch goïi tag handler. Code 34: Caùch thöïc hieän tag handler khoâng coù BodyContent ATag t = new ATag(); t.setPageContext(...); t.setParent(...); t.setAttribute1(value1); t.setAttribute2(value2); t.doStartTag(); t.doEndTag(); t.release(); Giao tieáp BodyTag môû roäng töø giao tieáp Tag baèng caùch ñònh nghóa theâm caùc phöông thöùc cho pheùp tag handler truy caäp vaøo thaân cuûa noù. Giao tieáp naøy cung caáp ba phöông thöùc môùi: setBodyContent: taïo noäi dung cuûa thaân tag vaø theâm vaøo tag handler. doInitBody: ñöôïc goïi tröôùc khi ñònh trò thaân cuûa tag. DoAfterBody: ñöôïc goïi tröôùc khi ñònh trò thaân cuûa tag. Ví duï: Code 35: Caùch thöïc hieän tag handler coù BodyContent t.doStartTag(); out = pageContext.pushBody(); t.setBodyContent(out); /* thöïc hieän caùc khôûi taïo caàn thieát sau khi noäi dung cuûa thaân ñöôïc gaùn */ t.doInitBody(); t.doAfterBody(); /**/ /* Khi doAfterBody traû veà EVAL_BODY_TAG chuùng ta laëp laïi phaàn ñònh trò cho thaân tag */ ... t.doAfterBody(); /**/ t.doEndTag(); t.pageContext.popBody(); t.release(); Phaàn II: Phaân Tích – Thieát Keá – Caøi Ñaët Chöông IV: PHAÂN TÍCH – THIEÁT KEÁ Phaân Tích. Ñaët vaán ñeà. Xuaát phaùt töø nhu caàu thöïc teá trong quaûn lyù coâng vieäc ôû cacù coâng ty hieän nay coøn nhieàu nhöôïc ñieåm, vieäc ngöôøi quaûn lyù ôû caáp caøng cao caøng khoâng naém baét thoâng tin, khoâng tröïc tieáp quaûn lyù ñöôïc toác ñoä laøm vieäc cuûa nhaân vieân mình laø khaù phoå bieán. Hôn nöõa trong thôøi buoåi kinh teá thò tröôøng thôøi buoåi cuûa coâng ngheä thoâng tin moãi con ngöôøi coù quaù nhieàu coâng vieäc phaûi laøm, hoï khoâng coù thôøi gian raûnh roãi ñeå ngoài laøm baùo caùo roài cuoái tuaàn ñem noäp cho quaûn lyù, hoï muoán ñöôïc ôû nhaø nhöng vaãn bieát coâng vieäc cuûa mình phaûi laøm trong ngaøy laø gì?, hoï muoán coù moät khoaûng thôøi gian duø ít oûi ñeå tranh thuû nghæ ngôi. Ñeå moät phaàn naøo thaùo gôõ caùc khoù khaên, nhöôïc ñieåm vaø xuaát phaùt töø caùc yeâu caàu thöïc teá cuûa moät soá coâng ty chöông trình QUAÛN LYÙ COÂNG VIEÄC TREÂN WEB ñaõ ñöôïc ra ñôøi. Trong khuoân khoå cuûa moät ñoà toát nghieäp ñaïi hoïc do thôøi gian, caùc kieán thöùc nhaát laø veà chuyeân moân nghieäp vuï coøn haïn cheá chaéc chaén khoâng traùnh khoûi nhöõng sai soùt. Song vôùi söï noå löïc heát söùc nhaèm hoaøn thaønh toát coâng vieäc nhöng do thôøi gian nghieân cöùu thöïc hieän khoâng nhieàu, löôïng coâng vieäc töông ñoái lôùn, trang thieát bò, taøi lieäu chöa ñaày ñuû vaø trình ñoä haïn cheá cho neân chaéc chaén ñeà taøi naøy seõ coù ít nhieàu khieám khuyeát töø thöïc teá ñeán yù töôûng laäp trình, mong ñöôïc söï löôïng thöù vaø chæ baûo theâm cuûa caùc Thaày, Coâ. Raát mong nhaän ñöôïc söï ñoùng goùp yù kieán chaân thaønh töø thaày coâ vaø caùc baïn ñeå chöông trình hoaøn thieän hôn sôùm ñöôïc ñöa vaøo söû duïng thöïc teá. Ñònh nghóa caùc yeâu caàu. Quaûn Lyù Phaân coâng coâng vieäc cho töøng nhaân vieân. Kieåm tra tieán ñoä thöïc hieän. Ñaùnh giaù coâng vieäc. Thoáng keâ. Giaûi ñaùp thaéc maéc. Laäp baûng ñaùnh giaù nhaân vieân baèng bieåu ñoà. Toång hôïp baùo caùo. Thieát laäp cheá ñoä laøm vieäc tröïc tieáp giöõa hai nhaân vieân. Nhaân Vieân Xem caùc coâng vieäc ñöôïc giao. Baùo caùo tieán ñoä thöïc hieän theo ngaøy. Ñeà xuaát caùch giaûi quyeát coâng vieäc theo ngaøy. Ñoùng goùp yù kieán xaây döïng coâng ty. Baùo caùo coâng vieäc thöïc hieän xong. Xem caùc ñaùnh giaù cuûa beân quaûn lyù. Quaûn Trò Heä Thoáng (Admin) Taïo/Xoaù/Söõa user. Theâm/Xoaù/Söõa caùc quyeàn. Gaùn quyeàn cho user. Refresh database. Restore database. Caäp nhaät database. Phaïm vi ñeà taøi. Veà Döõ Lieäu Cho pheùp löu tröõ trong moät naêm phaùt sinh döõ lieäu Döõ lieäu caäp nhaät tröïc tuyeán Veà Giao Dieän Heä thoáng hoaït ñoäng treân moâi tröôøng Web Veà Maïng Hoaït ñoäng trong moâi tröôøng maïng Intranet Veà xöû lyù Thoáng keâ Thieát laäp cheá ñoä laøm vieäc giöõa hai nhaân vieân Laäp baùo caùo Laøm töôi/ Phuïc hoài CSDL Moâ hình xöû lyù quan nieäm. Sô ñoà ngöõ caûnh. Sô ñoà phaân raõ chöùc naêng. Sô ñoà heä thoáng. Möùc 1: Möùc 2: Phaân raõ töø xöû lyù 4_Phan Cong. Phaân raõ töø xöû lyù 5_Cap Nhat CV. Phaân raõ töø xöû lyù 6_Thong Ke. Phaân raõ töø xöû lyù 9_Tong Hop Bao Cao. Phaân raõ töø xöû lyù 13_Bao Cao Tien Do CV. Phaân raõ töø xöû lyù 16_ Cap Nhat Permission. Phaân raõ töø xöû lyù 19_ Cap Nhat User. Phaân raõ töø xöû lyù 20_Gan Quyen. Moâ hình döõ lieäu quan nieäm. Sô ñoà thöïc theå keát hôïp (ERD): Thieát Keá. Thieát keá xöû lyù. Sô ñoà heä thoáng möùc vaät lyù. Caùc ñôn vò thieát keá. Caäp nhaät coâng vieäc. Theâm coâng vieäc: Nhaäp: TenCV & NoiDung & MaDA. Xuaát: Thoâng baùo ñaõ theâm / thoâng baùo loãi. Söõa coâng vieäc: Nhaäp: TenCV | NoiDung | MaDA | DaXong. Xuaát: Thoâng baùo ñaõ söõa / thoâng baùo loãi. Xoaù coâng vieäc: Nhaäp: MaCV. Xuaát: Thoâng baùo ñaõ xoaù / thoâng baùo loãi. Phaân coâng coâng vieäc. Nhaäp: MaNV & moät hoaëc nhieàu MaCV & NgayBD, NgayKT. Xuaát: Thoâng baùo ñaõ phaân coâng / thoâng baùo loãi. Ñaùnh giaù coâng vieäc. Nhaäp: MaDG vaøo baûng Works. Xuaát: Thoâng baùo ñaõ ñaùnh giaù / thoâng baùo loãi. Kieåm tra tieán ñoä coâng vieäc. Chæ hieän thò caùc baùo caùo tieán ñoä cuûa nhaân vieân. Thieát laäp cheá ñoä laøm vieäc. Nhaäp: MaNV & MaCV & ThietLap vaøo baûng PhanCong. Xuaát: Thoâng baùo ñaõ chuyeån giao coâng vieäc / thoâng baùo loãi. Baùo caùo tieán ñoä coâng vieäc. Nhaäp: MaCV & TienDo & Ngay | GhiChu | Keøm taäp tin. Xuaát: Thoâng baùo baùo caùo ñaõ chuyeån ñi / thoâng baùo loãi. Thay ñoåi maät khaåu. Nhaäp: Usename & Password cuû | Password & Confirm Password môùi. Xuaát: Thoâng baùo ñaõ ñoåi maät khaåu / thoâng baùo loãi. Thoáng keâ coâng vieäc. Thoáng keâ coâng vieäc theo ba tieâu chuaån: + Töø ngaøy ñeán ngaøy. + Theo ñaùnh giaù (xeáp loaïi). + theo ñeà aùn. Laøm töôi cô sôû döõ lieäu. Nhaäp: Teân CSDL môùi caàn phuïc hoài khi bò hoûng & laøm töôi töø ngaøy naøo ñeán ngaøy naøo | töø thaùng naøo ñeán thaùng naøo | naêm naøo. Xuaát: Thoâng baùo ñaõ laøm töôi CSDL / thoâng baùo loãi. Phuïc hoài cô sôû döõ lieäu. Nhaäp: Teân CSDL caàn phuïc hoài (ñaõ coù töø laøm töôi CSDL). Xuaát: Thoâng baùo ñaõ phuïc hoài hoaøn toaøn / thoâng baùo loãi. Moät soá giaûi thuaät ñöôïc theå hieän baøng löu ñoà. Theâm coâng vieäc. Phaân coâng coâng vieäc. Thoáng keâ coâng vieäc. Laøm töôi cô sôû döõ lieäu. Thieát keá cô sôû döõ lieäu Moâ hình döõ lieäu vaät lyù. Sô ñoà thöïc theå keát hôïp (ERD): Baûng moâ taû chi tieát. Table Vuøng Dieãn Giaûi Kieåu Kích Thöôùc Giôùi haïn Giaù Trò Giaù Trò Ngaàm ñònh Raøng buoäc GOPY MAGY Maõ Goùp YÙ Text 10 Khoaù Chính (PK) MANV Maõ Nhaân Vieân Text 9 Khoaù Ngoaïi (FK) NOI DUNG Noäi Dung Text 50 NGAY Ngaøy Date time >= ngaøy hieän taïi ngaøy hieän taïi FILES MAFILE Maõ File Int >=1 Khoaù Chính (PK) MABC Maõ Baùo Caùo Text 10 Khoaù Ngoaïi (FK) TENFILE Teân File Text 30 FILESIZE Kích thöôùc File Long CONTENTTYPE Loaïi Noäi Dung File Ñöôïc Taûi Leân Server Text 30 BAO CAO TONG HOP MABCTH Maõ Baùo Caùo Toång Hôïp Text 10 Khoaù Chính (PK) MACV Maõ Coâng Vieäc Int >=1 Khoaù Ngoaïi (FK) TON DONG Soá Löôïng CV Coøn Toàn Ñoïng Int >=1 NGAY Ngaøy Date time >= ngaøy hieän taïi ngaøy hieän taïi CV TUONG LAI Coâng Vieäc Seõ Laøm Trong Tuaàn Tôùi DEXUAT Ñeà Xuaát Text 80 DANH GIA MADG Maõ Ñaùnh Giaù Int >=1 Khoaù Chính (PK) PHAN HOI Phaûn Hoài Text 50 MAXL Maõ Xeáp Loaïi Text 80 Khoaù Ngoaïi (FK) NHAN VIEN MANV Maõ Nhaân Vieân Int >=1 Khoaù Chính (PK) MA GROUP Maõ Nhoùm Int >=1 Khoaù Ngoaïi (FK) TENNV Teân Nhaân Vieân Text 25 NGAY SINH Ngaøy Sinh Date time < ngaøy hieän taïi DIACHI Ñòa chæ Text 50 PHAI Phaùi Bit Laø soá nguyeân 0 hoaëc 1 PHONE Ñieän Thoaïi Text 9 USER NAME Teân Ngöôøi Söû Duïng Text 16 PASS WORD Maät Khaåu Text 16 BAO CAO NGAY MABCN Maõ Baùo Caùo Ngaøy Text 10 Khoaù Chính (PK) MACV Maõ Coâng Vieäc int >=1 Khoaù Ngoaïi (FK) TIENDO Tieán Ñoä Float 4 NGAY Ngaøy Date time >= ngaøy hieän taïi ngaøy hieän taïi GHICHU Ghi Chuù Text 80 DEXUAT Ñeà Xuaát YÙ Kieán Text 50 WORKS MACV Maõ Coâng Vieäc Int >=1 Khoaù Chính (PK) MADA Maõ Ñeà Aùn Int >=1 Khoaù Ngoaïi (FK) MADG Maõ Ñaùnh Giaù Int >=1 Khoaù Ngoaïi (FK) TENCV Teân Coâng Vieäc Text 20 NOI DUNG Noäi Dung Text 100 DAXONG Ñaõ Xong Bit 0 hoaëc 1 DEAN MADA Maõ Ñeà Aùn Int >=1 Khoaù Chính (PK) TENDA Teân ñeà Aùn Text 30 DIA DIEM Ñòa Ñieåm Text 40 XEP LOAI MAXL Maõ Xeáp Loaïi Int >=1 Khoaù Chính (PK) XEPLOAI Xeáp Loaïi Text 30 GHICHU Ghi Chuù Text 80 PHAN CONG MANV Maõ Nhaân Vieân Text 9 Khoaù Ngoaïi (FK) MACV Maõ Coâng Vieäc Int >=1 Khoaù Ngoaïi (FK) NGAYBD Ngaøy Baét Ñaàu Date time NgayBD > Ngay KT Ngaøy hieän taïi THIET LAP Thieát laäp Bit 1 0 NGAYKT Ngaøy Keát Thuùc Date time NgayKT > Ngay BD > Ngaøy hieän taïi GROUPS MA GROUP Maõ Nhoùm Int >=1 TEN GROUP Teân Nhoùm Text 30 Khoaù Chính (PK) TRG GROUP Tröôûng Nhoùm Text 9 NGAYNC Ngaøy Nhaän Chöùc Date time GROUPS_PER MAPER Maõ Quyeàn Int >=1 Khoaù Chính (PK) MA GROUP Maõ Nhoùm Int >=1 Khoaù Chính (PK) PERMI SIONS MAPER Maõ Quyeàn Int >=1 Khoaù Chính (PK) TENPER Teân Quyeàn Text 20 GHICHU Ghi Chuù Text 80 Caùc raøng buoäc toaøn veïn . (RB1) MAGY laø khoaù chính cuûa GOPY. (RB2) MAFILE laø khoaù chính cuûa FILES. (RB3) MABCTH laø khoaù chính cuûa BAOCAOTONGHOP. (RB4) MADG laø khoaù chính cuûa DANHGIA. (RB5) MANV laø khoaù chính cuûa NHANVIEN. (RB6) MABCN laø khoaù chính cuûa BAOCAONGAY. (RB7) MACV laø khoaù chính cuûa WORKS. (RB8) MADA laø khoaù chính cuûa DEAN. (RB9) MAXL laø khoaù chính cuûa XEPLOAI. (RB10) MANV&MACV laø khoaù chính cuûa PHANCONG. (RB11) MAPER laø khoaù chính cuûa PERMISSION. (RB12) MAGROUP laø khoaù chính cuûa GROUPS. (RB13) MAPER & MAGROUP laø khoaù chính cuûa GROUP_PER. (RB14) MANV laø khoaù ngoaïi cuûa GOPY tham chieáu töø NHANVIEN. (RB15) MABC laø khoaù ngoaïi cuûa FILES tham chieáu töø BAOCAONGAY. (RB16) MACV laø khoùa ngoaïi cuûa BAOCAOTONGHOP tham chieáu töø WORKS (RB17) MAXL laø khoaù ngoaïi cuûa DANHGIA tham chieáu töø XEPLOAI. (RB18) MAGROUP laø khoaù ngoaïi cuûa NHANVIEN tham chieáu töø GROUPS. (RB19) MACV laø khoaù ngoaïi cuûa BAOCAONGAY tham chieáu töø WORKS. (RB20) MADG laø khoaù ngoaïi cuûa WORKS tham chieáu töø DANHGIA. (RB21) MADA laø khoaù ngoaïi cuûa WORKS tham chieáu töø DEAN. (RB22) MANV laø khoaù ngoaïi cuûa PHANCONG tham chieáu töø NHANVIEN. (RB23) MACV laø khoaù ngoaïi cuûa PHANCONG tham chieáu töø WORKS. (RB24) MAPER & MAGROUP laø khoaù ngoaïi cuûa GROUP_PER tham chieáu töø GROUPS & PERMISSION. (RB25) Ngaøy nhaän chöùc > Ngaøy sinh + 24. (RB26) Ngaøy keát thuùc >= Ngaøy baét ñaàu. (RB27) Moät coâng vieäc coù theå coù nhieàu nhaân vieân nhöng taïi moät thôøi ñieåm chæ coù moät nhaân vieân thöïc hieän moät coâng vieäc. Baûng taàm aûnh höôûng. Works Nhan Vien Phan Cong Gop Y Files Bao Cao Ngay Bao Cao Tong Hop Danh Gia Xep Loai Groups Groups _Per Permissions DeAn T S X T S X T S X T S X T S X T S X T S X T S X T S X T S X T S X T S X T S X RB1 X RB2 X RB3 X RB4 X RB5 X RB6 X RB7 X RB8 X RB9 X RB10 X RB11 X RB12 X RB13 X RB14 X X RB15 X X RB16 X X RB17 X X RB18 X X RB19 X X RB20 X X RB21 X X RB22 X RB23 X RB24 RB25 X X RB26 X X RB27 Thieát keá chöông trình. Sô ñoà caáu truùc chöông trình. Thieát keá giao dieän. Caùc Site map (thay theá cho sô ñoà dòch chuyeån traïng thaùi). Chöông V : TRIEÅN KHAI ÖÙNG DUÏNG Caùc phaàn meàm caàn thieát. Ñaây laø öùng duïng ñoäc laäp neàn neân noù coù theå chaïy treân caùc heä ñieàu haønh khaùc nhau nhö caùc heä thoáng Windows, Unix, …. Do ñoù chuùng ta coù theå caøi ñaët heä ñieàu haønh thuoäc moät trong caùc heä thoáng treân vaø caùc phaàn meàm sau: Jakarta-Tomcat laø moät Servlet/JSP container. Thaät ra theo lyù thuyeát, öùng duïng naøy coù theå chaïy treân baát kyø container hay web server naøo coù hoå trôï Servlet/JSP nhöng chuùng toâi chöa thöû nghieäm treân container khaùc Jakarta-Tomcat 3.1. JDK 1.2 trôû leân. MySQL Server 3.23.27 baûn beta. Hieän nay ñaõ ra baûn 4.0. JDBC Driver loaïi boán hoå trôï cho MySQL Server: mm.msql-2.0.4. Xalan vaø Xerces ñeå chuyeån XML thaønh HTML baèng caùch söû duïng XSLT. Moät trong caùc web browser sau: Netscape, Inernet Explorer, Opera taát caû töø 4.0 trôû leân. ÖÙng duïng naøy ñaõ thöû nghieäm treân caùc web browser naøy. VietKey hoaëc baát kyø boä goõ tieáng vieät naøo khaùc. Trieån khai öùng duïng web. ÖÙng duïng web (öùng duïng server-side java) laø moät taäp caùc trang JSPs, Servlets, HTML vaø caùc taøi nguyeân khaùc ñöôïc goùi goïn trong moät goùi duy nhaát vaø chaïy treân nhieàu platform töø nhieàu nhaø saûn xuaát khaùc nhau. ÖÙng duïng Web ñöôïc xaùc ñònh trong moät ñöôøng daãn ñaët bieät ôû web server Moät öùng duïng web coù theå goàm caùc thaønh phaàn sau: JavaServer Pages Servlets Caùc lôùp tieän ích Caùc taøi nhö xml, html, … Enterprise JavaBean (EJB) ñoái vôùi caùc öùng duïng xöû lyù phaân taùn. Caùc media nhö images, sounds, … Caùc ñoái töôïng client nhö javabeans, applets, caùc lôùp, … Moâ hình hoaït ñoäng cuûa The Web Work. The Web Work hoaït ñoäng döïa treân moâ hình ba lôùp (3 layer). Sau ñaây laø moâ hình ba lôùp toång quaùt cuûa öùng duïng Web. Treân neàn Java hoå trôï caû hai kyû thuaät xöû lyù Web ñoäng laø Servlet vaø JSP. Do ñoù vôùi töøng kyû thuaät toâi coù chi tieát hai moâ hình (coù theå nhieàu hôn) döïa treân moâ hình ba lôùp toång quaùt naøy vaø goïi laø Kieán Truùc Moâ Hình Moät vaø Moâ Hình Hai. ÖÙng duïng söû duïng caû hai moâ hình web treân neàn Java laø Kieán Truùc Moâ Hình Moät vaø Moâ Hình Hai maø ñaõ vaø ñang coøn tranh luaän treân caùc sites noãi tieáng nhö javaworld.com, developer.com, weblogic.com. Trong moâ hình moät, moät trang JSP ñaûm nhaän caû vieäc xöû lyù yeâu caàu vaø traû veà caùc keát quaû cho client. ÔÛ ñaây vaãn coù söï taùch bieät giöõa xöû lyù vaø hieän thò bôûi vì taát caû söï truy caäp döõ lieäu ñeàu ñöôïc Beans thöïc hieän. Moâ hình naøy thích hôïp cho caùc öùng duïng ñôn gian, thích hôïp vôùi caùc trang JSP coù nhieàu maõ HTML. Xem hình veõ sau: Trong moâ hình kieán truùc hai, ñoù laø söï keát hôïp caû hai kyû thuaät xöû lyù web ñoäng laø Servlet vaø JSP. Moâ hình naøy raát thích vôùi vôùi caùc öùng duïng coù xöû lyù phöùc taïp. ÔÛ ñaây, Servlets hoaït ñoäng nhö moät traïm ñieàu khieån (controller) chòu traùch nhieäm xöû lyù caùc yeâu caàu vaø khôûi taïo caùc components (Beans, Custom Tag) cho JSP söû duïng. Moâ hình naøy taùch phaàn xöû lyù vaø trình baøy roû raøng nhaát. III. Höôùng daãn söû duïng. Sau khi ñaõ caøi ñaët öùng duïng, baïn môû browser, trong address bar goõ ñòa chæ: htttp://servername:port/work/html/showLogin.html 8. servername: teân server cuûa baïn, treân maùy cuïc boä thöôøng laø localhost. port: soá coång maø web server ñang môû. Neáu soá port laø 80 thì thoâng soá port khoâng caàn nhaäp. Neáu baïn söû duïng thöôøng xuyeân öùng duïng, baïn neân gaùn giaù trò maät ñònh cho browser vôùi ñòa chæ treân. Khi baïn môû browser, öùng duïng töï ñoäng ñöôïc goïi maø baïn khoâng caàn phaûi goõ ñòa chæ treân address bar. Thöïc hieän coâng vieäc naøy trong ba web browser: Internet Explorer, Netscape, Opera nhö sau: Internet Explorer: Vaøo Tools menu, choïn Internet Options. Trong hoäp thoaïi Internet Options, choïn General tab, trong khung Home page coù Address textbox cho pheùp baïn goõ ñòa chæ treân. Netscape: Vaøo Edit menu, choïn Preferences…. Trong hoäp thoaïi Preferences, choïn navigator trong hoäp thoaïi category, hieän ra moät trang Navigator, choïn Home page button, trong khung Home Page coù Location textbox nhaäp vaøo ñòa chæ treân. Opera: Vaøo Navigation menu, choïn Set home page…, hieän ra moät input box cho cheùp baïn nhaäp ñòa chæ môùi vaøo. KEÁT LUAÄN ÖÙng duïng ñaõ ñaùp öùng ñöôïc yeâu caàu ñeà ra trong giai ñoaïn phaân tích thieát keá heä thoáng. ÖÙng duïng keát hôïp ñöôïc caùc coâng ngheä ñoäc laäp neàn JSP, XML, XSLT, MySQL Server do ñoù coù theå chaïy treân nhieàu neàn, nhieàu Web Server vaø nhieàu Web Broswer khaùc nhau. Veà cô sôû döõ lieäu, sô ñoà thöïc theå keát hôïp ñaït daïng chuaån ba. ÖÙng duïng söû duïng caû hai moâ hình web laø “Kieán Truùc Moâ Hình Moät vaø Hai” – “JSP Model 1 and 2 Architecture” HÖÔÙNG PHAÙT TRIEÅN Caùc höôùng phaùt trieån sau seõ laøm cho öùng duïng hoaøn thieän hôn. Môû roäng öùng duïng vôùi quy moâ lôùn hôn, coù khaû naêng trao ñoåi döõ lieäu vaø xöû lyù vôùi öùng duïng khaùc. Phaùt trieån öùng duïng ñeå download caùc files baùo caùo veà client. Quaûn lyù caùc hình aûnh lieân quan veà coâng vieäc cho öùng duïng sinh ñoäng hôn. Duøng DOM xöû lyù XML ngay taïi client. Caøi ñaët caùc raøng buoät toaøn veïn treân database server trong phieân baûn môùi cuûa heä quaûn trò cô sôû döõ lieäu MySQL (phieân baûn 4.0). Do phieân baûn hieän taïi (ñang söû duïng MySQL 3.23.27) khoâng hoå trôï khoaù ngoaïi, check, rule vaø trigger. DANH SAÙCH WEB SERVERS HOÅ TRÔÏ JSP Ñeå chaïy ñöôïc JSP chuùng ta caàn moät trong caùc Web Server sau. Haõy xem caùc höôùng daãn caøi ñaët, nôi ñaët caùc JSP files, … ñeå thöïc thi ñöôïc trong Web Servers ñeàu coù ñaày ñuû trong töøng Web Server khi chuùng ta download veà. Teân Web Servers Thuoäc Toå Chöùc / Coâng Ty Trang Web Jakarta Tomcat Apache Org. JavaServer Web Developmet Kit (JSWDK) Sun Micro system JRun Allaire Inc. ServletExec New Atlanta Lite WebServer Gefion Software Java Web Server Sun Micro system WebSphere IBM Corp. Resin Caucho Technology BAÛNG THUAÄT NGÖÕ action Moät element trong trang JSP coù theå taùc ñoäng leân nhöõng ñoái töôïng ngaàm ñònh vaø ñoái töôïng server-side khaùc hoaëc coù theå ñònh nghóa bieán kòch baûn môùi (xem element). custom action Moät action ñöôïc ñònh nghóa linh hoaït bôûi boä moâ taû thö vieän tag vaø taäp caùc lôùp java vaø ñöôïc ñöa vaøo trang JSP baèng taglib directive. declaration Moät scripting element maø khai baùo caùc method, bieán, hoaëc caû hai trong trang JSP. Coù cuù phaùp (xem scripting element). directive Moät element trong trang JSP coù nhieäm vuï höôùng daãn JSP container vaø ñöôïc thoâng dòch vaøo thôøi gian runtime. Coù cuù phaùp (xem JSP container vaø scripting element). element Trình thoâng dòch JSP coâng nhaän element nhö laø moät thaønh phaàn trong trang JSP. Moät element coù theå laø directive, action, scripting element. Element baét ñaàu vôùi start tag, noäi dung vaø end tag, neáu khoâng coù noäi dung thì noù duøng cuù phaùp empty tag. expression Moät scripting element chöùa bieåu thöùc cuûa ngoân ngöõ java vaø ñöôïc ñaët vaøo ñoái töôïng ngaàm ñònh out. Coù cuù phaùp implicit object Moät ñoái töôïng server-side ñöôïc ñònh nghóa bôûi JSP container vaø luoân coù saún trong trang JSP maø khoâng caàn khai baùo. Coù caùc ñoái töôïng nhö request, response, pageContext, session, application, out, config, page, exception. JSP container Moät thöïc theå ôû caáp heä thoáng cung caáp söï hoaït ñoäng, quaûn lyù chu trình soáng cho caùc thaønh phaàn (conponent) JSP vaø Servlet. JSP page implementation class Moät lôùp cuûa ngoân ngöõ laäp trình java, cuï theå laø moät Servlet, ñöôïc trình baøy vaøo thôøi gian runtime cuûa moät trang vaø nhaän ñoái töôïng request roài traû veà moät ñoái töôïng response. Lôùp caøi ñaët trang coù theå duøng caùc dòch vuï cuûa JSP container, goàm caû Servlet API vaø JSP API. persistent Moät ñoái töôïng ñöôïc serialization vaøo ñóa vaø caùc thieát bò löu tröõ khaùc. Persistent coù caùc daïng nhö files, RDBMS (Relational database management systems), ODBMS (Object database management systems). reflection Laø cô cheá cho pheùp maõ Java tìm ra caùc thoâng tin veà caùc tröôøng, phöông thöùc vaø haøm taïo cuûa caùc lôùp ñöôïc taûi. scripting element Laø declaration, scriptlet hay expression, ñaët taû JSP ñònh nghóa caùc thöù naøy theo cuù phaùp tag. Toaøn boä noäi dung ngöõ caûnh ñöôïc vieát theo ngoân ngöõ java. scriptlet Moät scripting element chöùa baát kyø ñoaïn maõ cuûa ngoân ngöõ kòch baûn naøo trong trang JSP. JSP v1.2 laø phieân baûn môùi nhaát chæ hoå trôï ngoân ngöõ java trong caùc trang JSP. Coù cuù phaùp . Tuy nhieân coù moät soá JSP container hoå trôï ngoân ngöõ javascript nhö RESIN. serialization Laø moät tieán trình löu tröõ toaøn boä moät ñoái töôïng vaøo ñóa hoaëc caùc thieát bò löu tröõ khaùc. Ngöôïc laïi, moät tieán trình phuïc hoài ñoái töôïng thì goïi laø deserialization. servlet Moät kyõ thuaät server-side ñöôïc vieát baèng Java, JSP phaùt trieån döïa treân neàn taûng cuûa servlet. tag Goàm ñoaïn vaên baûn naèm giöõa caëp daáu , coù teân, thuoäc tính. Coù ba loaïi tag: start tag, end tag, vaø empty tag. Ví duï: content tag handler Moät lôùp java ñöôïc caøi ñaët caùc giao tieáp Tag hoaëc TagBody maø ñöôïc trình baøy vaøo luùc thôøi gian runtime ñoái vôùi moät custom action. tag library Moät taäp caùc custom action ñöôïc moâ taû trong boä moâ taû thö vieän tag (tag library descriptor) vaø caùc lôùp java. tag library descriptor Moät taøi lieäu XML moâ taû thö vieän tag. transient Ngöôïc laïi vôùi persistent, haàu heát caùc ñoái töôïng trong boä nhôù ñöôïc goïi laø transient, coù nghóa laø chuùng seõ cheát ñi khi caùc tham chieáu cuûa chuùng ra khoûi phaïm vi hoaëc taéc nguoàn ñieän. TAØI LIEÄU THAM KHAÛO Teân Taøi Lieäu Taùc Giaû Naêm Loaïi Taøi Lieäu Ach1 Servlets and JSP Marty Hall 2000 Saùch JSP JavaBeans Framework By IBM 2000 Web site Tag Libraries Tutorial (v 1.0) Sun Microsystem 2000 Web site Xalan 2.0 & Xerces 1.3 (API) By apache.org 2001 Web site XML and Java Hiroshi Maruyama 1999 Saùch XML Professional Didier Martin 2000 Saùch Luaän vaên toát nghieäp Caùc khoùa tröôùc Web Books CD Rom Giaùo trình lyù thuyeát vaø baøi taäp Java Nguyeãn Tieán Duõng (Chuû Bieân) 1999 Saùch Laäp trình öùng duïng Web vôùi JSP/ Servlet Nguyeãn Phöông Lan – Hoaøng Ñöùc Hoaøng 2001 Saùch Java Laäp Trình Cô Sôû Döõ Lieäu Nguyeãn Tieán Nguyeãn Vaên Taâm Nguyeãn Vaên Hoaøi 2001 Saùch

Các file đính kèm theo tài liệu này:

  • docdo_an_in v2.doc
  • rarwork.rar
Luận văn liên quan