Mó nguồn của Servlet dược biờn dịch ra mó byte – code của Java. Servlet dễ sử dụng và phỏt triển những ứng dụng Web nhanh hơn CGI. Servlet chạy tự động khi chỳng được gọi từ trỡnh chủ (Web server) .
Servlet chạy toàn bộ trờn mỏy ảo Java, xử lý và sinh mó HTML trả về trỡnh khỏch. Bằng cỏch này Servlet cú thể chạy trờn rất nhiều trỡnh chủ hiểu Java và chỳng khụng phụ thuộc và trỡnh duyệt (browser).
2.4.2.Những ứng dụng thực tế của JAVA SERVLET và kiến trỳc của JAVA SERVLET
Servlet cú thể được sử dụng trong bất kỳ một ứng dụng nào liờn quan đến Web. Hai gúi tạo nờn kiến trỳc của Java Servlet là : javax.servlet và javax.servlet.http. Gúi javax.servlet chứa đựng phần giao diện tổng quỏt phục vụ cho Servlet. javax.servlet.http chứa đựng cỏc lớp phục vụ cho giao thức triệu gọi HTTP. Bộ khung hỡnh thành nờn Servlet bao gồm cỏc phương thức sau:
init() Phương thức khởi tạo servlet.
service() Phương thức nhận và trả lời từ phớa người sử dụng. destroy() Phương thức thực hiện việc huỷ servlet.
Cỏc tập tin Servlet đều được đặt trong giao diện bao gồm cỏc phương thức trờn. Chỳng rất rừ ràng trong giải phỏp lập trỡnh đối tượng và dễ dàng mở rộng.
2.5.GIỚI THIỆU VỀ JAVA SERVER PAGES(JSP) 2.5.1.Khỏi niệm về JSP
JSP là cụng nghệ rất mạnh để tạo trang HTML động 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ó JSP thành Servlet. Viết trang JSP ta khụng cần phải thụng qua quỏ trỡnh biờn dịch tập tin thực thi .class như trong Servlet. JSP cung cấp mụ hỡnh lập trỡnh Web dễ dàng và tiện dụng hơn Servlet. Cụng việc biờn dịch trang JSP được thực hiện tự động bởi trỡnh chủ.
2.5.2.Quan hệ giữa Servlet và JSP
2.5.2.1.Cỏch trỡnh chủ biờn dịch trang JSP thành servlet
Thật sự 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 trỡnh chủ Web server sẽ thực hiện cỏc bước sau:
Bước 1: Kiểm tra trang JSP đó được dịch ra thàn mó nguồn tương
đương của servlet chưa.
Bước 2 : Nếu chưa biờn dịch trang JSP thành file nguồn thành file
nguồn .java theo cấu trỳc của servlet. Gọi trỡnh biờn dịch javac biờn dịch file nguồn .java thành file thực thi của servlet .class.
Bước 3 : Nạp servlet đó biờn dịch ở bước 2, thực thi kết quả trả về
cho trỡnh khỏch.
Bước 4 :Nếu file JSP đó được biờn dịch trước đú : thực hiện việc
kiểm tra xem nội dung file JSP cú thay đổi hay khụng. Nếu cú, quay lại bước 2 biờn dịch lại trang. Nếu khụng thực hiện lại bước 3.
2.5.2.2. So sỏnh giữa Servlet và JSP
Do mó trang JSP thi 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. Viết trang JSP đụi khi đơn giản hơn trang servlet vỡ khụng cần phải qua bước đăng ký và biờn dịch thủ cụng.
JSP cú thể trộn lẫn mó java với cỏc thẻ HTML nờn việc thiết kế trang JSP thường đơn giản và dễ bổ sung hơn so với servlet. Tuy nhiờn đõy cũng là yếu tố khụng nờn lạm dụng đối với JSP. Nếu tập trung tất cả mó Java vào cựng với mó HTML thỡ một khi dự ỏn mở rộng và trở nờn phức tạp tất nhiờn việc bảo trỡ và nõng cấp ứng dụng Web với hàng trăm trang JSP sẽ rất khú khăn. Trong quỏ trỡnh phỏt triển ứng dụng Web theo nhúm, việc trộn lẫn mó Java và HTML trong trang JSP cho thấy khụng hiệu quả. Khú cú thể tỏch rời giữa cụng việc viết mó cho ứng dụng (thường
là vai trũ của lập trỡnh viờn – programmer) và nhúm xõy dựng giao diện (nhúm thiết kế Web – Web designer). Mó trang JSP ở dạng thuần văn bản nờn thường khụng che được mó nguồn của logic chương trỡnh.
Với servlet tuy phải biờn dịch và đăng ký thủ cụng với trỡnh chủ nhưng bự lại tớnh bảo mật cao hơn. Ta chỉ cần cung cấp cho trỡnh chủ Web Server bản servlet nhị phõn ( file .class ) đó qua bước biờn dịch mà khụng cần đến mó nguồn của servlet ban đầu. Mặt khỏc, 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 tuỳ 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ể chung. Mặc dự vậy, việc kết xuất trong servlet thường dựa vào phương thức print() hoặc println() nờn việc kết xuất phụ thuộc vào lập trỡnh viờn với hàng loạt cỏc lệnh print() và println() rất khú quản lý.
Việc quyết định sử dụng trang JSP, Servlet hay kết hợp cả hai là tựy vào từng dự ỏn và mục đớch của chương trỡnh cần phỏt triển. Thụng thường đối với những dự ỏn nhỏ, yờu cầu thời gian nhanh, JSP là lựa chọn thớch hợp nhất. Đối với những dự ỏn cần sự độc lập và chỉ thiờn về xử lý ta nờn sử dụng servlet. Trường hợp dự ỏn lớn ta nờn kết hợp cả servlet và JSP. Mụ hỡnh kết hợp tốt nhất giữa servlet và JSP thường được gọi là MCV (Model – View – Controler) trong đú servlet đúng vai trũ trung tõm điều khiển (controler) đưa ra quyết định xử lý, JSP đúng vai trũ thể hiện giao diện hay hiển thị dữ liệu đó xử lý (View). Quy trỡnh tớnh toỏn logic của ứng dụng được giao lại cho cỏc thành phần JavaBean hay EJB.
2.6. GIỚI THIỆU VỀ JAVABEANS 2.6.1.Khỏi niệm về JAVABEANS 2.6.1.Khỏi niệm về JAVABEANS
JavaBeans là một thành phần đối tượng được xõy dựng từ ngụn ngữ Java. JavaBeans cú thể là việc và chạy trờn mọi mỏy ảo Java. Yờu cầu tối thiểu nhất để tạo nờn thành phần JavaBeans là : cụng cụ và trỡnh biờn dịch JDK 1.1 trở lờn. JavaBeans cú thể sử dụng cỏc phương thức get/set để lỏy về và đặt thuộc tớnh cho đối tượng Bean mà nú thể hiện.
2.6.2.Cỏc thẻ chuẩn của JAVABEANS trong trang JSP
2.6.2.1.<jsp:useBean>
Thẻ <jsp:useBean> dựng để khai bỏo phạm vi và định danh id(identify) nhận dạng Bean. Nú tương tự như khai bỏo biến đối tượng trong mó java.
Thẻ <jsp:useBean> cú cỳ phỏp như sau:
<jsp:useBean id=”name”
scope=”page | request | session | application” class=”packagename.classname”>
Thuộc tớnh Diễn giải
Id Thuộc tớnh này là định danh nhận dạng của đối tượng Bean trong một phạm vi cho trước. “name” là tờn của Bean cú phõn biệt chữ hoa, thường.
Scope Thuộc tớnh phạm vi cho biết mụi trường sống của đối tượng. Phạm vi của khai bỏo mà thành phần Bean cú hiệu lực bao gồm page (Bean chỉ cú hiệu lực và phạm vi truy xuất trong khai bỏo nú). Request (Bean cú hiệu lực trong một lần yờu cầu từ mỏy khỏch). Session (hiệu lực của bean tương tự hiệu lực của cỏc biến session). Application (hiệu lực của bean tương tự hiệu lực của cỏc biến application)
Class Tờn đầy đủ của lớp Bean. Đõy là tờn tập tin .class sua khi đó biờn dịch từ mó nguồn .java. tờn này cũng phõn biệt chữ hoa và chữ thường
BeanName Này để tham chiếu đến tờn của Bean
Type Thuộc tớnh chỉ ra loại biến kịch bản. Nếu biến này khụng chỉ rừ giỏ trị của nú sẽ là giỏ trị của thuộc tớnh lớp
2.6.2.2.<jsp:setProperty>
Thẻ <jsp:setProperty> dựng để gỏn giỏ trị vào thuộc tớnh Bean. Thuộc tớnh tờn của Bean chỉ định cho đối tượng phải được định nghĩa và nằm trong phạm vi cho phộp.
Cỳ phỏp của <jsp:setProperty>
<jsp:setProperty name = “beanName” prop_expr/>
Trong cỳ phỏp trờn, name cho biết tờn Bean mà thuộc tớnh của nú đó được cài đặt. prop_expr cú thể cú cỏc khai bỏo sau:
property =”*” |
property = “propertyName” |
property = “propertyName” param=”parameterName”| property = “propertyName” value=” propertyValue”
Thuộc tớnh Diễn giải
Name Thuộc tớnh trỡnh bày tờn của Bean, tờn này đó được định nghĩa bởi thẻ
<jsp:useProperty>
Property Thuộc tớnh của Bean cần lấy giỏ trị
Param Tham số cần dựng cho thuộc tớnh của
Bean
Value Giỏ trị được gỏn vào cho thuộc tớnh của
Bean
2.6.2.3. <jsp:getProperty>
Thẻ <jsp:getProperty> dựng để lấy giỏ trị thuộc tớnh Bean và chuyển giỏ trị thành kiểu chuỗi. Cỳ phỏp cho thẻ <jsp:getProperty> như sau:
<jsp:getProperty name=”name” property=”propertyName”/>
Thuộc tớnh Diễn giải
Name Thuộc tớnh trỡnh bày tờn của Bean, tờn này đó được khai bỏo và định nghĩa bởi thẻ <jsp:useProperty>
Property Thuộc tớnh của Bean cần lấy giỏ trị
Để sử dụng JavaBeans trong trang JSP, bạn cần khai bỏo Bean với thẻ:
< jsp:useBean >
< jsp : useBean id = “jb” scope = “page” class = “searchbean. searchbean”/> < jsp : setProperty name = “jb” property = “job” param = “name”/>
PHẦN 2 : XÂY DỰNG ỨNG DỤNG CHƯƠNG 1 PHÂN TÍCH BÀI TỐN CHƯƠNG 1 PHÂN TÍCH BÀI TỐN 1.1.TấN ĐỀ TÀI
Tỡm hiểu xõy dựng ứng dụng thư điện tử
1.2.DỀ CƯƠNG CHI TIẾT 1.2.1.Khảo sỏt 1.2.1.Khảo sỏt
Trong thời gian thực tập tốt nghiệp tụi đó khảo sỏt, tỡm hiểu hệ thống thư tớn điện tử. Quỏ trỡnh xõy dựng một ứng dụng thư điện tử (Email) rất đa dạng nhưng chủ yếu tập trung vào hai phần:
ư Xõy dựng mail server : là chương trỡnh hoạt động phớa mỏy chủ nhận, lưu trữ mail, phõn phối, gởi mail đến cỏc trỡnh chủ khỏc. Cỏc chương trỡnh như Mail Deamon, SendMail, Mail Exchange… là những mail server.
ư Xõy dựng mail client : là chương trỡnh hoạt động phớa mỏy khỏch thực hiện chức năng cho phộp người dựng nhập vào nội dung mail, gởi mail đến mỏy chủ mail server xỏc định. Nhận mail từ mỏy chủ về và hiển thị cho người dựng xem nội dung mail. Vớ dụ như Outlook Express của Windows hay Web mail trờn Internet là những trỡnh đúng vai trũ mail client.
1.2.2.Yờu cầu của bài toỏn
Yờu cầu chớnh của bài toỏn
ư Phần mail client: thực hiện được cơ bản nhất những chức năng của một mail client như việc gởi, nhận, hiển thị nội dung mail thụng qua trỡnh duyệt Web với giao thức HTTP của Internet.
ư Phần mail server : thực hiện được chức năng tiếp nhận mail do trỡnh khỏch (mail client) gửi lờn (SMTP Server), lưu trữ mail trong thư mục nhất định cho phộp người dựng sử dụng giao thức POP3 đọc mail (POP3 Server), chuyển mail đến mỏy chủ khỏc (Forward Server) hoặc phõn giải địa chỉ mail gửi thẳng đến đớch (Relay Server).
1.2.3.Dữ liệu vào, dữ liệu ra và cỏc chức năng xử lý của hệ thống
* Dữ liệu vào :
ư Phần mail client :
+ Thụng tin đăng ký của người dựng ư Phần mail server :
+ Mail do trỡnh khỏch gửi lờn
+ Thụng tin về vị trớ thư mục lưu trữ mail trờn server * Dữ liệu ra :
ư Phần mail client :
+ Thụng tin về tài khoản thư điện tử của người dựng. + Thư mục tương ứng với tờn tài khoản, thụng tin về user name và password để dựng cho việc POP3 Server chứng thực quyền truy cập của người dựng khi cần đọc mail
ư Phần mail server :
+ Lưu trữ mail do trỡnh khỏch gửi đến
+ Chuyển tiếp những mail khụng thuộc domain mail do mail server quản lý.
1.2.4. Chức năng của hệ thống thụng tin quản lý
* Quản lý toàn bộ thụng tin liờn quan đến user như: họ, tờn, ngày thỏng năm sinh, nghề nghiệp, giới tớnh, quốc gia, thành phố…
* Quản lý sổ địa chỉ
1.3. Lí DO CHỌN ĐỀ TÀI
Ngày nay đối với mỗi chỳng ta thư điện tử khụng cú gỡ xa lạ tuy nhiờn đú là đứng về phương diện người dựng. Xuất phỏt từ mong muốn tỡm hiểu một cỏch tường tận hơn hệ thống thư điện tử nhỡn từ khớa cạnh nhà thiết kế nờn tụi đó quyết định chọn đề tài xõy dựng ứng dụng thư điện tử theo mụ hỡnh Client Server.
CHƯƠNG 2 : THIẾT KẾ VÀ CÀI ĐẶT ỨNG DỤNG 2.1.PHÂN TÍCH VÀ THẾT KẾ CƠ SỞ DỮ LIỆU 2.1.PHÂN TÍCH VÀ THẾT KẾ CƠ SỞ DỮ LIỆU
2.1.1.Phõn tớch
Cơ sở dữ liệu được thiết kế đơn giản và dựng vào mục đớch quản lý danh sỏch thành viờn đăng ký sử dụng dịch vụ thư điện tử của vietmail.
Với mục đớch đú CSDL chỉ bao gồm hai thực thể chớnh là được thể hiện trong bảng sau :
1 members
(thành viờn)
userid (mó thành viờn ), user_name (tờn đăng nhập),
password (mật khẩu), question (cõu hỏi), answer (cõu trả lời), ho (họ), ten (tờn), ngay (ngày sinh), thang (thỏng sinh),
nam (năm sinh), gioi_tinh (giới tớnh)
nuoc (quốc gia), thanh_pho (thành phố), thanh_pho_khac (thành phố khụng thuộc Việt Nam), job (nghề nghiệp),
thong_tin_khac (thụng tin phụ khỏc), date(ngày đăng ký)
2 addressbook
(Sổ địa chhỉ)
addressid (mó sổ địa chỉ), userid (mó thành viờn), quickname (tờn gợi nhớ), ho (họ), ten (tờn), email (địa chỉ
email), phone (số điện thoại), diachi (địa chỉ)
CÁC LƯỢC ĐỒ QUAN HỆ
Từ những thực thể và thực thể trung gian trờn, bằng cỏc nguyờn tắc biến đổi, ta xõy dựng thành cỏc lược đồ quan hệ như sau:
Member (userid, user_name, password, question, answer, ho, ten, ngay, thang,
nam, gioi_tinh, nuoc, thanh_pho, thanh_pho_khac, job, thong_tin_khac, date)
Lược đồ quan hệ dữ liệu
Phõn tớch chức năng
Sơ đồ biểu diễn chức năng của hệ thống
2.1.2. Giải thớch cỏc chức năng của hệ thống
ư chức năng : Đăng ký thành viờn
Hệ thống quản lý thành viờn của vietmail
Đăng ký thành viờn Quản lý sổ địa chỉ
member userid user_name password question answer ho ten ngay thang nam gioi_tinh nuoc thanh_pho thanh_pho_khac job thong_tin_khac date addressbook addressid userid quickname ho ten email phone diachi
ý nghĩa : thu thập cỏc thụng tin của thành viờn nhằm mục đớch quản lý cũng như thiết lập cỏc thụng số phục vụ cho việc gởi và nhận thư điện tử của thành viờn
ư chức năng : Quản lý sổ địa chỉ
ý nghĩa : tạo một danh sỏch boa gồm cỏc địa chỉ do thành viờn tự tạo rong quỏ trỡnh sử dụng hệ thống.
2.1.3.biểu đồ luồng dữ liệu( DFD – Data flow Diagram)
.Biểu đồ luồng dữ liờu mức khung cảnh (BFD)
2.1.4. THIẾT KẾ HỆ THỐNG
2.1.4.1. Cỏc bảng dữ liệu chớnh
Ký hiệu:
PK: Khoỏ chớnh (Primary Key) FK: Khoỏ ngoại (Foreign Key)
Bảng dữ liệu: Member ( Thành viờn)
Yờu cầu Thành viờn Đăng ký Thụng bỏo Hệ thống vietmail
Tờn trường Kiểu DL Độ lớn Ràng buộc Khoỏ Ghi chỳ
userid int 4 Not Null PK
user_name varchar 20 Not Null Tờn đăng nhập
password char 10 Mật khẩu
question text 16
answer text 16
ho text 16 Not Null
ten text 16 Not Null
ngay smallint 2 Not Null
thang smallint 2 Not Null
nam int 4 Not Null
gioitinh char 5 Not Null
nuoc text Not Null
thanh_pho_k hac text 16 job int 4 thong_tin_k hac text 16
date datetime 8 Not Null
Bảngdữ liệu : Addresbook (sổ địa chỉ)
Tờn trường Kiểu DL Độ lớn Ràng buộc Khoỏ Ghi chỳ
addressid int 7 Not Null PK
userid int 8 Not Null Fk
quickname text 8
ho text 8
email text Not Null
phone text
diachi text
2.2. CÀI ĐẶT MAILSERVER
2.2.1.Phương ỏn tổ chức lưu trữ mail trờn Server
Để lưu trữ mail gửi đến trờn server, mỗi trỡnh mailserver sẽ cú một phương ỏn riờng để lưu trữ. Chẳng hạn cú thể lưu trữ thụng điệp mail như là cỏc record trong bảng dữ liệu của database hoặc lưu trong cựng một file text phõn cỏch mỗi thụng điệp bằng một dấu hiệu đặc trưng nào đú. Tuy nhiờn việc lưu thụng điệp mail dưới dạng cỏc file trong từng thư mục tương ứng của cỏc User tỏ ra đơn giản hơn và cũng khụng kộm phần hiệu quả. Vỡ vậy trong đồ ỏn này tụi quyết định chọn phương ỏn lưu thụng điệp mail dưới dạng tập tin trờn đĩa cục bộ. Trước khi cài đặt cỏc đơn thể Mail server ta cần tổ chức thư mục để SMTP server lưu trữ mail như sau:
Mỗi mailserver cú thể cú nhiều tờn domain cho địa chỉ mail, cỏc tờn domain này được tổ chức trong 1 thư mục, ở đõy ta chọn vietmail.com là tờn domain mail. Lỳc
này một địa chỉ e – mail hợp lệ gửi đến SMTP server của ta phải cú dạng như sau
username@vietmail.com. Hệ thống mail server cũn cho phộp mở rộng thờm vào cỏc
domain mail khỏc. Danh sỏch cỏc tờn domain main nằm trong file domain.txt.
Trong thư mục email\data\vietmail.com chứa danh sỏch cỏc thư mục con đại diện cho từng tài khoản (như thanhboeing, xuanthu…). Thụng tin đăng nhập của tài khoản được đặt trong file User.txt.
2.2.2.Cỏc đơn thể của mailserver
Trỡnh MailServer cú cỏc đơn thể được cài đặt bằng ngụn ngữ java và bao gồm cỏc phần chớnh sau:
ư Đơn thể xử lý tập lệnh SMTP ư Đơn thể xử lý tập lệnh POP3
2.2.2.1. Xõy dựng SMTP Server
Nhiệm vụchớnh của SMTP Server là sử lý tập lệnh SMTP, trả lại mó lỗi do trỡnh khỏch gởi lờn khụng hợp lệ. Tiếp nhận dữ liệu và lưu vào thư mục nhất định để trỡnh chủ POP3 Server cú thể truy xuất sau này. SMTP server sẽ mở socket lắng nghe trờn cổng 25 (cổng mặc định của SMTP). Ta cũng cú thể thay đổi số hiệu cổng trong file cấu hỡnh email.properties. khi nhận được kết nối từ trỡnh khỏch, SMTP server sẽ mở một tuyến (thread) là lớp SMTPConection chịu trỏch nhiệm phõn tớch cỏc lệnh SMTP và nhận mail do trỡnh khỏch gởi lờn. Lớp SMTP được cài đặt như sau: