Đồ án Xây dựng Website cho Hội Doanh Nghiệp Trẻ Hà Nội

Theo em đây là một chương trình có tính thực tiễn, có thể áp dụng được vào thực tế. Do thời gian, kiến thức còn hạn chế nên còn một số chức năng, mô đun chương trình chưa hoàn thiện được và còn nhiều sai sót trong lập trình. Em mong nhận được nhiều ý kiến đóng góp cho chương trình ngày một hoàn thiện hơn. Qua thời gian thực hiện đồ án em cũng đã nhận thức được nhiều kiến thức bổ ính đồng thời cũng củng cố các kiến thức đã học trong trường. Đồ án này thực sự là cơ hội tốt cho em vận dụng kiến thức đã học trong trường, nó giúp em trưởng thành rất nhiều.

doc64 trang | Chia sẻ: oanh_nt | Lượt xem: 1181 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ án Xây dựng Website cho Hội Doanh Nghiệp Trẻ Hà Nội, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
g để truy nhập hệ thống. 3 Password Text Mật khẩu của người đăng sản phẩm. 4 Khoa Yes/no Tài khoản của người đăng sản phẩm bị khóa hay không. 5 SoBaiDang Number Số sản phẩm đã gửi lên của người đăng sản phẩm. f)Thực thể Sản Phẩm ( Product). Các thuộc tính của thực thể này cũng gần giống như của thực thể Bài viết STT Thuộc tính Kiểu Mô tả 1 ID Auto number Mã của sản phẩm. 2 TieuDe Text Tiêu đề sản phẩm. 3 IDLoai Number Mã loại sản phẩm. 4 NgayDang Date/time Ngày giờ bài giảng được đăng. 5 NoiDung Memo Giới thiệu về sản phẩm. 6 Xoa Yes/no Sản phẩm có bị xóa hay không 7 IDDang Number Mã của người đăng sản phẩm. g)Thực thể Loại sản phẩm (ProductType): Thực thể Loại sản phẩm cho biết mã loại sản phẩm và tên loại sản phẩm. STT Thuộc tính Kiểu Mô tả 1 ID Auto number Mã loại sản phẩm. 2 Ten Text Tên loại sản phẩm. h)Thực thể Người đăng ký mua(Register ): Thực thể này lưu thông tin về người đăng ký mua hàng, các trường cũng giống như của thực thể Người viết bài. STT Thuộc tính Kiểu Mô tả 1 ID Auto number Mã của người mua. 2 Name Text Tên người mua sử dụng để truy nhập hệ thống 3 Password Text Mật khẩu của người mua. 4 Khoa Yes/no Tài khoản của người mua bị khóa hay không. i)Thực thể Mua( by): Thực thể này lưu thông tin về thời gian truy cập của người đăng ký mua hàng. Thực thể này lưu các thông tin phục vụ cho việc thống kê của hệ thống. STT Thuộc tính Kiểu Mô tả 1 IDMua Number Mã của đăng ký mua. 2 IDChuDe Number Mã của chủ đề mà người đăng ký mua truy cập vào. 3 IDLoai Number Mã của loại sản phẩm mà người đăng ký mua. 4 ThoiGian Date Thời gian mà người đăng ký mua truy cập vào website để mua. j)Thực thể Người quản trị( Admin): STT Thuộc tính Kiểu Mô tả 1 ID Auto number Mã của người quản trị. 2 Name Text Tên truy nhập của người quản trị 3 Password Text Mật khẩu truy nhập k)Thực thể Người quản lí Forum. STT Thuộc tính Kiểu Mô tả 1 ID Auto number Mã người quản lí Forum 2 Name Text Tên người quản lí Forum 3 Password Text Mật khẩu truy nhập 4 Khoa Yes/no Tài khoản của người quản lí Forum bị khóa hay không. m)Thực thể Thành viên Forum( Member). STT Thuộc tính Kiểu Mô tả 1 ID Auto number Mã người quản lí Forum 2 Name Text Tên người quản lí Forum 3 Password Text Mật khẩu truy nhập 4 Khoa Yes/no Tài khoản của thành viên bị khóa hay không. 5 SoChuDe Text Số chủ đề đã đăng. l)Thực thể Chủ đề. Thực thể Chủ đề chứa các thông tin về chủ đề đăng trên Forum. Nó cho biết các thông tin về chủ đề như: tiêu đề của chủ đề, ngày chủ đề được đăng lên, mã của thành viên đăng chủ đề. STT Thuộc tính Kiểu Mô tả 1 ID Auto number Mã của chủ đề. 2 TieuDe Text Tiêu đề chủ đề. 3 NgayDang Date/time Ngày giờ chủ đề được đăng. 4 NoiDung Memo Nội dung của chủ đề. 5 Xoa Yes/no Chủ đề có bị xóa hay không 6 IDNguoiDang Number Mã của người gửi chủ đề. 2.4.2.Mô hình thực thể liên kết. Có các quan hệ chính giữa các thực thể: Quan hệ giữa Người viết bài( NguoiViet) và Bài viết( BaiViet). Quan hệ giữa Người đăng bài( NguoiDang) và Bài viết( Baiviet). Quan hệ giữa Người đăng sản phẩm ( NguoiDang) và Sản Phẩm ( SanPham). Quan hệ giữa Thành viên Forum( Thanhvien) và Chủ đề( ChuDe). Quan hệ giữa Người đăng ký ( NguoiMua) và Sản Phẩm ( SanPham) SanPham ID TieuDe IDLoai NgayDang NoiDung Xoa IDDang NgayDang LoaiSanPham ID Ten NguoiDang ID Name Password Khoa SoSanPhamDang BaiViet ID TieuDe NgayGui NoiDung Anh Dang Xoa IDGui IDDang NgayDang fileName filePath NguoiViet ID Name Password Xoa SoBaiGui NguoiDang ID Name Password Khoa NguoiMua ID Name Password Khoa Mua IDMua IDTieuDe ThoiGian IDLoai ChuDe ID Title NoiDung Xoa IDDang NgayDang ThanhVien ID Name Password Khoa SoBaiDang Chương III: Giới thiệu về ngôn ngữ và công cụ sử dụng. 3.1.Ngôn ngữ Java và công nghệ JSP/Servlet. 3.1.1.Ngôn ngữ Java. 3.1.1.1.Tổng quan về ngôn ngữ lập trình Java. Java là ngôn ngữ lập trình hướng đối tượng, được phát triển bởi hãng Sun MicroSystem 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ành nào) nên mã của chương trình Java sau khi biên dịch thường ra một dạng file nhị phân khác với các file thực thi nhị phân của Windows mà bạn thường thấy như .exe hay .com. Java biên dịch ra mã nhị phân gọi là byte-code và được triệu gọi thực thi trong máy ảo Java( Virtual Machine hay VM). File nhị phân của Java thường mang tên mở rộng là .class. Máy ảo Java thực sự là một chương 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 này bạn chỉ cần viết máy ảo Java cho từng hệ điều hành là chương trình Java( .class) có thể chạy như nhau ở mọi nơi trên cùng một kiến trúc máy ảo. Bạn không cần lo về máy ảo Java. Cha đẻ của ngôn ngữ 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 Java chỉ là viết chương trình bằng mã nguồn Java sau đó biên dịch ra chương trình ra dạng file thực thi byte-code( .class) để chạy trên máy ảo. Ta có thể tìm thấy máy ảo Java và trình biên dịch java trong bộ JDK( Java Deverlopment Kit) hỗ trợ bởi Sun và rất nhiều hãng khác như IBM, Oracle... Hiện JDK của Sun được xem là chuẩn và sử dụng nhiều nhất. Bạn có thể tìm thấy phiên bản mới nhất của JDK1.4 tại địa chỉ của Sun: bộ công cụ phần mềm này được cho tải về miễn phí. 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 bạn có thể dùng java để viết Applet hoặc Servlet hay mã trang JSP là những thành phần ứng dụng đặc biệt dùng cho trình duyệt( browser) và trình chủ( Web server). 3.1.1.2.Đặc điểm của Java. 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. Sau đây là một số đặc điểm của Java. Đơn giản( Simple): đặc điểm đầu tiên và cũng là mục đích cơ bản của Java là tình đơn giản. Kích thước của bộ biên dịch cơ bản và lớp hỗ trợ là vô cùng nhỏ. Theo các nhà sáng lập, kích thước đó là 40KB cho trình thông dịch và cho lớp hỗ trợ, thêm vào bộ thư viện chuẩn và lớp hỗ trợ phân tuyến thì kích thước chỉ khoảng 175KB. Kích thước này là của bản gốc còn các phiên bản mới con số đó còn tăng lên. Tuy vậy so với Visual Basic và VC thì rất nhỏ. Hướng đối tượng( Object Oriented): mọi ứng dụng viết trên Java đều phải được xây dựng trên các đối tượng và thông qua các đối tượng. Các hỗ trợ của java không cho phép các đối tượng có tính đa thừa kế mà thay vào đó có các giao tiếp( interface). Phân tán( Distributed): java được thiết kế để hỗ trợ các ứng dụng phân tán bằng các lớp mạng (java.net). Một ứng dụng java có thể dễ dàng được truy xuất từ các máy chủ ở xa, nó có thể mở hoặc truy cập đến các đối tượng thông qua mạng. Thông dịch( Interpreter): Java là một ngôn ngữ thông dịch( thật sự java là một ngôn ngữ vừa thông dịch vừa biên dịch) nên nó trở nên khả chuyển, Các ứng dụng Java có thể dễ dàng chạy trên các máy tính với các nền phần cứng khác nhau, chỉ cần đi kem với nó là bộ thông dịch, bộ gỡ rối và nhất là bộ thư viện (runtime library). Mạnh mẽ( Robust): java không cho phép lập trình viên khai báo các biến một cách tùy tiện, biến luôn phải tường minh. Nhờ đó mà những lỗi thường gặp trong khi viết bằng ngôn ngữ C như cấp phát bộ nhớ, bộ nhớ tràn, trùng lặp bộ nhớ… đã được giải quyết. Bảo mật( Security): Java được viết cho các ứng dụng chạy trên môi trương mạng phân tán. Do đó Java được thiết kế sao cho có khả năng tạo được một hệ thống không virus, không bị phá. Kỹ thuật xác minh của Java dựa vào cách mã hóa theo khóa công cộng. Java không hỗ trợ biến con trỏ. Một thông dịch bytecode sẽ kiểm tra chặt chẽ các mã byte, không cho bất kỳ những hành vi không được phép nào được thực hiện. Khả chuyển: máy ảo Java tương thích với môi trường được cài đặt tạo nên kiến trúc trung tính, các ứng dụng Java chỉ cần ciết sao cho chay được trên máy ảo đó là có thể cài đặt và chạy tốt trên mọi hệ thống. Mặt khác, các kiểu dữ liệu của java được định nghĩa không phụ thuộc vào bộ xử lí hay vào hệ điều hành mà các ứng dụng được cài đặt. Hiệu quả cao( High performance ): so với các chương trình được biên dịch hoàn tòan bằng C hay C++, các chương trình Java không có hiệu quả cao hơn. Nhưng với tính năng giao diện đồ họa, sự đơn giản, nhỏ gọn, tính khả chuyển, ta cũng có thể nói là hiệu quả chung của các chương trình Java là đáng khích lệ so với tính phức tạp của C/C++. Đa tuyến( Multithread): tính năng này cho phép chúng ta có thể thực hiện nhiều tiến trình song song và tương hỗ với nhau tránh được tính tuần tự nhàm chán và những thời gian chết trong chờ đợi. Linh động( Flexible): vì dùng trình thông dịch nên Java là ngôn ngữ rất năng động. Trong khi chạy, môi trường Java có thể tự mở rộng để liên kết các lớp mới có thể ở một máy chủ ở xa trên mạng. Đó chính là thuận lợi to lớn của Java so với C/C++. 3.1.1.3.Viết chương trình ứng dụng Java. Viết chương trình ứng dụng Java rất đơn giản, ngoài bộ JDK ra tất cả những gì bạn cần chỉ là trình soạn thảo văn bản đơn giản kiểu nopepad của Windows hay edit.exe của DOS. Trên Linux/Unix bạn có thể dùng trình VI. Mã nguồn của Java chỉ là file thuần văn bản. Bạn cũng có thể dùng các môi trường phát triển và biên dịch Java có giao diện trực quan như Jbuilder, Visual Age... Ngôn ngữ Java rẩt giống với ngôn ngữ C/C++. Tuy nhiên phong cách lập trình thì khác hẳn. Trong Java mọi thứ đều qui về lớp và đối tượng. Đối tượng là thể hiện thật sự của một lớp. Nói cách khác lớp mô tả tổng quát về đối tượng bao gồm thuộc tính, phương thức...Nếu bạn đã lập trình trong các ngôn ngữ khác như C, VB... thì có thể hình dung lớp là khai báo kiểu còn đối tượng là khai báo biến. Mọi hàm và thủ tục phải đặt trong một lớp. Vì lí do này Java không có khái niệm hàm hay thủ tục đơn lẻ. Bạn phải gọi hàm và thủ tục là phương thức bởi chúng được đặt trong một lớp đối tượng. 3.1.1.4.Các loại ứng dụng trong Java. Java có thể xây dựng được mọi loại ứng dụng. Dưới đây là một số ứng dụng điển hình trong Java. a) Ứng dụng console. Các ứng dụng console thường ghi kết xuất ra màn hình văn bản ở chế độ kí tự. Ứng dụng Java mà chúng ta tìm hiểu trong ví dụ trên thuộc loại ứng dụng console. Các ứng dụng console thường bắt đầu bằng lời gọi đến phương thức main () . Ví dụ : Public class ConsoleApp { public static void main ( String [] args) { System . out . println ( “ This is console application ”) ; } } Biên dịch và chạy chương trình C:\ SAMPLE > javac ConsoleApp . java C :\ SAMPLE > java ConsoleApp This is console application b)Ứng dụng đồ họa. Bạn có thể dùng Java để viết các chương trình đồ họa tương tự các ứng dụng Windows. Một chương trình đồ họa thường cần một khung cửa sổ cùng với các thành phần giao diện như nút nhấn, checkbox, menu, listbox. Chương trình đồ hạo còn cho phép bạn vẽ ra cửa sổ bằng các đối tượng như Graphics. Dưới đây là chương trình tạo và mở cửa sổ tương tự các chương trình Windows chuẩn viết trên C hay VB. c)Applet. Applet là một trong những ứng dụng mạng nổi tiếng trong Java. Applet là một cửa sổ chương trình thu nhỏ có khả năng nhúng trong trong Web và chạy bên trong trình duyệt. Trang Web HTML sử dụng thẻ để nhúng mã java . class vào tài liệu. Tuy nhiên để viết ra Applet bạn cần dùng trình biên dịch java và tuân theo một số quy định : Applet không được truy xuất tài nguyên của máy khách như mở hay đọc file. Applet chỉ có thể chạy bên trong trình duyệt và không thể tồn tại như một ứng dụng độc lập ( mặc dù vậy bạn vẫn có thể thiết kế Applet vừa chạy với tư cách ứng dụng vừa chạy với tư cách nhúng trong trình duyệt). Để viết Applet lớp đối tượng của bạn cần kế thừa và xây dựng trên lớp cơ sở java .awt.Applet. d) Servlet. Trái với Applet thường được các trình duyệt tải về chạy trên máy khách. Servlet là các thành phần đối tượng nhúng trên trình chủ Web server thực hiện xử lí yêu cầu và sinh ra các trang Web động trả về máy khách. Để sử dụng được Servlet bạn cần có các trình chủ hiểu Java và hỗ trợ triệu gọi Servlet như Apache, Jrun... Mặc dù vậy biên dịch và tạo Servlet chúng ta chỉ cần đến trình biên dịch JDK mà không cần đến các trình chủ. Dưới đây là mã Servlet viết bằng Java. import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, Java.io.IOException { //chỉ định nội dung kiểu tài nguyên trả về cho trình khách resp.setContentType(“text/html”); //tạo luồng suất PrintWriter để chuyển kết quả từ máy chủ về cho trình khách java.io.printWriter out=new java.io.printWriter(resp.getOutPutStream()); //định dạng trang web Html trả về out.println(“”); out.println(“Welcome to Java Servlet”); out.println(“”); } } Bạn biên dịch myServlet.java thành tập tin myServlet.class như sau. C:\Sample>javac myServlet.java Tiếp đến đăng kí myServlet.class với trình chủ hiểu java. Bạn có thể gọi myServlet từ trình duyệt URL. e)Jsp. Jsp là cách đơn giản hóa hơn cho servlet. Nếu như đối với servlet bạn phải viết mã java và biên dịch bằng tay trước khi đưa vàosử dụng với trình chủ Web servlet thì jsp không cần điều này. Jsp viết mã java tương tự servlet nhưng có phép trộn lẫn java với các thẻ định dạng html. Trình diễn dịch jsp sẽ chịu trách nhiệm kết hợp mã java với thẻ html để tạo ra servlet xử lí các yêu cầu mà trình khác gửi đến. Jsp đơn giản và dễ sử dụng hơn servlet mặc dù sau khi biên dịch và thực thi chúng chỉ là một. Dưới đây là trang Jsp viết bằng java. Welcome to jsp page <% int x,y;result; x=3; y=x+10; result=x+y; out.println(“x+y result:”+result”); %> Bạn lưu nội dung vào file mang tên myPage.jsp và đặt vào thư mục thích hợp trên trình chủ java có khả năng thông dịch trang jsp. e)Ứng dụng EJB, RMI, JMS. Đây là các lớp đối tượng hoạt động trong mô hình phân tầng( multi-tier) và triệu gọi đối tượng phân tán trong môi trường J2EE (Java 2 Enterprise Edition). Các đối tượng EJB hoạt động trong những trình chứa( container) kiểm soát các giao tác( transaction) truy cập cơ sở dữ liệu đầu cuối, thực hiện tính năng bảo mật và an toàn cao. Giao thức RMI cho phép thực hiện triệu gọi phương thức của đối tượng hoạt động t rên một máy ở xa. JMS hỗ trợ cơ chế giao tiếp thông qua hàng đợi thông điệp (message queue) xuyên suốt trên mạng. Kết hợp được những công nghệ Java này vào ứng dụng Web bao gồm JSP, JavaBean và Servlet khiến việc triển khai ứng dụng trở nên nhanh chóng hiệu quả và hệ thống ổn định đáng tin cậy hơn. 3.1.2.Servlet. 3.1.2.1.Định nghĩa Servlet. Servlet có thể được xem như một applet phía server (server side). Các servlet được nạp và được thực thi tại trình chủ Web (Web Server). Hình sau chỉ ra một servlet chấp nhận các yêu cầu từ trình khách (thông qua trình chủ Web sẽ được giới thiệu ở phần sau), thi hành tác vụ và trả về các kết quả WEB BROWSER WEB SERVER SERVLET HTTP Request HTTP Response Các bước cơ bản khi sử dụng servlet: Client (hầu hết là các trình duyệt Web) tạo ra một yêu cầu (request) dựa trên giao thức HTTP. Trình chủ Web nhận các yêu cầu này và chuyển cho servlet xử lí. Nếu servlet chưa được nạp, trình chủ Web sẽ nạp nó vào trong máy ảo Java và thực thi nó. Servlet sẽ nhận yêu cầu này dựa trên giao thức HTTP và thi hành. Servlet sẽ trả ngược về cho trình chủ Web một phản hồi (response). Trình chủ Web sẽ chuyển phản hồi này cho trình khách. Vì servlet được thực thi trên máy chủ, vấn đề bảo mật với các applets thường không được áp dụng. Trình duyệt Web không truyền thông trực tiếp được với servlet; servlet được nạp và được thực thi bởi trình chủ Web. Điều này có nghĩa rằng nếu trình chủ Web được bảo mật đằng sau bức tường lửa (firewall), thì servlet cũng được bảo mật theo. 3.1.2.2.Ưu điểm của Servlet. Các servlet bền vững. Servlet nhanh chỉ được nạp một lần bởi trình chủ Web và có thể duy trì các dịch vụ ( chẳng hạn kết nối cơ sở dữ liệu) giữa các yêu cầu. Servlet độc lập với nền. Như đã đề cập trước đây, servlet được viết bằng ngôn ngữ Java, vốn đã mang lại sự độc lập nền cho nỗ lực phát triển của ta. Servlet có khả năng mở rộng. Do servlet được viết bằng ngôn ngữ Java, điều này mang lại cho servlet các lợi ích khách của ngôn ngữ Java. Java là ngôn ngữ lập trình hướng đối tượng, nó dễ dàng mở rộng để phù hợp với nhu cầu của ta. Servlet rất an toàn. Cách duy nhất để gọi một servlet từ bên ngoài là thông qua trình chủ Web. Điều này mang lại một mức bảo mật cao, đặc biệt là nếu như trình chủ Web được bảo vệ đằng sau bức tường lửa. Servlet có thể sử dụng được với đủ loại trình khách. Trong khi các servlet được viết bằng ngôn ngữ Java, chúng ta có thể sử dụng chúng dễ dàng từ các Java applet cũng như từ HTML. 3.1.2.3.Biên dịch Servlet. Để biên dịch cần có thư viện hỗ trợ các lớp chuẩn servlet. Thư viện này thường nằm trong file servlet.jar và không có sẵn trong bộ JDK1.3. Các trình chủ Web server đều kèm theo thư viện này giúp bạn biên dịch và thực thi servlet. Ngoài thư viện servlet.jar, servlet có thể biên dịch bằng trình biên dịch javac (trong bộ JDK) chuẩn của Java mà không cần đến bất kỳ trình chủ Web server nào. Nếu đã cài đặt nền J2EE (Java 2 Enterprise Edition) thư viện hỗ trợ biên dịch và thực thi servlet sẽ có sẵn trong file ( [J2EE_HOME]\lib\j2ee.jar. Cần phải thiết lập đường dẫn CLASSPATH trỏ đến thư viện servlet trước khi biên dịch như sau: C:\sample>SET CLASSPATH=%CLASSPATH%; C:\ProgramFiles\AlaireJRun\libextservlet.jar Kết quả thu được sau khi biên dịch file servlet là các file .class. Chúng ta có được một servlet ở dạng thực thi (mã byte-code) và triệu gọi được bởi trình chủ Web server. 3.1.2.4.Đăng kí và triệu gọi Servlet. Ta phải đăng kí servlet với trình chủ Web server trước khi có thể triệu gọi được nó. Đối với các Web server khác nhau, việc đăng kí servlet rất khác biệt. Vị trí cấu hình thư mục đặt file .class của servlet để trình chủ tìm thấy triệu gọi cũng không hoàn toàn giống nhau giữa các trình chủ. Tuy nhiên nhìn chung quá trình đăng ký servlet bao gồm các bước: Chép tập tin .class của servlet vào thư mục qui định của trình chủ Web server. Chỉ đường dẫn đến file .class và đặt cho servlet một tên bí danh để triệu gọi nếu cần. Thiết lập các thông số khởi tạo cho servlet và các điều kiện bảo mật cho phép servlet được triệu gọi. Như đã đề cập từ trước, tất cả những gì được đòi hỏi để chạy các servlet là một trình chủ Web có hỗ trợ servlet API. Nền tảng của chúng là JavaWeb Server của Javasoft. Bảng sau đưa ra danh sách một số nhà cung cấp và các sản phẩm trình chủ Web của họ. Nhà sản xuất Sản phẩm Apache Apache jserv IBM Internet Connection Server ATG Dynamo Application Server Konasoft Konasoft Enterprise Server Lotus Domino Go Webserver O’Reilly Website Professional W3C Jigsaw HTTP Server Weblogic Tengah Application Server Bạn cũng cần phải nhớ rằng theo thứ tự sử dụng servlet, cần có vài kiểu ứng dụng khách mà nó sẽ gọi servlet. Dạng cơ bản nhất mà chúng ta sẽ thấy đó là HTML. HTML được hỗ trợ toàn cầu bởi các trình duyệt Web. Chúng ta cũng sẽ thấy rõ làm thế nào để nâng cao sức mạnh của servlet. 3.1.2.5.Các phương thức xử lý cơ bản của Servlet. Lớp GenericServlet là phần cài đặt tổng quát cho đặc tả giao tiếp( interface) mang tên Servlet. Theo đặc tả của giao tiếp Servlet do Sun đưa ra một servlet cần có những phương thức phục vụ cho các nhu cầu: khởi tạo(init), hoạt động và phục vụ( sevice), hủy( destroy), trả về thông tin cấu hình lớp giao tiếp Servlet được mô tả như sau: interface Servlet { void destroy(); ServletConfig getServletConfig(); String getServletInfo(); void init(Servletconfig config); void service(ServeltRequest req, ServletResponse res); } Lớp GenericServlet cài đặt tất cả các phương thức của giao tiếp Servlet trên đây. Khí tạo ra một servlet mới đơn giản chỉ nên kế thừa lại GenericServlet và xây dựng chồng (override) các phương thức muốn sử dụng. a)Phương thức khởi tạo init(). public void init() Phương thức khởi tạo này được gọi khi lần đầu tiên trình chủ Web server nạp mã thực thi của servlet từ tập tin .class vào bộ nhớ và bắt đầu cho phép servlet hoạt động. Bạn có thể dựa vào phương thức này để khởi tạo các biến môi trường f và giá trị ban đầu cần thiết cho quá trình thực thi servlet sẽ diễn ra tiếp theo. Thường trong phương thức init() ta khở tạo giá trị mảng, tạo sẵn kết nối với cơ sở dữ liệu, nạp các lớp thư viện cần thiết…. Ví dụ ta có thể nạp trình điều khiển JDBC truy xuất cơ sở dữ liệu, tạo sẵn kết nối đến nguồn dữ liệu cho servlet trong phương thức init() như sau: public class CSDL extends GenerricServlet { String DBDriver=”sun.jdbc.odbc.JdbcOdbcDriver”; String strConn=”jdbc:odbc:CSDL”; Connection con; public class init() { Class.forName(DBDriver).newInstance(); conn=DriverManager.getConnection(strConn); } } b)Phương thức phục vụ service(). public void service( ServletRequest req, ServletResponse res) throws IOException Sau khi phương thức init đã hoàn tất, trình chủ Web servlet sẽ triệu gọi đến phương thức phục vụ service(). Phương thức này được xem là trung tâm xử lý của servlet mà bạn cần phải cài đặt. Khi trình chủ nạp servlet vào bộ nhớ, phương thức init() chỉ được gọi duy nhất một lần trong khi phương thức service() có thể được triệu gọi nhiều lần ứng với mỗi yêu cầu servlet phát sinh từ trình duyệt phía máy khách. Bên trong phương thức service() bạn có thể sử dụng đối tượng tham số ServletRequest và ServletResponse để tiếp nhận dữ liệu từ trình khách chuyển lên và kết xuất kết quả phản hồi trở lại trình khách. Ví dụ sau : public void service(ServletRequest request, ServletResponse response) throws IOException { response.setContenType(“text/html”); PrintWriter out=response.getWriter(); out.println(“”); out.println(“body”); out.println(“Welcome Servlet !”); … } c)Phương thức hủy bỏ destroy() Khi servlet không còn dùng đến nữa hoặc hết thời gian qui định lưu giữ trong bộ nhớ của trình chủ destroy() sẽ được gọi. Nếu như ta dùng phương thức init() để thực hiện khởi tạo biến cho servlet thì phương thức destroy() ngược lại có thể dùng để dọn dẹp tài nguyên mà các biến chiếm giữ, đóng các kết nối mà phương thức init() đã mở… d)Phương thức getServletConfig() và getServletInfo(). Hai phương thức này nhằm mục đích cung cấp thông tin. Phương thức getServletConfig() giúp cho 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. getServeltInfo() trả về một chuỗi thông tin mô tả ý nghĩa và mục đích của servlet. 3.1.3.JSP( Javaserver Pages). 3.1.3.1.Giới thiệu chung về JSP. Công nghệ JavaServer Pages (viết tắt là JSP) là công nghệ lập trình Web phí máy chủ của Java, dựa trên nền J2EE để xây dựng những ứng dụng chứa nội dung trang Web động như: HTML, DHTML, XHTML và XML. Công nghệ JSP có khả năng tạo ra những trang Web với nội dung linh hoạt, có vai trò quan trọng trong việc phát triển các ứng dụng Web. Một trang JSP ( .jsp) là một trang HTML hay XML trong đó có chứa mã Java, phần HTML chịu trách nhiệm về việc định dạng văn bản, mã chương trình xen lẫn trong văn bản dùng để diễn đạt các thao tác xử lý dữ liệu hoặc nối kết với CSDL ( Database). Trang Web truyền thống ( dùng HTML) được trình chủ Web gửi ngay đến cho máy khách (Client) khi có yêu cầu, còn các trang JSP phải chạy qua một bộ máy ( Engine) riêng biệt, ở đó phần mã chương trình được tách ra khỏi trang JSP, được thi hành và kết quả xử lý được ghi trở lại trang Web đang xét, tạo thành trang HTML thuần tuý. Trang JSP khi chạy, mã Java sẽ được biên dịch thành JavaServlet và Servlet này chạy trên máy ảo Java (JVM) ở phía máy chủ (Web Server). Mã Java được biên dịch khi máy khách truy xuất trang JSP lần đầu tiên. Tập tin .jsp có cấu trúc giống như tập tin .html truyền thống, nhưng khác ở chỗ là tập tin .jsp có xen lẫn mã Java. Mã Java được tách biệt với phần HTML thông thường bằng cặp dấu . JSP Container JSP HTML Web Browser Web Server HTML Request 3.1.3.2.Những đặc điểm nổi bật Tận dụng được sức mạnh của ngôn ngữ lập trình Java Từ trước đến nay chúng ta đều biết đến Java như là một công cụ hỗ trợ đắc lực trong việc xây dựng các ứng dụng Web Client – side. Nhưng Java cũng còn là một môi trường lý tưởng để tạo thành phần server cho ứng dụng Web. Do nền tảng của JSP dựa trên Java nên JSP cũng tận dụng được các ưu điểm trên. JSP cung cấp một phương pháp rất mạnh để xử lý yêu cầu từ Client, cũng như những ưu việt trong chế độ an toàn, chống rò rỉ bộ nhớ (memory leak) và hỗ trợ chế độ xử lý đa tuyến đoạn (multithreading). Ngoài ra, môi trường Java đã đưa ra rất nhiều sự mở rộng cho việc phát triển các ứng dụng enterprise. JSP ngày nay đã là một thành phần cốt lõi trong môi trường J2EE. Vì vậy, với công nghệ JSP, người ta hoàn toàn có thể tạo ra được những ứng dụng có quy mô lớn với chất lượng cao. Quá trình phát triển, triển khai và duy trì phát triển ứng dụng Web trở nên dễ dàng và nhanh chóng. JSP đã làm đơn giản hóa và tăng tốc quá trình phát triển ứng dụng Web. Thay cho việc phải viết một chương trình Java, giờ đây người ta chỉ cần tạo một trang HTML, thêm các thẻ tựa XML (XML - like tags) và nếu cần thiết, sử dụng thêm các đoạn scriptlet. Bằng việc hỗ trợ các thư viện customized tag và mô hình phát triển dực trên thành phần (component - based development), JSP không chỉ làm giảm công sức phải bỏ ra của những người phát triển mà nó còn cung cấp một cơ sở vững chắc cho các công cụ phát triển. Khi đã được xây dựng, các trang JSP còn dễ bảo trì bởi sự tách biệt các xử lý nghiệp vụ (thường được đặt trong các thư viện customized tag hay các thành phần JavaBeans) ra khỏi giao tiếp, hình thức của trang. Tận dụng được những thành phần có thể dùng lại (reusable components) Hầu hết các trang JSP đều dực trên những thành phần xuyên nền (cross-platform components) có thể dùng lại (các thành phần JavaBeans hay Enterprise JavaBeans) để thực hiện những xử lý nghiệp vụ phức tạp. Những nhà phát triển có thể trao đổi hay chia sẻ những thành phần chuyên trách xử lý chung (common operations), do đó sẽ làm giảm đáng kể chi phí khi xây dựng ứng dụng. Cách tiếp cận dựa trên thành phần của JSP đã làm tăng tốc độ phát triển ứng dụng và cho phép đạt được kết quả tối ưu trên sản phẩm sau cùng. Tách biệt nội dung với giao diện Với công nghệ JSP, người phát triển sử dụng các thẻ HTML hay XML để thiết kế giao tiếp trang Web, các thẻ JSP hay các đoạn scriptlet để phát sinh nội dung động của trang (nội dung này phụ thuộc vào yêu cầu của user). Các xử lý phát sinh nội dung được đóng gói trong các thẻ hay thành phần JavaBeans và được liên kết lại trong scriptlet, sau đó được thực hiện ở server. Do những xử lý cốt lõi đã được đóng gói trong các thẻ và Beans, Web master và page designer có thể hiệu chỉnh và làm việc trên trang JSP mà không ảnh hưởng đến xử lý nghiệp vụ của trang. Các điều trên giúp bảo vệ các đoạn code sở hữu độc quyền và vẫn đảm bảo cho mọi HTML - based web Browser có thể truy xuất đến các trang JSP theo yêu cầu. Sự phát triển mở rộng và hỗ trợ công nghiệp rộng lớn. JSP được phát triển dưới Java Community Process. Điều này đảm bảo nó có một sự hỗ trợ công nghệ rộng lớn của hầu hết các Web server và Application server. Hơn nữa, công nghệ này giờ đây đã được phát triển mở trong dự án của Apache Software Foundation. Với điều này, công nghệ JSP mới nhất sẽ có được một ảnh hưởng tầm cỡ Thế Giới trong công nghệ thông tin. Sun Microsystems được uỷ nhiệm việc duy trì tính đa nền và mở của công nghệ này. Sự độc lập nền Công nghệ JSP đưa ra khả năng sử dụng lại ứng dụng trên bất kỳ nền và server nào (đây cũng chính là khẩu hiệu nổi tiếng của ngôn ngữ Java : "Write Once, Run Anywhere"). Nó cung cấp một phương pháp hướng thành phần, độc lập nền trong việc xây dựng ứng dụng Web. Hầu hết Web server và Application server đã và đang đưa ra những sản phẩm hỗ trợ công nghệ JSP. Sự hỗ trợ đa nền, rộng lớn này cho phép Web developer viết code JSP một lần nhưng có thể triển khai khắp mọi nơi. Đơn giản hoá quá trình phát triển với các thẻ Web page developer không phải lúc nào cũng là một lập trình viên thông thạo với ngôn ngữ Script. Công nghệ JSP đóng gói nhiều chức năng cần thiết trong việc phát sinh nội dung động ở dạng dễ sử dụng, các JSP - specific XML tag. Các thẻ JSP chuẩn có thể truy xuất và khởi tạo những thành phần JavaBeans, thiết lập hay nhận về giá trị của thuộc tính, download applet, và thực hiện những xử lý mà nếu viết code sẽ khó khăn và mất nhiều thời gian. Công nghệ JSP có thể mở rộng thông qua sự phát triển của các customized tag library. Hiện nay đã có khá nhiều các thư viện loại này, từ đó giúp người phát triển trang Web có thể làm việc với những công cụ quen thuộc khi thự hiện những xử lý phức tạp. 3.1.3.3.Các thẻ lệnh JSP. Tương tự HTML, thẻ lệnh JSP cũng bao gồm thẻ mở và thẻ đóng. Mỗi thẻ có các thuộc tính quy định Directives Nhằm cung cấp thông tin tổng quát về trang JSP như : dùng ngôn ngữ lập trình gì, có quản lý phiên làm việc (session) không … Cú pháp : Có các loại Directive : 1)Page directive Page directive xác định số trang phụ thuộc vào các thuộc tính và chuyển các trang này tới JSP Container. Một đơn vị chuyển dịch (translation unit - tập tin JSP nguồn và một số tập tin được đưa vào bằng chỉ dẫn include) có thể bao gồm nhiều chỉ dẫn page, tất cả các thuộc tính sẽ được áp dụng cho một đơn vị chuyển dịch hoàn chỉnh (nghĩa là các chỉ dẫn page không phụ thuộc vào vị trí). Tuy nhiên, sẽ chỉ có một sự kiện (occurrence) của thuộc tính (hoặc giá trị) được định nghĩa bởi directive này trong một đơn vị translation có sẵn với ngoại lệ (exception) của thuộc tính "import"; nhiều giá trị của thuộc tính được dồn lại (cumulative) (với những ngữ nghĩa được thiết lập thứ tự). Nhiều định nghĩa thuộc tính (hoặc giá trị) dẫn đến lỗi fatal translation. Cú pháp : Page page_directive_attr_list ::= {language="scriptingLanguage"} {extends="className"} {import="importList"} {session="true | false"} {buffer="none | sizekb"} {autoFlush=" true | false "} {isThreadSafe=" true | false "} {info="info_text"} {errorPage="error_url"} {isErrorPage=" true | false "} {contentType="ctinfo"} {pageEncoding="peinfo"} language: định nghĩa ngôn ngữ kịch bản được dùng trong những Scriptlet, những Srciptlet biểu thức, và những khai báo nằm trong phần thân của đơn vị translation (trang JSP và một vài file được include được sử dụng cho directive include bên dưới). Trong JSP 1.2, chỉ được định nghĩa và quy định giá trị ngôn ngữ kịch bản cho thuộc tính này là "java". Đặc tả này chỉ mô tả những ngữ nghĩa của kịch bản dành cho khi giá trị của thuộc tính ngôn ngữ là "java". Tất cả các ngôn ngữ kịch bản phải cung cấp một vài đối tượng ẩn (implicit) để người viết trang JSP có thể dùng trong các khai báo, các đoạn mã nhúng và các biểu thức. Tất cả các ngôn ngữ kịch bản phải hỗ trợ JRE (Java Runtime Environment). Chúng cũng phải bộc lộ (expose) cho môi trường kịch bản theo mô hình đối tượng theo của Java, nhất là các biến ẩn, thuộc tính các thành phần JavaBean, và các phương thức chung. extends: Giá trị là một tên lớp của ngôn ngữ lập trình Java, tên lớp này định danh lớp cha (superclass) của lớp mà trang JSP này biến đổi (transformed). Không nên dùng thuộc tính này nếu không có sự cân nhắc cẩn thận, do thuộc tính này giới hạn khả năng cung cấp các lớp chuyên dụng có thể cải thiện chất lượng của dịch vụ hồi đáp của JSP Container. import: Thuộc tính import mô tả những kiểu có sẵn trong môi trường kịch bản. Giá trị tương đương với khai báo import trong ngôn ngữ lập trình Java. Nghĩa là: một danh sách (có dấu phẩy ngăn cách) của tên kiểu ngôn ngữ lập trình Java hoặc tên gói (package) đi theo trước chuỗi ".*", biểu thị tất cả các kiểu chung được khai báo trong gói đó. Danh sách import sẽ được nhập vào bởi việc thực thi trang JSP, do đó khả dụng đối với môi trường kịch bản. Một số import mặc định như là : java.lang.* , javax.servlet.* , javax.servlet.jsp.* , và javax.servlet.http.* session: Chỉ ra trang yêu cầu tham gia vào phiên làm việc (http). Nếu "true" thì biến của ngôn ngữ kịch bản được đặt là "session" thuộc kiểu javax.servlet.http.HttpSession tham chiếu đến phiên làm việc (session) hiện hành (hoặc session mới của trang). Nếu "false" : trang không tham gia vào trong phiên làm việc, biến "session" hoàn toàn không sẵn sàng, các tham chiếu tới nó không hợp lệ và kết quả trả về là lỗi biên dịch. Mặc định là "true". buffer: Chỉ định kiểu bộ đệm (buffering) đối tượng "out" JspWrite ban đầu để điều khiển nội dung xử lý xuất (output) của trang đó. Nếu là "none", thì không có bộ đệm (buffering) và tất cả xử lý xuất (output) được ghi bởi servletResponse PrintWriter. Kích thước bộ đệm được chỉ định bằng kilobyte, viết tắt là "kb". Nếu kích thước bộ đệm được chỉ định, ngỏ xuất (output) được dùng làm bộ đệm với kích thước buffer tối thiểu là kích thước đã chỉ định. Tùy thuộc vào giá trị của thuộc tính "autoFlush", những nội dung của buffer này tự động làm sạch (flush) hay một ngoại lệ (exception) được đưa ra khi tràn bộ nhớ (overflow). autoFlush: chỉ định ngỏ ra bộ đệm có được dọn sạch tự động hay không (giá trị “true") khi bộ đệm đầy, hoặc một ngoại lệ phát sinh để báo tràn bộ đệm Mặc định là "true". Chú ý: sẽ không hợp lệ để ghi autoFlush="false" khi buffer="none" isThreadSafe: chỉ ra mức an toàn tuyến đoạn (threadsafe) thi công. Nếu "false" thì JSP Container sẽ gởi đi những yêu cầu chưa giải quyết xong, mỗi thời điểm một yêu cầu, theo thứ tự mà nó nhận được. Nếu "true" thì JSP Container có thể chọn gởi đi cùng một lúc nhiều yêu cầu chưa giải quyết của Client. Mặc định là "true". Chú ý : sự kiện xảy ra, nếu thuộc tính isThreadSafe là "false", JSP page autor phải bảo đảm việc truy xuất tới các đối tượng dùng chung nào đó được chia sẻ bằng thuộc tính ServletContext hoặc thuộc tính HttpSession xảy ra đồng thời. infor: Định nghĩa một chuỗi tuỳ ý, chuỗi này được kết hợp với trang đã dịch, để thu được thông tin từ thực thi phương thức Servlet.getServletInfo (). isErrorPage: Cho biết nếu trang JSP hiện hành là địa chỉ URL đích của errorPage trong trang JSP khác. Nếu "true" thì biến ngôn ngữ kịch bản "exception" hoàn toàn được xác định và giá trị của nó tham chiếu đến "throwable" bị vi phạm do trang JSP bị lỗi. Nếu "false" thì biến "exception" không có sẵn. Và các tham chiếu tới nó không hợp lệ và kết quả trả về là lỗi fatal translation. Mặc định là "false". errorPage: Xác định một địa chỉ URL của tài nguyên mà đối tượng Throwable (của Java Programming Language) trả ra. Nếu địa chỉ URL đặt tên khác tên trang JSP thì khi gọi nó, biến kịch bản "exception" sẽ chứa một tham chiếu đến đối tượng Throwable không rõ ràng. Chú ý : Đối tượng Throwable được chuyển qua throwing page implementation bằng cách lưu đối tượng tham chiếu vào chung đối tượng ServletRequest theo phương thức setAttribute () , với tên " javax.servlet.jsp.jspException ". Nếu autoFlush=true, thì nội dung của JspWrite lúc đầu đã được thay bằng (flush) luồng xử lý xuất (output) ServletResponse, kế đến (subsequent) chiếm lấy hoàn toàn để gởi đi một ngoại lệ không rõ ràng (uncaught), Bao giờ trang lỗi (error page) cũng chỉ ra theo miêu tả web.xml, trang JSP lỗi áp dụng trước rồi sau đó đến trang web.xml. contentType: Xác định nghĩa kí tự mã hoá (character encoding) cho trang JSP và thay thế cho hồi đáp (response) của trang JSP, theo kiểu MIME. Giá trị là dạng "TYPE" hoặc "TYPE ; charset=CHARSET " với một khoảng trắng tuỳ ý sau dấu ";". CHARSET xuất hiện là một giá trị IANA ứng với mỗi kí tự mã hóa. Giá trị mặc định của TYPE là "text/html". Giá trị mặc định cho kí tự mã hoá là ISO-8859-1. VD : Taglib directive: Tập hợp các tag mà JSP Container thông dịch, được mở rộng qua một "thư viện thẻ” (tag library). Taglib directive trong một trang JSP khai báo trang sử dụng thư viện thẻ, nhận dạng các thư viện tag sử dụng URI kết hợp với tiền tố thẻ (tag prefix), nó sẽ phân biệt cách dùng của các hành động trong thư viện. Nếu việc thi công của JSP Container không thể định vị mô tả thư viện tag, thì sẽ tạo ra một lỗi biên dịch. Là một lỗi dịch khó tránh khỏi của taglib directive xuất hiện sau các hành động dùng tiền tố được giới thiệu trong taglib directive. Thư viện thẻ có thể thêm một phương thức kiểm tra để xác định xem trang JSP có dùng đúng các chức năng trong thư viện thẻ không. Cú pháp : uri là địa chỉ URI chính xác hoặc tương đối, mà nó mô tả của thư viện thẻ kết hợp với tiền tố này. tagPrefix Xác định chuỗi prefix trong :, được sử dụng để phân biệt các hành động tuỳ ý. chẳng hạn như : . Có các loại prefix dành riêng như : jsp:, jspx:, java:, javax:, servlet:, sun:, and sunw: VD : . . . . . . 2)Include directive Include directive được dùng để thay thế văn bản hoặc code trong lúc dịch (translation-time) trang JSP. Khai báo chèn văn bản của tài nguyên nào đó vào tập tin .jsp. File được include vào (có thể là một trang .jsp hay một trang .html) là đối tượng điều khiển truy cập có sẵn của JSP Container. JSP Container có thể thêm một cơ chế đang được khai báo. Nếu một tập tin được thêm vào bị thay đổi thì container có thể biên dịch lại trang JSP đó. Cú pháp : Ví dụ: Tập tin Testfile.jsp Include page demo To day is :” );%> Ta thấy kết quả giống trang Firstpage.jsp , thực sự trang Testfile.jsp chỉ gọi trang Firstpage.jsp, sau đó trang Firstpage.jsp sẽ thi hành, nên kết quả của trang Testfile.jsp giống hệt trang Firstpage.jsp Thêm dữ liệu vào trang JSP Việc thêm dữ liệu là công việc có ý nghĩa trong trang JSP. Và được biểu thị theo bảng sau : Cú pháp Loại Thời điểm Đặc tả Đối tượng Mô tả Directive Action Translation - time Request-time Virtual Virtual Static Static and dynamic Nội dung được phân tách bởi JSP Container. Nội dung không được phân tách; mà chỉ được thêm vào một nơi nào đó. 3)Thành tố kịch bản (Scripting Elements) Các trang JSP có thể chứa những đoạn mã nhúng gọi là scriptlet. Một scriptlet là một đoạn mã Java liên quan đến nghiệp vụ nào đó được thực hiện ở thời điểm xử lý yêu cầu của Client. Nó kết hợp với những thành phần tĩnh để tạo ra nội dung động cho trang Web. Các đoạn mã script được đặt trong cặp dấu . Ngoài ra người ta còn dùng cặp dấu để khai báo biến hay hàm được sử dụng trong trang, cặp dấu để tính giá trị của một biểu thức. Những Scripting Elements thông thường được dùng để vận dụng những đối tượng và thực hiện thao tác tính toán tác động đến nội dung phát sinh. Có 3 lớp thành tố kịch bản: declarations, scriptlets và expressions. Ngôn ngữ kịch bản đã dùng trong trang hiện hành nhận được giá trị chỉ dẫn language. Declarations được dùng để khai báo cấu trúc ngôn ngữ kịch bản có sẵn cho tất cả các thành tố kịch bản. Scriptlet được dùng để mô tả các hành động được thực hiện trong phần hồi đáp (response) tới các yêu cầu. Mã nhúng là các đoạn chương trình, có thể cũng được dùng để thực hiện các công việc giống như các phép lặp (iteration) và sự thực thi (execution) có điều kiện của các thành tố khác trong trang JSP. Expression là các biểu thức hoàn chỉnh trong ngôn ngữ kịch bản, chúng được lượng giá (evaluated) tại thời điểm phản hồi (response time); thông thường kết quả được chuyển đổi (converted) sang một chuỗi rồi sau đó được chèn vào luồng xuất. Tất cả JSP Container đều hỗ trợ các thành tố kịch bản dựa trên ngôn ngữ lập trình Java. Ngoài ra, JSP Container cũng có thể hỗ trợ những ngôn ngữ kịch bản khác. Tất cả các ngôn ngữ kịch bản như vậy phải hỗ trợ : Sự thao tác (manipulation) trong các đối tượng Java. Việc gọi (invocation) các phương thức của các đối tượng Java. Việc nắm được (catching) của các ngoại lệ (exception) ngôn ngữ Java. Mỗi element kịch bản có một "<%" dựa vào cú pháp sau : Khoảng trắng tùy ý sau "" Các khai báo (Declaration) Các khai báo được dùng để khai báo các biến và các phương thức bằng ngôn ngữ kịch bản dùng trong trang JSP. Một khai báo phải là một câu lệnh hoàn chỉnh. Các khai báo không đưa ra xử lý xuất nào trong luồng (stream) xử lý xuất hiện hành. Các khai báo được khởi tạo khi trang JSP được khởi tạo và đã có sẵn cho các khai báo, các Scriptlet, và các biểu thức khác. Việc khai báo gần giống như khai báo biến trong các lớp Java. Mỗi khai báo mở đầu bằng dấu . Cú pháp : VD : (Chú ý : ta phải ghi dấu chấm phẩy như viết câu lệnh trong định nghĩa lớp Java). Mã nhúng (Scriptlet) Scritlet là phần diễn đạt các thao tác tính toán, xử lý của Java trong trang JSP, mã nhúng nằm giữa cặp dấu . Các Scriptlet có thể chứa các phân mảnh hợp lý được ngôn ngữ kịch bản chỉ định trong directive language. Các Scriptlet được thi hành (executed) tại thời điểm xử lý yêu cầu (request-processing time). Trong bất cứ trường hợp, các Scriptlet đưa đầu xuất (output) nào trong luồng out phụ thuộc vào mã có thực trong Scriptlet. Các Scriptlet có thể có các tác động phụ (side-effect), làm thay đổi rõ rệt các đối tượng. Cú pháp : VD : <% if (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM) { %> Good Morning Good Afternoon Biểu thức (Expressions) Một thành tố biểu thức trong trang JSP là một biểu thức ngôn ngữ kịch bản được định giá (evaluated) và kết quả trả về buộc (coerce) phải là một String được phát ra sau đối tượng out JspWriter. Biểu thức được mở đầu bằng dấu . Nếu kết quả không thể ép kiểu thành một String thì khi đó sẽ xuất hiện lỗi, hoặc nếu việc ép kiểu không được nhận thấy thì một biệt lệ ClassCastException sẽ phát sinh tại thời điểm yêu cầu. Trong các biểu thức có thể có các tác động phụ (side-effect). Các tác động phụ sẽ nhận tác động khi biểu thức được định giá (evaluated). Biểu thức được định giá từ trái sang phải. Nếu các biểu thức xuất hiện trong nhiều thuộc tính lúc chạy, chúng được định giá từ trái sang phải trong thẻ. Nội dung của một biểu thức phải là một biểu thức hoàn chỉnh trong ngôn ngữ kịch bản mà chúng được ghi. Những biểu thức được định giá (evaluate) tại thời điểm xử lý HTTP. Giá trị một biểu thức được chuyển đổi (converted) thành một String và được chèn vào vị trí đúng đắn trong tập tin .jsp. Cú pháp : Ví dụ: 3.1.4.Quan hệ giữa Servlet và JSP. Các trang JSP được trình chủ dịch ra thành servlet trước khi cho thực thi. Khi trình khách triệu gọi trang JSP( .jsp), trình chủ Web server sẽ thực hiện các bước sau: Kiểm tra xem trang JSP đã dịch ra thành mã nguồn tương đương của servlet hay chưa. Nếu chưa, biên dịch trang JSP thành file nguồn .java theo cấu trúc của servlet. Gọi trình biên dich javac biên dịch thành file thực thi của servlet .class. Nạp servlet đã biên dịch ở bước 2, thực thi trả kết quả về trình khách. Nếu file JSP đã được biên dịch trước đó thì thực hiên kiểm tra xưm nội dung của file JSP có thay đổi hay không. Nếu có, quay lại bước hai biên dịch lại trang. Nếu không thực hiện bước ba. 3.1.4.1.Ưu nhược điểm của JSP và Servlet. Do mã trang JSP khi thực thi đều được biên dịch ra servlet cho nên tất cả những gì servlet làm được cũng đồng nghĩa với trang JSP làm được. JSP có thể trộn lẫn mã Java với các thẻ HTML cho nên việc thiết kế trang đơn giản và dễ bổ sung hơn so với servlet. Tuy nhiên nếu tập trung hết mã Java vào cùng với HTML thì khi mở rộng sẽ trở nên phức tạp, việc bảo trì và nâng cấp ứng dụng sẽ rất khó khăn. Với servlet, tuy phải biên dịch và đăng kí thủ công với trình chủ nhưng nó có tính bảo mật cao hơn. Ta chỉ cần cung cấp cho trình chủ bản servlet nhị phân (file .class) mà không cần cung cấp mã nguồn. Các servlet có thể tương tác liên hoàn với nhau để tạo nên những kết xuất tùy biến và đa dạng trước khi trả kết quả về cho trình khách. Servlet có thể phân rã các đơn thể của dự án và phát triển độc lập nhau như các thành phần riêng biệt để ráp lại trong một tổng thể thống nhất chung. Tuy nhiên, việc kết xuất trong servlet thường dựa vào phương thức print() hoặc println() do đó giao diện cho kết xuất rất khó quản lí. Quyết định sử dụng JSP hay servlet hay kết hợp cả hai là tùy vào từng dự án và mục đích cảu chương trình mà bạn muốn phát triển. Thông thường với các dự án nhỏ, yêu cầu thời gian nhanh ta sử dụng JSP. Còn đối với dự án cần độc lập và chỉ thiên về xử lí ta nên sử dụng servlet. Trường hợp với dự án lớn ta nên kết hợp cả JSP và servlet. Mô hình kết hợp tốt nhất thường được gọi là MCV( Model View Controler) trong đó servlet đóng vai trò trung tâm điều khiển đưa ra các quyết định xử lí. JSP đóng vai trò thể hiện giao diện hay hiển thị dữ liệu đã xử lí. Quy trình tính toán logic của ứng dụng giao cho các thành phần JavaBean hay EJB. 3.1.4.2.JSP/Servlet và các công nghệ Web ASP,CGI,ISAPI. Tương tự như servlet, ích lợi của chương trình CGI( Common Gateway Interface) là tạo ra được những trang Web tùy biến. Bên trong chương trình CGI chúng ta có thể tính toán, kết nối truy vấn cơ sở dữ liệu, lưu các thông tin do trình khách gửi đến… Tuy nhiên nhược điểm của trình CGI trên máy chủ là vấn đề tốc độ. Mỗi lần trình CGI thực thi là mỗi lần Web server phải nạp và giải phóng trình CGI khỏi bộ nhớ. Công nghệ Web đưa ra rất nhiều giải pháp khắc phục yếu điểm của các trình CGI. Windows cung cấp cho bạn cách thức xây dựng các trình CGI ở dạng thư viện lien kết động DLL. Ứng dụng CGI kiểu mới này còn được gọi là các ứng dụng ISAPI. Chương trình ISAPI chỉ phải nạp một lần vào bộ nhớ khi lần đầu tiên Web server triệu gọi ứng dụng. Do không phải nạp nhiều lần nên vấn đề tốc độ được giải quyết triệt để. Để viết ISAPI bạn có thể sử dụng bất kì công cụ phát triển trên Windows nào hỗ trợ biên dịch thư viện liên kết động DLL ( như VC++, Inprise Delphi…) Về phía Java, câu trả lời tương tự cho ISAPI của Windows đó là Servlet. Servlet là các chương trình Java chỉ cần nạp một lần vào máy ảo. Servlet sẽ phục vụ mọi yêu cầu từ máy khách gửi đến tương tự chức năng cua một chương trình CGI hay ISAPI. Đối với ngôn ngữ kịch bản, Microsoft đề xuất phương án thiết kế trang Web ASP (Active Server Page). ASP là các trang Web chứa mã lệnh viết bằng ngôn ngữ Visual Basic kết hợp với các thẻ định dạng của ngôn ngữ HTML. Khi máy khách triệu gọi một tập tin .asp, trình chủ sẽ yêu cầu trình dịch ASP chuyển tải mã lệnh ASP thành kết xuất HTML trả về cho trình khách. Mô hình chung của JSP và ASP cơ bản như nhau.Tuy nhiên, JSP/Servlet của Java có một số điểm mạnh, ta có thể thấy được qua bảng so sánh sau đây: Công nghệ ASP Công nghệ JSP Web Server Microsoft IIS hay Personal Web Server. Bất kỳ Web Server nào, kể cả Apache, Netscape và IIS. Platforms Microsoft Windows. Hầu hết các platforms phổ biến, bao gồm Solaris Operating Environment, Mac OS, Linux, và các nền Unix khác. Bảo vệ chống suy sụp hệ thống Không Có Chống rò rỉ bộ nhớ Không Có Ngôn ngữ Script VBScript, JScript Java Các thẻ tự tạo Không Có 3.2.Trình chủ Tomcat. 3.2.1.Cài đặt Tomcat trên Windows. Trình chủ TomCat là ứng dụng Web servet có mã nguồn mở rất thích hợp cho mục đích nghiên cứu của sinh viên học sinh. Ta có thể sử dụng TomCat miễn phí với khả năng hỗ trợ Java không thua kém gì những trình chủ khác như JRun hay Weblogic. Ta có thể tải mã nguồn và chương trình cài đặt TomCat tại địa chỉ Chương trình này cài đặt và sử dụng rất đơn giản, gọn nhẹ. 3.2.2.Khởi động TomCat. Với bản Tomcat mới bạn có thể khởi động qua biểu tương trên màn hình.Tomcat cấu hình cổng chạy ứng dụng Web là 8080. Bạn có thể cấu hình TomCat cũng như xử lí các công việc liên quan đến nó qua trang Web chính của TomCat 3.2.3.Cài đặt các ứng dụng Web. Muốn chạy các ứng dụng Web thì ta phải copy các file đó vào trong thư mục [TOMCAT_HOME]\webapps và khởi động lại server. Nếu khi bạn vào Tomcat Manager( bằng cách kích vào link Tomcat Manager trong trang web trên) thấy có thư mục mà bạn lưu các file vừa copy thì bạn có thể chạy ứng dụng đó. Xem hình dưới: Chương IV: Cài đặt chương trình. 4.1.Hướng dẫn cài đặt chương trình. Chương trình đã hoàn thành một số chức năng chính của hệ thống, còn một số chức năng khác do thời gian hạn chế chưa kịp để cài đặt và hoàn thiện. Vì đây là một trang Web động nên muốn cài đặt và sử dụng được Website này ta cần phải có một trình chủ. Ở đây ta dùng trình chủ Tomcat Apache. Sau khi cài đặt song trình chủ, ta copy toàn bộ chương trình vào một thư mục trong thư mục Webapps ở nơi cài đặt trình chủ. Sau đó ta phải vào Control Panel/Administrator Tool để đăng kí cơ sở dữ liệu. Muốn chạy chương trình ta khởi động trình chủ và nhập URL [tên thư mục]/index. 4.2.Giới thiệu về các chức năng. Hệ thống gồm 3 phần chính là: Thương mại điện tử, tin tức, forum. Vì thời gian có hạn nên phần forum chưa thể hoàn thành được. 4.2.1.Giao diện và các chức năng của phần B2B. 4.2.2.Giao diện và các chức năng của phần tin tức. 4.2.3.Trang Admin. Chương V: Tổng kết. 5.1.Đáng giá tổng kết. Theo em đây là một chương trình có tính thực tiễn, có thể áp dụng được vào thực tế. Do thời gian, kiến thức còn hạn chế nên còn một số chức năng, mô đun chương trình chưa hoàn thiện được và còn nhiều sai sót trong lập trình. Em mong nhận được nhiều ý kiến đóng góp cho chương trình ngày một hoàn thiện hơn. Qua thời gian thực hiện đồ án em cũng đã nhận thức được nhiều kiến thức bổ ính đồng thời cũng củng cố các kiến thức đã học trong trường. Đồ án này thực sự là cơ hội tốt cho em vận dụng kiến thức đã học trong trường, nó giúp em trưởng thành rất nhiều. 5.1.1.Những vấn đề đã thực hiện. 5.1.2.Những vấn đề chưa thực hiện. 5.2.Hướng phát triển. Tài liệu tham khảo Trần Tiến Dũng, 2000, Giáo trình lí thuyết và bài tập Java, NXB Giáo dục. Phạm Hữu Khang, 2002, Lập trình ứng dụng chuyên nghiệp SQL server 2000, NXB Giáo dục. Nguyễn Phương Lan, 2001, Lập trình ứng dụng Web với JSP/Servlet, NXB Giáo dục. VN-Guide, 2003, HTML kỹ thuật tạo trang Web, NXB Thống kê. Làm quen với Dreamweave, Giáo trình Apptech. JSP/Servlet, Giáo trình Apptech.

Các file đính kèm theo tài liệu này:

  • docP0063.doc