Chu trình sống của Servlet (tt)
Giai đoạn Nạp servlet:
•Một servlet có thể được nạp vào bộ nhớ ở ba thời điểm: khi
server khởi động, khi người quản trị yêu cầu, khi servlet được
triệu gọi từ máy client.
•Yêu cầu Server nạp servlet trước sẽ khiến trình khách có thể
gọi servlet ngay mà không phải mất công chờ.
• Để nạp servlet thì trình chứa Web phải biết tên lớp của
servlet. Tên của một servlet có thể trùng với tên lớp của
servlet hoặc tên mà ta đăng ký với trình chủ trong quá trình
đăng ký và ánh xạ.
SERVLET
Giai đoạn Khởi tạo servlet:
• Khi có một yêu cầu gọi servlet, trình chứa Web server sẽ
xem servlet được nạp vào bộ nhớ hay chưa. Khi servlet đã
được nạp thì server chuyển sang giai đoạn khởi tạo servlet.
•Trình chứa web server khởi tạo servlet bằng cách gọi đến
phương thức init() được cài đặt trong servlet.
SERVLET
Giai đoạn thực thi Servlet:
• Khi servlet được gọi qua các URL hay từ các trang HTML
hoặc trang JSP khác thì Web server chính thức gọi servlet
thực thi thông qua các phương thức doGet(), doPost() hoặc
service().
• doGet(): được gọi khi ta gọi trực tiếp servlet từ một URL.
• doPost(): được gọi khi ta gọi servlet thông qua thao tác post
của thẻ
SERVLET
3
87 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 503 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình Java - Chương 6: Phát triển ứng dụng Web Java - Nguyễn Minh Thành, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ụng.
3
Tổng quan về ứng dụng Web
(tt)
Các thành phần của một ứng dụng web bao gồm :
Các trang JSP (Java Server Page)
Java Servlets (các lớp nhận,xử lý yêu cầu và đáp trả)
Các dịch vụ Web
Các trang web với kỹ thuật Server faces.
4
Tổng quan về ứng dụng Web
(tt)
Mô hình hoạt động
5
Tổng quan về ứng dụng Web
(tt)
6
Các thành phần của ứng dụng Web được chứa trong một trình chứa
web (web container)
Trình chứa web cung cấp chức năng
Tiếp nhận, điều phối và thực thi các yêu cầu từ client
Bảo mật
Truy xuất đồng thời
Quản lý chu kỳ sống của ứng dụng
Trình chứa web cho phép các thành phần web truy cập đến các dịch
vụ của Java
Naming, Transitions, Email.
Tổng quan về ứng dụng Web
(tt)
Kiến trúc của J2EE và Web Container
7
JSP (Java Server Pages)
JSP (Java Server Pages)
JSP (Java Server Pages) là mô hình các trang của một
website được lưu trữ ở phía Server và cho phép client truy
cập đến thông qua mạng
JSP hướng đến một ứng dụng web dựa trên trình diễn dữ
liệu.
Các trang JSP cho phép chèn các thẻ HTML để thiết kế giao
diện cho trang web, nhúng các đoạn mã Java để thực thi việc
xử lý dữ liệu.
Các trang JSP khi được yêu cầu sẽ được Java chuyển thành
các Servlet để thực thi như một class.
9
JSP (Java Server Pages) (tt)
Các trúc một trang JSP
A simple date
The time on the server is <%= new
java.util.Date() %>
Server sẽ xử lý các thành phần Java trước rồi kết hợp với
các mã HTML để trình bày lên Web Browser
10
Cơ chế làm việc JSP
11
JSP (Java Server Pages)
Ví dụ về một trang JSP
12
JSP (Java Server Pages)
<!--File jsp001.jsp
02/13/2010
-->
My First JSP Page
Hello, JSP World!
Isn't this fun
Kết qua sinh ratại Web Browser:
My First JSP Page
Hello, JSP World!
0
1
2
3
4
5
6
7
8
9
10
Isn't this fun
Ví dụ về một trang JSP
13
JSP (Java Server Pages)
<!--File jsp001.jsp
02/13/2010
-->
My First JSP Page
Hello, JSP World!
Isn't this fun
Kết qua sinh ratại Web Browser:
My First JSP Page
Hello, JSP World!
0
1
2
3
4
5
6
7
8
9
10
Isn't this fun
Comments – tạo ghi chú
Trang JSP chứa hai loại comments là:
• Hidden comment(hay còn gọi là JSP comment).
• Output comment(hay còn gọi là HTMLcomment).
] -->
Output comments được xuất vào HTML file để gửi đến client.
Hidden comment chỉ hiển thị trong source code của trang JSP mà
không xuất vào HTML file để gửi đến client. Hidden comment là ẩn đối
với HTML file.
14
JSP (Java Server Pages)
DECLARATIONS (các khaibáo)
Declaration được dùng để khai báo các biến (variable) các phương
thức (method) được dùng sau đó trong các JSP source file. Cú pháp
declaration (chú ý dấu chấm than):
Vídụ:
Tầm vực (Scope):
• Một declaration có tầm vực trong một trang (page scope). Có nghĩa
là một khai báo (declaration) biến hay hàm trong một trang sẽ được sử
dụng hợp lệ bởi các scriptlets, expressions và các declarations khác
trong cùng một JSP.
15
JSP (Java Server Pages)
EXPRESSIONS (các biểu thức)
Cú pháp cho một tag (thẻ) để khai báo một biểu thức như sau (chú ý
dấu bằng theo sau dấu%):
Biểu thức chứa trong thẻ sẽ được tính toán, sau đó kết quả được
chuyển sang chuỗi (String) để chèn vào file HTML với vị trí tương
ứng của nó trong JSP.
16
JSP (Java Server Pages)
17
Ví dụ
!--File jsp003.jsp
02/13/2010
Illustrates declarations and expressions.
end comment -->
Some JSP expression follow
a =
b =
a/b =
The date is
JSP (Java Server Pages)
Some JSP expression follow
a = 100
b = 2
a/b = 50
The date is Sat Feb 13 12:25:16 ICT 2010
SCRIPTLET (Mẩu kịch bản)
SCRIPTLET là một đoạn mã Java được nhúng vào trong các thẻ
HTML.
Thẻ chèn SCRIPTLET :
Ví dụ
18
JSP (Java Server Pages)
DIRECTIVE (Chỉ hướng)
Phần này trình bày hai loại Directive:
• Include Directive.
• Page Directive.
Cú pháp chung :
Nếu có nhiều thuộc tính
<%@ directive attribute1="value1"
attribute2="value2"
... attributeN="valueN" %>
19
JSP (Java Server Pages)
INCLUDE DIRECTIVE
Được dùng để chèn một file vào trong một trang JSP khi trang JSP
được biên dịch.
File được chèn vào trang JSP được gọi là included file. Included file
có thể là:
• JSP file.
•HTMLfile.
•Textfile.
•File được viết code bằng ngôn ngữ Java.
Included file không có chứa các thẻ như, , ,
hoặc
20
JSP (Java Server Pages)
Vídụ:
PAGE DIRECTIVE
Được dùng để định nghĩa các thuộc tính áp dụng cho cả
một trang JSP
Cú pháp đơn giản:
Ta có thể sử dụng page directive nhiều lần để thiết lập giá trị cho các
thuộc tính trong một JSP page. Nhưng nếu dùng cho thuộc tính import
thì chỉ được sử dụng không quá một lần.
21
JSP (Java Server Pages)
PAGE DIRECTIVE
Cú pháp đầy đủ của Page Directive:
<%@ page
[ language="java" ]
[ extends="package.class" ]
[ import= "{ package.class| package.*}, ..." ]
[ session="true|false" ]
[ buffer="none|8kb|sizekb" ]
[ autoFlush="true|false" ]
[ isThreadSafe="true|false" ]
[ info="text" ]
[ errorPage="relativeURL" ]
[ contentType="mimeType[ ;charset=characterSet]" |
"text/html ; charset=ISO-8859-1"]
[ isErrorPage="true|false" ]
%
22
JSP (Java Server Pages)
PAGE DIRECTIVE
23
JSP (Java Server Pages)
Vídụ:
<!--File jsp006.jsp 02/16/2010 Illustrates the JSP Page
Directive. -->
..
Đối Tượng Ẩn
Trong Java có chứa sẵn một số đối tượng để thuận tiện cho việc
lập trình Web. Các đối tượng này được gọi là đối đối ẩn hay đối
tượng được định nghĩa trước(predefined objects).
Các đối tượng đó là:
• request
• response
•out
•session
• application
•config
• pageContext
• page
24
JSP (Java Server Pages)
Đối tượng Request
Dùng để chứa những yêu cầu từ phía máy khách.
Là phần tử của lớp con của javax.servlet.servletRequest
Có các phương thức hay sử dụng là:
• getParameterNames()
• getParameter()
• getParameterValues().
25
JSP (Java Server Pages)
26
Đối tượng Request – Ví dụ
JSP: Scriptlets2
" >
Example Scriptlet: Conditionally sets background color
You did not supply a color, I used white.
Here is the color you requested.
JSP (Java Server Pages)
Đối tượng Out
Dùng để xuất các thông tin ra màn hình của trình duyệt. Thay
vì với màn hình ở chế độ console, Java sử dụng đối tượng out
của lớp System.
Đây là đối tượng của lớp javax.servlet.jsp.JspWriter.
Các hàm:
•clear()
• clearBuffer()
•flush()
• getBuffer()
• getRemaining()
• Println(String)
27
JSP (Java Server Pages)
Đối tượng Out – Ví dụ
HTML>
JSP Expressions: Predefined Objects
Using Predefined Objects
Your Hostname:
Your Session ID:
The value of INFO parameter:
28
JSP (Java Server Pages)
Đối tượng Out – Ví dụ
HTML>
JSP Expressions: Predefined Objects
Using Predefined Objects
Your Hostname:
Your Session ID:
The value of INFO parameter:
29
JSP (Java Server Pages)
SERVLET
SERVLET
- Các trang JSP được viết code chung với các mã HTML nên
khó quản lý code, ngoài ra nó còn bảo mật kém.
- Servlet là các lớp Java, các lớp này có thể tạo ra các mã
HTML nhờ vào các đoạn code java. Các Servlet sẽ được
biên dịch sau khi hoàn tất vì vậy khả năng bảo mật cao.
SERVLET
31
SERVLET
Servlet tương tác với web client theo mô hình request và
response dựa theo giao thức HTTP. Một số Servlet Container
cũng hỗ trợ cả giao thức HTTPS (HTTP over SSL) dành cho
các giao tác có tính bảo mật.
SERVLET
32
Luồng xử lý Servlet
1. Client yêu cầu một servlet, tên của servlet là một phần của
URL (vd:
2. Web server nhận yêu cầu (request) và gửi nó tới servlet
engine, là nơi mà quản lý và tạo ra các thể hiện của servlet.
3. Servlet engine sẽ gọi phương thức service (hoặc doPost,
doGet) của servlet để xử lý yêu cầu.
4. Servlet sẽ tiếp nhận yêu cầu cùng với các tham số, tài
nguyên khác, sau đó xử lý và tạo ra một kết quả trả lời tương
ứng (response) và chuyển kết quả cho Web server.
5. Web server sẽ gửi trả kết quả này (response) cho client
(Web Browser).
SERVLET
33
Ví dụ Servlet đơn giản
/HelloWorldServlet.java
import javax.servlet.*;
import java.io.*;
public class helloWorldServletextends GenericServlet{
public void service(ServletRequestrequest,
ServletResponse response) throws IOException
{
response.setContentType(“text/html”);
PrintWriterout=response.getWriter();
out.println(“”);
out.println(“”);
out.println(“Hello World Servlet!”);
out.println(“”);
out.println(“”);
}
}
SERVLET
34
Chu trình sống của Servlet
Chu trình sống của một Servlet bắt đầu khi nó được hệ thống
triệu gọi (gọi nạp vào bộ nhớ) cho đến khi nó bị loại khỏi
trình chủ Web server. Trải qua các giai đoạn sau:
™Nạp servlet.
Khởitạoservlet.
Thựcthi servlet.
Dọndẹpservlet.
SERVLET
35
Chu trình sống của Servlet (tt)
Giai đoạn Nạp servlet:
•Một servlet có thể được nạp vào bộ nhớ ở ba thời điểm: khi
server khởi động, khi người quản trị yêu cầu, khi servlet được
triệu gọi từ máy client.
•Yêu cầu Server nạp servlet trước sẽ khiến trình khách có thể
gọi servlet ngay mà không phải mất công chờ.
• Để nạp servlet thì trình chứa Web phải biết tên lớp của
servlet. Tên của một servlet có thể trùng với tên lớp của
servlet hoặc tên mà ta đăng ký với trình chủ trong quá trình
đăng ký và ánh xạ.
SERVLET
36
Chu trình sống của Servlet (tt)
Giai đoạn Khởi tạo servlet:
• Khi có một yêu cầu gọi servlet, trình chứa Web server sẽ
xem servlet được nạp vào bộ nhớ hay chưa. Khi servlet đã
được nạp thì server chuyển sang giai đoạn khởi tạo servlet.
•Trình chứa web server khởi tạo servlet bằng cách gọi đến
phương thức init() được cài đặt trong servlet.
SERVLET
37
Chu trình sống của Servlet (tt)
Giai đoạn thực thi Servlet:
• Khi servlet được gọi qua các URL hay từ các trang HTML
hoặc trang JSP khác thì Web server chính thức gọi servlet
thực thi thông qua các phương thức doGet(), doPost() hoặc
service().
• doGet(): được gọi khi ta gọi trực tiếp servlet từ một URL.
• doPost(): được gọi khi ta gọi servlet thông qua thao tác post
của thẻ.
SERVLET
38
Chu trình sống của Servlet (tt)
Giai đoạn dọn dẹp Servlet
• Khi thực hiện dọn dẹp servlet, Web server gọi đến phương
thức destroy() của servlet.
• Đây là cơ hội để Servlet thực hiện các thao tác cần thiết như
dọn dẹp bộ nhớ, lưu trữ dữ liệu xuống đĩa, đóng các kết nối.
•Mặc dù Java có thể tự động thu gom rác trong bộ nhớ nhưng
nếu ta cấp phát cho servlet một khối lượng lớn bộ nhớ thì ta
nên giải phóng chúng khi gọi phương thức destroy() này.
SERVLET
39
Viết Servlet
•Servlet API có hai package cần thiết:
- javax.servlet
- javax.servlet.http
•Một servlet có thể kế thừa từ hai lớp:
•javax.servlet.GenericServlet hoặc
•javax.servlet.http.HttpServlet
• Trong môi trường web, giao thức HTTP được sử dụng giữa
Web client và Web server. Vì vậy servlet thường được kế
thừa từ lớp javax.servle.http.HttpServlet, sau đó viết chồng
hàm các phương thức cần thiết để phục vụ yêu cầu từ client.
SERVLET
40
Viết Servlet
Hàm Init()
• Được gọi khi Web server nạp servlet.
• Để khởi tạo biến môi trường, các biến toàn cục, các giá trị
ban đầu.
•Tạo sẵn các kết nối socket, các kết nốiCSDL, nạp các thư
viện cần thiết,vv
•Phương thức init() chỉ được gọi một lần khi Web server nạp
servlet.
SERVLET
41
Viết Servlet
Hàm Init()
• Ví dụ
public class ShoppingCartDB extends GenericServlet
{
String DBDriver =“sun.jdbc.odbc.JdbcOdbcDriver”;
String strConn =“jdbc:odbc:bookstore”;
Connetion con;
public void init() {
Class.forName(DBDriver).newInstance();
conn =DriverManager.getConnection(strConn);
}
}
SERVLET
42
Viết Servlet
Hàm Service() :
• Phương thức này được xem là trung tâm xử lý của servlet mà ta cài
đặt.
• Bên trong phương thức service có hai đối tượng tham số:
- HttpServletRequest: biểu diễn yêu cầu của client từ Web browser
gửi lên.
- HttpServletResponese: mô tả đáp ứng của server gửi đến Web
browser.
SERVLET
43
Viết Servlet
Hàm Service() :
Ví dụ:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
SERVLET
44
Viết Servlet
Hàm destroy() :
• Khi servlet không còn dùng đến hoặc hết thời gian quy định lưu trữ
trong bộ nhớ của Web server thì servlet sẽ bị trình chứa giải phóng.
•Trước khi servlet bị hủy thì phương thức destroy() sẽ được gọi.
•Phương thức destroy() dùng để dọn dẹp tài nguyên, giải phóng bộ
nhớ, đóng kết nối socket hoặc đóng kết nối đến CSDL,
Ví dụ:
conn.close(); //đóng kết nốiCSDL đặt trong
SERVLET
45
Viết Servlet
GetServletConfig() vàgetServletInfo()
•Phương thức getServletConfig() giúp người sử dụng Servlet có được
đối tượng ServletConfig chứa các thông tin khởi tạo từ môi trường
ngoài đưa vào Servlet.
•Phương thức getServletInfo() trả về một chuỗi thông tin mô tả ý nghĩa
và mục đích của Servlet, các thông tin về tác giả, version và copyright.
getServletConfig() vàgetServletInfo()
SERVLET
46
Các bước để viết một Servlet
1. Tạo một servlet kế thừa một trong 2 lớp:
- javax.servlet.GenericServlet hoặc
-javax.servlet.http.HttpServlet
2. Viết chồng hàm sau:
– Nếu Servlet kế thừa từ GenericServlet:
• Service (ServletRequest req, ServletResponse resp)
– Nếu Servlet kếthừatừHttpServlet:
• doGet (HttpServletRequest req, HttpServletResponse resp): để xử lý yêu
cầu HTTP GET
• doPost(HttpServletRequest req, HttpServletResponse resp): để xử lý yêu
cầu HTTP POST.
• Để tránh không phân biệt xử lý cho HTTP GET request hay HTTP GET
request, chúng ta thường chồng cả hai hàm doGet và doPost, sau đó trong 2
hàm này đều gọi đến một hàm xử lý chung.
SERVLET
47
Các bước để viết một Servlet (tt)
3. Ngoài ra có thể viết chồng thêm một số hàm sau:
init() : khởi tạo các tham số, tham biến.
destroy(): huỷ (giải phóng tài nguyên).
SERVLET
48
Các bước để viết một Servlet (tt)
Ví dụ:
public void doGet(HttpServletRequestreq,
HttpServletResponseresp) throws Exception
{
processRequest(req, resp);
}
public void doPost(HttpServletRequestreq,
HttpServletResponseresp) throws Exception
{
processRequest(req, resp);
}
public processRequest(HttpServletRequestreq,
HttpServletResponseresp) throws Exeption
{
// Xử lý yêu cầu
}
SERVLET
49
Xử lý form
Form
Trong các ứng dụng web, ngoài việc thể hiện dữ liệu, thông
tin cho người dùng xem, còn phải cho phép người dùng
tương tác với trang web.
Trang web phải cho phép người dùng nhập dữ liệu và thực
hiện một thao tác nào.
Ví dụ : đăng ký, đăng nhập, tìm kiếm
Để nhập dữ liệu và gửi về cho Web Server xử lý cần có một
biểu mẫu (Form)
Xử lý form
51
Thiết kế biểu mẫu
Dùng thẻ Form trong HTML để thiết kế
Login Please log in
User Name:
Password:
Xử lý form
52
Thiết kế biểu mẫu
Các thuộc tính của thẻ Form
Action : trang xử lý được gửi đến
Method : phương pháp gửi dữ liệu đi
GET
POST
Trong Form cần phải có một nút lệnh submit để thực hiện truyền
dữ liệu đi.
Xử lý form
53
Nhận dữ liệu từ Form và xử lý
Trang xử lý sẽ nhận dữ liệu thông qua mã lệnh Java và dùng đối
tượng ẩn request để nhận
Xử lý form
<% //Lay cacthong tin dang nhap
String userName=request.getParameter("username");
String password=request.getParameter("password");
%>
54
Session
Giới thiệu về Session
Trong ứng dụng Web không có kết nối duy trì thường xuyên
giữa trình khách(web browser) và trình chủ(web server).
Khi trình duyệt cần trình chủ cung cấp một trang tài liệu,
trình duyệt mở kết nối, lấy về trang dữ liệu và sau đó đóng
kết nối ngay lập tức. Vì vậy Web Server sẽ không biết được
trước đó trình duyệt đã có những trạng thái nào.
Session tượng trưng một giai đoạn duy trì kết nối giữa trình
khách và trình chủ trong quá trình liên lạc. Một loạt các
request từ một client sẽ được liên kết với một session.
Session
56
Lớp HttpSession
Trong Java, Web server cài đặt sẵn đối tượng session thuộc
lớp HttpSession. HttpSession dựa vào khái niệm cookie quy
định giữa trình khách và trình chủ.
Cookie là một mẩu thông tin được gởi về trình duyệt phía
máy khách khi có yêu cầu trang từ server.
Mỗi khi trình duyệt phát sinh yêu cầu gửi lên server, nó lại
chuyển mẩu cookie trở lại trình chủ. Dựa vào cookie, trình
khách và trình chủ sẽ có được những thông tin trạng thái
thông báo cho nhau.
Session
57
Đối tượng Session trong JSP
Với đối tượng session thuộc lớp HttpSession, ba phương thức mà ta
thường sử dụng nhất là:
public void setAttribute(Stringname, Object value) throws
IlligalStateException
public Object getAttribute(Stringname) throws IlligalStateException
public void removeAttribute(Stringname) throws IlligalStateException
Biến session chỉ tồn tại trong một thời gian nhất định. Nếu muốn chủ
động làm cho session hết hiệu lực thì ta gọi phương thức:
session.invalidate()
Session
58
Đối tượng Session trong JSP
Chú ý: Giá trị mà ta muốn lưu hay lấy về phải là một đối tượng
(Object). Đối với các giá trị có kiểu int, float, boolean, thì ta phải
chuyển sang kiểu lớp tương ứng như Integer, Float, Boolean,
Vídụ:
Integer tuoicuatui= new Integer(35);
session.setAttribute(“tuoi”,tuoicuatui);
Integer my_age=
(Integer)session.getAttribute(“tuoi”);
Session
59
Đối tượng Session trong JSP
Ví dụ xử lý đăng nhập :
Session
60
Đối tượng Session trong Servlet
Trong JSP có sẵn đối tượng session để sử dụng nhưng trong Servlet
thì session không có sẵn. Ta phải lấy session thông qua đối tượng
request.
HttpSessionsession=request.getSession();
Nội dung dữ liệu mà ta lưu vào session trong trang JSP hoàn toàn có
thể truy xuất được từ servlet.
Nếu ta tạo servlet từ lớp GenericServlet thì ta không có được đối
tượng HttpRequest để truy xuất biến session.
Session
61
Đối tượng Session trong Servlet
Trong JSP có sẵn đối tượng session để sử dụng nhưng trong Servlet
thì session không có sẵn. Ta phải lấy session thông qua đối tượng
request.
HttpSession session=request.getSession();
Nội dung dữ liệu mà ta lưu vào session trong trang JSP hoàn toàn có
thể truy xuất được từ servlet.
Nếu ta tạo servlet từ lớp GenericServlet thì ta không có được đối
tượng HttpRequest để truy xuất biến session.
Session
62
Đối tượng Application
Session chỉ có thể lưu trữ thông tin cho một phiên làm việc,
nếu muốn lưu trữ dữ liệu toàn cục có thể truy xuất ở bất kỳ
trang JSP hoặc Servlet nào, với bất kỳ Session nào thì sao ?
Đối tượng Application được sử dụng trong tình huống trên.
Session
63
Đối tượng Application
Các phương thức mà đối tượng application cung cấp để lưu
trữ và loại bỏ biến hoàn toàn tương tự các phương thức mà
session cungcấp.
Session
64
Sử dụng Application trong JSP
tương tự Session, trong JSP đối tượng application đã được
tạo sẵn
Session
65
Sử dụng Application trong Servlet
Đối tượng application trong JSP thực sự được cài đặt từ giao
diện ServletContext. Trong servlet ta có thể lấy giao tiếp này
để dùng cho mục đích lưu biến vào đối tượng application.
Biến application trong servlet có được bằng cách sử dụng
lệnh sau:
Session
66
Truy xuất CSDL
Trình điều khiển JDBC
Để truy cập các DBMS khác nhau từ
chương trình viết bằng Java thì ta cần có
các JDBC driver tương ứng.
Ta có thể tải các JDBC driver từ trang
web của các nhà cung cấp hệ quản trị
CSDL
68
Trình điều khiển JDBC
Tương tác căn bản nhất của JDBC được liệt kê sau đây:
- Mở một kết nối đến CSDL (Open connection).
- Thực thi các câu lệnh SQL (Execute SQL).
- Xử lý dữ liệu (Process result).
- Đóng kết nối (Close conection).
69
CÁC BƯỚC LẬP TRÌNH TRUY
XUẤT CSDL
Import JDBC driver vào ứng dụng
Nạp trình điều khiển.
Thiết lập kết nối.
Tạo đối tượng Statement
Thực hiện vấn tin
Xử lý kết quả trả về
Đóng kết nối
70
Import JDBC Driver
Trong NetBeanns, click phải lên thư mục library, chọn add
jar và chọn file driver.
71
NẠP TRÌNH ĐIỀU KHIỂN
Sử dụng phương thức tĩnh forName() của lớp Class với tham
số là tên trình điều khiển cơ sở dữ liệu.
• Cách dùng:
try{
Class.forName(“Database driver name”);
}
catch(ClassNotFoundException e){
System.out.println(“Driver not found: ” +e.getMessage());
}
catch(SQLException e){
System.out.println(“SQL Exception: ” + e.getMessage());
}
72
NẠP TRÌNH ĐIỀU KHIỂN (tt)
• Trình điều khiển của MySQL:
• Class.forName(“org.gjf.mm.mysql.Driver”);
• Trình điều khiển của Oracle:
• Class.forName(“oracle.jdbc.driver.OracleDriver”);
• Trình điều khiển của Sybase:
• Class.forName("com.sybase.jdbc.SybDriver");
• Trình điều khiển qua cầu nối ODBC:
• Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
73
THIẾT LẬP KẾT NỐI
Để thiết lập kết nối ta gọi phương thức tĩnh getConnection() của lớp
DriverManager, khi đó trả về một thể hiện của lớp Connection, theo
dạng như sau:
◦ String user = “sa”
◦ String password = “secret”
◦ Connection con = DriverManager.getConnection(dbUrl,
username, password);
Trong đó:
◦ dbUrl: là chuỗi kết nối đến cơ sở dữ liệu.
◦ username : tên người dùng đăng nhập
◦ password : mật khẩu đăng nhập.
74
THIẾT LẬP KẾT NỐI
Ví dụ :
75
Class.forName("com.mysql.jdbc.Driver");
String connectionString =
"jdbc:mysql://localhost:3306/";
String databaseName = "BookOnline";
String userName = "root";
String passWord = "cdcntt";
String query = "select * from authors";
Connection con =
DriverManager.getConnection(connectionString +
databaseName,userName, passWord);
TẠO ĐỐI TƯỢNG Statement
Sử dụng đối tượng Connection để tạo đối tượng Statement.
Statement s = con.createStatement();
Đối tượng này có nhiệm vụ gửi các câu lệnh sql đến CSDL
Cùng một đối tượng Statement có thể sử dụng cho nhiều câu
lệnh sql khác nhau.
Có 3 phương thức thực thi
executeQuery()
executeUpdate()
execute()
76
ĐỌC DỮ LIỆU TỪ CSDL
Sử dụng phương thức executeQuery() của Statement để đọc
dữ liệu từ cơ sở dữ liệu.
Dữ liệu đọc được sẽ được lưu trong ResultSet.
Có thể di chuyển tới lui trong ResultSet để lấy dữ liệu ra.
77
ĐỌC DỮ LIỆU TỪ CSDL
Ví dụ
78
public void selectAll(){
String selectQuery = "SELECT * FROM PRICELIST;";
if (conn != null){
try{
Statement st =
conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.executeQuery(selectQuery);
System.out.println("NAME\t\tPRICE");
while (rs.next()){
String name = rs.getString("NAME");
double val = rs.getDouble("PRICE");
System.out.println(name + "\t\t" + val);
}
st.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
CÁC CHẾ ĐỘ HOẠT ĐỘNG CỦA
RESULTSET
TYPE_FORWARD_ONLY
◦ Con trỏ của ResultSet kiểu này chỉ được di chuyển theo một hướng từ đầu
đến cuối
TYPE_SCROLL_INSENSITIVE
◦ Con trỏ có thể di chuyển tới lui tương đối với vị trí hiện tại của nó, và cũng có
thể di chuyển đến một vị trí cụ thể, không bị ảnh hưỏng nếu kết quả được
thay đổi ở nơi khác
TYPE_SCROLL_SENSITIVE
◦ Con trỏ có thể di chuyển tới lui tương đối với vị trí hiện tại của nó, và cũng có
thể di chuyển đến một vị trí cụ thể, sẽ bị ảnh hưởng nếu kết quả bị thay đổi
nơi khác
79
CÁC PHƯƠNG THỨC CỦA
RESULTSET
next(): di chuyển con trỏ đến dòng kế, trả về true nếu có
dòng kế tiếp, false nếu đến cuối ResultSet
previous(): di chuyển con trỏ đến dòng trước
first(): di chuyển con trỏ đến dòng đầu tiên
last(): di chuyển con trỏ đến dòng cuối cùng
beforeFirst(): di chuyển con trỏ đến vị trí trước dòng đầu
tiên
afterLast(): di chuyển con trỏ đến sau dòng cuối cùng
relative(int rows): di chuyển con trỏ tương đối với vị trí
hiện tại của nó với số dòng là rows
absolute(int row): di chuyển con trỏ đến dòng thứ row
80
LẤY DỮ LIỆU TỪ RESULTSET
Dùng phương thc getXXX(String colname)
XXX là kiểu dữ liệu được trả về
colname là tên của cột cần lấy dữ liệu ra
Ví dụ
String name = rs.getString("NAME");
double val = rs.getDouble("PRICE");
81
NHẬP DỮ LIỆU QUA JDBC
- Sử dụng phương thức executeUpdate() của Statement để cập nhật dữ
liệu qua JDBC
- executeUpdate() trả về số dòng bị ảnh hưỏng sau khi câu lệnh được
thực thi
82
NHẬP DỮ LIỆU QUA JDBC
83
Ví dụ:
public void insertData(String name, double val){
String insertQuery = "INSERT INTO PRICELIST VALUES
('" + name + "'," + val + ");";
if (conn != null){
try{
Statement st = conn.createStatement();
int d = st.executeUpdate(insertQuery);
System.out.println("So dong duoc cap nhat: " + d);
st.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
CHỈNH SỬA DỮ LIỆU BẰNG
RESULTSET
84
• Dữ liệu của một bảng trong CSDL có thể được chỉnh
sửa bằng cách sử dụng câu lệnh SQL UPDATE
• Ta cũng có thể chỉnh sửa dữ liệu trên các hàng của
một bảng từ ResultSet
• Để làm được điều này, ResultSet phải được đặt ở
chế độ CONCUR_UPDATABLE
• Sử dụng các phương thức updateXXX() để chỉnh
sửa dữ liệu trên ResultSet
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_java_chuong_6_phat_trien_ung_dung_web_ja.pdf