ACTION CHÈN VÀO FILE SỞ THỜI GIAN REQUEST.

Một phần của tài liệu ứng dụng cụ thể chương trình vào công ty liên doanh bêtông việt úc (Trang 25)

Với include directive cho phép chúng ta thêm vào các tài liệu chứa mã JSP vào nhiều trang khác nhau nhưng lại cĩ vấn đề là địi hỏi chúng ta phải cập nhật lại ngày sữa đổi của trang khi file được include thay đổi. Để loại bỏ vấn đề này đặt tả JSP cung cấp cho chúng ta một action<jsp:include> để include các file vào thời gian yêu cầu (request). Mặc khác, do trang được biên dịch thành servlet vào thời gian yêu cầu vì thế các file

được include khơng thể chứa mã JSP. Cú pháp của action này

là:

<jsp:include page=“Relative URL” flush=“true”>

Ví dụ sau sử dụng jsp:include action để include bốn file html, ví dụ này chỉ hiện thị các thơng tin của các web sites nỗi tiếng.

Code 7: includerequest.jsp

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">

<!-- Example of including files at request time. --> <html>

<head>

<title>What’s New</title>

<link rel="stylesheet" href="JSP-Styles.css" type="text/css" /> </head> <body> <center> <table boder="5"> <tr>

<th class="title">What's New at JspNews.com </th> </tr> </table> </center> 744 747 750 753 756 759 762 765 768 771 774 777

JSP Technology Căn Bản Về JSP

<p>Here is a summary of our four most recent news stories:</p>

<ol>

<li><jsp:include page="item1.html" flush="true" /></li>

<li><jsp:include page="item2.html" flush="true" /></li>

<li><jsp:include page="item3.html" flush="true" /></li>

<li><jsp:include page="item4.html" flush="true" /></li>

</ol> </body> </html>

Code 8: item1.html

<b>Bill Gates acts humble.</b> In a startling and unexpected development, Microsoft big wig Bill Gates put on an open act of

humility yesterday.

<a href="http://www.microsoft.com/Never.html">More details...</a>

Code 9: item2.html

<b>Scott McNealy acts serious.</b> In an unexpected twist, wisecracking Sun head Scott McNealy was sober and subdued at

yesterday's meeting.

<a href="http://www.sun.com/Imposter.html">More

details...</a>

Code 10: item3.html

<b>Larry Ellison acts conciliatory.</b> Catching his competitors

off guard yesterday, Oracle prez Larry Ellison referred to his rivals in friendly and respectful terms.

<b href="http://www.oracle.com/Mistake.html">More details...</a> 54 780 783 786 789 792 795 798 801 804 807 810 813

JSP Technology Căn Bản Về JSP

Code 11: item4.html

<b>Sportscaster uses "literally" correctly.</b> In an apparent slip of the tongue, a popular television commentator was heard to use the word "literally" when he did <i>not</i> mean "figuratively."

<a href="http://www.espn.com/Slip.html">More details...</a>

2.

2. Action chèn vào Applets cho Java Plug-In.Action chèn vào Applets cho Java Plug-In.

Với JSP, chúng ta khơng cần cĩ bất kỳ cú pháp đặc biệt nào để

include vào các applet; chỉ dùng APPLET tag của HTML bình

thường. Tuy nhiên, các applet này phải sử dụng từ JDK 1.1 trở xuống vì cả hai trình duyệt phổ biết nhất là Netscape 4.x và Internet Explorer 5.x vẫn chưa hổ trợ JDK 1.2. Do đĩ applet cĩ một số giới hạn sau:

- Để sử dụng Swing, chúng ta phải gởi các Swing files qua mạng. Tiến trình này tốn rất nhiều thời gian và cũng thất bại trong Internet Explorer 4 và Netscape 3.x (chỉ hổ trợ JDK 1.02) mà Swing lại phụ thuộc vào JDK 1.1.

- Chúng ta khơng thể dùng Java 2D.

- Chúng ta khơng thể dùng gĩi collection (tập hợp) của Java 2. - Mã của chúng ta chạy chậm hơn vì hầu hết các trình biên dịch cho nền Java 2 được cải tiến rất đáng kể so với các trình biên dịch từ JDK 1.1 trở xuống.

Hơn thế nữa, các phiên bản của các trình duyệt cĩ một số mâu thuẫn trong cách thức mà chúng hổ trợ AWT component khác nhau, làm cho việc thử nghiệm và điều phối các giao tiếp người dùng trở nên phức tạp và nặng nề hơn. Để giải quyết các vấn đề này, Sun đã phát triển Java Plug-In cho Netscape và Internet Explorer mà cho phép chúng ta sử dụng Java 2 platform cho các applet trong nhiều trình duyệt khác nhau.

Tuy nhiên, lại thật khơng may mắn là APPLET tag bình thường

sẽ khơng làm việc với Plug-In vì các trình duyệt được thiết kế riêng chỉ sử dụng máy ảo (Virtual Machine) cĩ sẳn của chúng khi chúng gặp APPLET. Thay vì thế, chúng ta phải sử dụng 816 819 822 825 828 831 834 837 840 843 846

JSP Technology Căn Bản Về JSP

OBJECT tag đối với IE và EMBED tag đối với Netscape. Hơn

nữa vì chúng ta khơng biết loại trình duyệt nào sẽ truy cập vào trang chúng ta nên chúng ta phải hoặc là include cả OBJECT lẫn EMBED (đặt EMBED trong phần COMMENT của OBJECT) hoặc là xác định loại trình duyệt vào thời gian yêu cầu để dùng tag đúng cho loại trình duyệt đĩ. Quá trình này thì hiển nhiên nhưng nhàm chán và mất thời gian.

Action jsp:plugin chỉ dẫn server xây dựng một tag thích hợp

cho các applet mà sử dụng Plug-In.

1)

1) jsp:plugin action.jsp:plugin action.

Phương cách đơn giản nhất để sử dụng jsp:plugin là cung

cấp cho nĩ bốn thuộc tính: type, code, width, height. Chúng ta định giá trị “applet” cho thuộc tính type và ba thuộc tính

cịn lại sử dụng giống như APPLET tag bình thường. Với

ngoại lệ là các action thì cĩ cú pháp XML nên các thuộc

tính trong nĩ cũng phải theo qui ước XML. Ví dụ với

APPLET tag trong HTML

<APPLET CODE=“MyApplet.class” WIDTH=457 HEIGHT=350> </APPLET>

sử dụng jsp:plugin action như sau: <jsp:plugin type=“applet” code=“MyApplet.class” width=“457” height=“350” />

Ngồi bốn thuộc tính này jsp:plugin cịn cĩ các thuộc tính

sau và hầu hết giống (nhưng khơng phải là tất cả) như các thuộc tính của APPLET tag.

codebase, align, archive, hspace, name, vspace, title

Giống như APPLET tag.

jreversion

Xác định số phiên bản của Java Runtime Environment, các giá trị cĩ thể nhận là “1.1”, “1.2”. nspluginurl 849 852 855 858 861 864 867 870 873 876 879

JSP Technology Căn Bản Về JSP

URL cho Netscape mà cĩ thể download Plug-In. Giá trị mật định sẽ hướng người dùng đến web site của Sun, nhưng với intranet chúng ta cĩ thể muốn chỉ dẫn người dùng đến một bản sao cục bộ.

iepluginurl

URL cho Internet Explorer mà cĩ thể download Plug-In.

2)

2) jsp:param và jsp:params action.jsp:param và jsp:params action.

jsp:param được dùng trong các actions khác như:

jsp:include, jsp:forward, jsp:plugin. Action này dùng để

cung cấp cặp tên và giá trị (name/value) cho các actions

trên. Cụ thể với jsp:plugin, thì action này sẽ định rõ tên và giá trị mà được truy cập từ trong applet bởi getParameter.

Tất cả jsp:param actions đều phải nằm trong jsp:params

action. Ví dụ: Code 12: Sử dụng Applet <APPLET CODE=“MyApplet.class” WIDTH=457 HEIGHT=350> <PARAM NAME=“PARAM1” VALUE=“VALUE1”> <PARAM NAME=“PARAM2” VALUE=“VALUE2”> </APPLET>

trong JSP sử dụng như sau:

<jsp:plugin type=“applet” code=“MyApplet.class” width=“457” height=“350” > <jsp:params> <jsp:param name=“PARAM1” value=“VALUE1” /> <jsp:param name=“PARAM2” value=“VALUE2” /> </jsp:params> </jsp:plugin> 3)

3) jsp:fallback action.jsp:fallback action.

60 882 885 888 891 894 897 900 903 906 909 912

JSP Technology Căn Bản Về JSP

jsp:fallback cung cấp văn bản thay thế đối với các trình duyệt khơng hổ trợ OBJECT hay EMDEB. Chúng ta sử dụng action này giống như là dùng văn bản thay thế được đặt trong APPLET tag. Ví dụ chúng ta cĩ thể thay thế

Code 13: Sử dụng jspfallback

<APPLET CODE=“MyApplet.class” WIDTH=457 HEIGHT=350>

<B> Error: this example requires Java. </B> </APPLET> với <jsp:plugin type=“applet” code=“MyApplet.class” width=“457” height=“350” > <jsp:fallback>

<b> Error: this example requires Java. </b> </jsp:fallback>

</jsp:plugin>

3.

3. Actions dùng để forward và sử dụng Components.Actions dùng để forward và sử dụng Components. 1)

1) Chuyển các request từ các trang JSP.Chuyển các request từ các trang JSP.

Tình huống chuyển request phổ biến nhất là request đĩ, đầu tiên, bắt nguốn từ servletservlet đĩ chuyển request này đến trang JSP. Lý do để servlet thường xử lý request gốc là để kiểm tra các tham số trong request và thiết lập Beans nên địi hỏi nhiều cơng việc lập trình và nĩ thuận tiện để lập trình trong servlet hơn là trong tài liệu JSP. Nguyên nhân mà trang đích thường lại là tài liệu JSP là JSP rất đơn giản trong tiến trình tạo ra tài liệu HTML.

Tuy nhiên điều này chỉ là định hướng thường dùng chứ khơng cĩ nghĩa là chỉ cĩ một cách để thực hiện. Do đĩ để đơn giản và dễ sử dụng hơn trong việc nhúng mã

RequestDispatcher trong một scriptlet chúng ta cĩ thể sử dụng jsp:forward action. Ví dụ: Code 14: Sử dụng jspforward <% String dest; 915 918 921 924 927 930 933 936 939 942 945 948

JSP Technology Căn Bản Về JSP if (Math.random() > 0.5) { dest = “page1.jsp”; } else { dest = “page2.jsp”; } %>

<jsp:forward page=“<%= dest %>” />

Action này cho phép điều phối một request hiện hành vào

lúc runtime đến một tài nguyên tĩnh, trang JSP hay lớp

servlet trong cùng một ứng dụng.

2)

2) Sử dụng component trong JSP.Sử dụng component trong JSP.

Chúng ta cĩ thể sử dụng các actions sau để sử dụng lại các

component (Beans) trong JSP: jsp:useBean, jsp:setProperty, jsp:getProperty. Các action này được trình bày trong chương II. 951 954 957 960 963

JSP Technology JSP JavaBeans

Chương II

Chương II JSP JavaBeansJSP JavaBeans

I.

I. Khái niệm và các quy ước của Bean.Khái niệm và các quy ước của Bean.

1.

1. Khái niệm.Khái niệm.

Mơ hình thành phần (component) trong JSP được tập trung vào các component phần mềm của Java được gọi là Bean.

Định nghĩa chính thức của JavaSoft về Bean: “JavaBean là một

component phần mềm cĩ thể dùng lại được, cĩ thể được thực hiện trực quan bằng mơi trường phát triển tích hợp IDE (Integrated Development Environment).”

JavaBean API: tuân theo các quy ước được xác định bởi

JavaBean API, cho phép JSP container tương tác với Beans ở

mức lập trình mặc dù JSP container thực sự chẳng hiểu Bean

thực hiện những gì và hoạt động ra sao. Đối với JSP, chúng ta chỉ quan tân đến các khía cạnh API rồi ra các dấu hiệu cho những hàm tạo của Bean và các phương thức truy cập thuộc tính xử lý.

Giống như bất kỳ lớp Java nào, các thể hiện của Bean đơn thuần chỉ là các đối tượng Java. Chúng ta thường cĩ sự lựa chọn hoặc là tham chiếu tới Beans và các phương thức của chúng trực tiếp qua mã Java trong các lớp khác hoặc là thơng qua các scripting element trong trang JSP. Vì các scripting

element cũng theo các quy ước của Bean nên chúng ta cĩ thể

làm việc với Beans mà khơng cần phải viết một đoạn mã Java

nào. Bean container như JSP container, cĩ thể cung cấp sự

truy cập dễ dàng vào Beans và các thuộc tính của chúng.

2.

2. Các quy ước của Bean.Các quy ước của Bean.

Khi định nghĩa Bean chúng ta phải tuân theo các quy tắc sau:

- Tên lớp của Bean phải cĩ tiếp vĩ ngữ là Bean chẳng hạn

UserBean, DataAccessBean, ...Thật sự thì quy tắc này khơng là yêu cầu bắt buộc nhưng nĩ là một định hướng thơng dụng và cho phép những nhà phát triển khác hiểu ngay lập tức vai trị của lớp này.

- Một Bean phải cĩ một hàm tạo khơng cĩ tham số.

66 966 969 972 975 978 981 984 987 990 993 996

JSP Technology JSP JavaBeans

- Bean khơng nên cĩ bất kỳ biến thể hiện (field) nào là

‘public’.

- Các giá trị bền vững nên được truy cập thơng qua các

phương thức gọi là getXxx và setXxx.

- Đối với các server-side Bean khơng nên dùng thư viện

đồ hoạ.

II.

II. JSP sử dụng Beans.JSP sử dụng Beans.

1.

1. Các JSP element dùng cho Bean.Các JSP element dùng cho Bean.1) 1)

1) jsp:useBean elementjsp:useBean element

Cho phép chúng ta tải một Bean với tên và phạm vi xác định vào trang JSP.

Cú pháp:

<jsp:useBean id = “beanName” scope = “value”

typeSpec>

<!-- các element khác --> </jsp:useBean>

Nếu khơng cĩ body, tức là khơng cĩ tag nào trong thân của

jsp:useBean thì cĩ cú pháp là empty tag.

TypeSpec cĩ thể hoặc (|) trong các thuộ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”

Các giá trị của thuộc tính scope:

- page

Đây là giá trị mặc định của scope. Bean với giá trị này sẽ cĩ sẵn từ javax.servlet.jsp.PageContext trong trang hiện hành. Bean sẽ được loại bỏ khi một response gởi trở về client hoặc request được chuyển tới một trang mới. - request 999 1002 1005 1008 1011 1014 1017 1020 1023 1026 1029

JSP Technology JSP JavaBeans

Bean cĩ giá trị này thì cĩ sẵn từ đối tượng

ServletRequest của trang hiện hành và bất kỳ trang được include hay forward nào bằng cách sử dụng

phương thức getAttribute(name). Bean sẽ bị huỷ bỏ

khi một response gởi trở về client. - session

Bean được sử dụng trong bất kỳ trang nào cĩ tham gia vào một session của client. Cĩ phạm vi trong cả một session của client. Bean này được lưu trữ trong đối tượng HttpSession.

- application

Bean được sử dụng trong bất kỳ trang nào trong ứng dụng hiện hành (cả request hiện tại và tương lai).

2)

2) jsp:setProperty elementjsp:setProperty element

Gán một giá trị hoặc nhiều giá trị (thuộc tính mảng) của thuộc tính vào Bean.

Cú pháp:

<jsp:setProperty name = “beanName” options />

options cĩ thể hoặc (|) trong các thuộc tính sau:

options::=property =“*” |

property =“propertyName” |

property =“propertyName” param =“paraName” |

property =“propertyName”

value =“{<%= expr%> | string}”

3)

3) jsp:getProperty elementjsp:getProperty element

Lấy giá trị của thuộc tính Bean để hiển thị giá trị này trong trang kết quả.

Cú pháp:

<jsp:getProperty name = “beanName” property = “propertyName” />

2.

2. Phương pháp chuyển kiểu tự động JSP Phương pháp chuyển kiểu tự động JSP  Bean Bean

Các thuộc tính của một thành phần JSP thì khơng giới hạn giá trị chuổi (string) nhưng rất quan trọng để hiểu rằng tất cả giá trị của thuộc tính được truy cập qua <jsp:getProperty> tag sẽ được 1032 1035 1038 1041 1044 1047 1050 1053 1056 1059 1062

JSP Technology JSP JavaBeans

chuyển thành kiểu chuổi. Tuy nhiên, phương thức getter khơng

cần trả về kiểu String một cách tường minh vì JSP container sẽ

tự động chuyển giá trị trả về này thành kiểu String nếu cần

thiết. Đối với các kiểu dữ liệu cơ bản của Java, sự chuyển đổi được thể hiện trong bả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ự, tất cả phương thức setter của thuộc tính được truy cập với <jsp:setProperty> tag sẽ được tự động chuyển từ String

sang một kiểu gốc thích hợp bởi JSP container. Điều này được

thực hiện qua các phương thức của các lớp vỏ bọ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)

3.

3. Tìm hiểu cách Tìm hiểu cách INTROSPECTOR làm việc.INTROSPECTOR làm việc.

1) 1) Introspector là gì?Introspector là gì? 72 1065 1068 1071 1074

JSP Technology JSP JavaBeans

Introspector là bộ phân tích mà qua đĩ Java xem xét các đoạn mã của chương trình để tìm ra những phương thức dùng để xây dựng và áp dụng cho từng thuộc tính cũng như tình huống cụ thể. Chúng ta khơng cần quan tâm đến các khai báo phức tạp khác. Ví dụ thiết lập hai phương thức sau:

public void setAge(int age) public int getAge()

Theo cách này Bean container sẽ hiểu là chương trình muốn tạo ra thuộc tính là age cĩ kiểu int – Bean container sẽ chuyển các thuộc tính theo quy tắc:

FoorBar  foorBar

Z  z

URL  URL

2)

2) Thiết kế các phương thức mẫu dùng choThiết kế các phương thức mẫu dùng cho

thuộc tính.

thuộc tính.

Đối với thuộc tính mang những trị đơn, hai phương thức

gettersetter được viết theo mẫu sau (với getter và setter

xem 4.Thuộc tính của Bean):

public void setAttributeName(AttributeType param) public AttributeType getAttributeName()

Đối với thuộc tính mang những trị kiểu boolean, phương thức getter được dùng với tiếp đầu ngữ là is thay cho get:

public void setAttributeName(AttributeType param) public boolean isAttributeName()

Đối với thuộc tính gồm nhiều phần tử (index attribute) các phương thức gettersetter cũng được thiết lập tương tự. Chúng ta cĩ thể sử dụng một cặp phương thức hay cả hai cặp phương thức cũng được.

public void setAttributeName(int index, AttributeType value)

public AttributeType getAttributeName()

và/hoặc

public void setAttributeName(AttributeType[] value) public AttributeType[] getAttributeName()

3)

3) Khai báo các phương thức một các tườngKhai báo các phương thức một các tường

minh. minh. 1077 1080 1083 1086 1089 1092 1095 1098 1101 1104 1107 1110

JSP Technology JSP JavaBeans

Nếu khơng muốn bộ phân tích Introspector ngầm định, chúng ta cĩ thể khai báo và xử lý các phương thức một cách tường minh nhờ vào một lớp phụ dùng để mơ tả các phương

Một phần của tài liệu ứng dụng cụ thể chương trình vào công ty liên doanh bêtông việt úc (Trang 25)

Tải bản đầy đủ (DOC)

(117 trang)
w