Tìm hiểu về Jsp technology

Xuất phát từ nhu cầu thực tế trong quản lý công việc ở cac công ty hiện nay còn nhiều nhược điểm, việc người quản lý ở cấp càng cao càng không nắm bắt thông tin, không trực tiếp quản lý được tốc độ làm việc của nhân viên mình là khá phổ biến. Hơn nữa trong thời buổi kinh tế thị trường thời buổi của công nghệ thông tin mỗi con người có quá nhiều công việc phải làm, họ không có thời gian rảnh rỗi để ngồi làm báo cáo rồi cuối tuần đem nộp cho quản lý, họ muốn được ở nhà nhưng vẫn biết công việc của mình phải làm trong ngày là gì?, họ muốn có một khoảng thời gian dù ít ỏi để tranh thủ nghỉ ngơi.

Để một phần nào tháo gỡ các khó khăn, nhược điểm và xuất phát từ các yêu cầu thực tế của một số công ty chương trình QUẢN LÝ CÔNG VIỆC TRÊN WEB đã được ra đời. Trong khuôn khổ của một đồ tốt nghiệp đại học do thời gian, các kiến thức nhất là về chuyên môn nghiệp vụ còn hạn chế chắc chắn không tránh khỏi những sai sót. Song với sự nổ lực hết sức nhằm hoàn thành tốt công việc nhưng do thời gian nghiên cứu thực hiện không nhiều, lượng công việc tương đối lớn, trang thiết bị, tài liệu chưa đầy đủ và trình độ hạn chế cho nên chắc chắn đề tài này sẽ có ít nhiều khiếm khuyết từ thực tế đến ý tưởng lập trình, mong được sự lượng thứ và chỉ bảo thêm của các Thầy, Cô.

 

doc88 trang | Chia sẻ: huong.duong | Lượt xem: 1179 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tìm hiểu về Jsp technology, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ean phaỷi coự moọt haứm taùo khoõng coự tham soỏ. Bean khoõng neõn coự baỏt kyứ bieỏn theồ hieọn (field) naứo laứ ‘public’. Caực giaự trũ beàn vửừng neõn ủửụùc truy caọp thoõng qua caực phửụng thửực goùi laứ getXxx vaứ setXxx. ẹoỏi vụựi caực server-side Bean khoõng neõn duứng thử vieọn ủoà hoaù. JSP sửỷ duùng Beans. Caực JSP element duứng cho Bean. jsp:useBean element Cho pheựp chuựng ta taỷi moọt Bean vụựi teõn vaứ phaùm vi xaực ủũnh vaứo trang JSP. Cuự phaựp: Neỏu khoõng coự body, tửực laứ khoõng coự tag naứo trong thaõn cuỷa jsp:useBean thỡ coự cuự phaựp laứ empty tag. TypeSpec coự theồ hoaởc (|) trong caực thuoọc tớnh sau: TypeSpec ::= class = “className” | class = “className” type = “typeName” | type = “typeName” class = “className” | beanName = “beanName” type = “typeName” | type = “typeName” beanName = “beanName” | type = “typeName” Caực giaự trũ cuỷa thuoọc tớnh scope: page ẹaõy laứ giaự trũ maởc ủũnh cuỷa scope. Bean vụựi giaự trũ naứy seừ coự saỹn tửứ javax.servlet.jsp.PageContext trong trang hieọn haứnh. Bean seừ ủửụùc loaùi boỷ khi moọt response gụỷi trụỷ veà client hoaởc request ủửụùc chuyeồn tụựi moọt trang mụựi. request Bean coự giaự trũ naứy thỡ coự saỹn tửứ ủoỏi tửụùng ServletRequest cuỷa trang hieọn haứnh vaứ baỏt kyứ trang ủửụùc include hay forward naứo baống caựch sửỷ duùng phửụng thửực getAttribute(name). Bean seừ bũ huyỷ boỷ khi moọt response gụỷi trụỷ veà client. session Bean ủửụùc sửỷ duùng trong baỏt kyứ trang naứo coự tham gia vaứo moọt session cuỷa client. Coự phaùm vi trong caỷ moọt session cuỷa client. Bean naứy ủửụùc lửu trửừ trong ủoỏi tửụùng HttpSession. application Bean ủửụùc sửỷ duùng trong baỏt kyứ trang naứo trong ửựng duùng hieọn haứnh (caỷ request hieọn taùi vaứ tửụng lai). jsp:setProperty element Gaựn moọt giaự trũ hoaởc nhieàu giaự trũ (thuoọc tớnh maỷng) cuỷa thuoọc tớnh vaứo Bean. Cuự phaựp: options coự theồ hoaởc (|) trong caực thuoọc tớnh sau: options::=property =“*” | property =“propertyName” | property =“propertyName” param =“paraName” | property =“propertyName” value =“{ | string}” jsp:getProperty element Laỏy giaự trũ cuỷa thuoọc tớnh Bean ủeồ hieồn thũ giaự trũ naứy trong trang keỏt quaỷ. Cuự phaựp: Phửụng phaựp chuyeồn kieồu tửù ủoọng JSP ú Bean Caực thuoọc tớnh cuỷa moọt thaứnh phaàn JSP thỡ khoõng giụựi haùn giaự trũ chuoồi (string) nhửng raỏt quan troùng ủeồ hieồu raống taỏt caỷ giaự trũ cuỷa thuoọc tớnh ủửụùc truy caọp qua tag seừ ủửụùc chuyeồn thaứnh kieồu chuoồi. Tuy nhieõn, phửụng thửực getter khoõng caàn traỷ veà kieồu String moọt caựch tửụứng minh vỡ JSP container seừ tửù ủoọng chuyeồn giaự trũ traỷ veà naứy thaứnh kieồu String neỏu caàn thieỏt. ẹoỏi vụựi caực kieồu dửừ lieọu cụ baỷn cuỷa Java, sửù chuyeồn ủoồi ủửụùc theồ hieọn trong baỷng sau: Property Type Conversion to String boolean Java.lang.Boolean.toString(boolean) byte Java.lang.Byte.toString(byte) char Java.lang.Character.toString(char) double Java.lang.Double.toString(double) int Java.lang.Integer.toString(int) float Java.lang.Float.toString(float) long Java.lang.Long.toString(long) Tửụng tửù, taỏt caỷ phửụng thửực setter cuỷa thuoọc tớnh ủửụùc truy caọp vụựi tag seừ ủửụùc tửù ủoọng chuyeồn tửứ String sang moọt kieồu goỏc thớch hụùp bụỷi JSP container. ẹieàu naứy ủửụùc thửùc hieọn qua caực phửụng thửực cuỷa caực lụựp voỷ boùc Java. Property Type Conversion from String 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) Tỡm hieồu caựch INTROSPECTOR laứm vieọc. Introspector laứ gỡ? Introspector laứ boọ phaõn tớch maứ qua ủoự Java xem xeựt caực ủoaùn maừ cuỷa chửụng trỡnh ủeồ tỡm ra nhửừng phửụng thửực duứng ủeồ xaõy dửùng vaứ aựp duùng cho tửứng thuoọc tớnh cuừng nhử tỡnh huoỏng cuù theồ. Chuựng ta khoõng caàn quan taõm ủeỏn caực khai baựo phửực taùp khaực. Vớ duù thieỏt laọp hai phửụng thửực sau: public void setAge(int age) public int getAge() Theo caựch naứy Bean container seừ hieồu laứ chửụng trỡnh muoỏn taùo ra thuoọc tớnh laứ age coự kieồu int – Bean container seừ chuyeồn caực thuoọc tớnh theo quy taộc: FoorBar à foorBar Z à z URL à URL Thieỏt keỏ caực phửụng thửực maóu duứng cho thuoọc tớnh. ẹoỏi vụựi thuoọc tớnh mang nhửừng trũ ủụn, hai phửụng thửực getter vaứ setter ủửụùc vieỏt theo maóu sau (vụựi getter vaứ setter xem 4.Thuoọc tớnh cuỷa Bean): public void setAttributeName(AttributeType param) public AttributeType getAttributeName() ẹoỏi vụựi thuoọc tớnh mang nhửừng trũ kieồu boolean, phửụng thửực getter ủửụùc duứng vụựi tieỏp ủaàu ngửừ laứ is thay cho get: public void setAttributeName(AttributeType param) public boolean isAttributeName() ẹoỏi vụựi thuoọc tớnh goàm nhieàu phaàn tửỷ (index attribute) caực phửụng thửực getter vaứ setter cuừng ủửụùc thieỏt laọp tửụng tửù. Chuựng ta coự theồ sửỷ duùng moọt caởp phửụng thửực hay caỷ hai caởp phửụng thửực cuừng ủửụùc. public void setAttributeName(int index, AttributeType value) public AttributeType getAttributeName() vaứ/hoaởc public void setAttributeName(AttributeType[] value) public AttributeType[] getAttributeName() Khai baựo caực phửụng thửực moọt caực tửụứng minh. Neỏu khoõng muoỏn boọ phaõn tớch Introspector ngaàm ủũnh, chuựng ta coự theồ khai baựo vaứ xửỷ lyự caực phửụng thửực moọt caựch tửụứng minh nhụứ vaứo moọt lụựp phuù duứng ủeồ moõ taỷ caực phửụng thửực ủửụùc goùi laứ BeanInfo. Khi Beans coự teõn laứ xxx ủửụùc bieõn dũch, trửụực tieõn Bean container seừ ủi tỡm lụựp coự teõn laứ xxxBeanInfo. Neỏu lụựp naứy toàn taùi, caực thoõng tin trong lụựp xxxBeanInfo seừ ủửụùc xửỷ lyự trửụực vaứ aựp duùng cho caực phửụng thửực ủửụùc tỡm thaỏy. Caực phửụng thửực khoõng ủửụùc moõ taỷ trong xxxBeanInfo seừ ủửụùc aựp duùng caựch phaõn tớch kieồu Introspector maởc ủũnh. Xem theõm III. Caực giao tieỏp boồ trụù cho Bean. Thuoọc tớnh cuỷa Bean. Caực phửụng thửực truy xuaỏt. Thuoọc tớnh thaọt ra chổ laứ nhửừng bieỏn naốm trong moọt lụựp, tuy nhieõn nhửừng bieỏn naứy khoõng neõn sửỷ duùng trửùc tieỏp maứ neõn thoõng qua caực phửụng thửực ủeồ truy xuaỏt chuựng. Thoõng thửụứng bieỏn ủửụùc duứng vaứo hai muùc ủớch ủoự laứ gaựn dửừ lieọu vaứ laỏy dửừ lieọu ra ủeồ tớnh toaựn. Java ủửa ra hai loaùi phửụng thửực ủeồ ủaựp ửựng cho nhu caàu truy xuaỏt bieỏn ủoự laứ caực phửụng thửực getter mang yự nghúa ủoùc dửừ lieọu tửứ bieỏn vaứ caực phửụng thửực setter mang yự nghúa gaựn dửừ lieọu cho bieỏn. Caực loaùi thuoọc tớnh. Chuựng ta haừy xem caực vớ duù sau: Thuoọc tớnh mang nhửừng giaự trũ ủụn. Bean sau ủaõy laỏy thụứi gian cuỷa heọ thoỏng. 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

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

  • docDA0640.doc
Tài liệu liên quan