Tài liệu Đồ án Lập trình jsp technology: ĐỒ ÁN:
LẬP TRÌNH JSP
TECHNOLOGY
Phần I: JSP TECHNOLOGY
Chương I: CĂN BẢN VỀ JSP
JavaServer Pages (JSP) là một kỹ thuật server-side do đó chúng ta không thể
thực hiện bất kỳ hành động nào ở client. JSP cho phép chúng ta tách thành phần
động của trang ra khỏi thành phần tĩnh HTML. Rất đơn giản, chúng ta chỉ cần
viết một tài liệu HTML bình thường rồi sau đó bao quanh mã của thành phần
động trong các tag đặc biệt, hầu hết các tag bắt đầu với .
Ví dụ, đây là một phần của trang JSP, có kết quả trả về là “Thanks for reading jsp
book.” với URL là
Thanks for reading book.
Kỹ thuật JSP là một thành phần trong đại gia đình Java; nó sử dùng ngôn
ngữ kịch bản dựa vào ngôn ngữ lập trình Java, và các trang JSP được biên dịch
thành servlets. Từ đó chúng ta cũng nhận biết được, JSP thì không phụ thuộc bất
kỳ nền (platform) nào. Nó đáp ứng được khuynh hướng của Sun MicroSystem là
“write one, run anywhere”.
Các trang JSP có thể gọi các thành phần JavaBeans, Enterprise...
145 trang |
Chia sẻ: haohao | Lượt xem: 2061 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đồ án Lập trình jsp technology, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ĐỒ ÁN:
LẬP TRÌNH JSP
TECHNOLOGY
Phần I: JSP TECHNOLOGY
Chương I: CĂN BẢN VỀ JSP
JavaServer Pages (JSP) là một kỹ thuật server-side do đĩ chúng ta khơng thể
thực hiện bất kỳ hành động nào ở client. JSP cho phép chúng ta tách thành phần
động của trang ra khỏi thành phần tĩnh HTML. Rất đơn giản, chúng ta chỉ cần
viết một tài liệu HTML bình thường rồi sau đĩ bao quanh mã của thành phần
động trong các tag đặc biệt, hầu hết các tag bắt đầu với .
Ví dụ, đây là một phần của trang JSP, cĩ kết quả trả về là “Thanks for reading jsp
book.” với URL là
Thanks for reading book.
Kỹ thuật JSP là một thành phần trong đại gia đình Java; nĩ sử dùng ngơn
ngữ kịch bản dựa vào ngơn ngữ lập trình Java, và các trang JSP được biên dịch
thành servlets. Từ đĩ chúng ta cũng nhận biết được, JSP thì khơng phụ thuộc bất
kỳ nền (platform) nào. Nĩ đáp ứng được khuynh hướng của Sun MicroSystem là
“write one, run anywhere”.
Các trang JSP cĩ thể gọi các thành phần JavaBeans, Enterprise JavaBeans
(EJB) hoặc custom tags để thực hiện các xử lý trên server. Và như thế, kỹ thuật
JSP là thành phần chủ chốt trong kiến trúc khả chuyển của Java cho những ứng
dụng dựa vào Web.
Như đã biết, JSPs sẽ biên dịch thành servlets nhưng JSP khơng thể thay thế
servlet vì các lý do sau:
- Một số tác vụ được giải quyết rất tốt bằng servlet. Ví dụ, các ứng dụng
xuất ra dữ liệu nhị phân hoặc chỉ xác định nơi gởi trở lại cho người
dùng (bằng cách dùng response.sendRedirect) được dùng servlet thì
tốt nhất.
- Một số tác vụ khác lại được giải quyết rất tốt bằng JSP như các tình
huống mà cấu trúc nền tảng của trang HTML là cố định nhưng các giá
trị trong nĩ lại thay đổi.
- Cịn các tác vụ cịn lại cần sự kết hợp cả servlet và JSP. Ví dụ, trong
yêu cầu gốc được trả lời bằng một servlet mà thực hiện mọi cơng việc,
lưu trữ các kết quả trong các Beans và điều phối yêu cầu này đến một
trong những trang JSP cĩ thể hiển thị nĩ.
Cả ba định hướng này đều cĩ chổ đứng của nĩ. Chẳng cĩ định hướng nào hổ
trợ đầy đủ cho mọi ứng dụng .
Trước khi đi vào chi tiết cơng nghệ JSP, chúng tơi cĩ một vài so sánh các
cơng nghệ được sử dụng trong ứng dụng với các cơng nghệ khác.
I. Một số so sánh các cơng nghệ được sử dụng với cơng nghệ khác?
1. MySQL Server.
MySQL là hệ quản trị cơ sở dữ liệu quan hệ. Cơ sở dữ liệu là một tập dữ
liệu cĩ cấu trúc và được lưu trữ trong các bảng riêng biệt, mỗi bảng được lưu
trong ba files với tên cơ sở dữ liệu là tên thư mục chứa các files đĩ. SQL được
viết tắt từ Structured Query Language, là ngơn ngữ chuẩn phổ biến nhất để truy
cập cơ sở dữ liệu. Sau đây là một số ưu và nhược điểm của MySQL với các hệ
quản trị cơ sở dữ liệu khác:
a) Ưu diểm.
- Chạy được trên rất nhiều nền khác nhau như Unix, Windows,
MacOS, ….
- MySQL là hệ quản trị nhanh, nhỏ gọn. Các script files cĩ thể chạy
trên một số hệ quản trị khác như MS SQL Server, Oracle.
- Theo một số web site thống kê, việc thực hiện các lệnh insert,
update, delete nhanh nhất trong các hệ quản trị.
- Miễn phí và mã nguồn mở (open source code).
b) Khuyết điểm.
- Chưa hổ trợ một số chuẩn ANSI SQL92 như khơng cho các câu
select lồng nhau, select into table, khố ngoại, triggers, stored
procedures,…
- Khơng cĩ mơi trường đồ hoạ.
2. So sánh JSP với các cơng nghệ khác.
a) JSP với ASP.
ASP là cơng nghệ tương đương từ Microsoft. JSP cĩ ba lợi thế so với
ASP.
- Phần động được viết bằng Java, chứ khơng phải bằng các ngơn ngữ
script như VBScript, JavaScript. Vì thế nĩ mạnh mẽ hơn tốt hơn đối với các ứng
dụng phức tạp cần các thành phần sử dụng lại.
- JSP chạy được trên nhiều hệ điều hành và web servers khác nhau
ngay cả với IIS của Microsoft (cần cĩ plugins từ Webphere, JRun, ...)
- Hổ trợ sự mở rộng tag với custom tag.
b) JSP với PHP.
Lợi điểm của JSP với PHP cũng như với ASP. JSP được viết bằng Java
mà chúng ta đã biết với các API mở rộng cho mạng, truy cập cơ sở dữ liệu, các
SGML HTML
XML
CDF
SMIL
CML
MML
đối tượng phân tán, … trong khi với PHP địi hỏi chúng ta phải học cả một ngơn
ngữ mới.
3. Tầm quan trọng của XML cùng với XSLT.
a) XML.
XML là tập con của SGML, nĩ kết hợp tính linh động và sức mạnh của
SGML cùng với một số tính năng hữu ích của HTML. Vì XML là tập con của
SGML nên nĩ cũng tương thích với các hệ thống dựa vào SGML đã cĩ. XML là
lực đẩy cho các nghi thức trên internet và các phần mềm để dễ dàng xử lý và
truyền dữ liệu.
Ở trên đã nĩi XML là tập con của SGML và HTML là một sự cài đặt
của SGML, mơ hình sau đây diễn tả mối quan hệ giữa các ngơn ngữ và các siêu
ngơn ngữ:
Metalanguages Languages
Implementation
subset
Implementation
CDF : Channel Difinition Format – cho phép các tác giả của các Web
sites cho phép các người đăng ký biết khi nào Web site này thay đổi, CDF đã
được giới thiệu trong IE4 vì vậy nĩ chỉ làm việc với IE của Microsoft.
SMIL : Synchronized Multimedia Integration Language – được sử dụng
để đồng bộ hĩa các dịng dữ liệu đa truyền thơng được truyền qua internet.
CML : Chemical Markup Language – mơ tả các cơng thức hĩa học.
MML: Mathematical Markup language- mơ tả các phương trình, biểu
thức tốn học.
Tính tự mơ tả dữ liệu của XML : các tags mơ tả các vấn đề, các đối
tượng gần gủi với thế giới thực. Chúng ta sẽ thấy rõ hơn với hai ví dụ sau, đây là
ví dụ minh họa nên nĩ cịn thiếu nhiều thuộc tính trong thế giới thực :
Ví dụ với XML tags
Giang
Le
Dinh
0750
22
Ví dụ với HTML tags
Giang
Le
Dinh
Number id :
0750
Age :
22
- XML cĩ mối quan hệ chặt chẽ với JSP, đặt tả JSP hổ trợ cú pháp XML,
chúng ta cĩ thể trộn lẫn mã chúng với nhau dễ dàng như JSP với HTML như thế
chúng ta cĩ thể dùng JSP tự động phát sinh trang XML.
- Hiện nay cĩ rất nhiều sản phẩm quản trị cơ sở dữ liệu mà mỗi sản
phẩm đều cĩ các đặc tính riêng nĩ, do đĩ khi các cơ sở dữ liệu khác nhau cần
chuyển đổi dữ liệu với nhau lại khơng tương thích. Vì vậy người làm cơng việc
này cần phải biết nhiều sản phẩm quản trị cơ sở dữ liệu khác nhau. Do đĩ XML là
một định dạng chuẩn mà các hệ quản trị cần hổ trợ. Hiện nay cĩ nhiều hệ quản trị
lớn hổ trợ XML như MS SQL Server, Oracle, …
b) XSLT.
Extensible Stylesheet Language Transformation (XSLT) là một ngơn ngữ
được tách ra từ ngơn ngữ XSL, “XSLT là một ngơn ngữ dùng để chuyển đổi các
XML document thành các XML document khác”. Nĩ được viết bằng XML, điều
này cĩ nghĩa rằng sự chuyển đổi trong XSLT được trình bày như một well-
formed XML document. XSLT đĩng vai trị quan trọng trong hướng phát triển
“phát sinh ngơn ngữ markup hướng người dùng”.
II. JSP scripting elements.
Các scripting elements trong JSP cho phép chúng ta chèn mã vào servlet mà
sẽ được phát sinh từ trang JSP. Cĩ ba dạng sau:
- Biểu thức cĩ dạng , được định giá trị và chèn vào
luồng xuất của servlet.
- Scriptlet cĩ dạng , được chèn vào phương thức
_jspService của servlet (được gọi là service).
- Khai báo cĩ dạng , được chèn vào thân của lớp servlet,
như là các field của lớp thơng thường.
Template text
Trong nhiều trường hợp, phần lớn các trang JSP chỉ bao gồm HTML tĩnh,
được biết như là template text. Cĩ hai ngoại lệ phụ cho quy tắc “template text
được chuyển thẳng sang HTML tĩnh”. Đầu tiên, nếu chúng ta muốn cĩ <% trong
luồng xuất thì chúng ta cần phải đặt <\% trong template text. Thứ hai, nếu chúng
ta muốn cĩ chú thích trong JSP mà khơng cĩ trong tài liệu kết quả, dùng:
Chú thích HTML cĩ dạng:
thì được chuyển qua tài liệu HTML thơng thường.
Cú pháp XML
Trong JSP cĩ rất nhiều element cĩ cú pháp XML như jsp:useBean,
jsp:include, jsp:setProperty, ... Tuy nhiên scripting elements lại cĩ hai dạng cú
pháp sau:
JSP Syntax XML Syntax
Java code
Java code
Java code
1. Các biến được định nghĩa sẵn trong JSP
Để đơn giản hố mã trong các biểu thức hay scriptlets trong JSP, người ta
cung cấp cho chúng ta chín đối tượng đã được định nghĩa trước, cĩ người cịn gọi
là các đối tượng ngầm định. Do các khai báo trong JSP nằm ngồi phương thức
_jspService (được gọi bởi service) nên các đối tượng này khơng cho phép các
khai báo truy cập vào.
request
Biến này cĩ kiểu là javax.servlet.http.HttpServletRequest, cĩ phạm
vi trong một yêu cầu (request). Nĩ cho phép chúng ta truy cập vào
các tham số của request như loại request (GET, POST, …) và các
incoming HTTP header (cookies).
response
Cĩ kiểu là javax.servlet.http.HttpServletResponse, cĩ phạm vi tồn
trang (page). Chú ý rằng vì luồng xuất thì thường làm vật đệm cho
nên việc gán mã tình trạng của HTTP và response header thì hợp lý
trong JSP, mặc dù điều này thì khơng được phép trong servlet một
khi đã cĩ luồng xuất nào được gởi đến client.
out
Cĩ kiểu javax.servlet.jsp.JspWriter và phạm vi trong một trang
(page). Dùng để gởi các thơng xuất đến client. Đối tượng out được
dùng thường xuyên trong scriptlets, các biểu thức tự động được đưa
vào luồng xuất nên hiếm khi cần tham chiếu đến đối tượng này.
session
Cĩ phạm vi trong một phiên truyền (session) và kiểu tương ứng là
javax.servlet.http.HttpSession. Gọi về các phiên truyền được tạo tự
động vì thế biến này vẫn cịn kết nối ngay cả chẳng cĩ một tham
chiếu incoming session nào. Một ngoại lệ là nếu chúng ta sử dụng
thuộc tính session của page directive để tắc các phiên truyền, mà lại
cố tham chiếu đến biến session thì sẽ gây ra các lỗi vào lúc trang
JSP được dịch thành servlet.
application
Biến này cĩ kiểu là javax.servlet.ServletContext, cĩ phạm vi trong
tồn ứng dụng (application). ServletContext lấy từ một đối tượng
cấu hình servlet là getServletConfig().getContext(). Các trang JSP
cĩ thể lưu trữ dữ liệu persistent trong đối tượng ServletContext tốt
hơn là trong các biến thể hiện. ServletContext cĩ các phương thức
setAttribute và setAttribute mà cho phép chúng ta lưu trữ dữ liệu
config
Biến này cĩ phạm vi trang (page) và cĩ kiểu tương ứng là
javax.servlet.ServletConfig.
pageContext
Biến này cĩ kiểu là javax.servlet.jsp.PageContext và cĩ phạm vi là
trang (page). pageContext cho phép một điểm truy cập duy nhất tới
nhiều thuộc tính của trang và cung cấp một nơi thuận tiện để lưu
trữ dữ liệu dùng chung. Biến pageContext lưu trữ giá trị của
javax.servlet.jsp.PageContext cùng với trang hiện hành. Cĩ thể
xem chi tiết trong chương II về JavaBeans.
page
Biến này đồng nghĩa với this và điều này thì khơng hữu ích trong
ngơn ngữ lập trình Java, cĩ kiểu là java.lang.Object và cĩ phạm vi
trang (page).
exception
Trong một trang lỗi, chúng ta cĩ thể truy cập vào đối tượng
exception. Biến này cĩ kiểu là java.lang.Throwable và phạm vị là
trang (page).
2. Biểu thức trong JSP
Biểu thức trong JSP được dùng để chèn các giá trị trực tiếp vào luồng xuất.
Nĩ cĩ dạng sau:
Biểu thức này được định trị, được chuyển thành chuổi, và được chèn vào
trong trang. Sự định trị diễn ra ở thời gian runtime (khi trang được yêu cầu) và do
đĩ cĩ đầy đủ quyền truy cập các thơng tin của yêu cầu này. Ví dụ sau đây mơ tả
ngày/giờ mà trang được yêu cầu:
Current time:
Trong Java mỗi câu lệnh đều cĩ dấu ‘;’ kết thúc dịng. Tại sao biểu thức
trong JSP lại khơng cĩ dấu ‘;’? Vì biểu thức này được đưa vào luồng xuất chẳng
hạn như PrintWriter. Với ví dụ trên cĩ thể chuyển vào servlet như sau:
PrintWriter out = response.getWriter();
out.println(“Current time:” + new java.util.Date());
a) Biểu thức như là giá trị trong elements khác.
Biểu thức cĩ thể được sử dụng trong các thuộc tính của các elements
khác. Giá trị từ các biểu thức này sẽ được tính vào thời gian yêu cầu (request
time). Các elements cho phép sử dụng biểu thức trong các thuộc tính của chúng
là:
Tên Element Tên thuộc tính
jsp:setProperty name và value
jsp:include page
jsp:forward page
jsp:param value
b) Ví dụ expression.jsp.
Đây là một ví dụ hồn chỉnh đầu tiên của JSP. Nĩ chỉ hiển thị thời gian
hiện thời, tên máy,.. khi file này được truy cập.
Code 1: expression.jsp
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
JSP Expressions
<meta name="keywords" content=
"JSP,expressions,JavaServer,Pages,servlets" />
<meta name="description" content=
Code 1: expression.jsp (tiếp theo)
"A quick example of JSP expressions." />
<link rel="stylesheet" href="JSP-Styles.css"
type="text/css" />
JSP Expressions
Current time:
Your hostname:
Your session ID:
The testParam form parameter:
3. JSP scriptlets
Scriptlets là những đoạn mã cĩ chứa bất kỳ mã Java nào nằm giữa “<%”
và “%>”. Nếu chúng ta muốn thực hiện thứ gì đĩ phức tạp hơn là chỉ chèn vào
một biểu thức đơn giản thì JSP scriptlets cho phép chúng ta thêm bất kỳ đoạn mã
Java nào vào trang JSP. Các scriptlets này được đưa vào phương thức _jspService
(mà được gọi bởi service) của servlet. Cĩ cú pháp:
Code 2: scriptlet.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "DTD/xhtml1-strict.dtd">
Code 2: scriptlet.jsp (tiếp theo)
JSP Scriptlets
<%
String bgColor = request.getParameter("bgColor");
boolean hasExplicitColor;
if (bgColor != null) {
hasExplicitColor = true;
} else {
hasExplicitColor = false;
bgColor = "WHITE";
}
%>
">
Color Testing
<%
if (hasExplicitColor) {
out.println("You supplied an explicit background color
of " + bgColor + ".");
} else {
out.println("Using default background color of WHITE. "
+ "Supply the bgColor request attribute to try " +
"a standard color, an RRGGBB value, or to see " +
"if your browser supports X11 color names.");
}
%>
4. Khai báo trong JSP
Một khai báo trong JSP cho phép chúng ta định nghĩa các phương thức
hoặc các trường (biến) cĩ phạm vi tồn trang. Khai báo sẽ được chèn vào trong
lớp của servlet (bên ngồi phương thức _jspService được gọi bởi service để xử lý
một yêu cầu). Một khai báo cĩ dạng sau:
Các khai báo trong JSP thì khơng phát sinh ra bất kỳ thơng xuất nào,
chúng thường được dùng để liên kết với các biểu thức hoặc scriptlets. Chẳng hạn,
đây là một trang JSP mà in ra số lần truy cập vào trang.
Code 3: declaration.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "DTD/xhtml1-strict.dtd">
JSP Declarations
<link rel="styleshhet" href="JSP-Styles.css" type="text/css"
/>
JSP Declarations
Accesses to page since server reboot:
III. JSP directives.
Directives là các lệnh (chỉ thị) đến JSP container để xử lý trang JSP, chúng
tác động lên tồn bộ cấu trúc của lớp servlet. Chúng cĩ dạng sau:
Cú pháp này thì dễ để soạn thảo, ngắn gọn, súc tích nhưng khơng tương thích
với XML (Cú pháp XML ở dưới).
Directives thì khơng xuất bất kỳ thứ gì ra luồng xuất out. Chỉ cĩ ba directives
trong JSP: page, include và taglib.
Cú pháp XML
Tương tự như scripting elements, các directives cũng cĩ hai dạng cú pháp:
JSP Syntax XML Syntax
: attr_list
sẽ được mơ tả phần sau trong
chương này.
<jsp:directive.include file=”URL”
/>
:
directive này được trình bày
trong chương III Tag Libraries.
1. The page directive
page directive cho phép chúng ta điều khiển cấu trúc của servlet bằng
cách đưa vào các lớp, đặt MIME type, …. Một page directive cĩ thể được đặt bất
cứ nơi nào trong trang JSP.
page directive định nghĩa một số thuộc tính phụ thuộc vào trang và giao
tiếp giữa các thuộc tính này với JSP container.
language
Định nghĩa ngơn ngữ kịch bản được sử dụng trong scriptlets, biểu
thức và khai báo. Trong JSP 1.2 là phiên bản mới nhất chỉ cĩ hổ
trợ “java” cho thuộc tính này do đĩ “java” này cũng là giá trị mật
định.
extends
Thuộc tính này chỉ định lớp cha (superclass) của servlet sẽ được
phát sinh cho trang JSP, cĩ dạng sau:
Chú ý rằng khi sử dụng thuộc tính này phải hết sức cẩn thận vì tại
server cĩ thể đã dùng lớp cha mật định.
import
Thuộc tính này mơ tả các kiểu sẵn dùng trong mơi trường kịch bản
(theo java). Chúng ta cĩ thể import vào từng lớp hoặc cả một gĩi
(package).
Nếu import vào nhiều lớp hay packages thì cách nhau dấu “,”.
session
Thuộc tính session kiểm sốt liệu cĩ hay khơng một trang tham gia
vào HTTP session. Cĩ hai giá trị “true” và “false”. Mật định là
“true”, chỉ ra rằng biến ngầm định session nên được nối kết với
session hiện hành. Giá trị “false” cĩ nghĩa rằng chẳng cĩ session
nào được sử dụng tự động và nếu cố truy cập vào biến session sẽ
trả lỗi vào lúc trang được dịch thành servlet.
buffer
Thộc tính này xác định kích thước của vùng đệm được sử dụng bởi
biến out. Cĩ dạng sau:
Thuộc tính này cĩ giá trị mật định là “8kb”, giá trị “none” chẳng
cĩ vùng đệm nào được cấp và tất cả dữ liệu xuất sẽ được ghi trực
tiếp qua ServletResponse, PrintWriter.
autoFlush
Xác định liệu luồng xuất cĩ vùng đệm được tự động flush (giá trị
“true” mật định) khi vùng đệm đầy hay sẽ tung ra một ngoại lệ khi
vùng đệm tràn (“false”).
Chú ý rằng sẽ khơng hợp lý nếu đặt autoFlush=“false” khi
buffer=“none”.
isThreadSafe
Xác định mức độ an tồn của tiểu trình (thread) được cài đặt trong
trang (với giao tiếp SingleThreadModel), “true” là giá trị mật định.
info
Định nghĩa một chuỗi cĩ thể truy xuất từ servlet bằng phương thức
getServletInfo().
errorPage
Thuộc tính này xác định một trang JSP nên bất kỳ các ngoại lệ nào
được tung ra nhưng khơng bắt ngoại lệ này trong trang hiện hành.
Ngoại lệ tung ra sẽ cĩ sẵn trong biến ngầm định exception.
isErrorPage
Xác định trang JSP hiện thời cĩ thể hoạt động như một trang lỗi
cho một trang JSP khác. Giá trị “false” là mật định cho thuộc tính
này.
contentType
Thuộc tính này gán Content-Type cho response header, mơ tả kiểu
MIME của tài liệu được gởi đến client. Thuộc tính contentType cĩ
một trong hai dạng sau:
<%@ page contentType=“MIME-Type;
charset=Character-Set” %>
Một số kiểu MIME-Type thường dùng: “text/html”, “text/xml”,
“text/plain”, “image/gif”, “image/jpeg”.
pageEncoding
Định nghĩa bộ mã hố ký tự cho trang JSP (character encoding),
thuộc tính này hổ trợ cho bộ mã Unicode và Latin-1, cĩ giá trị mật
định là “ISO-8859-1”
Code 4: pagedirective.jsp
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
The page Directive
<link rel="styleshhet" href="JSP-Styles.css"
type="text/css" />
The page Directive
Ví dụ 4: pagedirective.jsp (tiếp theo)
<%@ page import="java.util.*, com.legiang.*"
contenType="text/html" %>
<%!
private String randomID() {
int num = (int)(Math.random()*10000000.0);
return("id" + num);
}
private final String NO_VALUE = "No Value";
%>
<%
Cookie[] cookies = request.getCookies();
String oldID = ServletUtilities.getCookieValue(cookies, "userID",
NO_VALUE);
String newID;
if (oldID.equals(NO_VALUE)) {
newID = randomID();
} else {
newID = oldID;
}
LongLivedCookiecookie = new LongLivedCookie ("userID" ,
newID);
response.addCookie(cookie);
%>
This page was accessed at with a userID
cookie of .
2. The include directive
Chúng ta sử dụng include directive để đưa một file vào tài liệu JSP chính
vào lúc tài liệu dịch thành servlet (mà thường vào lần đầu tiên truy cập vào trang
này). Cĩ cú pháp như sau:
Thật sự JSP chia làm hai nhánh để include một file vào một tài liệu chính.
File được include thì được chèn vào trang vào lúc biên dịch, Cịn nhánh cịn lại
thì được chèn vào tại thời gian yêu cầu (request) với element là jsp:include sẽ
được trình bày trong mục IV. Các action chuẩn.
File được include vào khơng những chứa HTML tĩnh mà cịn chứa được mã
JSP động. Đặc tính này cho phép chúng ta tạo các thanh định hướng, các phần
thơng tin cần tương tác, đếm số trang, ... riêng trên một file khi chúng ta cĩ nhiều
trang sử dụng lại chúng. Nếu file được include thay đổi thì tất cả JSP files sử
dụng nĩ cần phải được cập nhật lại.
Ví dụ về include directive
File đầu tiên là một đoạn của trang chứa các thơng tin tương tác cần thiết
cho file thứ hai dùng lại bằng include directive.
Code 5: contact.jsp
<%-- Các biến sau sẽ trở thành các fields trong servlet khi JSP file
gọi file này. --%>
<%! private int accessCount = 0;
private Date accessDate = new Date();
private String accessHost = "No previous access";
%>
This page © 2000
my-company.com.
This page has been accessed
times since server reboot. It was last accessed from
at .
Code 6: includedirective.jsp
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
Code 6: includedirective.jsp
The include Directive
Some Random Page
Information about our products and services.
Le, Le, Le.
Giang, Giang, Giang.
3. The taglib directive
Directive này định nghĩa thư viện tag và tiếp đầu ngữ cho những custom
tag được sử dụng trong trang JSP. Cĩ cú pháp sau:
taglib directive sẽ được trình bày chi tiết trong chương III.
IV. Các action chuẩn.
Actions chẳng qua là elements được định nghĩa trong bản đặc tả JSP và luơn
luơn cĩ sẵn trong các JSP file mà khơng cần import vào bất kỳ thứ gì và chúng cĩ
cú pháp XML. Cĩ chín actions chuẩn: jsp:include, jsp:useBean, jsp:setProperty,
jsp:getProperty, jsp:plugin, jsp:forward, jsp:fallback, jsp:params, jsp:param sẽ
được giới thiệu trong mục này.
1. Action chèn vào files ở thời gian request.
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 là để 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à:
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
What’s New
What's New at JspNews.com
Here is a summary of our four most recent news
stories:
Code 8: item1.html
Bill Gates acts humble. In a startling and unexpected
development, Microsoft big wig Bill Gates put on an open act of
humility yesterday.
More details...
Code 9: item2.html
Scott McNealy acts serious. In an unexpected twist,
wisecracking Sun head Scott McNealy was sober and subdued at
yesterday's meeting.
More details...
Code 10: item3.html
Larry Ellison acts conciliatory. Catching his competitors
off guard yesterday, Oracle prez Larry Ellison referred to his
rivals in friendly and respectful terms.
More details...
Code 11: item4.html
Sportscaster uses "literally" correctly. In an apparent
slip of the tongue, a popular television commentator was
heard to use the word "literally" when he did not
mean "figuratively."
More details...
2. 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 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.
a) 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>
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
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.
b) 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>
trong JSP sử dụng như sau:
<jsp:plugin type=“applet” code=“MyApplet.class”
width=“457” height=“350” >
c) jsp:fallback action.
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>
Error: this example requires Java.
với
<jsp:plugin type=“applet”
code=“MyApplet.class”
width=“457” height=“350” >
Error: this example requires Java.
3. Actions dùng để forward và sử dụng Components.
a) 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ừ servlet và servlet đĩ 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;
if (Math.random() > 0.5) {
dest = “page1.jsp”;
} else {
dest = “page2.jsp”;
}
%>
” />
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.
b) 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.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 40
Chương II : JSP JAVABEANS
I. Khái niệm và các quy ước của Bean.
1. 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. 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
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 41
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ố.
- 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. JSP sử dụng Beans.
1. Các JSP element dùng cho Bean.
a) jsp: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:
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:
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 42
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
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.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 43
- 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).
b) jsp: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:
options cĩ thể hoặc (|) trong các thuộc tính sau:
options::=property =“*” |
property =“propertyName” |
property =“propertyName” param =“paraName” |
property =“propertyName”
value =“{ | string}”
c) jsp: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” />
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 44
2. Phương pháp chuyển kiểu tự động JSP 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 tag sẽ được 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)
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 45
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
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)
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 46
long or Long java.lang.Long.valueOf(string)
3. Tìm hiểu cách INTROSPECTOR làm việc.
a) Introspector là gì?
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
b) Thiết kế các phương thức mẫu dùng cho thuộc tính.
Đối với thuộc tính mang những trị đơn, hai phương thức getter và setter
đượ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()
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 47
Đố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
getter và setter 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()
c) Khai báo các phương thức một các tường minh.
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 thức được gọi là BeanInfo. Khi Beans cĩ tên là xxx được biên
dịch, trước tiên Bean container sẽ đi tìm lớp cĩ tên là xxxBeanInfo. Nếu lớp này
tồn tại, các thơng tin trong lớp xxxBeanInfo sẽ được xử lý trước và áp dụng cho
các phương thức được tìm thấy. Các phương thức khơng được mơ tả trong
xxxBeanInfo sẽ được áp dụng cách phân tích kiểu Introspector mặc định. Xem
thêm III. Các giao tiếp bổ trợ cho Bean.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 48
4. Thuộc tính của Bean.
a) Các phương thức truy xuất.
Thuộc tính thật ra chỉ là những biến nằm trong một lớp, tuy nhiên những
biến này khơng nên sử dụng trực tiếp mà nên thơng qua các phương thức để truy
xuất chúng. Thơng thường biến được dùng vào hai mục đích đĩ là gán dữ liệu và
lấy dữ liệu ra để tính tốn. Java đưa ra hai loại phương thức để đáp ứng cho nhu
cầu truy xuất biến đĩ là các phương thức getter mang ý nghĩa đọc dữ liệu từ biến
và các phương thức setter mang ý nghĩa gán dữ liệu cho biến.
b) Các loại thuộc tính.
Chúng ta hãy xem các ví dụ sau:
- Thuộc tính mang những giá trị đơn.
Bean sau đây lấy thời gian của hệ thống.
Code 15: Java file
package com.legiang.bean;
import java .util.*;
public class CurrentTimeBean {
/*Data members*/
private int hours;
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 49
private int minutes;
/* Methods */
Code 15: Java file (tiế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
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 50
<jsp:useBean id="time"
class="com.legiang.bean.CurrentTimeBean"/>
It is now <jsp:getProperty name="time"
property="minutes"/>
minutes past the hour.
- Thuộc tính mang giá trị boolean.
Code 17: Java file
package com.legiang.bean;
public class LogicBean {
/*Data members*/
private boolean authorized;
/*Methods*/
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 51
public LogicBean() {
this.authorized = false;
}
public void setAuthorized(boolean authorized) {
this.authorized = authorized;
}
public boolean isAuthorized() {
Code 17: Java file (tiếp theo)
return authorized;
}
}
Code 18: JSP file
<jsp:useBean id="logic"
class="com.legiang.bean.LogicBean"/>
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 52
Do you authorize?
Answer:<jsp:getProperty name="logic"
property="authorized"/>
- Thuộc tính mang giá trị mảng.
Ví dụ này sẽ xây dựng một component mà cĩ thể thực hiện
các tính tốn tĩnh trên một dãy số.
Code 19: Java file
package com.legiang.bean;
import java.util.*;
public class StatBean {
/*Data members*/
private double[] numbers;
/*Methods*/
public StatBean() {
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 53
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 (tiếp theo)
double sum = 0;
for (int i=0; i < numbers.length; i++)
sum += numbers[i];
return sum;
}
public double[] getNumbers() {
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 54
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
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 55
<%
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 (tiếp theo)
out.println("" + numbers[i]);
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 56
}
%>
is equal to <jsp:getProperty name="stat"
property="average" />
Ngồi các loại thuộc tính trên, Java cịn cung cấp một số thuộc tính
nâng cao khác dùng cho các Bean đồ hoạ.
III. Các giao tiếp bổ trợ cho Bean.
Trong khi điều này khơng phải là yêu cầu đặc biệt thì cĩ một số giao tiếp cho
phép chúng ta cài đặt vào Beans. Các giao tiếp này cĩ thể được dùng để mở rộng
tính năng các Bean của chúng ta đối với các tình huống khác nhau.
1. Giao tiếp BeanInfo
Chúng ta đã biết về cơ chế tương phản (reflection) trong mục trước,
nhưng cĩ phương pháp khác mà một lớp Bean cĩ thể báo cho Bean container
(như JSP container) biết về các thuộc tính của nĩ bằng cách cài đặt giao tiếp
BeanInfo. Giao tiếp BeanInfo cho phép chúng ta tạo ra một lớp đồng hành với
Bean của chúng ta mà định nghĩa các thuộc tính và các cấp độ truy cập của nĩ.
Giao tiếp cĩ thể được dùng để thích ứng với các lớp Java đã cĩ đối với việc sử
dụng của Bean mà khơng cần thay đổi giao tiếp đã tạo. Nĩ cũng được sử dụng để
che dấu các thuộc tính nào được truy cập thường xuyên từ client, vì thỉnh thoảng
cơ chế reflection chuẩn của Java cĩ thể phơi bày nhiều thơng tin mà chúng ta lại
khơng muốn như thế.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 57
Để tạo lớp BeanInfo chúng ta chỉ cần đặt tên lớp cùng với tiếp vị ngữ
BeanInfo (như SimpleBeanBeanInfo) và cài đặt giao tiếp java.beans.BeanInfo.
Quy tắc đặt tên này là cách báo cho Bean container (như JSP container) biết để
xác định lớp BeanInfo thích hợp cho Bean chúng ta.
2. Giao tiếp Serializable
JavaBeans sau khi được thiết kế và đem vào sử dụng người dùng sẽ tuỳ ý
thay đổi các thuộc tính mà Bean cung cấp. Tuy nhiên khi chấm dứt chương trình
thì các thuộc tính này cũng mất đi. Lần sau khi dùng các thuộc tính này phải được
khởi tạo và đặt lại giá trị mới. Như vậy chu trình sống của Bean chỉ hạn hẹp trong
quá trình hoạt động của chương trình, khơng sử dụng lại sau này được. Java cung
cấp một khả năng lưu lại các đối tượng JavaBeans lên đĩa bằng cơ chế
Serializable. Khi một đối tượng hay Bean được lưu xuống tập tin nhị phân thì tất
cả biến hay các đối tượng con nằm bên trong lớp cha đều được lưu theo.
Một số server hổ trợ cơ chế persistent session bằng cách ghi bất kỳ dữ
liệu nào của session vào đĩa giữa các lần server ngừng hoạt động. Khi server hoạt
đơng trở lại thì dữ liệu được serialization được phục hồi trở lại. Một nguyên nhân
tương tự đưa vào các server để hổ trợ cho việc nhĩm các session lại trong các mơi
trường truyền thơng chậm chạp (do hoạt động nhiều, ...). Nhiều server sử dụng cơ
chế serialization để sao lặp dữ liệu của session giữa các web server trong nhĩm.
Nếu Beans của chúng ta khơng cài đặt giao tiếp Serializable thì server khơng thể
lưu trữ hoặc chuyển Beans của chúng ta trong các tình huống này.
3. Giao tiếp HttpSessionBindingListener
Việc cài đặt giao tiếp HttpSessionBindingListener của Servlet API trong
Beans chúng ta sẽ cho phép các thể hiện nhận được thơng báo của các sự kiện
session. Giao tiếp này khá đơn giản, chỉ cần định nghĩa hai phương thức:
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 58
public void valueBound(HttpSessionBindingListener event)
public void valueUnBound(HttpSessionBindingListener event)
Phương thức valueBound() được gọi khi Bean được lưu trữ trong session
của người dùng. Trong trường hợp của JSP, điều này sẽ thường xảy ra ngay khi
Bean được khởi tạo bởi tag mà cĩ xác định phạm vi “session”
trong thuộc tính scope.
Phương thức valueUnBound() được gọi khi đối tượng bị xố khỏi
session. Cĩ vài tình huống làm cho Bean của chúng ta sẽ bị xố khỏi session. Khi
JSP container dự định chấm dứt một session của người dùng vì hoạt động kém,
trước tiên JSP container xố từng mục dữ liệu trong session, rồi kích hoạt
valueUnBound(). Thứ hai, Sự kiện này sẽ được kích hoạt nếu servlet, scriptlet,
hay đoạn mã Java nào đĩ xố bỏ Bean khỏi session vì một số lý nguyên nhân.
Mỗi sự kiện kết hợp với giao tiếp HttpSessionBindingListener thì cĩ thể
sử dụng để đạt được sự truy cập vào đối tượng session. Việc cài đặt giao tiếp này
sẽ cho phép chúng ta tác động trở lại các sự kiện của session. Ví dụ đĩng các nối
kết khơng cần thiết, tạo các giao tác hoặc thực hiện các hoạt động bảo trì khác.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 33
Chương III : TAG LIBRARIES
I. Tag library là gì ?
Trong kỹ thuật JavaServer Pages, các action là các element cĩ thể tạo ra và
truy cập vào các đối tượng của ngơn ngữ lập trình và xuất vào những luồng xuất
chuẩn như màn hình, máy in,… JSP định nghĩa ra chín action chuẩn mà phải
được cung cấp bởi bất kỳ engine nào.
Ngồi các action chuẩn này , từ JSP v1.1 trở lên cho phép xây dựng và phát
triển các module cĩ thể dùng lại được gọi là custom action. Trong trang JSP, một
custom action được triệu gọi bằng cách dùng custom tag . Một tag library là một
tập các custom tag.
Các ứng dụng cĩ thể được thực hiện bằng custom action bao gồm xử lý form,
truy cập cơ sở dữ liệu và các dịch vụ ở mức xí nghiệp khác như email, quản lý
thư mục và điều khiển luồng. Trước khi custom action xuất hiện thì JSP cĩ một
cơ chế dùng lại mã là các thành phần JavaBean kết hợp với scriplet. Tuy nhiên
với JavaBean cĩ một bất lợi là xây dựng phức tạp và khĩ quản lý.
Các custom action làm dịu được vấn đề này bằng cách mang lại các lợi ích
dưới gĩc độ khác của việc module hố tính sử dụng lại cho các trang JSP. Các
custom action gĩi gọn lại các tác vụ để chúng cĩ thể được dùng lại trong hơn một
ứng dụng và tăng hiệu xuất bằng cách khuyến khích phân chia cơng việc giữa các
nhà phát triển thư viện và người sử dụng thư viện. Các tag library của JSP được
tạo bởi các nhà phát triển, là người thành thạo ngơn ngữ lập trình Java và là
chuyên gia trong giao tiếp với cơ sở dữ liệu và các dịch vụ khác. Các tag library
được dùng bởi các nhà thiết kế ứng dụng web, là người cĩ thể chỉ tập trung vào
cách thức hiển thị hơn là quan tâm đến cách truy cập cơ sở dữ liệu và các dịch vụ
khác.
Một số đặt tính của các custom tag là:
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 34
- Chúng cĩ thể được tuỳ biến thơng qua các thuộc tính từ một trang
đang gọi.
- Chúng được phép truy cập vào tất cả đối tượng cĩ sẵn trong trang
JSP.
- Chúng cĩ thể thay đổi lời đáp mà được phát sinh bởi một trang đang
gọi.
- Chúng cĩ thể được lồng với nhau và cho phép các tương tác phức
tạp trong một trang.
- Chúng cĩ thể truyền thơng với nhau. Chúng ta cĩ thể tạo và khởi
tạo một thành phần JavaBean, tạo một biến tham chiếu đến Bean đĩ
trong một tag và sau đĩ sử dụng Bean này trong tag khác.
II. Cách dùng các tags trong JSP.
Phần này trình bày cách thức mà tác giả của trang web sử dụng tag library
trong JSP và giới thiệu các loại tag khác nhau. Các ví dụ trong phần này sẽ được
định nghĩa trong phần III.
1. Khai báo các tag library.
Trang JSP sẽ sử dụng các tag được định nghĩa trong một tag library bằng
cách đưa vào taglib directive trong trang trước bất kỳ custom tag được sử dụng:
Thuộc tính uri tham chiếu tới URI đĩ là định danh duy nhất cho tag
library. URI cĩ thể là URI tương đối hay tuyệt đối. Nếu URI tương đối thì nĩ
phải được ánh xạ đến một URI tuyệt đối trong taglib element của bộ mơ tả triển
khai ứng dụng Web, tập tin cấu hình này cùng với ứng dụng Web được phát triển
theo bản đặt tả Java Servlet và JavaServer Pages.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 35
Thuộc tính prefix định nghĩa một tiếp đầu ngữ để phân biệt với các tag
library khác, do đĩ thuộc tính này giải quyết được vấn đề xung đột về các tên tag.
2. Các loại tag.
Những custom action được diễn đạt bằng cú pháp XML. Chúng cĩ start
tag, nội dung và end tag:
body
Một tag mà khơng cĩ nội dung được biểu diễn như sau:
a) Các tag đơn giản.
Một tag đơn giản sau triệu gọi một action và xuất ra lời chào “Hello
World.”.
b) Các tag cĩ thuộc tính.
Một start tag của custom action cĩ thể chứa các thuộc tính dưới dạng
attr = ‘value’. Các thuộc tính này tuỳ biến các tham số dùng trong các phương
thức của một lớp java.
Các thuộc tính cĩ thể được gán một hay nhiều tham số trong một đối
tượng request hoặc từ một hằng chuổi. Chỉ cĩ các kiểu thuộc tính trong bảng sau
mới cĩ thể được gán từ các giá trị tham số của request và của các hằng chuổi
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 36
Kiểu thuộc tính Phương thức valueOf chuyển chuổ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)
Giá trị thuộc tính cĩ dạng được tính vào thời gian
yêu cầu. Giá trị của biểu thức tuỳ thuộc vào kiểu thuộc tính được xác định trong
đối tượng cài đặt tag cịn gọi là tag handler (tag handler trong phần định nghĩa
các tag).
c) Các tag cĩ nội dung.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 37
Tag cĩ thể bao hàm các custom tag, scripting element, HTML, và nội
dung nằm giữa start tag và end tag. Trong ví dụ sau sẽ đưa ra thơng tin “lời chào”
được cung cấp trong thân tag thay vì trong thuộc tính của nĩ.
DHBK Ha Noi
d) Các tag định nghĩa các biến kịch bản.
Một tag cĩ thể định nghĩa ra một biến mà biến này được dùng trong cùng
một trang. Ví dụ sau đây minh hoạ cách thức định nghĩa và sử dụng một biến
chứa một đối tượng được trả về.
e) Kết hợp các tag.
Các tag kết hợp với nhau bằng các phương pháp của các đối tượng dùng
chung. Trong ví dụ sau, tag1 tạo một đối tượng cĩ tên là obj1, sau đĩ được sử
dụng lại bởi tag2. Qui tắc này được khuyến khích bởi bảng đặt tả JSP, một tag tạo
ra một tên với thuộc tính id và tag thứ hai cĩ thuộc tính name để dùng lại tên này.
Trong ví dụ kết tiếp, dùng các tag lồng nhau tương tự như trong XML và
HTML.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 38
III. Định nghĩa các tag.
Để sử dụng các custom tag trong trang JSP, chúng ta cần phải định nghĩa ba
thành phần riêng biệt:
- Phát triển tag handler và các lớp trợ giúp cho tag.
- Khai báo tag trong bộ mơ tả thư viện tag (tag library descriptor)
dưới dạng tập tin XML.
- Tạo tập tin JSP cĩ sử dụng custom tag.
Phần này mơ tả các thuộc tính của tag handler và các bộ mơ tả thư viện tag,
cũng trình bày cách phát triển tag handler và các element của bộ mơ tả thư viện
đối với mỗi loại tag được giới thiệu trong phần trước.
1. Tag handler.
Tag handler là một đối tượng được gọi lên bởi JSP container để định trị
cho custom tag trong xuốt quá trình thực thi của trang JSP cĩ tham chiếu tới một
tag nào đĩ. Các phương thức của tag handler được gọi bởi lớp cài đặt trang JSP
vào các thời điểm khác nhau trong xuốt quá trình định trị cho tag.
Khi gặp start tag của custom tag thì lớp cài đặt trang JSP gọi các phương
thức để khởi tạo các giá trị thích hợp và sau đĩ triệu gọi phương thức doStartTag.
Khi gặp end tag của custom tag thì phương thức doEndtag được gọi.
Tuỳ theo mục đích của từng custom tag mà chúng ta xử lý các phương
thức thích hợp trong từng giao tiếp cài đặt. Bảng sau mơ tả các loại tag cĩ các
phương thức tương ứng để xử lý.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 39
Loại tag handler Các phương thức cần xử lý
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 cĩ sự truy cập vào API mà cho phép nĩ truyền thơng với
trang JSP. Con đường vào API này là đối tượng pageContext, qua đĩ tag handler
cĩ thể truy cập vào mọi đối tượng ngầm định khác như request, session,
application từ trang JSP. Các đối tượng ngầm định cĩ thể cĩ các thuộc tính kết
hợp với chúng. Các thuộc tính như thế được truy cập qua các phương thức
[get/set]Attribute thích hợp.
Nếu tag được lồng nhau thì tag handler cũng cĩ thể truy cập handler này
(được gọi là parent) cùng với tồn bộ tag.
Các tag handler phải được cài đặt hai giao tiếp hoặc Tag hoặc BodyTag.
Các giao tiếp cĩ thể được dùng để lấy đối tượng Java đã tồn tại và tạo ra một tag
handler. Để định nghĩa các tag handler mới chúng ta cĩ thể dùng các lớp
TagSupport và BodyTagSupport như là các lớp cơ sở (xem III. 4. Tag handler
được triệu gọi như thế nào?).
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 40
2. Tag library descriptor.
Tag library descriptor (TLD) là một tài liệu XML dùng để mơ tả thư viện
tag. Một TLD chứa tồn bộ thơng tin về thư viện và mỗi tag chứa trong thư viện.
JSP container và các cơng cụ phát triển JSP sử dụng TLD để xác định các tag.
Các element của TLD sau dùng để định nghĩa thư viện tag:
Code 21: HelloWorldTag.java
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag
Library1.1//EN"
"">
<!--Tên mặt định đơn giản cĩ thể dùng bởi cơng cụ tạo trang
JSP để tạo tên với giá trị gợi nhớ; chẳng hạn shortname cĩ thể
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 41
được dùng như giá trị tiếp đầu ngữ thích hợp trong taglib
directive và/hoặc tạo ra các tiếp đầu ngữ cho các id -->
... ...
Tag element yêu cầu đối với mọi tag để xác định một lớp cĩ trong thư
viện tag.
classname
...
3. Các ví dụ.
Để tạo các custom tag chúng ta cần hai import gĩi cơ bản:
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*; // tag extension
a) Các tag đơn giản.
- Tag handler
Đối với các tag đơn giản chỉ cần cài đặt hai phương thức của giao
tiếp Tag là doStartTag và doEndTag. doStartTag được triệu gọi khi
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 42
JSP container gặp start tag, nĩ trả về SKIP_BODY vì thân tag
chẳng cĩ nội dung nào cả. Ngược lại khi gặp end tag thì JSP
container gọi doEndTag, trả về EVAL_PAGE nếu phần cịn lại của
trang cần phải định trị, nếu khơng trả về SKIP_PAGE.
Lớp tag handler sẽ được cài đặ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;
}
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 43
}
- TLD element
Các tag mà khơng cĩ thân phải khai báo nội dung của thân là
rỗng.
Code 23: helloworld.tld
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library
1.1//EN"
"">
<!--Nếu cĩ JSP v1.2 thì đổi lại
""-->
1.0
1.1
legiang
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 44
A tag library from authors at
helloWorld
com.legiang.HelloWorldTag
Ví dụ với tag đơn giản nhất
EMPTY
- JSP page
Code 24: hello.jsp
<!DOCTYPE html
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 45
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
Code 24: hello.jsp (tiếp theo)
<link rel = "stylesheet" href ="JSP-Styles.css" type =
"text/css"/>
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 46
b) Các tag cĩ thuộc tính.
- Định nghĩa các thuộc tính trong tag handler.
Đối với mỗi thuộc tínch của tag, chúng ta phải định nghĩa theo
phong cách của JavaBean, tức là phải cĩ phương thức get/set[Attribute] trong tag
handler.
Hãy nhớ rằng, nếu thuộc tính được đặt tên là id và tag handler kết
thừa từ lớp TagSupport thì chúng ta khơng cần định nghĩa các phương thức
get/set[Attribute] bởi vì những thứ này đã được TagSupport làm sẵn.
Lớp tag handler sẽ được cài đặt như sau:
Code 25: HelloWorldTag.java (sữa lạ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);
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 47
} catch (Exception ex) {
throw new JspTagException("HelloWorldTag: " +
e.getMessage());
Code 25: HelloWorldTag.java (sữa lại trong Code 22)
(tiếp theo)
}
return SKIP_BODY;
}
public int doEndTag() {
return EVAL_PAGE;
}
}
- TLD element
Đối với mỗi thuộc tính chúng ta phải xác định thuộc tính nào
được yêu cầu (bắt buộc) và giá trị nào cĩ thể được xác định bởi biểu thức. Nếu
thuộc tính của tag khơng bắt buộc thì tag handler nên cung ấp giá trị mật định.
TLD cho tag handler ở trên như sau:
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 48
Code 26: TLD file (overwrite helloworld.tld)
...
helloWorld
com.legiang.HelloWorldTag
Ví dụ với tag đơn giản nhất
name
false
false
EMPTY
- JSP page
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 49
Code 27: paramtag.jsp
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
Code 27: paramtag.jsp (tiếp theo)
<%@ taglib uri = "helloworld.tld" prefix = "legiang"
%>
Tag With Attributes
<link rel = "stylesheet" href ="JSP-Styles.css" type =
"text/css"/>
<legiang:helloWorld name = "BKHN
University" />
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 50
c) Các tag cĩ nội dung.
- Tag handler
Tag handler cho loại này được cài đặt khác nhau phụ thuộc vào tag
handler cĩ tương tác với thân hay khơng. Tương tác cĩ nghĩa là tag handler đọc
hoặc sữa đổi nội dung của thân hoặc tạo ra giá trị lặp lại cho thân tag.
Các tag cĩ tương tác với phần thân: nếu tag handler khơng cần
tương tác với phần thần thì tag handler này nên cài đặt giao tiếp Tag hoặc dẫn
xuất từ lớp TagSupport. Nếu thân của tag cần định trị thì doStartTag cần phải trả
về EVAL_BODY_INCLUDE, ngược lại trả về SKIP_BODY.
Các tag cĩ tương tác với phần thân: tag handler phải cài đặt giao
tiếp BodyTag hoặc BodyTagSupport, thường cài đặt phương thức doInitBody và
doAfterBody. Hai phương thức này tương tác với nội dung của thân được chuyển
vào tag handler bởi lớp cài đặt trang JSP. Đối tượng BodyContent cung cấp vài
phương thức để đọc và ghi nội dung của nĩ. Tag handler sử dụng các phương
thức getString, getReader của BodyContent để trích thơng tin từ phần thân và
phương thức writeOut(out) để ghi các nội dung của thân vào luồng xuất. Phương
thức getPreviousOut thường được sử dụng để bảo đảm rằng kết quả trả về của tag
handler thì cĩ sẳn đối với tồn bộ tag handler. Các phương thức chính được
dùng trong loại tag này:
doInitBody: được gọi sau khi nội dung của thân được gán nhưng
trước khi được định giá trị, thường được dùng để thực hiện khởi
tạo giá trị mà tuỳ thuộc vào nội dung của thân.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 51
doAfterBody: được gọi sau khi nội dung của thân được định trị.
Nếu thân được trị nhiều lần lặp đi lặp lại nên trả về
EVAL_BODY_TAG, ngược lại trả về SKIP_BODY.
release: tag handler nên xác lập lại trạng thái của nĩ và giải phĩng
các tài nguyên dành riêng bằng phương thức release.
Ví dụ sau đọc nội dung của thân, chuyển nội dung đĩ, và sau đĩ
ghi lại những thay đổi vào luồng xuấ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());
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 52
}
return SKIP_BODY;
}
}
- TLD element
TLD ở đây chỉ sữa đổi lại các ví dụ trên trong bodycontent tag và
đặt tên file là transform.tld
...
JSP
Với các tag cĩ phần thân thì bodycontent tag cĩ hai giá trị. Một là
JSP, phần thân bao gồm custom tag, scripting element và văn bản HTML. Tất cả
các thứ cịn lại cĩ giá trị là tagdependent. Chú ý rằng giá trị của element này
khơng ảnh hưởng tới tiến trình thơng dịch của thân.
- JSP page
Code 29: transformtag.jsp
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 53
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
Tag With Body
<link rel = "stylesheet" href ="JSP-Styles.css" type =
"text/css"/>
Tag With Body
Hi! BKHN University
d) Các tag định nghĩa các biến kịch bản.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 54
- Tag handler
Tag handler đảm nhận việc tạo và gán đối tượng được tham chiếu
bởi biến kịch bản vào ngữ cảnh cĩ thể truy cập từ một trang. Để Làm được điều
này bằng cách dùng hoặc phương thức pageContext.setAttribute(name, value,
scope) hoặc pageContext.setAttribute(name, value). Thơng thường một thuộc tính
chuyển vào custom tag phải xác định “tên” của biến đối tượng; Tên này cĩ thể
truy xuất bằng cách gọi phương thức get[Attribute] của thuộc tính (xem 2) Các
tag cĩ thuộc tính).
Nếu giá trị của biến kịch bản phụ thuộc vào đối tượng hiện tại trong
tag handler thì nĩ cĩ thể truy xuất đối tượng này bằng cách dùng
pageContext.setAttribute(name, scope). Các giá trị của tham số scope được tĩm
tắc trong bảng sau:
Phạm vi Cĩ thể truy cập từ Thời gian sống
page Trang hiện hành
Cho tới khi lời đáp gởi
trở lại user hoặc yêu cầu
được chuyển tới trang
mới
request
Trang hiện hành và bất
kỳ trang được include
hay forward nào
Cho tới khi lời đáp gởi
trở lại user
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 55
session
Yêu cầu hiện hành và
bất kỳ yêu cầu tiếp theo
trong cùng browser
Đời sống của một phiên
làm việc (session)
application
Bất kỳ yêu cầu hiện tại
và tương lai nào từ cùng
một ứng dụng
Đời sống của một ứng
dụng
Ngồi việc cài đặt giá trị của biến trong tag handler, chúng ta cịn
phải định nghĩa một lớp dẫn xuất từ lớp TagExtrInfo. Lớp này cung cấp thơng tin
cho JSP container về đặt tính của của biến kịch bản, phải cài đặt phương thức
getVariableInfo để trả về một mảng các đối tượng VariableInfo chứa các thơng
tin sau: tên biến, lớp của biến, liệu biến này cĩ tham khảo tới một giá trị đối
tượng mới hay đã cĩ, tính sẳn dùng của biến này.
Bảng sau mơ tả tính sẳn dùng của biến kịch bản và các phương thức
để xác lập và xác lập lại giá trị của biến.
Value Availability Methods
NESTED
Giữa start tag và
end tag.
Trong doInitBody và
doAfterBody đối với tag
handler cài đặt BodyTag;
ngược lại trong doStartTag.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 56
AT_BEGIN
Từ start tag cho
đến cuối trang.
Trong doInitBody,
doAfterBody, và doEndTag đối
với tag handler cài đặt
BodyTag; ngược lại trong
doStartTag và doEndTag.
AT_END
Sau end tag cho
tới cuối trang.
Trong doEndTag.
Lớp tag handler sau lấy dữ liệu từ JNDI lookup được lưu trữ như là
thuộc tính của đối tượng pageContext cùng với tên của biến kịch bả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) {
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 57
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 (tiếp theo)
} catch(javax.naming.NamingException e) {
throw new JspException("Unable to look up " + name
+ " due to " + e.getMessage());
}
return EVAL_PAGE;
}
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 58
}
Biến kịch bản sẽ được định nghĩa trong lớp dẫn xuất từ lớp
TagExtraInfo. Do biến được truyền vào như các thuộc tính của tag nên sẽ được
truy xuất bởi phương thức getAttributeString của lớp TagData và dùng để lấp đầy
hàm tạo của VariableInfo. Để cho phép biến kịch bản được dùng trong phần cịn
lại của trang thì phạm vi của biến nên gán bằ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;
}
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 59
}
- TLD element
Chúng ta cần phải báo cho JSP container biết nĩ nên dùng lớp
TagExtraInfo để tạo ra biến kịch bản với phạm vi thích hợp. Đoạn TLD cĩ tên
lookup.tld như sau:
Code 32: TLD file
...
com.legiang.LookupTag
com.legiang.LookupTagTEI
name
true
false
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 60
type
true
false
...
- JSP page
Code 33: JSP file
...
<legiang:lookup id = "sv" type = "UserTransaction"
name = "java:comp/ UserTransaction ">
<!-- Giả sử trong lớp UserTransaction cĩ phương thức begin
-->
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 61
4. Tag handler được triệu gọi như thế nào?
Giao tiếp Tag định nghĩa một qui ước truyền thơng cơ bản giữa tag
handler và lớp cài đặt trang JSP. Giao tiếp này định nghĩa chu kỳ sống và các
phương thức được triệu gọi khi gặp phải start tag và end tag của một action.
Lớp cài đặt trang JSP triệu gọi các phương thức setPageContext,
setParent, và các phương thức cài đặt thuộc tính trước khi gọi phương thức
doStartTag. Lớp này cũng bảo đảm rằng phương thức release sẽ được gọi trong
tag handler trước khi kết thúc trang. Ví dụ sau thực hiện từng bước cách gọi tag
handler.
Code 34: Cách thực hiện tag handler khơng cĩ BodyContent
ATag t = new ATag();
t.setPageContext(...);
t.setParent(...);
t.setAttribute1(value1);
t.setAttribute2(value2);
t.doStartTag();
t.doEndTag();
t.release();
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 62
Giao tiếp BodyTag mở rộng từ giao tiếp Tag bằng cách định nghĩa thêm
các phương thức cho phép tag handler truy cập vào thân của nĩ. Giao tiếp này
cung cấp ba phương thức mới:
setBodyContent: tạo nội dung của thân tag và thêm vào tag
handler.
doInitBody: được gọi trước khi định trị thân của tag.
DoAfterBody: được gọi trước khi định trị thân của tag.
Ví dụ:
Code 35: Cách thực hiện tag handler cĩ BodyContent
t.doStartTag();
out = pageContext.pushBody();
t.setBodyContent(out);
/* thực hiện các khởi tạo cần thiết sau khi nội dung của thân
được gán */
t.doInitBody();
t.doAfterBody(); /**/
/* Khi doAfterBody trả về EVAL_BODY_TAG chúng ta lặp lại
phần định trị cho thân tag */
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 63
...
t.doAfterBody(); /**/
t.doEndTag();
t.pageContext.popBody();
t.release();
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 64
Phần II: Phân Tích – Thiết Kế – Cài Đặt
Chương IV: PHÂN TÍCH – THIẾT KẾ
I. Phân Tích.
1. Đặt vấn đề.
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 hồ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ơ.
Rất mong nhận được sự đĩng gĩp ý kiến chân thành từ thầy cơ và các bạn
để chương trình hồn thiện hơn sớm được đưa vào sử dụng thực tế.
2. Định nghĩa các yêu cầu.
Quản Lý
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 65
- Phân cơng cơng việc cho từng nhân viên.
- Kiểm tra tiến độ thực hiện.
- Đánh giá cơng việc.
- Thống kê.
- Giải đáp thắc mắc.
- Lập bảng đánh giá nhân viên bằng biểu đồ.
- Tổng hợp báo cáo.
- Thiết lập chế độ làm việc trực tiếp giữa hai nhân viên.
Nhân Viên
- Xem các cơng việc được giao.
- Báo cáo tiến độ thực hiện theo ngày.
- Đề xuất cách giải quyết cơng việc theo ngày.
- Đĩng gĩp ý kiến xây dựng cơng ty.
- Báo cáo cơng việc thực hiện xong.
- Xem các đánh giá của bên quản lý.
Quản Trị Hệ Thống (Admin)
- Tạo/Xố/Sữa user.
- Thêm/Xố/Sữa các quyền.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 66
- Gán quyền cho user.
- Refresh database.
- Restore database.
- Cập nhật database.
3. Phạm vi đề tài.
Về Dữ Liệu
Cho phép lưu trữ trong một năm phát sinh dữ liệu
Dữ liệu cập nhật trực tuyến
Về Giao Diện
Hệ thống hoạt động trên mơi trường Web
Về Mạng
Hoạt động trong mơi trường mạng Intranet
Về xử lý
Thống kê
Thiết lập chế độ làm việc giữa hai nhân viên
Lập báo cáo
Làm tươi/ Phục hồi CSDL
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 67
4. Mơ hình xử lý quan niệm.
a) Sơ đồ ngữ cảnh.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 68
b) Sơ đồ phân rã chức năng.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 69
c) Sơ đồ hệ thống.
- Mức 1:
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 70
- Mức 2:
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 71
Phân rã từ xử lý 4_Phan Cong.
Phân rã từ xử lý 5_Cap Nhat CV.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 72
Phân rã từ xử lý 6_Thong Ke.
Phân rã từ xử lý 9_Tong Hop Bao Cao.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 73
Phân rã từ xử lý 13_Bao Cao Tien Do CV.
Phân rã từ xử lý 16_ Cap Nhat Permission.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 74
Phân rã từ xử lý 19_ Cap Nhat User.
Phân rã từ xử lý 20_Gan Quyen.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 75
5. Mơ hình dữ liệu quan niệm.
Sơ đồ thực thể kết hợp (ERD):
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 76
II. Thiết Kế.
1. Thiết kế xử lý.
a) Sơ đồ hệ thống mức vật lý.
b) Các đơn vị thiết kế.
Cập nhật cơng việc.
Thêm cơng việc:
Nhập: TenCV & NoiDung & MaDA.
Xuất: Thơng báo đã thêm / thơng báo lỗi.
Sữa cơng việc:
Nhập: TenCV | NoiDung | MaDA | DaXong.
Xuất: Thơng báo đã sữa / thơng báo lỗi.
Xố cơng việc:
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 77
Nhập: MaCV.
Xuất: Thơng báo đã xố / thơng báo lỗi.
Phân cơng cơng việc.
Nhập: MaNV & một hoặc nhiều MaCV & NgayBD, NgayKT.
Xuất: Thơng báo đã phân cơng / thơng báo lỗi.
Đánh giá cơng việc.
Nhập: MaDG vào bảng Works.
Xuất: Thơng báo đã đánh giá / thơng báo lỗi.
Kiểm tra tiến độ cơng việc.
Chỉ hiện thị các báo cáo tiến độ của nhân viên.
Thiết lập chế độ làm việc.
Nhập: MaNV & MaCV & ThietLap vào bảng PhanCong.
Xuất: Thơng báo đã chuyển giao cơng việc / thơng báo lỗi.
Báo cáo tiến độ cơng việc.
Nhập: MaCV & TienDo & Ngay | GhiChu | Kèm tập tin.
Xuất: Thơng báo báo cáo đã chuyển đi / thơng báo lỗi.
Thay đổi mật khẩu.
Nhập: Usename & Password củ | Password & Confirm
Password mới.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 78
Xuất: Thơng báo đã đổi mật khẩu / thơng báo lỗi.
Thống kê cơng việc.
Thống kê cơng việc theo ba tiêu chuẩn:
+ Từ ngày đến ngày.
+ Theo đánh giá (xếp loại).
+ theo đề án.
Làm tươi cơ sở dữ liệu.
Nhập: Tên CSDL mới cần phục hồi khi bị hỏng & làm tươi từ
ngày nào đến ngày nào | từ tháng nào đến tháng nào | năm nào.
Xuất: Thơng báo đã làm tươi CSDL / thơng báo lỗi.
Phục hồi cơ sở dữ liệu.
Nhập: Tên CSDL cần phục hồi (đã cĩ từ làm tươi CSDL).
Xuất: Thơng báo đã phục hồi hồn tồn / thơng báo lỗi.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 79
c) Một số giải thuật được thể hiện bàng lưu đồ.
Thêm cơng việc.
Thông báo
công việc đã
thêm
Công việc tồn tại ?
Khởi đầu
Nhập tất cả dữ liệu về
công việc
Thông báo
công việc đã
tồn tại
- Tăng mã số công việc
- Ghi vào CSDL các dữ liệu đã nhập
Tiếp tục ?
Chấm dứt
Thêm Công Việc
không
có
có
không
Mở bảng công việc
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 80
Phân cơng cơng việc.
Thông báo
công việc đã
phân công
NV này đã dược
phân công các
công việc ?
Khởi đầu
- Chọn nhân viên
- Chọn một hoặc nhiều
công việc
- Ngày bắt đầu, kết
thúc
Thông báo lỗi
Ghi các thông tin đã nhập vào CSDL
Tiếp tục ?
Chấm dứt
Phân Công Công Việc
không
có
có
không
Mở bảng phân công
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 81
Thống kê cơng việc.
Hiển thị bảng
thống kê
Các chuẩn đã chọn?
Khởi đầu
Chọn một trong ba
tiêu chuẩn đã cho
Thông báo
không cóTruy vấn theo các chuẩn
Tiếp tục ?
Chấm dứt
Thống Kê Công Việc
có
không
có
không
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 82
Làm tươi cơ sở dữ liệu.
Thông báo đã
làm tươi CSDL
CSDL mới tồn tại ?
Khởi đầu
- Nhập tên csdl mới
- Nhập ngày tháng
năm
Thông báo
CSDL đã có
- Tạo CSDL mới (Backup)
- Xoá các mẩu tin trong các bảng
phát sinh
Tiếp tục ?
Chấm dứt
Làm Tươi CSDL
có
không
có
không
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 83
2. Thiết kế cơ sở dữ liệu
a) Mơ hình dữ liệu vật lý.
Sơ đồ thực thể kết hợp (ERD):
b) Bảng mơ tả chi tiết.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 84
Table Vùng Diễn
Giải
Kiểu Kích
Thướ
c
Giới
hạn
Giá
Trị
Giá
Trị
Ngầm
định
Ràng
buộc
GOPY MAGY Mã Gĩp
Ý
Text 10 Khố
Chính
(PK)
MANV Mã
Nhân
Viên
Text 9 Khố
Ngoại
(FK)
NOI
DUNG
Nội
Dung
Text 50
NGAY Ngày Date
time
>=
ngày
hiện tại
ngày
hiện
tại
FILES MAFILE Mã File Int >=1 Khố
Chính
(PK)
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 85
MABC Mã Báo
Cáo
Text 10 Khố
Ngoại
(FK)
TENFILE Tên File Text 30
FILESIZE Kích
thước
File
Long
CONTEN
TTYPE
Loại
Nội
Dung
File
Được
Tải Lên
Server
Text 30
BAO
CAO
TONG
HOP
MABCTH Mã Báo
Cáo
Tổng
Hợp
Text 10 Khố
Chính
(PK)
MACV Mã
Cơng
Việc
Int >=1 Khố
Ngoại
(FK)
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 86
TON
DONG
Số
Lượng
CV Cịn
Tồn
Đọng
Int >=1
NGAY Ngày Date
time
>=
ngày
hiện tại
ngày
hiện
tại
CV
TUONG
LAI
Cơng
Việc Sẽ
Làm
Trong
Tuần
Tới
DEXUAT Đề Xuất Text 80
DANH
GIA
MADG Mã
Đánh
Giá
Int >=1 Khố
Chính
(PK)
PHAN
HOI
Phản
Hồi
Text 50
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 87
MAXL Mã Xếp
Loại
Text 80 Khố
Ngoại
(FK)
NHAN
VIEN
MANV Mã
Nhân
Viên
Int >=1 Khố
Chính
(PK)
MA
GROUP
Mã
Nhĩm
Int >=1 Khố
Ngoại
(FK)
TENNV Tên
Nhân
Viên
Text 25
NGAY
SINH
Ngày
Sinh
Date
time
< ngày
hiện tại
DIACHI Địa chỉ Text 50
PHAI Phái Bit Là số
nguyên
0 hoặc
1
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 88
PHONE Điện
Thoại
Text 9
USER
NAME
Tên
Người
Sử
Dụng
Text 16
PASS
WORD
Mật
Khẩu
Text 16
BAO
CAO
NGAY
MABCN Mã Báo
Cáo
Ngày
Text 10 Khố
Chính
(PK)
MACV Mã
Cơng
Việc
int >=1 Khố
Ngoại
(FK)
TIENDO Tiến Độ Float 4
NGAY Ngày Date
time
>=
ngày
hiện tại
ngày
hiện
tại
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 89
GHICHU Ghi Chú Text 80
DEXUAT Đề Xuất
Ý Kiến
Text 50
WORKS MACV Mã
Cơng
Việc
Int >=1 Khố
Chính
(PK)
MADA Mã Đề
An
Int >=1 Khố
Ngoại
(FK)
MADG Mã
Đánh
Giá
Int >=1 Khố
Ngoại
(FK)
TENCV Tên
Cơng
Việc
Text 20
NOI
DUNG
Nội
Dung
Text 100
DAXONG Đã
Xong
Bit 0 hoặc
1
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 90
DEAN MADA Mã Đề
An
Int >=1 Khố
Chính
(PK)
TENDA Tên đề
An
Text 30
DIA
DIEM
Địa
Điểm
Text 40
XEP
LOAI
MAXL Mã Xếp
Loại
Int >=1 Khố
Chính
(PK)
XEPLOAI Xếp
Loại
Text 30
GHICHU Ghi Chú Text 80
PHAN
CONG
MANV Mã
Nhân
Viên
Text 9 Khố
Ngoại
(FK)
MACV Mã
Cơng
Việc
Int >=1 Khố
Ngoại
(FK)
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 91
NGAYBD Ngày
Bắt Đầu
Date
time
Ngay
BD >
Ngay
KT
Ngày
hiện tại
THIET
LAP
Thiết
lập
Bit 1 0
NGAYKT Ngày
Kết
Thúc
Date
time
Ngay
KT >
Ngay
BD
> Ngày
hiện tại
GROUPS MA
GROUP
Mã
Nhĩm
Int >=1
TEN
GROUP
Tên
Nhĩm
Text 30 Khố
Chính
(PK)
TRG
GROUP
Trưởng
Nhĩm
Text 9
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 92
NGAYNC Ngày
Nhận
Chức
Date
time
GROUPS
_PER
MAPER Mã
Quyền
Int >=1 Khố
Chính
(PK)
MA
GROUP
Mã
Nhĩm
Int >=1 Khố
Chính
(PK)
PERMI
SIONS
MAPER Mã
Quyền
Int >=1 Khố
Chính
(PK)
TENPER Tên
Quyền
Text 20
GHICHU Ghi Chú Text 80
c) Các ràng buộc tồn vẹn .
(RB1) MAGY là khố chính của GOPY.
(RB2) MAFILE là khố chính của FILES.
(RB3) MABCTH là khố chính của BAOCAOTONGHOP.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 93
(RB4) MADG là khố chính của DANHGIA.
(RB5) MANV là khố chính của NHANVIEN.
(RB6) MABCN là khố chính của BAOCAONGAY.
(RB7) MACV là khố chính của WORKS.
(RB8) MADA là khố chính của DEAN.
(RB9) MAXL là khố chính của XEPLOAI.
(RB10) MANV&MACV là khố chính của PHANCONG.
(RB11) MAPER là khố chính của PERMISSION.
(RB12) MAGROUP là khố chính của GROUPS.
(RB13) MAPER & MAGROUP là khố chính của
GROUP_PER.
(RB14) MANV là khố ngoại của GOPY tham chiếu từ
NHANVIEN.
(RB15) MABC là khố ngoại của FILES tham chiếu từ
BAOCAONGAY.
(RB16) MACV là khĩa ngoại của BAOCAOTONGHOP tham
chiếu từ WORKS
(RB17) MAXL là khố ngoại của DANHGIA tham chiếu từ
XEPLOAI.
(RB18) MAGROUP là khố ngoại của NHANVIEN tham
chiếu từ GROUPS.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 94
(RB19) MACV là khố ngoại của BAOCAONGAY tham chiếu
từ WORKS.
(RB20) MADG là khố ngoại của WORKS tham chiếu từ
DANHGIA.
(RB21) MADA là khố ngoại của WORKS tham chiếu từ
DEAN.
(RB22) MANV là khố ngoại của PHANCONG tham chiếu từ
NHANVIEN.
(RB23) MACV là khố ngoại của PHANCONG tham chiếu từ
WORKS.
(RB24) MAPER & MAGROUP là khố ngoại của
GROUP_PER tham chiếu từ GROUPS & PERMISSION.
(RB25) Ngày nhận chức > Ngày sinh + 24.
(RB26) Ngày kết thúc >= Ngày bắt đầu.
(RB27) Một cơng việc cĩ thể cĩ nhiều nhân viên nhưng tại một
thời điểm chỉ cĩ một nhân viên thực hiện một cơng việc.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 95
d) Bảng tầm ảnh hưởng.
Work
s
Nha
n
Vie
n
Pha
n
Con
g
Gop
Y
Files Bao
Cao
Nga
y
Bao
Cao
Ton
g
Hop
Danh
Gia
Xep
Loai
Group
s
Group
s
_Per
Permis
sions
DeA
n
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
R
B1
X
R
B2
X
R X
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 96
B3
R
B4
X
R
B5
X
R
B6
X
R
B7
X
R
B8
X
R
B9
X
R
B1
0
X
R
B1
1
X
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 97
R
B1
2
X
R
B1
3
X
R
B1
4
X X
R
B1
5
X X
R
B1
6
X X
R
B1
7
X X
R
B1
X X
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 98
8
R
B1
9
X X
R
B2
0
X X
R
B2
1
X X
R
B2
2
X
R
B2
3
X
R
B2
4
R X X
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang 99
B2
5
R
B2
6
X X
R
B2
7
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang
100
3. Thiết kế chương trình.
Sơ đồ cấu trúc chương trình.
Quản Lý Công Việc
Hệ Thống Quản Lý Nhân Viên Trợ Giúp
CN nhóm
CN nhân viên
Làm tươi CSDL
Phục hồi CSDL
Đánh giá CV
Thống kê CV
CN công việc
Kiểm tra tiến độ
Xem thông tin NV
Thiết lập chế độ làm việc
Xem báo cáo
Đề xuấy ý kiến
Báo cáo tiến độ
Xem đánh giá của quản lý
Sơ Đồ Cấu Trúc Chương Trình
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang
101
4. Thiết kế giao diện.
Các Site map (thay thế cho sơ đồ dịch chuyển trạng thái).
Login.htm
Đang nhập hệ
thống
Error
MainPage.htm
Trang chủ About.htm
Trang giới thiệu
WEBSITE Quản Lý Công Việc
Login
Member
Components
Nội dung các trang
thành phần
Kiem Tra
Username &
PassWord . jsp
Website QLCV
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang
102
Yeu cau kiem
tra thong tin
lien quan khi
sua.
- Quyen han o
Group cu .
- User dang
thuoc Group
nao, .. . .
Component của Admin(Quản Trị Hệ Thống)
Lam tuoi CSDL va
Sao luu CSDL
OK
Thêm
OK
Kiem tra User
da co ?
OK
Thêm
Them permision
. jsp
OK
Xoa
Xoa permision. jsp
OK
Sua
Sua permision. jsp
Co
Them User . jsp
K
Xoa
OK
Xoa User . jsp
Sua
OK
Yeu cau
chon
User
can suaSua User . jsp
Thêm
OK
Kiem tra User
thuoc Group
nao chua ?
Co
Them User vao
Group . jsp
K
Xoa
OK
Xoa User khoi
Group . jsp
Sua
OK
Sua User trong
Group . jsp
Thêm
OK
Kiem tra Group
da co chua ?
Co
Them Group .
jsp
K
Xoa
OK
Xoa group . jsp
Sua
OK
Sua Group . jsp
Chon Group
de sua.
Yeu cau kiem
tra User trong
Group da xoa
het chua.
* Bat buoc
phai xoa tat
ca User moi
xoa duoc
Group.
Member
components
Admin
component
Trang Thong
tin
ve Permission
Trang thong tin
ve User
Trang thong tin
ve Quyen Han
cua User
Trang thong tin
ve Group
Lam Tuoi CSDL &
Sao Luu CSDL
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang
103
OK
Thêm
Xoá
Sửa
Components của Manager (Quản Lý)
Attach file Attach file
Thiet lap
che do
lam viec
tu de
xuat cua
nhan
vien
Thong Ke CV.jsp
Cong Viec
Nhan vien
Thong Ke NV.jsp
Phan Cong
truc tiep tu
cac File bao
cao cua
nhan vien
khac.
Member
Components
Manager
component
Trang Thong
Ke . html
Trang TONG HOP
User & Cac Bao Cao
. html
Trang Danh Sach
Cac Thac Mac
. html
Trang Thong Tin
Ve Cac Cong Viec
.jsp
Danh gia CV.jsp
Phan Cong CV
. jsp
Tong Hop Bao
Cao.Jsp
Kiem Tra Tien
Do.jsp
Xem Bao Cao . jsp
Cong Viec . jsp
Bang Thong
Ke Cac CV
Nhan Vien .jsp
Bang Thong Ke
Cac Nhan Vien
Giai Dap Thac
Mac . jsp
Thiet Lap Che
Do LV
. jsp
Them cong viec
.jsp
Xoa cong viec
.jsp
Sua cong viec
.jsp
Doi
Password
. jsp
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Svth: Đinh Lê Giang Trang
104
Component của Employee(Nhân Viên)
Submit
Goi
thong
tin tren
cho
Quan
ly
Submit
Goi
thong tin
tren cho
Quan ly
De xuat
cach giai
quyet bang
van ban
OK Error
Add them
file cong
viec da
lam.
(trong
chuyen
nghanh
tin hoc)
Thac mac &
gop y
De xuat cach
giai quyet
Add file
OK Error
Member
component
Employee
component
Trang Gop y & Thac Mac
html
De xuat cach
giai quyet . html
Bao da
goi
thanh
cong
Bao
goi
khong
thanh
cong
Xem giap dap cua
quan ly
jsp
Xem cac Danh
Gia CV
. jsp
Bao Cao Tien Do
& Dinh kem File
. html
Ten file & noi
dung bao cao
Xem CV duoc giao
Tim CV
.jsp
Danh sach cac
CV duoc giao
Thong bao loi
khong thay.
Doi Password
.jsp
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc
Hải
Chương V : TRIỂN KHAI ỨNG DỤNG
I. Các phần mềm cần thiết.
Đây là ứng dụng độc lập nền nên nĩ cĩ thể chạy trên các hệ điều hành
khác nhau như các hệ thống Windows, Unix, …. Do đĩ chúng ta cĩ thể cài đặt hệ
điều hành thuộc một trong các hệ thống trên và các phần mềm sau:
- Jakarta-Tomcat là một Servlet/JSP container. Thật ra theo lý
thuyết, ứng dụng này cĩ thể chạy trên bất kỳ container hay web
server nào cĩ hổ trợ Servlet/JSP nhưng chúng tơi chưa thử
nghiệm trên container khác Jakarta-Tomcat 3.1.
- JDK 1.2 trở lên.
- MySQL Server 3.23.27 bản beta. Hiện nay đã ra bản 4.0.
- JDBC Driver loại bốn hổ trợ cho MySQL Server: mm.msql-
2.0.4.
- Xalan và Xerces để chuyển XML thành HTML bằng cách sử
dụng XSLT.
- Một trong các web browser sau: Netscape, Inernet Explorer,
Opera tất cả từ 4.0 trở lên. Ứng dụng này đã thử nghiệm trên các
web browser này.
- VietKey hoặc bất kỳ bộ gõ tiếng việt nào khác.
II. Triển khai ứng dụng web.
Ứng dụng web (ứng dụng server-side java) là một tập các trang JSPs,
Servlets, HTML và các tài nguyên khác được gĩi gọn trong một gĩi duy nhất và
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc
Hải
chạy trên nhiều platform từ nhiều nhà sản xuất khác nhau. Ứng dụng Web được
xác định trong một đường dẫn đặt biệt ở web server
Một ứng dụng web cĩ thể gồm các thành phần sau:
- JavaServer Pages
- Servlets
- Các lớp tiện ích
- Các tài như xml, html, …
- Enterprise JavaBean (EJB) đối với các ứng dụng xử lý phân tán.
- Các media như images, sounds, …
- Các đối tượng client như javabeans, applets, các lớp, …
Mơ hình hoạt động của The Web Work. The Web Work hoạt động dựa
trên mơ hình ba lớp (3 layer). Sau đây là mơ hình ba lớp tổng quát của ứng dụng
Web.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc
Hải
Web ServerWeb Client
Data
Internet/Intranet
Database Server
Mô Hình Ứng Dụng Web 3 Lớp Tổng Quát
User Service
Interface
(Web Page)
Business Service Data Service
Trên nền Java hổ trợ cả hai kỷ thuật xử lý Web động là Servlet và JSP.
Do đĩ với từng kỷ thuật tơi cĩ chi tiết hai mơ hình (cĩ thể nhiều hơn) dựa trên mơ
hình ba lớp tổng quát này và gọi là Kiến Trúc Mơ Hình Một và Mơ Hình Hai.
Ứng dụng sử dụng cả hai mơ hình web trên nền Java là Kiến Trúc Mơ
Hình Một và Mơ Hình Hai mà đã và đang cịn tranh luận trên các sites nỗi tiếng
như javaworld.com, developer.com, weblogic.com.
Trong mơ hình một, một trang JSP đảm nhận cả việc xử lý yêu cầu và
trả về các kết quả cho client. Ở đây vẫn cĩ sự tách biệt giữa xử lý và hiện thị bởi
vì tất cả sự truy cập dữ liệu đều được Beans thực hiện. Mơ hình này thích hợp cho
các ứng dụng đơn gian, thích hợp với các trang JSP cĩ nhiều mã HTML. Xem
hình vẽ sau:
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc
Hải
JSP Model 1 Architecture
Kie án tru ùc mo â hình một
Data
Source
W
eb C
lient
W
eb S
erver
1
Request
4
Response
2
3
Beans
Custom
Tag
JSP
Trong mơ hình kiến trúc hai, đĩ là sự kết hợp cả hai kỷ thuật xử lý web
động là Servlet và JSP. Mơ hình này rất thích với với các ứng dụng cĩ xử lý phức
tạp. Ở đây, Servlets hoạt động như một trạm điều khiển (controller) chịu trách
nhiệm xử lý các yêu cầu và khởi tạo các components (Beans, Custom Tag) cho
JSP sử dụng. Mơ hình này tách phần xử lý và trình bày rỏ ràng nhất.
JSP Model 2 Architecture
Kiến trúc mô hình hai
Data
Source
Web Server
1
Request
5
Response
3
W
eb C
lient
2
Khởi tạo
4
(Model)
JSP
(View)
Beans
Custom Tag
Servlet
(Controller)
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc
Hải
III. Hướng dẫn sử dụng.
Sau khi đã cài đặt ứng dụng, bạn mở browser, trong address bar gõ địa chỉ:
htttp://servername:port/work/html/showLogin.html .
- servername: tên server của bạn, trên máy cục bộ thường là
localhost.
- port: số cổng mà web server đang mở. Nếu số port là 80 thì thơng
số port khơng cần nhập.
Nếu bạn sử dụng thường xuyên ứng dụng, bạn nên gán giá trị mật định cho
browser với địa chỉ trên. Khi bạn mở browser, ứng dụng tự động được gọi mà
bạn khơng cần phải gõ địa chỉ trên address bar. Thực hiện cơng việc này trong
ba web browser: Internet Explorer, Netscape, Opera như sau:
- Internet Explorer:
Vào Tools menu, chọn Internet Options. Trong hộp thoại Internet
Options, chọn General tab, trong khung Home page cĩ Address
textbox cho phép bạn gõ địa chỉ trên.
- Netscape:
Vào Edit menu, chọn Preferences…. Trong hộp thoại
Preferences, chọn navigator trong hộp thoại category, hiện ra một
trang Navigator, chọn Home page button, trong khung Home Page
cĩ Location textbox nhập vào địa chỉ trên.
- Opera:
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc
Hải
Vào Navigation menu, chọn Set home page…, hiện ra một input
box cho chép bạn nhập địa chỉ mới vào.
KẾT LUẬN
Ứng dụng đã đáp ứng được yêu cầu đề ra trong giai đoạn phân tích thiết kế hệ
thống.
Ứng dụng kết hợp được các cơng nghệ độc lập nền JSP, XML, XSLT,
MySQL Server do đĩ cĩ thể chạy trên nhiều nền, nhiều Web Server và nhiều
Web Broswer khác nhau.
Về cơ sở dữ liệu, sơ đồ thực thể kết hợp đạt dạng chuẩn ba.
Ứng dụng sử dụng cả hai mơ hình web là “Kiến Trúc Mơ Hình Một và Hai” –
“JSP Model 1 and 2 Architecture”
HƯỚNG PHÁT TRIỂN
Các hướng phát triển sau sẽ làm cho ứng dụng hồn thiện hơn.
- Mở rộng ứng dụng với quy mơ lớn hơn, cĩ khả năng trao đổi dữ liệu và xử
lý với ứng dụng khác.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc
Hải
- Phát triển ứng dụng để download các files báo cáo về client.
- Quản lý các hình ảnh liên quan về cơng việc cho ứng dụng sinh động hơn.
- Dùng DOM xử lý XML ngay tại client.
- Cài đặt các ràng buột tồn vẹn trên database server trong phiên bản mới
của hệ quản trị cơ sở dữ liệu MySQL (phiên bản 4.0). Do phiên bản hiện
tại (đang sử dụng MySQL 3.23.27) khơng hổ trợ khố ngoại, check, rule
và trigger.
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
DANH SÁCH WEB SERVERS HỔ TRỢ JSP
Để chạy được JSP chúng ta cần một trong các Web Server sau. Hãy xem các
hướng dẫn cài đặt, nơi đặt các JSP files, … để thực thi được trong Web Servers
đều cĩ đầy đủ trong từng Web Server khi chúng ta download về.
Tên Web
Servers
Thuộc Tổ
Chức /
Cơng Ty
Trang Web
Jakarta
Tomcat
Apache
Org.
JavaServer
Web
Developmet
Kit (JSWDK)
Sun
Micro
system
JRun Allaire
Inc.
ServletExec New
Atlanta
Đồ án tốt nghiệp Gvhd: Ts. Nguyễn Thúc Hải
Lite
WebServer
Gefion
Software
Java Web
Server
Sun
Micro
system
WebSphere IBM
Corp.
Resin Caucho
Technolog
y
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải
BẢNG THUẬT NGỮ
action
Một element trong trang JSP cĩ thể tác động lên những đối tượng ngầm
định và đối tượng server-side khác hoặc cĩ thể định nghĩa biến kịch bản
mới (xem element).
custom action
Một action được định nghĩa linh hoạt bởi bộ mơ tả thư viện tag và tập các
lớp java và được đưa vào trang JSP bằng taglib directive.
declaration
Một scripting element mà khai báo các method, biến, hoặc cả hai trong
trang JSP. Cĩ cú pháp (xem scripting element).
directive
Một element trong trang JSP cĩ nhiệm vụ hướng dẫn JSP container và
được thơng dịch vào thời gian runtime. Cĩ cú pháp (xem JSP
container và scripting element).
element
Trình thơng dịch JSP cơng nhận element như là một thành phần trong
trang JSP. Một element cĩ thể là directive, action, scripting element.
Element bắt đầu với start tag, nội dung và end tag, nếu khơng cĩ nội dung
thì nĩ dùng cú pháp empty tag.
expression
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải
Một scripting element chứa biểu thức của ngơn ngữ java và được đặt vào
đối tượng ngầm định out. Cĩ cú pháp
implicit object
Một đối tượng server-side được định nghĩa bởi JSP container và luơn cĩ
sẳn trong trang JSP mà khơng cần khai báo. Cĩ các đối tượng như request,
response, pageContext, session, application, out, config, page, exception.
JSP container
Một thực thể ở cấp hệ thống cung cấp sự hoạt động, quản lý chu trình sống
cho các thành phần (conponent) JSP và Servlet.
JSP page implementation class
Một lớp của ngơn ngữ lập trình java, cụ thể là một Servlet, được trình bày
vào thời gian runtime của một trang và nhận đối tượng request rồi trả về
một đối tượng response. Lớp cài đặt trang cĩ thể dùng các dịch vụ của JSP
container, gồm cả Servlet API và JSP API.
persistent
Một đối tượng được serialization vào đĩa và các thiết bị lưu trữ khác.
Persistent cĩ các dạng như files, RDBMS (Relational database
management systems), ODBMS (Object database management systems).
reflection
Là cơ chế cho phép mã Java tìm ra các thơng tin về các trường, phương
thức và hàm tạo của các lớp được tải.
scripting element
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải
Là declaration, scriptlet hay expression, đặt tả JSP định nghĩa các thứ này
theo cú pháp tag. Tồn bộ nội dung ngữ cảnh được viết theo ngơn ngữ
java.
scriptlet
Một scripting element chứa bất kỳ đoạn mã của ngơn ngữ kịch bản nào
trong trang JSP. JSP v1.2 là phiên bản mới nhất chỉ hổ trợ ngơn ngữ java
trong các trang JSP. Cĩ cú pháp . Tuy nhiên cĩ một số
JSP container hổ trợ ngơn ngữ javascript như RESIN.
serialization
Là một tiến trình lưu trữ tồn bộ một đối tượng vào đĩa hoặc các thiết bị
lưu trữ khác. Ngược lại, một tiến trình phục hồi đối tượng thì gọi là
deserialization.
servlet
Một kỹ thuật server-side được viết bằng Java, JSP phát triển dựa trên nền
tảng của servlet.
tag
Gồm đoạn văn bản nằm giữa cặp dấu , cĩ tên, thuộc tính. Cĩ ba loại tag:
start tag, end tag, và empty tag.
Ví dụ:
content
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải
tag handler
Một lớp java được cài đặt các giao tiếp Tag hoặc TagBody mà được trình
bày vào lúc thời gian runtime đối với một custom action.
tag library
Một tập các custom action được mơ tả trong bộ mơ tả thư viện tag (tag
library descriptor) và các lớp java.
tag library descriptor
Một tài liệu XML mơ tả thư viện tag.
transient
Ngược lại với persistent, hầu hết các đối tượng trong bộ nhớ được gọi là
transient, cĩ nghĩa là chúng sẽ chết đi khi các tham chiếu của chúng ra
khỏi phạm vi hoặc tắc nguồn điện.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải
TÀI LIỆU THAM KHẢO
Tên Tài Liệu Tác Giả
Năm Loại Tài
Liệu
Ach1 Servlets and JSP Marty Hall 2000 Sá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 Sách
XML Professional Didier Martin 2000 Sách
Luận văn tốt nghiệp Các khĩa trước
Web Books CD Rom
Giáo trình lý thuyết và bài tập Java Nguyễn Tiến Dũng 1999 Sách
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc Hải
(Chủ Biên)
Lập trình ứng dụng Web với JSP/
Servlet
Nguyễn Phương
Lan – Hồng Đức
Hồng
2001 Sách
Java Lập Trình Cơ Sở Dữ Liệu Nguyễn Tiến
Nguyễn Văn Tâm
Nguyễn Văn Hồi
2001 Sách
Các file đính kèm theo tài liệu này:
- Đồ án tốt nghiệp - Phân tích thiết kế hệ thống - LẬP TRÌNH JSP TECHNOLOGY.pdf