Xây dựng hệ thống quản lý các dịch vụ bán hàng trên mạng, trong đó hệ thống cho phép các dịch vụ đăng ký một không gian để bán những mặt hàng mình có trên mạng
Trang 1LỜ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ựckinh 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ướctrê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áchquan 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ủakhá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ốnghiệ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ộiquả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ờigian, 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ónhà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 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ụngthươ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
hồn thành tốt đồ án tốt nghiệp này
Em xin chân thành cảm ơn !
Nha Trang, tháng 08 năm 2003.
SVTH : Nguyễn Văn Ty Lớp : 40 TH
MSSV: 8D15075
Trang 4Chương I YÊU CẦU CỦA ĐỀ TÀI
1 Về mặt ứng dụng.
Xây dựng hệ thống quản lý các dịch vụ bán hàng trên mạng, trong đó hệ thống chophép các dịch vụ đăng ký một không gian để bán những mặt hàng mình có trên mạng Mỗidịch vụ sẽ có một account riêng trong hệ thống, họ có thể cập nhật các mặt hàng, thay đổithông tin của dịch vụ và quản lý những đơn đặt hàng của khách mua hàng thông qua hệ thống.Tuy nhiên, dịch vụ hay mặt hàng của dịch vụ chỉ thực sự hoạt động khi đã thanh tốn nhữngchi phí cần thiết cho hệ thống Đối với những khách hàng vào hệ thống để mua hàng, hệ thống
PHẦN I
CƠ SỞ LÝ THUYẾT
Trang 5phải hỗ trợ sao cho khách hàng có thể tìm kiếm, chọn và đặt hàng một cách dễ dàng Khikhách hàng đặt mua sản phẩm, hệ thống sẽ chuyển đơn đặt hàng này đến dịch vụ bán hàng.Việc giao và nhận hàng diễn ra nội bộ giữa người bán với người mua, hệ thống không thamgia trực tiếp vào việc bán hàng Hệ thống đóng vai trò như một siêu thị ảo, môi giới cho kháchmua hàng với dịch vụ.
Về phía người quản lý
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 đangtham 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, xố 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 tố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
Số lượng các sản phẩm, người đăng ký sử dụng thêm vào không giới hạn
3 Một số yêu cầu khác
Ngồi các yêu cầu trên, ứng dụng có thể:
Dễ dàng cài đặt
Dễ dàng sử dụng
Như vậy, trước những yêu cầu của bài tốn đặt ra như trên, ta cần khảo sát công nghệ
và lựa chọn giải pháp thích hợp để có thể triển khai ứng dụng theo yêu cầu của bài tốn
Trang 6Chương II
NGÔN NGỮ LẬP TRÌNH JAVA ĐỐI VỚI
ỨNG DỤNG MẠNG
I GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA.
Ông tổ của Java không ai khác chính là James Gosling, một lập trình viên của công tySun Microsystems Cuối năm 1990 James Gosling được Sun Microsystem giao nhiệm vụ xâydựng một phần mềm cho các mặt hàng điện dân dụng với mục tiêu nhỏ gọn và tương thíchvới nhiều thiết bị phần cứng khác nhau, thế là Java ra đời Đầu tiên Java có tên là Oak (câysồi) nhưng vì có sự trùng tên nên Oak được đổi tên thành Java như hiện nay
Java được thiết kế cho mục đích đa nền (không phụ thuộc vào bất kỳ hệ điều hànhnào) nên chương trình Java sau khi biên dịch cho ra một file nhị phân khác với các file nhịphân thực thi của Windows như exe hay com java biên dịch ra mã nhị phân gọi là byte-code
có đuôi mở rộng là class và được triệu gọi thực thi trong máy ảo Java (Java Virtual Machine– JVM) Máy ảo Java thực sự là một trình thông dịch bình thường có khả năng thực thi các
mã byte-code tương tự như bộ xử lý của máy tính thực thi các mã nhị phân là các chỉ thị mãmáy Nói đúng hơn máy ảo Java là một kiến trúc của bộ xử lý nhưng thực thi bằng cơ chếphần mềm thay vì phần cứng Chính vì lý do đó mà ta chỉ cần viết máy ảo Java cho từng hệđiều hành thì chương trình Java (.class) có thể chạy như nhau trong mọi hệ điều hành dướinề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âydự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ìnhkhác Java thiên về lập trình cho các ứng dụng mạng và Internet Ngồ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ìnhduyệt Internet (browser) và trình chủ (Web server)
Trang 7Java 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ảomật, cấu trúc độc lập, khả chuyển, hiệu quả cao và linh động (the Java TM Language anOverview – sun Microsystems) Đó là những đặc điểm quan trọng mà không phải bất cứ mộtngô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 Appletkhô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ịchbả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ơnJavaScript như giao tiếp với Web server, thực hiên công việc tính tốn phức tạp, vẽ đồ thị, bảomậ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ạytrê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áctrang Web động, tương tác với cơ sở dữ liệu tương tự như Servlet
JavaScript và Java hồn tồn khác nhau, mặc dù thố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ởiNescape 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 nhau hơn bao giờ hết Java và JavaScript có
cú pháp lập trình rất giống nhau và rất giống với C/C++ nên rất thuận tiện để người dùng học
cả hai ngôn ngữ song song với nhau JavaScript thường được dùng để kiểm sốt và điều khiểncác hoạt động của trình khách JavaScript có thể tạo các hiệu ứng động cho trang Web nhưthay đổi màu sắc, hiển thị ảnh động, tương tác với người dùng bằng chuột, phím, kiểm tra dữliệu nhập vào trước khi gởi về trình chủ để xữ lý
JavaBeans là một thành phần đối tượng được xây dựng từ ngôn ngữ Java, là nhữngkhối mã xây dựng sẵn và có thể dùng lại được Nó đang trở nên ngày càng phổ biến đối vớicác ứng dụng phân tán (distributed application) trên mạng
Java Server Page - JSP đặc biệt cung cấp cho những nhà phát triển Web một nền tảng
để tạo ra các nội dung động trên máy chủ sử dụng HTML và XML, vì mã Java có tính bảomật, nhanh, và độc lập với máy chủ JSP là phần mở rộng đặc biệt của Java Servlet, đơn giảnhơn Servlet JSP được nhúng vào các trang HTML để tạo ra các trang động từ trình chủ phục
Trang 81 Tạo một applet:
Khuôn mẫu của một applet thể hiện ở bốn phương thức sau:
Trong đó :
appletName: tên của applet
Init: để khởi tạo một applet khi một applet được nap (loaded) hay được nạp lại(reloaded)
Start: bắt đầu hoạt động của applet khi applet được nạp hay khi người dùng thăm lạitrang 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 thố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ỏ quakhi 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:
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ạora
Đố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ươngthứ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ủata), applet thực hiện phương thức stop() Khi người dùng trở về trang chứa applet, applet lạikí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 lại applet,nghĩa là người dùng đã thốt khỏi applet rồi lại nạp applet lại một lần nữa Vì mỗi khi thốt khỏiapplet phương thức stop() sẽ được gọi, sau đó destroy sẽ được gọi để thực hiện việc dọn dẹpcho hệ thống Như thế applet sẽ giải phóng tất cả các tài nguyên mà nó đã dùng Cuối cùng
pubilc class appletName extendes Applet
{
public void init() {…}
public void start() {…}
public void stop() {…}
public void destroy() {…}
}
Trang 9applet chính thức bị xố bỏ khỏi bộ nhớ Và khi được nạp lại, quá trình nạp sẽ xảy ra y như lầnđầu applet được nạp.
Thốt khỏi trình duyệt: Khi ta chưa đóng trang Web chứa applet mà đã thốt khỏi trìnhduyệt, applet sẽ lập tức tự khởi động phương thức stop() rồi thực hiện phương thức dọn dẹpdestroy() trước khi trình duyệt bị đóng
2 JavaBeans.
JavaBeans do Sun Microsystem phát triển dựa trên nền tản của Java JavaBeans lànhững giao tiếp lập trình được dùng để tạo ra những khối mã xây dựng sẵn và có thể dùng lạiđược Những thành phần JavaBeans có thể được nhúng vào trong một ứng dụng, liên kết vớicác thành phần JavaBeans khác hay được dùng để kết nối với các ứng dụng Bằng cách dùngcác thành phần JavaBeans các nhà phát triển ứng dụng có thể giảm các khối lượng mã mà họphải viết Họ có thể tự tạo ra các thành phần JavaBeans riêng biệt hoặc mua lại chúng từ cácnhà phát triển thứ ba khác
Trong thời gian qua, môi trường Internet đã trở thành động lực chính cho hướng tiếpcận thành phần (component) dựa trên Java Nó đang trở nên ngày càng phổ biến với các ứngdụng phân tán (distributed application) trên mạng Theo mô hình này một thành phần của ứngdụng sẽ chạy trên máy khách (client), một phần chạy trên lớp trung gian, phần còn lại sẽ chạytrên máy chủ (server) với tác vụ xử lý cơ sở dữ liệu hay tính tốn phức tạp Các ứng dụng Javaxây dựng bằng các thành phần JavaBeans có thể đáp ứng cho cả hai phía client và server
Không có một bí ẩn nào trong việc tạo ra một lớp đối tượng JavaBeans Ta xây dựnglớp đối tượng JavaBeans bằng cách cài đặt giao diện (interface) java.io.Serializable Tiếp đến
ta thiết lập và xây dựng các phương thức mang tên get, set để trình bày cách gọi những thuộctính của Beans trong trang JSP
Cấu trúc của một đối tượng Beans như sau:
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;
} }
Trang 10Cá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ínhbiể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ộtcá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 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 thiết đối với thành phần A mà nó sử dụng.
Cơ chế cài đặt một thuộc tính có thể thông báo cho các thành phần JavaBeans khácbiết khi nó thay đổi như sau: cài đặt hai phương thức dùng để đăng ký và loại bỏ một đốitượng listener
Mỗi thành phần JavaBeans khác phải tự cài đặt một đối tượng listener từ giao diệnPropertyChangeListtener có nhiệm vụ phản ứng lại những thay đổi này, sau đó đăng ký lại
với thành phần JavaBeans A nhờ vào các phương thức trên
Phương thức cần cài đặt cho giao diện PropertyChangeListtener là:
Các thủ tục trên đây chỉ thực hiện nhiệm vụ đăng ký và tạo đối tượng listener mà thôi
Để các đối tượng listener có thể nhận biết sự thay đổi của thuộc tính, ta phải gọi phương thức
firePropertyChange của đối tượng PropertyChangeSupport từ thành phần JavaBeans A 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 propertyChange của listener) đã đăng ký với thuộc tính của thành phần JavaBeans A, sự
thay đổi bao gồm giá trị trước khi thay đổi, giá trị sau khi thay đổi và tên của thuộc tính bịthay đổi
Thuộc tính ràng buộc (constraint property):
Hạn chế của thuộc tính bound property là các đối tượng listener chỉ phản ứng lại khigiá trị thuộc tính đã bị thay đổi Java cung cấp một khả năng khác mạnh hơn đó là tạo thuộc
//Đăng ký
public void addPropertyChangeListtener (PropertyChangeListtener lsn)
//Loại bỏ
public void removePropertyChangeListtener (PropertyChangeListtener lsn)
public void propertyChange (PropertyChangevent evt)
Public void firePropertyChange (String propertyName,
Object oldValue, Object newValue)
Trang 11tính bị ràng buộc (constraint property), tương tự như thuộc tính bound mỗi lần thuộc tínhconstraint định thay đổi giá trị (chỉ dự định chứ chưa thay đổ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 chophé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ảicà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ệnVetoableChangeListener có nhiệm vụ phản ứng lại những thay đổi này (cho phép hay khôngcho phép thuộc tính thay đổi), sau đó đăng ký với thành phần JavaBeans nhờ vào các phươngthứ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ị chothuộ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ằngphương thức fireVetoableChange của đối tượng VetoableChangeSupport từ thành phầnJavaBeans 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ứcvetoableChange của listener) đã đăng ký với thành phần JavaBeans
* Xử lý tình huống của thành phần JavaBeans:
Đối tượng nào sản sinh ra tình huống được gọi là nơi phát sinh tình huống (eventsource), đối tượng nào dùng để tiếp nhận và xử lý các tình huống phát sinh từ đối tượng khácđược gọi là đối tượng listener
Các tình huống nội tại (event state):
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)
Trang 12Một thành phần JavaBeans ngồi việc gởi tình huống đến những đối tượng khác cònphải lo xử lý các tình huống mà bản thân hệ thống gởi đến mình.
Nếu xét về vai trò thì bản thân hệ thống là nơi phát sinh tình huống còn thành phầnJavaBeans phải tiếp nhận và xử lý các tình huống này
Để nhận biết được tình huống mà hệ thống đưa đến, thành phần JavaBeans phải xâydựng một đối tượng listener và đăng ký đối tượng này với hệ thống Các đối tượng mà Java đãthiết kế sẵn dành cho từng tình huống cụ thể như sau:
ComponentListener
Listener dùng để nhận biết các tình huống khi đối tượng bị thay đổi kích thước (resize), di chuyển (move), hiện ra (show) hay dấu đi (hidden)
MouseMotionListener Listener nhận biết tình huống di chuyển chuột.
WindowListener Listener nhận biết tình huống một cửa sổ bị đóng lại, mở ra, thu nhỏ thành biểu tượng… ActionListener 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…).
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ànhphần JavaBeans sẽ đăng ký với hệ thống đối tượng listener này Cách thứ hai là dùng chínhbản thân thành phần JavaBeans cài đặt cho giao diện listener và đăng ký với hệ thống quabiế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 SunMicrosystem khởi xướng còn JavaScript tiền thân lại ra đời từ ngôn ngữ đặc tả (scripting
Trang 13language) 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ênngôn ngữ JavaScript Tuy nhiên Java và JavaScript vẫn khác nhau về cơ bản Java là mộtngô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 đổitươ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:
Phát triển từ Netscape Communications Phát triển từ sun Microsystem
Các dòng lệnh được thông dịch bởi trình
duyệt (brower)
Các dòng lệnh được biên dịch ra mã máy(JVM) trước khi cho thực thi
Nền tảng dựa trên các đối tượng được
xây dựng sẵn (object base) Các đối
tượng này không cho phép thừa kế để
tạo ra những đối tượng mới
Nền tảng dựa trên cơ sở hướng đối tượng(object oriented), tất cả đều quy về đối tượng
và có khả năng thừa kế để tạo ra những đốitượng mới phong phú hơn
Không cần phải khai báo dữ liệu trước
<SCRIPT LANGUAGE = “JavaScript “ SRC =”javacode.txt”>
< SCRIPT>
<SCRIPT LANGUAGE = “JavaScript “>
// Các đoạn mã lệnh của JavaScript được đặt ở đây
< SCRIPT>
Trang 14II 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 JSPcung 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 tagọ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ìnhchủ 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
Thay vì sử dụng cú pháp <%%>để diễn đạt một khối gồm nhiều lệnh ta có thể sử dụng
cú pháp <%=%> chỉ để hiển thị kết xuất của một giá trị biến hay hàm nào đó Ví dụ:
<html>
// đây là chú thích một dòng
/*
Trang 15Chú thích
nhiều dòng
*/
</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 quantâm đến Ví dụ:
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 địnhnghĩ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ọibấ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 khaibá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ượngjavax.servlet.http.HttpServletRequest Giao diện HttpServlet được định nghĩa như một đốitượ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ượngrequest 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áctham số Chúng ta có thể thấy điều này bằng cách gọi phương thức getParameter() củarequest Phương thức này thừa kế từ lớp cha là javax.ServletRequest Phương thức này nhậntên tham số và trả về giá trị chuỗi tương ứng với tên của tham số đó Phương thứcgetParameter() sẽ trả về giá trị của tham số mà nó giữ, nếu tham số này là null, nó sẽ trả vềgiá trị null
Ngồi ra, vì đối tượng request đại diện cho đối tượngjavax.servlet.http.HttpServletRequest nên có thể sử dụng các phương thức của
public void jspService (HttpServletRequest request, HttpServiceResponse response) throws IOException, Servlet ( )
Trang 16javax.servlet.http.HttpServletRequest trên request như getSession(), getCookies(),getRemoteUser()…
2.2 Đối tượng Response:
Một đối tượng khác của JSP là đối tượng response Đối tượng response cho phép phảnhồi thông tin xử lý từ trình chủ trở về trình duyệt Hầu hết ứng dụng thông thường của đốitượng response là dùng để xuất HTML ra trình duyệt Đối tượng response thường gọi phươngthức getWriter() để thực hiện kết xuất
Các phương thức mà đối tượng respons thường sử dụng được liệt kê như sau:
- response.sendRedirect(java.lang.String location): gởi đối tượng responsemột lần nữa đến một trang JSP được chỉ định trong đối số của phương thức
- response.setContenType(java.lang.String type): Định dạng nội dung xuất làkiểu type - đối số của phương thức
2.3 Đối tượng Session:
Đối tượng session tham chiếu đến đối tượng javax.servlet.http.HttpSession Đối tượngsession dùng để lưu các đối tượng khác từ những yêu cầu của client Chúng đưa ra hầu hếttrạng thái đầy đủ của HTTP
Đối tượng session được khởi tạo bằng cách gọi phương thức pageContext.getSession()
để tạo ra trang servlet Cú pháp như sau:
Khi cần một biến nào đó có giá trị tồn cục từ khi mở cho đến khi kết thúc 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áonhư sau:
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ươngthức getAtribute() như sau: name chính là tên của biến mà ta cần truy xuất
session getAttribute(java.lang.String name)
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 tồ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
session = pageContext.getSession()
session.setAttribute(java.lang.String name, java.lang.Object value)
application = pageContext.getServletContext();
Trang 17Đố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 trongapplication
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ớpjava.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:
Đối tượng config tượng trưng cho lớp ServletConfig, nó được định nghĩa là đối tượngtạo bởi servlet chứa các thông tin cấu hình của servlet Với thông tin cấu hình này servlet sẽtruy cập đối tượng ServletContext Phương thức khởi dựng như sau:
pageContext là một đối tượng JspFactory
Trong nhiều trường hợp ta không cần phải sử dụng đối tượng config Truy cập đếnServletContext thông qua đối tượng application cũng đạt được kết quả tương tự
2.7 Đối tượng Exception:
Đối tượng Exception chỉ tồn tại trong trang xử lý lỗi (error page) Nó dùng để thamchiếu đến nguyên nhân gây ra lỗi mà trang xử lý lỗi có liên quan
Lỗi có thể xuất hiện trong quá trình hoạt động của trang JSP ở hai giai đoạn: giai đoạnthứ nhất lỗi thường phát sinh ở bước khởi tạo Ở bước này trang JSP nhận yêu cầu từ trìnhkhách và chuẩn bị thực thi, tuy nhiên trước khi thực thi trang JSP cần được dịch ra mã classcủa Java và quá trình dịch có thể sinh lỗi Lỗi ở bước này còn gọi là lỗi thời điểm dịch(translation time error) Giai đoạn thứ hai, trang JSP có thể phát sinh lỗi trong quá trình phảnhồi các yêu cầu xử lý Lỗi này được gọi là lỗi thời điểm yêu cầu (request time error)
Kiểu lỗi JSP thứ nhất có thể xuất hiện khi trang JSP lần đầu tiên được triệu gọi TrangJSP sẽ đi qua quá trình biên dịch từ tâïp tin nguồn jsp thành mã Java java sau đó được biêndịch thành đối tượng servlet ở mã byte-code là tập tin class Lỗi ở giai đoạn này thường doquá trình biên dịch thất bại hoặc do lỗi cú pháp khi thông dịch từ JSP sang mã nguồn Java.Lỗi này thường được báo với trạng thái mã lỗi là 500 hoặc trình chủ Web có thể thông báonhững mã lỗi biên dịch của riêng Java Lỗi tại thời điểm dịch thường được quản lý bởi bộ thôngdịch JSP (JSP engine)
out.print(“Hello world!”);
config = pageContext.getservletconfig():
Trang 18Kiể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êntrong 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ể hồn tồn đón bắt và thay thế những trang thông báo lỗi này sử dụng đối tượngexception
Để tạo ra trang thông báo lỗi ta cần khai báo như sau:
3 Các hành động của JSP:
Hành động trong JSP là quá trình trừu tượng hố việc thực thi hay yêu cầu JSP thựchiệ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>:
Hành động <JSP:include> cung cấp cấu trúc cho sự phối hợp tài nguyên tĩnh và hànhđộng của trang JSP hiện tại Cú pháp của hành động này như sau:
Page: thuộc tính này trình bày quan hệ đường dẫn của tập tin ta muốn include
Flush: thuộc tính này trình bày giá trị Boolean là true hay false
//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.
<jsp: param name = “paraName” value = “paraValue” />
Trang 19Cú pháp đầu tiên mô tả yêu cầu nhúng (include) tập tin cần đưa vào trang JSP Cúpháp thứ hai chứa đựng phần tử con param được dùng để làm tham số cho mục đích include
c Hành động <jsp: forward>:
Hành động <jsp: forward> cho phép trình dịch JSP gởi đi tại thời điểm thực thi mộtyêu cầu hiện hành đến tài nguyên tĩnh, servlet, hay trang JSP khác Khi hành động này thựcthi nó sẽ kết thúc trang hiện tại Hành động <jsp:forward> có thể chứa hành động <jsp:param> Những thuộc tính này cung cấp các giá trị cho thông số yêu cầu dùng cho việcchuyển hướng
Cú pháp của hành động <jsp: forward> được mô tả như sau:
<jsp: forward page = “relativeURLspec” />
<jsp:plugin type = “pluginType” code =
“classFile” codebase = “relativeURLpath” >
<jsp:param>
</jsp:param>
</ jsp:plugin >
Trang 20Thuộ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àmmộ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 tinplugin 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 hiện câu lệnh
SQL JDBC cung cấp tập hợp các lớp và giao diện cho phép phát triển các ứng dụng Java vàứng dụng Web liên quan đến truy xuất cơ sở dữ liệu Tương tác căn bản nhất của của JDBCđược liệt kê như sau:
Mở một kết nối với cơ sở dữ liệu (Open connection)
Thực thi các câu lệnh SQL (Execute SQL)
Xử lý dữ liệu (Process results)
Đóng kết nối (Close connnection)
Đoạn mã sau đây sẽ diễn giải từng bước cách thực hiện kết nối với cơ sở dữ liệu bằngJDBC:
// Bước 1 Khai báo biến
static final String DBDriver ="sun.jdbc.odbc.JdbcOdbcDriver";
static final String strConn ="jdbc:odbc:woodstore";
// Bước 2 Tham chiếu đến đối tượng cơ sở dữ liệu
stat = conn.createStatement();
// Bước 3 Thực hiện câu lệnh SQL
sSQL = "select * from items where " + sWhere;
Trang 21dễ thao tác hơn, công cụ đó chính là JRUN, để JRUN có thể truy xuất các tập tin MDF củaSQL ta phải sử dụng cầu nối ODBC.
Ta có thể thấy rằng ODBC làm việc như phần ruột của WINDOWS, nó sẽ sử dụng cáctrình điều khiển trong các DLL để thi hành công việc ODBC có hai tập hợp các trình điềukhiển: một tập hợp sử dụng tiếng nói của trình quản lí cơ sở dữ liệu và tập kia cung cấpphương pháp giao tiếp thông thường cho ngôn ngữ lập trình Sự kết hợp của hai tập thông quamột giao diện chấp nhận được cho phép JRUN truy cập nội dung của cơ sở dữ liệu bằng cách
sử dụng một tập hàm chuẩn các hàm gọi Dĩ nhiên có nhiều kiểu tiện ích DLL đi kèm vớiODBC Ví dụ như một trong các DLL sẽ cho phép ta làm chủ nguồn dữ liệu ODBC Còn giaodiện chủ cho ODBC có trog file CPL (bảng điều khiển) ở thư mục SYSTEM
ODBC đưa ra đảm bảo rằng có thể cung cấp được phương pháp để lấy nội dung trong
cơ sở dữ liệu mà không có vấn đề gì Mặc dù trong một số trường hợp, nó không cung cấpđược cách tốt nhất để có thể chuyển đổi dữ liệu giữa trình quản lí cơ sở dữ liệu và JRUN,nhưng nói chung là tốt Chỉ có một điều duy nhất cần chú ý là tốc độ thi hành của nó rấtchậm Nhưng các phiên bản mới của ODBC đã có những cải tiến đáng kể về tốc độ Do đóngày nay nó đã được đánh giá khả quan hơn nhiều
Hầu như công việc lập trình ứng dụng mà JSP và servlet thường thực hiện nhất đó làlưu trữ và truy xuất cơ sở dữ liệu.Việc truy xuất cơ sở dữ liệu trong JSP và servlet dựa vàotrình truy xuất ODBC theo chuẩn java
Trang 22Chương III ĐẶC TẢ TÍNH NĂNG
Dựa vào yêu cầu của bài tốn, ta nhận thấy hệ thống xây dựng phục vụ chủ yếu cho bavấn đề sau:
Trang 23I QUẢN TRỊ HỆ THỐNG
Quản trị hệ thống là người làm chủ ứng dụng, họ có quyền kiểm sốt mọi hoạt độngcủa hệ thống Mỗi quản trị hệ thống sẽ được cấp một username và password, để thực hiệnnhững chức năng của mình, họ phải đăng nhập vào hệ thống bằng username và password củahọ
Nếu như quá trình đăng nhập thành công thì quản trị hệ thống có những chức năngsau:
* Chức năng của quản trị đối với quản trị:
Thay đổi những thông tin của quản trị
Hiển thị các sản phẩm, hay xóa sản phẩm khi hết hạn sử dụng
* Chức năng của quản trị đối với đơn đặt hàng:
III DIỄN ĐÀN (FORUM).
Diễn đàn sẽ giúp khách hàng, cũng như những người trong công ty trao đổi, học hỏinhững kinh nghiệm lẫn nhau
Chức năng của diễn đàn:
Trang 24Liệt kê tất cả các topic.
Xem nội dung một topic
Trả lời một topic
Xố một topic
Chương IV XÂY DỰNG ỨNG DỤNG WOOD STORE
I HOẠT ĐỘNG VÀ LƯU ĐỒ CỦA ỨNG DỤNG.
to Customer) còn gọi là từ doanh nghiệp đến người tiêu dùng
Ứng dụng Wood Store của ta là một Web site hổ trợ việc bán các sản phẩm gỗ trênmạng Từ trang chủ này, người dùng có thể tìm kiếm, xem các sản phẩm trong tuần, duyệttheo các thể loại sản phẩm khác nhau Ngồi ra khách hàng còn có thể đăng ký thành viêntrong web site, tham dự diễn đàn (forum)
Đầu tiên khách hàng có thể tham khảo công ty qua trang giới thiệu Trang này sẽ gớithiệu cho ta biết về công, và những điều cần biết
Trang 25Hình3.1: Trang giới thiệu về công ty
Cụ thể, khi người dùng kích chuột vào một sản phẩm, họ có thể biết được tên, giá cả,những chú ý khác về sản phẩm,…
Hình3.2: Trang chủ