Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 84 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
84
Dung lượng
761,33 KB
Nội dung
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 1
L
L
U
U
Ậ
Ậ
N
N
V
V
Ă
Ă
N
N
T
T
Ố
Ố
T
T
N
N
G
G
H
H
I
I
Ệ
Ệ
P
P
K
K
H
H
O
O
A
A
C
C
Ô
Ô
N
N
G
G
N
N
G
G
H
H
Ệ
Ệ
T
T
H
H
Ô
Ô
N
N
G
G
T
T
I
I
N
N
Đ
Đ
ề
ề
t
t
à
à
i
i
:
:
Ứ
Ứ
n
n
g
g
d
d
ụ
ụ
n
n
g
g
J
J
S
S
P
P
T
T
E
E
C
C
H
H
N
N
O
O
L
L
O
O
G
G
Y
Y
t
t
r
r
o
o
n
n
g
g
t
t
h
h
i
i
ế
ế
t
t
k
k
ế
ế
h
h
ệ
ệ
t
t
h
h
ố
ố
n
n
g
g
m
m
ô
ô
h
h
ì
ì
n
n
h
h
W
W
e
e
b
b
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 2
P
P
h
h
ầ
ầ
n
n
I
I
:
:
J
J
S
S
P
P
T
T
E
E
C
C
H
H
N
N
O
O
L
L
O
O
G
G
Y
Y
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à kết thúc 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à http://www.jsp.com/thank.jsp?title=jsp
Thanks for reading <i><%=request.getParameter(“title”)%><i>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 ứngdụ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 moi ứngdụ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ụngtrongứngdụng với các công nghệ khác.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 3
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, khoá 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
đố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.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 4
SGML
HTML
XML
CDF
SMIL
CML
MML
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.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 5
MML: Mathematical Markup language- mô tả các phương trình, biểu thức
toá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 :
- 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ùngJSP 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ọngtrong 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 trongJSP 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:
Ví d
ụ với XML tags
<student>
<name>
<first>Giang</first>
<middle>Le</middle>
<last>Dinh</last>
</name>
<numberid>0750</numberid>
<age>22</age>
</student>
Ví d
ụ với HTML tags
<table>
<tr>
<td>Giang</td>
<td>Le</td>
<td>Dinh</td>
</tr>
<tr>
<td>Number id : </td>
<td>0750</td>
</tr>
<tr>
<td>Age :</td>
<td>22</td>
</tr>
</table>
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 6
- Biểu thức có dạng <%= expressions %>, được định giá trị và chèn vào
luồng xuất của servlet.
- Scriptlet có dạng <% code %>, được chèn vào phương thức
_jspService của servlet (được gọi là service).
- Khai báo có dạng <%! code %>, đượ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 trongJSP mà không có trong tài liệu kết quả, dùng:
<% JSP comments %>
Chú thích HTML có dạng:
<! HTML comments >
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
<% = Expressions %>
<jsp:expression>
Java code
</jsp:expression>
<% Scriptlets %>
<jsp:scriptlet>
Java code
</jsp:scriptlet>
<%! Declarations %>
<jsp:declaration>
Java code
</jsp:declaration>
1. Các biến được định nghĩa sẵn trongJSP
Để đơn giản hoá 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 trongJSP nằm ngoài phương thức
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 7
_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 toà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
toàn ứngdụ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
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 8
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 trongJSP
Biểu thức trongJSP được dùng để chèn các giá trị trực tiếp vào luồng xuất.
Nó có dạng sau:
<%= Java expressions %>
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: <%= new java.util.Date() %>
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ụngtrong 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.
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang 9
Đây là một ví dụ hoà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
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<! Example of JSP Expressions. >
<html>
<head>
<title>JSP Expressions</title>
<meta name="author" content="Giang" />
<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" />
</head>
<body>
<h2>JSP Expressions</h2>
<ul>
<li>
Current time: <%= new java.util.Date() %>
</li>
<li>
Your hostname:<%=request.getRemoteHost()%>
</li>
<li>Your session ID: <%= session.getId() %></li>
<li>The <code>testParam</code> form parameter:
<%= request.getParameter("testParam") %>
</li>
</ul>
</body>
</html>
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:
<% Java Code %>
Đồ án tốt nghiệp Gvhd: Ts.Nguyễn Thúc
Hải
Svth: Đinh Lê Giang Trang
10
Code 2: scriptlet.jsp
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<! Example of JSP Scriptlets. >
<html>
Code 2: scriptlet.jsp (tiếp theo)
<head>
<title>JSP Scriptlets</title>
</head>
<%
String bgColor = request.getParameter("bgColor");
boolean hasExplicitColor;
if (bgColor != null) {
hasExplicitColor = true;
} else {
hasExplicitColor = false;
bgColor = "WHITE";
}
%>
<body bgcolor="<%= bgColor %>">
<h2 align="center">Color Testing</h2>
<%
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.");
}
%>
</body>
</html>
4. Khai báo trongJSP
Một khai báo trongJSP 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 toàn trang. Khai báo sẽ được chèn vào trong
lớp của servlet (bên ngoà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:
<%! Java Code %>
[...]... trong một scriptlet chúng ta có thể sử dụng jsp: forward action Ví dụ: Code 14: Sử dụng jspforward 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. .. height=“350” > < /jsp: params> < /jsp: plugin> 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ùngvă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... trongJSP 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 Svth: Đinh Lê Giang 21 Trang Đồ án tốt nghiệp Hải Chương II : Gvhd: Ts.Nguyễn Thúc 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) trongJSP được tập trung vào các component... Cách dùng các tags trongJSP 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 trongJSP 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: . nào hổ trợ đầy đủ cho moi ứ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. Đồ án tốt nghiệ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. 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.