Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
LỜI NĨI ĐẦU
Ngày nay, Internet ngày càng trở nên cần thiết cho
cuộc sống, đặc biệt trong lónh vực kinh doanh. Thương mại
điện tử hiện đang là ngành kinh tế thu lợi nhuận cao của
nhiều nước trên thế giới. Mặc dù vậy, nước ta lại chưa phát
triển loại hình này do các điều kiện khách quan. Tuy nhiên,
sớm hay muộn thì chắc chắn cũng phải có phần đáp ứng được
nhu cầu của khách hàng và nhà thương mại. Vì buôn bán là
một hoạt động không thể thiếu trong đời sống hiện nay, và
cũng nhờ sự phát triển của thương mại điện tử mà các nhà
thương mại có cơ hội quảng cáo sản phẩm của mình rộng rãi hơn.
Với thương mại điện tử, chúng ta không còn phải đến
trực tiếp cửa hàng vừa tốn thời gian, sức khỏe. Giờ đây, chúng
ta có thể ngồi tại nhà mà có thể mua được bất kỳ một món
hàng nào. Thật là tuyệt vời!
Chính vì thế, em đã chọn đề tài “Nghiên cứu
JSP và Java, xây dựng website bán hàng cho
Công ty Cổ Phần Chế biến gỗ Việt Đức”
nhằm làm quen với thương mại điện tử và bắt kòp sự phát
SVTH: Nguyễn Văn Ty Trang 1
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
triển của nước ta cũng như thế giới. Do thời gian hạn chế,
việc tìm hiểu và xây dựng một ứng dụng trên công nghệ Java
(một công nghệ mới) đối với em rất khó khăn. Dù vậy, ứng
dụng cũng đã triển khai được phần lớn các yêu cầu chính mà
một ứng dụng thương mại điện tử cần đáp ứng.
Em xin chân thành cảm ơn thầy Nguyễn Đức
Thuần đã tận tình hướng dẫn, giúp em hoàn thành tốt đồ
án tốt nghiệp này.
Em xin chân thành cảm ơn !
ảo, môi giới cho khách mua hàng với dòch vụ.
Về phía khách hàng
Các khách hàng có thể đăng kí mua hàng, cũng như việc xem và lựa
chọn những sản phẩm qua mạng nếu họ đồng ý với những sản phẩm đó.
Khách hàng có thể dễ dàng xem hàng, hoặc đăng ký mua hàng bất
cứ lúc nào thông qua mạng máy tính khi mà máy chủ đã khởi động.
Các khách hàng có thể dễ dàng tìm thấy sản phẩm mà mình cần,
việc đăng kí mua hàng chỉ thông qua thao tác nhấn chuột trên sản phẩm mà mình lựa
chọn.
Các khách hàng còn có thể theo dõi được những sản phẩm mới mà
công ty chuẩn bò bán ra trong một thời gian sắp tới.
Khi cần thiết thì khách hàng có thể hỏi đáp thông qua công ty, hoặc
thông qua diễn đàn nhằm góp ý cũng như việc thắc mắc với công ty. Diễn đàn sẽ
giúp cho khách hàng giải quyết các vấn đề mà mình không giải quyết được.
Về phía người quản lý
SVTH: Nguyễn Văn Ty Trang 6
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
Người quản lý có thể theo dõi thành viên, đơn hàng của các khách
hàng đang tham gia mua hàng của công ty mình (như số lượng mặt hàng, số tiền,
của khách hàng …) và nắm các thông tin của khách hàng như email, đòa chỉ để liên
lạc khi cần.
Người quản lý có thể thêm sản phẩm, xoá sản phẩm, thêm người
quản lý, người sử dụng thông qua chương trình đã được xây dựng.
2. Về mặt kỹ thuật
Bài toán đòi hỏi hệ thống phải có những khả năng về kỹ thuật như sau:
Ứng dụng triển khai trên môi trường JSP.
Hỗ trợ nhiều hệ điều hành (cho phía client).
Hỗ trợ nhiều trình duyệt (như IE, Netscape..)
Hỗ trợ nhiều người dùng.
Số lượng người tham gia đăng ký mua hàng không giới hạn.
nền một kiến trúc máy ảo. Cha đẻ của Java là hãng Sun Microsystem chòu trách
nhiệm xây dựng các máy ảo Java cho những hệ điều hành khác nhau. Nhiệm vụ
của lập trình viên là chỉ viết chương trình mã nguồn Java sau đó biên dòch chương
trình ra dạng file thực thi byte-code để chạy trên máy ảo.
Java có thể dùng để viết chương trình ứng dụng tương tự như mọi ngôn ngữ
lập trình khác. Java thiên về lập trình cho các ứng dụng mạng và Internet. Ngoài ra
ta có thể dùng Java để viết các Applet hoặc Servlet hay trang JSP là những thành
phần ứng dụng dành cho trình duyệt Internet (browser) và trình chủ (Web server).
Java là một ngôn ngữ đơn giản, hướng đối tượng, phân tán, thông dòch mạnh
mẽ, bảo mật, cấu trúc độc lập, khả chuyển, hiệu quả cao và linh động (the Java
SVTH: Nguyễn Văn Ty Trang 8
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
TM Language an Overview – sun Microsystems). Đó là những đặc điểm quan
trọng mà không phải bất cứ một ngôn ngữ lập trình nào cũng có được.
Applet là những mẫu chương trình nhỏ được nhúng và chạy ngay trong trình
duyệt. Applet giúp bạn thực hiện được rất nhiều tương tác bên trong trình duyệt. Có
thể nói Java ra đời và nổi tiếng chính là nhờ khả năng viết Applet của nó. Mặc dù
vậy, ngày nay các Applet không còn được sử dụng nhiều trên các trình duyệt.
Chúng được thay thế bằng ngôn ngữ kòch bản JavaScript. Tuy nhiên vẫn còn nhiều
điều mà Applet có khả năng lập trình mạnh mẽ hơn JavaScript như giao tiếp với
Web server, thực hiên công việc tính toán phức tạp, vẽ đồ thò, bảo mật…
Servlet là một thành phần đối tượng chủ yếu phục vụ cho mục đích tích hợp
và chạy trên các trình chủ Web server. Servlet giúp xử lý và tạo ra các trang Web
động. Servlet có thể kết hợp với các trang Java Server Page - JSP là các trang
Script chạy phía máy chủ để tạo các trang Web động, tương tác với cơ sở dữ liệu
tương tự như Servlet.
JavaScript và Java hoàn toàn khác nhau, mặc dù thoáng nghe đến tên gọi
bạn có thể nghó rằng chúng đều xuất phát từ Java. JavaScript là một ngôn ngữ kòch
bản ra đời và phát triển bởi Nescape Communication trong khi Java được phát triển
bởi Sun Mcrosystem. Mặc dù vậy, ngày nay chúng trở nên thân thiết và gần gũi với
Start: bắt đầu hoạt động của applet khi applet được nạp hay khi người dùng
thăm lại trang chứa applet.
Stop: chấm dứt hoạt động của applet khi người dùng rời khỏi trang chứa
applet hay đóng trình duyệt.
Destroy: thực hiện việc dọn dẹp chuẩn bò cho applet thoát hẳn (unloading).
Không phải applet nào cũng dùng đủ 4 phương thức này, các phương thức bò
bỏ qua khi viết một applet sẽ được trình duyệt tự thực hiện khi nạp applet đó.
* Vòng đời của một applet:
Nạp một applet:
SVTH: Nguyễn Văn Ty Trang 10
pubilc class appletName extendes
Applet
{
public void init() {…}
public void start() {…}
public void stop() {…}
public void destroy() {…}
}
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
Khi một applet được nạp có các sự kiện xảy ra như sau:
Một instance của lớp con applet được tạo ra, có nghóa là một đối tượng
applet được tạo ra.
Đối tượng applet này tự khởi tạo mình, có nghóa là tự cài đặt, nhận các giá
trò (phương thức init() được gọi đến).
Đối tượng applet này bắt đầu chạy (phương thức start() được gọi).
Rời khỏi hay trở về trang Web:Khi người dùng sang trang mới (không chứa
applet của ta), applet thực hiện phương thức stop(). Khi người dùng trở về trang
chứa applet, applet lại kích hoạt phương thức start(). Quá trình này cũng xảy ra khi
người dùng thu nhỏ cửa sổ (minimize) rồi mở lại (restore).
Nạp lại một applet:Thông thường các trình duyệt cho phép người dùng nạp
Cấu trúc của một đối tượng Beans như sau:
Các thuộc tính (property) của thành phần JavaBeans:
Thuộc tính là một trong những khía cạnh quan trọng nhất trong JavaBeans,
thuộc tính biểu diễn những trạng thái (state) mà một thành phần JavaBeans có thể
có. Người dùng đa số tương tác với JavaBeans qua các thuộc tính của nó. Bằng
cách thay đổi các thuộc tính các nhà phát triển ứng dụng sẽ đem đến cho đối tượng
thành phần một diện mạo (apperance) và một cách hành xử (behavior) khác.
Thuộc tính thể hiện sự thay đổi (bound property):
JavaBeans là từng thành phần riêng biệt nhưng vẫn có thể kết nối được với
nhau qua cơ chế gởi thông báo (message). Khi thuộc tính của một thành phần
SVTH: Nguyễn Văn Ty Trang 12
Public class mybeans implement java.io.Serializable
{
protect int the_value;
// Phương thức khởi dựng Beans
public mybeans {}
//Khai báo phương thức đặt giá trò cho thuộc tính myvalue
public void set_myvalue(int new value)
{
the_value = new_value;
}
//Khai báo phương thức trả về giá trò cho thuộc tính myvalue
public int get_myvalue()
{
return the_value;
}
}
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
JavaBeans A thay đổi nó có thể thông báo cho một thành phần JavaBeans B khác
biết để thành phần JavaBeans B này có cơ hội cập nhật lại những thông tin cần
đổi) nó sẽ thông báo đến tất cả các đối tượng listener đã đăng ký, đối tượng
listener có quyền từ chối không cho phép thay đổi và như vậy thuộc tính vẫn phải
giữ nguyên giá trò ban đầu. Ngược lại nếu đối tượng listener cho phép thì quá trình
thay đổi giá trò cho thuộc tính mới diễn ra tiếp tục.
Để đăng ký đối tượng listener cho thuộc tính ràng buộc, thành phần
JavaBeans phải cài đặt hai phương thức sau đây:
Mỗi thành phần JavaBeans khác phải tự cài đặt một đối tượng listener từ
giao diện VetoableChangeListener có nhiệm vụ phản ứng lại những thay đổi này
(cho phép hay không cho phép thuộc tính thay đổi), sau đó đăng ký với thành phần
JavaBeans nhờ vào các phương thức trên (add dùng để đăng ký còn remove dùng
để loại bỏ đối tượng listener).
Phương thức cần cài đặt cho giao diện VetoableChangeListener là:
Nếu đối tượng listener không đồng ý thay đổi thuộc tính nó sẽ ném ra ngoại
lệ PropertyVetoException, thành phần JavaBeans sẽ bắt lấy và huỷ bỏ quá trình
thay đổi trò cho thuộc tính.
Cũng như thuộc tính dạng bound, khi thuộc tính constraint có dự đònh thay
đổi giá trò trong phương thức setter nó cần thông báo cho các đối tượng listener đã
đăng ký với nó bằng phương thức fireVetoableChange của đối tượng
VetoableChangeSupport từ thành phần JavaBeans như sau:
Phương thức này sẽ thông báo đến mọi đối tượng listener (bằng cách gọi
phương thức vetoableChange của listener) đã đăng ký với thành phần JavaBeans.
SVTH: Nguyễn Văn Ty Trang 14
public void addVetoableChangeListener (VetoableChangeListener lsn)
public void removeVetoableChangeListener (VetoableChangeListener lsn)
public void vetoableChange (PropertyChangevent evt)
throws PropertyVetoException
public void fireVetoableChange (String propertyName, Object oldValue,
Object newValue)
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
* Xử lý tình huống của thành phần JavaBeans:
Listener nhận biết tình huống mà đối tượng sẽ phải
thực thi một tác vụ nào đó.
AdjustmentListener
Listener nhận biết tình huống mà đối tượng thay đổi
giá trò (như vò trí thanh trượt của thành phần scrollbar
chẳng hạn).
ItemListener
Listener nhận biết tình huống mà một phần tử thay
đổi trạng thái (như trong các thành phần checkbox,
choice…).
SVTH: Nguyễn Văn Ty Trang 15
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
Có hai cách để tạo đối tượng listener giúp thành phần JavaBeans tiếp nhận
tình huống mà hệ thống đưa đến. Cách thứ nhất là tạo ra một đối tượng listener
riêng biệt sau đó thành phần JavaBeans sẽ đăng ký với hệ thống đối tượng listener
này. Cách thứ hai là dùng chính bản thân thành phần JavaBeans cài đặt cho giao
diện listener và đăng ký với hệ thống qua biến this.
3. Java Script.
3.1. JavaScript là gì?
Về nguồn gốc thì Java và JavaScript không liên quan gì với nhau. Java do
Sun Microsystem khởi xướng còn JavaScript tiền thân lại ra đời từ ngôn ngữ đặc tả
(scripting language) do hãng Netscape Communications đưa ra với tên là
LiveScript. Sau một thoả thuận giữa Sun và Netscape ngôn ngữ LiveScript và Java
đã cùng bắt tay nhau để tạo nên ngôn ngữ JavaScript. Tuy nhiên Java và JavaScript
vẫn khác nhau về cơ bản. Java là một ngôn ngữ lập trình mạnh mẽ, có thể dùng để
viết applet hay bất kỳ một ứng dụng nào (chạy độc lập hoặc chạy trên mạng) còn
JavaScript chỉ là một ngôn ngữ đặc tả dùng để thay đổi tương tác với bản thân trình
duyệt mà thôi.
Sau đây là bảng so sánh các đặc điểm khác nhau cơ bản giữa hai ngôn ngữ
Java và JavaScript:
Các đoạn mã lệnh của JavaScript được đặt trọn trong nội dung của trang
Web giữa hai thẻ:
Mã của JavaScript không thể dấu được vì nó hiện diện cùng với nội dung
trang Web. Nhưng ta có thể đònh nơi chứa mã nguồn bằng thuộc tính SCR trong thẻ
<SCRIPT> như sau:
Nếu Java hơi khô khan thì ngược lại JavaScript rất sống động với những
hình ảnh cũng như kỹ xảo dùng để tương tác với trang Web. JavaScript cũng có thể
điều khiển được Applet nếu như applet cho phép điều đó.
II. JAVA SERVER PAGE – JSP.
JSP là công nghệ rất mạnh để tạo ra trang HTML về phía trình chủ. JSP là
phần mở rộng trực tiếp của Java Servlet. Bộ diễn dòch JSP sẽ ánh xạ trực tiếp mã
Java thành Servlet. Viết JSP ta không cần trải qua quá trình biên dòch tập tin thực
thi .class như trong Servlet. JSP cung cấp mô hình lập trình Web dễ dàng và tiệân
dụng hơn Servlet.
1. Cú pháp cơ bản của JSP.
1.1. Sử dụng thẻ bọc mã <%%>.
Ưu điểm của trang JSP là khả năng nhúng mã Java giữa các thể đònh dạng
HTML. Mã Java được đặt trong cặp dấu <%%>. Bên trong mã Java nếu muốn kết
xuất dữ liệu HTML ta gọi phương thức println() của đối tượng out. Đối tượng out là
đối tượng mặc đònh được trình chủ Web server cung cấp dùng để ghi kết xuất gửi
về máy khách. Thẻ HTML và mã Java có thể trộn lẫn lộn với nhau.
Ví dụ:
<html>
<b>
SVTH: Nguyễn Văn Ty Trang 17
<SCRIPT LANGUAGE = “JavaScript “ SRC =”javacode.txt”>
< SCRIPT>
<SCRIPT LANGUAGE = “JavaScript “>
// Các đoạn mã lệnh của JavaScript được đặt ở đây
< SCRIPT>
</html>
JSP còn cung cấp thêm cho ta cú pháp chú thích <%-- --%>. Tất cả các khối
lệnh Java và HTML nằm giữa hai dấu chú thích này sẽ được trình biên dòch trang
bỏ qua không quan tâm đến. Ví dụ:
SVTH: Nguyễn Văn Ty Trang 18
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
<%--
out.println (“ Đoạn này trình biên dòch sẽ bỏ qua”)
--%>
Dấu chú thích này rất có hiệu quả. Nó giúp ta tạm thời cô lập hoặc che bỏ
tác dụng của một đoạn mã Java nào đó đang bò lỗi trong trang JSP. Ta chỉ tạm thời
làm mất tác dụng của chúng chứ không cần xoá bỏ.
1.4. Khai báo phương thức và biến hằng <%!%>
Một cú pháp nữa mà JSP cung cấp đó là <%! %>. Cú pháp này cho phép ta
đònh nghóa một hoặc nhiều phương thức và biến. Phương thức và biến sau đó có thể
được triệu gọi bất kỳ nơi đâu trong trang JSP.
2. Các đối tượng của JSP:
Trong JSP chúng ta có thể truy cập một số đối tượng của JSP mà không cần
phải khai báo. Trình dòch JSP sẽ nhận dạng những đối tượng này và dòch sang trang
Servlet.
2.1. Đối tượng Request:
Đối tượng Request đại diện cho đối tượng
javax.servlet.http.HttpServletRequest. Giao diện HttpServlet được đònh nghóa như
một đối tượng truy cập đến thông tin header của giao thức HTTP được gởi về trình
khách. Đối tượng request thường được truyền như đối số cho phương thức service(),
ví dụ:
Một trong những ứng dụng thông thường nhất của đối tượng request là nắm
giữ các tham số. Chúng ta có thể thấy điều này bằng cách gọi phương thức
getParameter() của request. Phương thức này thừa kế từ lớp cha là
javax.ServletRequest. Phương thức này nhận tên tham số và trả về giá trò chuỗi
trình duyệt, ta chọn đối tượng session. Đối tượng session sẽ tạo biến cục bộ cho
phép lưu một giá trò nào đó từ trang JSP này đến trang JSP khác trong suốt phiên
làm việc của chúng ta.
Để đối tượng session có thể lưu giữ những biến của chương trình ta cần phải
khai báo như sau:
SVTH: Nguyễn Văn Ty Trang 20
session = pageContext.getSession()
session.setAttribute(java.lang.String name, java.lang.Object value)
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
Trong đó name là tên biến value là giá trò của biến.
Khi cần truy xuất một biến nào đó của đối tượng session ta cần phải sử dụng
phương thức getAtribute() như sau: name chính là tên của biến mà ta cần truy xuất.
2.4. Đối tượng Application:
Đối tượng application tham chiếu đến javax.servlet.ServletContext cho phép
lưu giữ cấu hình toàn cục của Servlet và JSP. Cách đối tượng application khởi tạo
như sau:
Trong đó pageContext là một đối tượng JspFactory.
Đối tượng application có phạm vi hoạt động ở cấp ứng dụng, nghóa là có thể
giữ giá trò của tất cả các trang JSP ở những session khác nhau cho tới khi JSP
engine bò đóng lại.
Tương tự như session, ta có thể gọi phương thức application.setAtribute() để
lấy về giá trò lưu giữ trong application.
Phương thức application.setAtribute() được dùng để đặt trò cho biến cần chứa
trong application.
2.5. Đối tượng Out:
Đối tượng out đùng để ghi kết xuất gởi về trình duyệt. Đối tượng out hình
thành từ lớp java.io.Writer.
Ví dụ:
dùng để ghi câu “Hello world!” lên trình duyệt của máy khách.
2.6. Đối tượng Config:
Java. Lỗi tại thời điểm dòch thường được quản lý bởi bộ thông dòch JSP (JSP engine).
Kiểu lỗi thứ hai của trang JSP liên quan đến quá trình xử lý các yêu cầu
(request). Những lỗi này còn được xem là lỗi lúc thực thi (runtime error). Chúng có
thể xuất hiên bên trong nội dung trang JSP hoặc xuất phát từ lời gọi phương thức
nào đó của một đối tượng. Thường đối với kiểu lỗi này ngoại lệ (excepton) sẽ được
phát sinh. Các ngoại lệ có thể bò đón bắt và xử lý bởi các đoạn mã JSP thích hợp
(thường là trong khối lệnh try{} catch (Exception){}). Tuy nhiên đối với những
ngoại lệ phát sinh nhưng không được người ta viết trang JSP đón bắt xử lý thích
hợp thì ngoại lệ và lỗi sẽ được gởi đến bộ xử lý lỗi của trình biên dòch JSP. Bản
thân trình biên dòch JSP sẽ sinh ra trang thông báo mô tả cụ thể lỗi trả về cho trình
khách. Ta có thể hoàn toàn đón bắt và thay thế những trang thông báo lỗi này sử
dụng đối tượng exception.
Để tạo ra trang thông báo lỗi ta cần khai báo như sau:
SVTH: Nguyễn Văn Ty Trang 22
//Chỉ thò trang JSP hiện hành là trang xử lý lỗi
<%@ page isErrorPage = “true”%>
//hiển thò nội dung thông báo lỗi phát sinh
Error: <%= exception.getMessage() %> has been reported.
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
3. Các hành động của JSP:
Hành động trong JSP là quá trình trừu tượng hoá việc thực thi hay yêu cầu
JSP thực hiện một nhiệm vụ nào đó.
a. Hành động <jsp:param>:
Hành động <JSP:param> được dùng để cung cấp và tạo các giá trò cho các
tham số theo dạng name/value. <JSP:param> thường dùng chung với các hành động
<JSP: include>, <JSP:forward>, <JSP: plugin>. Cú pháp của hành động
<JSP:param> được mô tả như sau:
Name: thuộc tính này trình bày tên của thông số tham chiếu.
Value: thuộc tính này trình bày giá trò của tên được tham chiếu.
b. Hành động <jsp:include>:
(Embed).
Hành động <jsp:plugin> tạo một thẻ <object> hay <embed> đưa ra dòng
xuất của đối tượng response.
Cú pháp của hành động <jsp:plugin> như sau:
SVTH: Nguyễn Văn Ty Trang 24
<!-- Cú pháp 1 -->
<jsp: forward page = “relativeURLspec” />
<!-- Cú pháp 2 -->
< jsp: forward page =
“relativeURLspec”>
<jsp: param … />
</ jsp: forward>
<jsp:plugin type = “pluginType” code =
“classFile” codebase = “relativeURLpath” >
<jsp:param>
. . .
</jsp:param>
</ jsp:plugin >
Đồ án tốt nghiệp đại học GVHD: Nguyễn Đức Thuần
Thuộc tính của hành động <jsp:plugin> cho phép cấu hình dữ liệu để thể
hiện phần tử đó.
Type: thuộc tính này thể hiện loại plugin cần đưa vào. Ta có thể dùng
applet làm một thành phần nhúng.
Code: thuộc tính này cho biết tên của lớp (class) sẽ được nhúng.
Codebase: thuộc tính này là tham chiếu cơ sở hay đường dẫn liên hệ đến
tập tin plugin .class.
4. JDBC và ODBC (Java Database Connectivity và Open Database Connectivity).
4.1. JDBC.
JDBC (Java Database Connectivity) là giao thức của Java dùng để thực