Giáo trình Sử dụng Javabean và Java Mail trong JSP
GIỚI THIỆU VỀ JAVABEAN
• JavaBean là Software Component được viết bởi ngôn ngữ Java.
• JavaBean tạo ra các component độc lập với platform.
• JavaBean có khả năng nhúng vào các component, application hay applet khác nhau.
• Sự khác biệt chủ yếu giữa JavaBean và JavaClass thông thường là JavaBean được
vận dụng theo cơ chế Serializable (các giá trị của các thuộc tính trong Bean được
đưa tới các phương thức instance của Bean).
• JSP truy cập JavaBean qua các tag action và nhận kết quả trả về mà không cần biết
cấu trúc của JavaBean và cách thức xử lý của nó.
• JavaBean cài đặt các phương thức xử lý và không hiển thị khi thực hiện các xử lý.
• JavaBean là JavaClass tuân thủ 3 yếu tố sau:
Phải có một constructor không có tham số (mặc định có sẵn nếu không
implement). Constructor này được gọi khi element của JSP tạo Bean.
Các thuộc tính (field) của Bean không được khai báo public.
Việc truy xuất các thuộc tính của Bean sẽ thông qua phương thức getXxx hay
setXxx (accessor method) đối với các thuộc tính cần lữu trữ (persistent).
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Giáo trình Sử dụng Javabean và Java Mail trong JSP
public void firePropertyChange (String propertyName, Object oldVale, Object newValue); • Bean giao tiếp với bên ngoài thông qua các sự kiện (event). • Một Bean cũng sẽ ủy thác xử lý sự kiện cho các Listener. Các Listener này có thể là các Bean khác (gọi là Listener Bean). Event Source Bean Listener Bean 1 Listener Bean 1 11 Ví dụ: Xây dựng javaBean: SimpleBean với 2 field là message và num. Các Property: setMessage, getMessage và setNum, getNum như sau: 2.2. LISTENER BEAN (tiếp theo) 12 2.2. LISTENER BEAN (tiếp theo) Sử dụng scriptlet trong trang JSP: 13 2.3. SỬ DỤNG THUỘC TÍNH CÓ CHỈ SỐ TRONG JAVABEAN • Khi một trường trong lớp JavaBean là một mảng ta phải sử dụng một chỉ số kèm với lớp và phải kiểm tra khi nào chỉ số vượt quá phạm vi giới hạn của mảng? • Ví dụ: Xây dựng lớp JavaBean sử dụng thành phần là một mảng kiểu int: public class ArrayClass { private int items[]={1,2,3,4,5}; private PropertyChangeSupport pcs; public ArrayClass() { pcs=new PropertyChangeSupport(this) ; } public int getItems (int i) { return items[i]; } public void setItems(int i, int x)throws ArrayIndexOutOfBoundsException { this.items[i]=x; pcs.firePropertyChange("Items", i, x); } 14 2.3. SỬ DỤNG THUỘC TÍNH CÓ CHỈ SỐ TRONG JAVABEAN (tiếp theo) public String ValuesString() { String S=""; for(int i=0; i<5;i++) S+=items[i] + ((i<4)?",":" "); return S; } public void addPropertyChangeListener(PropertyChangeListener L) { pcs.addPropertyChangeListener(L); } public void removePropertyChangeListener(PropertyChangeListener L) { pcs.removePropertyChangeListener(L); } } 15 2.3. SỬ DỤNG THUỘC TÍNH CÓ CHỈ SỐ TRONG JAVABEAN (tiếp theo) • Sử dụng lớp JavaBean trong trang JSP như sau: Example of array in JavaBean <% String x = arrayExample.ValuesString(); out.println(x); %> 16 3. CÁC CÁCH SỬ DỤNG JAVABEAN • Tạo JavaBean với môi trường phát triển ứng dụng: Các môi trường phát triển ứng dụng Java trực quan như JBuilder (của công ty Borland), NetBeans (của Sun) cho phép tạo Bean với môi trường trực quan. Có thể mua hoặc download từ Internet • Tạo JavaBean bằng thủ công: Đây là cách tạo Bean bằng cách viết code thủ công với môi trường JDK thông dụng. • Tạo Bean phụ thuộc platform: Việc này nhằm tạo ra các Bean kết hợp được với các phần tử trong môi trường khác (thí dụ như Bean dùng chung với các phần tử ActiveX của Microsoft). Để tạo được các Bean có đặc điểm này, một lớp trung gian đóng vai trò cầu nối (component bridge) phải được dùng. Tham khảo về cầu nối này tại: 17 CÂU HỎI THẢO LUẬN Cấu trúc JavaBean gồm những thành phần nào? 18 4. LỢI ĐIỂM CỦA JAVABEAN • Viết một lần, sử dụng mọi nơi “Write once, run enywhere”. • Các thuộc tính, sự kiện, hành vi của Bean được thể hiện trực quan trong các IDE và người lập trình có thể điều khiển chúng. • Bean có thể được xây dựng để chạy tốt trên nhiều khu vực (locale) khác nhau để trở thành các phần tử toàn cục. • Các phần mềm tiện ích có thể giúp cấu hình Bean. Các phần mềm này có thể cần thiết khi thiết kế ứng dụng nhưng không cần thiết trong môi trường thực thi (vì JVM mới là môi trường thực thi). • Các thiết lập cấu hình cho Bean (thiết lập thuộc tính) cho phép tiết kiệm trong lưu trữ và phục hồi trạng thái của Bean. • Cho phép đang ký và nhận các sự kiện từ các đối tượng khác (Listener Bean) cũng như ủy thác xử lý sự kiện cho các đối tượng khác. • Thuộc tính, sự kiện, hành vi của Bean được thể hiện trực quan trọng các IDE và người lập trình có thể điều khiển chúng. 19 5. SỬ DỤNG CÁC THẺ JSP LIÊN QUAN ĐẾN JAVABEAN • Khai báo sử dụng Bean; • Áp trị thuộc tính cho Bean; • Lấy trị thuộc tính của Bean. 20 5.1. KHAI BÁO SỬ DỤNG BEAN • Cú pháp: <jsp:useBean id="BeanName" class="fully_qualified_classname" scope="scope" type= “type_spec” /> Hoặc: <jsp:useBean id="BeanName" class="fully_qualified_classname" scope="scope"> • id: Tên nhận diện cho Bean. • fully_qualified_classname: Tên đầy đủ của lớp Bean này, có thể phải chỉ định gói chứa Bean này nằm trong một package (hoặc import gói này vào trang JSP). • scope: chỉ định tầm vực cho Bean (vùng mà Bean có ý nghĩa = truy cập hợp lệ). • scope = “page|session|request|application”. • type: Là thuộc tính optional, đặc tả loại Class: superclass, interface hay là chính lớp này. Trị mặc định là trị của thuộc tính Class. • Ví dụ: <jsp:useBean id="locales" scope="application“ class="mypkg.MyLocales"/> 21 5.2. ÁP TRỊ THUỘC TÍNH CHO BEAN Nguồn giá trị gán vào thuộc tính của Bean Cú pháp Hằng chuỗi <jsp:setProperty name=“beanName” Property=“propName” value=“string constant”/> Tham số của đối tượng request <jsp:setProperty name=“beanName” Property=“propName” param=“paramName”/> Tham số của đối tượng request trùng với một hoặc mọi thuộc tính của Bean <jsp:setProperty name=“beanName” Property=“propName” <jsp:setProperty name=“beanName” Property=“*”/> Biểu thức <jsp:setProperty name=“beanName” Property=“propName” value=“expression”/> <jsp:setProperty name=“beanName” Property=“propName” <jsp:attribute name=“value” Expression 22 5.2. ÁP TRỊ THUỘC TÍNH CHO BEAN (tiếp theo) • Name: Tên của Bean đã được khai báo trong thuộc tính id trong thẻ . • Để gán trị vào thuộc tính của Bean, Bean phải có phương thức setPropertyName. • Nếu param=” ” thì việc gán trị không làm ảnh hưởng đến Bean. • paramName trong là tên tham số của đối tượng request để lấy trị một tham số từ đối tượng request đưa vào một thuộc tính của Bean: <jsp:setProperty name="BeanName" property="propName" value=""/> 23 5.2. ÁP TRỊ THUỘC TÍNH CHO BEAN (tiếp theo) • Các kiểu dữ liệu trong JavaBean Property Type Conversion on String Value Bean Property Uses setAsText(string-literal) boolean or Boolean As indicated in java.lang.Boolean.valueOf(String) byte or Byte As indicated in java.lang.Byte.valueOf(String) char or Character As indicated in java.lang.String.charOf(0) double or Double As indicated in java.lang.Double.valueOf(String) int or Integer As indicated in java.lang.Integer.valueOf(String) float or Float As indicated in java.lang.FloatvalueOf(String) long or Long As indicated in java.lang.Long.valueOf(String) short or Short As indicated in java.lang.Short.valueOf(String) Object New String(string-literal 24 5.3. LẤY TRỊ THUỘC TÍNH CỦA BEAN Cú pháp: Ví dụ: Giả sử đã tạo JavaBean là BoxBean với các thuộc tính height, length, width ta sẽ khai báo và sử dụng các thuộc tính của JavaBean như sau: Truy cap cac thong tin cua BoxBean Chieu cao: Chieu dai: Chieu rong 25 6. TẦM VỰC CỦA BEAN • Bean có tầm vực trong một trang (page scope, page context); • Bean có tầm vực một yêu cầu (request scope); • Bean có tầm vực một session (session scope); • Bean có tầm vực cả ứng dụng (application scope). 26 6.1. BEAN CÓ TẦM VỰC TRONG MỘT TRANG • Bean chỉ có ý nghĩa (truy xuất được) trong trang chứa Bean Biến đối tượng này được khai báo cục bộ trong hành vi _jspService() của servlet tương ứng. • Mọi tham khảo đến đối tượng có page context sẽ bị giải phóng khi đáp ứng được truyền cho client, nghĩa là hành vi Servlet.service() thực thi xong. • Đối tượng bị ràng buộc là javax.servlet.jsp.PageContext. • Các đối tượng có page context được lưu trong đối tượng PageContext. • Thuộc tính scope=”page” trong khai báo sử dụng Bean của JSP sẽ được thông dịch thành PageContext.PAGE_SCOPE. • Ví dụ sử dụng lớp BoxBean để hiển thị thông tin: Cac thuoc tinh cua Box la: Chieu dai: Chieu rong: Chieu cao: 27 6.2. BEAN CÓ TẦM VỰC MỘT YÊU CẦU • Bean chỉ có thể được truy xuất được trong qúa trình xử lý cùng một yêu cầu, tham khảo đến Bean chỉ mất đi sau khi xử lý hoàn tất yêu cầu. Nghĩa là, trong quá trình xử lý mà có forward sang một tài nguyên khác lúc runtime thì Bean này vẫn còn trong tầm vực. • Các tham khảo đến Bean được lưu trữ trong đối tượng request. • Đối tượng bị ràng buộc là javax.servlet.jsp.PageContext. • Được dùng để chia sẻ thông tin giữa các tài nguyên của cùng một request. • Thuộc tính scope=”request” trong khai báo sử dụng Bean của JSP sẽ được thông dịch thành PageContext.REQUEST_SCOPE. • Ví dụ: Sử dụng Bean: BoxBean với phạm vi truy cập là request, trong ví dụ sẽ xây dựng 2 trang JSP là StartBoxBean.JSP, trang này sẽ chứa một đối tượng BoxBean và khởi tạo 2 thuộc tính chiều dài, chiều rộng sau đó truyền đối tượng BoxBean sang trang FinishBoxBean.JSP, trang FinishBoxBean sẽ khởi tạo thuộc tính chiều cao và in các tham số của BoxBean ra trình duyệt. 28 6.2. BEAN CÓ TẦM VỰC MỘT YÊU CẦU (tiếp theo) Trang StartBoxBean.JSP: Start BoxBean! <jsp:useBean id=«BoxBean1» scope=«request» class=«Jbean.BoxBean»/> <% BoxBean1.setWidth (5); %> Trang FinishBoxBean.JSP Finish BoxBean! Truy cap cac thong tin cua BoxBean Chieu cao: Chieu dai: Chieu rong: 29 6.3. BEAN CÓ TẦM VỰC MỘT SESSION • Bean chỉ được truy cập trong các yêu cầu của cùng một session mà Bean này đã được tạo ra. • Các tham khảo đến Bean này được lưu trong đối tượng session. • Đối tượng bị ràng buộc là javax.servlet.jsp.PageContext. • Thường được dùng để chia sẻ thông tin giữa các yêu cầu của cùng một user. • Một session ứng với một đối tượng browser được mở và truy xuất một site → Khi mở một trình duyệt nữa tức là có một session khác. 30 6.4. BEAN CÓ TẦM VỰC CẢ ỨNG DỤNG • Khi trang chứa Bean này được nạp thì Bean có thể được truy cập trong tất cả các trang của ứng dụng. • Công cụ chia sẻ data trong toàn ứng dụng, công cụ chia sẻ data giữa nhiều user trong cùng Website. • Các tham khảo đến Bean chỉ được giải phóng khi đối tượng ServletContext bị hủy. Nghĩa là Bean này chỉ mất đi khi JSP engine khởi động lại. • Thuộc tính scope=”application” trong khai báo useBean được dịch thành PageContext.APPLICATION_SCOPE. • Đối tượng bị ràng buộc là javax.servlet.Servlet. 31 CÂU HỎI THẢO LUẬN Một đối tượng Bean sinh ra sẽ có các phạm vi hoạt động nào? 32 7. JAVAMAIL API Các ứng dụng J2EE sử dụng JavaMail API TM để gửi E-mail. JavaMail API có 2 phần: Interface mức ứng dụng – Application Level Interface được dùng bởi các application components để gửi thư; Interface mức dịch vụ của nhà cung cấp - Service Provider Interface. 33 7.1. MỘT SỐ KHÁI NIỆM VỀ THƯ ĐIỆN TỬ • Host: Máy gửi thư đi. • To: Danh sách địa chỉ các người nhận. • From: Địa chỉ người gửi. • Subject: Chủ đề, tiêu đề chính của thư. • Message: Nội dung thư. Một message được tổ chức thành từng phần (Part), một thư có thể có nhiều phần (MultiPart). • Protocol gửi thư: SMTP, Simple Mail Transfer Protocol, một TCP/IP protocol dành cho việc gửi các message từ một máy tính tới một máy khác trong Protocol này được dùng để định hướng một E-mail trên Internet. • Địa chỉ người gửi: Một đối tượng thuộc lớpInternetAddress/Address. • Địa chỉ người nhận (Recipient): Là nhóm địa chỉ InternetAddress/Address. Người nhận có thể thuộc loại (Recipient Type): “CC”, “BCC”, “TO”. 34 7.1. MỘT SỐ KHÁI NIỆM VỀ THƯ ĐIỆN TỬ (tiếp theo) • Sau khi gửi thư, thư được lưu trên server. Khi chúng ta truy cập mail server, chỉ có các thông tin cơ bản về thư (thuộc tính) được thể hiện ra màn hình (prefetch, lấy trước). Chỉ khi xem nội dung một thư cụ thể, nội dung message mới được tải về từ Server. • Một thư thường được cất (lưu) trong một thư mục (folder) - người dùng có thể tự tạo thư mục này. Một user có thể có nhiều thư mục chứa thư. Một thư mục có một số thư và một lần người chủ hộp thư chỉ xem được một số thư (message number- msgnum), xem tiếp các thư khác phải kích Next. • Một thư có thể được đánh dấu Read, Unread các tính chất này được ghi nhận bằng một bộ các bít cờ (flag): ANSWERED (đã trả lời), DELETED (đã bị xóa), DRAFT (nháp), FLAGGED (đã đánh dấu), RECENT (mới nhận), SEEN (đã đọc - read). • Mail session: Một phiên truy cập hộp thư từ server. 35 7.2. GÓI JAVAX.MAIL – CÁC LỚP MÔ HÌNH HÓA HỆ THỐNG THƯ MessageAware Một interface được tùy ý hiện thực bởi một đối tượng DataSources để cung cấp thông tin cho một DataContentHandler về message context trong đó đối tượng nội dung đang hoạt động MultipartDataSource Interface cho DataSource có chứa các thân (body, nội dung) gồm nhiều phần Part Interface cơ bản cho Messages và BodyParts UIDFolder Interface sẽ được hiện thực bởi lớp Folders nhằm cung cấp tác vụ “disconnected” mode thông qua các unique-id cho mỗi message trong folder Address Lớp trìu tượng mô tả cho địa chỉ trong một message Authenticator Lớp biểu diễn cho việc xác nhận kết nối BodyPart Lớp mô tả cho một phần (Part) trong một Multipart FetchProfile Lớp giúp lấy trước các thuộc tính của một nhóm message từ server FetchProfile.Item Lớp inner này là lớp cơ bản cho các mục tin có thể được yêu cầu trong một FetchProfile Flags Biểu diễn cho một tập thông tin kiểm tra (cờ) được đánh dấu trên Message Flags.Flag Biểu diễn cho một System flag Đây là gói cung cấp cho người sử dụng hầu hết các xử lý cơ bản về E-mail. Các lớp trong gói javax.mail: 36 7.2. GÓI JAVAX.MAIL – CÁC LỚP MÔ HÌNH HÓA HỆ THỐNG THƯ (tiếp theo) Folder Lớp trìu tượng mô tả cho một thư mục chứa thư Header Lớp mô tả cho một cặp biểu diễn các headers Message Lớp mô tả cho một email message Message.RecipientType Lớp inner mô tả cho loại người nhận MessageContext Lớp mô tả cho ngữ cảnh chứa một đoạn nội dung (piece) Multipart Container cho nội dung nhiều đoạn PasswordAuthentication Lớp quản lý mật khẩu, được dùng bởi lớp Authenticator Provider Lớp mô tả cho loại protocol được dùng ProviderType Lớp inner định nghĩa loại Provider Service Lớp trìu tượng chứa các chức năng cơ bản phục vụ việc quản lý thư như lưu thư (store), truyền thư (transport) Session Biểu diễn cho một mail session, lớp final Store Lớp trìu tượng giúp mô hình hóa việc lưu trữ, truy xuất thư cùng với protocol đã dùng Transport Lớp trìu tượng mô hình hóa việc gửi thư UIDFolder.FetchProfileItem Một mục được lấy trước URLName Lớp mô tả cho tên một URL 37 7.2. GÓI JAVAX.MAIL – CÁC LỚP MÔ HÌNH HÓA HỆ THỐNG THƯ (tiếp theo) Lớp javax.mail.Message • Đây là lớp trừu tượng mô tả cho một thư. • Các lớp con của lớp này sẽ hiện thực cụ thể cho từng loại thư. • Lớp MimeMessage là lớp con của lớp Message cụ thể hóa các thư có kiểu MIME (Multipurpose Internet Mail Extensions, một protocol mở rộng của SMTP,cho phép truyền kết hợp text/video/sound). 38 7.2. GÓI JAVAX.MAIL – CÁC LỚP MÔ HÌNH HÓA HỆ THỐNG THƯ (tiếp theo) 39 7.2. GÓI JAVAX.MAIL – CÁC LỚP MÔ HÌNH HÓA HỆ THỐNG THƯ (tiếp theo) 40 7.2. GÓI JAVAX.MAIL – CÁC LỚP MÔ HÌNH HÓA HỆ THỐNG THƯ (tiếp theo) 41 7.2. GÓI JAVAX.MAIL – CÁC LỚP MÔ HÌNH HÓA HỆ THỐNG THƯ (tiếp theo) 42 TÓM LƯỢC CUỐI BÀI Sau khi học xong bài học học viên cần: • Hiểu được khái niệm về JavaBean và cấu trúc của JavaBean. • Biết cách sử dụng JavaBean trong các trang JSP. • Hiểu được các tầm vực của Bean. • Vận dụng được các kiến thức đã học để xây dựng các JavaBean và sử dụng các JavaBean trong trang JSP.
File đính kèm:
- giao_trinh_su_dung_javabean_va_java_mail_trong_jsp.pdf