1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Một số công nghệ áp dụng kiến trúc MODEL VIEW CONTROLLER luận văn ths công nghệ thông tin 1 01 10

123 55 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 123
Dung lượng 26,67 MB

Nội dung

Đ Ạ I H Ọ C Q U Ố C G IA H À N Ộ I TR Ư Ờ N G ĐẠI HỌC CÔ N G N G H Ệ CÁN XN HỒN M Ộ T SỐ CƠ N G N G H Ệ Á P DỤNG K IÉ N T R Ủ C M O D E L - V IE W - C O N T R O L L E R N gành: C ô n g n g h ệ th ô n g tin C huyên nghành: C ô n g n g h ệ th ô n g tin M ã số: 1.01.10 L U Ậ N V Ă N T H Ạ C SỸ NGƯỜI HƯ ỞNG DÃN KHOA HỌC P G S T S V Ũ Đ Ứ C T H I H N ội - 2005 M Ụ C L Ụ C M Ụ C L Ụ C LỜ I C Ả M Ơ N D A N H M Ụ C C Á C H ÌN H VẼ T R O N G LU Ậ N V Ă N .5 MỜ Đ Ằ Ư C H Ư Ơ N G I TỒ N G Q U A N VỀ M V C 1.1 Lịch sử phát triển M V C 1.2 Thiết kế theo m hình m ẫu (design p a tte rn ) 12 1.2.1 Đ ịnh n g h ĩa 12 1.2.2 Lợi ích thiết kế theo mơ hình m ẫ u 12 1.2.3 Phân loại m ầu thiết k ế 13 1.3 K iến trúc M V C 14 1.3.1 M odel (M hình dừ liệu ) .14 1.3.2 View (H iền thị hay giao diện người d ù n g ) .15 1.3.3 C ontroller (Đ iều khiển hay Q uán lý chức n ă n g ) 15 1.3.4 Sự tương tác thành phần cùa M V C 16 1.3.5 M ột số đặc điểm M V C 17 1.4 M ột số m ẫu thiết kế M V C 18 1.4.1 C om posite P attern 18 1.4.2 O bserver P a tte rn .20 1.4.3 Strategy P a tte r n .21 1.4.4 A dapter P a tte rn 23 1.4.5 C om m and P a tte rn 24 1.4.6 Factory P a tte rn 26 1.4.7 M ediator P a tte rn 27 1.4.8 D ecorator P a tte rn 28 1.4.9 So sánh m ẫu thiết k ế 29 1.5 Giới thiệu m ột số công nghệ tả n g .31 1.5.1 H TTP, H T M L k iệ n 31 1.5.2 Chu trình request/response (hỏi/đáp) H T T P 32 1.5.3 C ác phiên làm việc (S e ssio n ) 32 1.5 X M L .33 1.5.5 N gôn ngừ Java ứng dụng F ram e w o rk 34 1.5.6 J a v a B e a n s 34 1.5.7 J a v a S e rv le t 35 1.5.8 B ộ lọc th ô n g t i n 36 1.5.9 Di chuyển yêu c ầ u 36 1.5.10 Java S erver Page, Taglib, Java S erv er F a c e 37 1.5.11 C ác m essag e-reso u rce !37 C H Ư Ơ N G II Á P D Ự N G M V C T R O N G T H IẾ T K É G IA O D IỆN Đ Ô H Ọ A 39 Một số công nghệ áp dụng kiến trúc Model - View - Controller II G iới th iệ u 39 11.2 Áp dụn g M V C tro n g ngơn ngữ lập trình S m a llT a lk 39 11.2.1 G iới t h i ệ u 39 11.2.2 Thành p h ận M o d e l 40 11.2.3 Thành p h ận V ie w 42 11.2.4 Thậnh p h ần C o n tro lle r .44 11.2.4 Phối hợp th àn h phần M V C 45 11.3 Áp dụn g M V C tro n g thiết kế thành p h ần Java S w in g 46 11.3.1 G iới t h i ệ u 46 11.3.3 Jav a S w ing th iết kế M V C 48 11.3.3.1 Thành phận M o d e l 49 11.3.3.2 T hành phần giao d iện 51 11.3.4 M ột ví dụ v ề S w in g 53 C H Ư Ơ N G III Á P D Ự N G M V C TR O N G CÁ C Ứ N G D Ụ N G W E B 57 III Lựa chọn kiến trú c tổng thể cho m ột ứng d ụ n g 57 111.2 Áp dụng M V C tro n g m ột ứng dụng w eb tổng q u t 59 111.2.1 X ây dự ng th àn h phần C o n tro lle r 59 111.2.1.1 X ác địn h phirơng thức xử lý yêu c ầ u 59 111.2.1.2 C h u y ền yêu cầu người dùng ch o chức xử lý 60 111.2.1.3 Lựa ch ọ n trang m àn hình hiển thị tiếp th e o 62 111.2.1.4 Đ a điều k h iể n .66 111.2.2 X ây d ự ng thành phần V ie w 68 III.2.2.1 T hiết kế m ẫu cho m àn hình hiển th ị 68 Ịn 2 Á nh x U R L tới m ột trang m àn hình hiển t h ị 70 111.2.3 X ây d ự n g th àn h phần M o d e l 71 111.3 Áp dụng M V C tro n g công nghệ J2EE S u n 73 111.3.1 Giới thiệu công nghệ J E E 73 111.3.2 Thành p h ần V ie w 73 111.3.3 T hành p h ần M o d e l 74 111.3.4 Thành p h ần C o n tro lle r 76 111.3.5 Tirơng tác thành phần M V C 78 111.4 Áp dụng M V C tro n g Struts F m e w o rk .80 111.4.1 Giới thiệu Struts F m e w o rk .80 in T hành p h ần M o d e l 81 111.4.3 T hành p h ần V ie w 82 111.4.4 T hành p h ần C o n tro lle r 82 111.4.5 Phối hợp thành phần M V C 82 111.5 Á p dụng M V C ngơn ngữ lập trình P H P 85 in Giới th iệu P H P .85 111.5.2 Xây d ự ng thành phần M o d e l 86 M ột số công nghệ áp (lụng kiến trúc M odel - View - Controller 111.5.3 X ây dựng thành phận V ie w 89 111.5.4 X âỵ dựng thành phần C o n tro lle r 91 111.5.5 Phối hợp thành phần M V C 92 C H Ư Ơ N G IV X Â Y D ự N G HỆ TH Ố N G ISP B ILLIN G SY STEM TRÊN STR U TS F R A M E W O R K 94 IV Đ ặt t o n 94 IV Sơ đồ chức hệ th ố n g 95 IV T hiết kế C S D L 97 IV G iao diện chư ơng tr in h 98 IV X ây dựng thành phần ứng d ụ n g 100 IV.5.1 X ây dựng thành phận M o d e l .100 IV 5.2 Xây dựng thành phận V ie w 101 IV 5.3 X ây dựng thành phần C o n tro lle r 103 IV Đ ánh giá kết quà hướng phát triể n 104 KÉT L U Ậ N 105 TÀJ LIỆU TH A M K H Ả O 106 PH Ụ LỤ C 107 Một sổ công nghệ áp dụng kiến trúc Model - View - Controller DANH MỤC CÁC HỈNH VẼ TRONG LUẬN VĂN Hình 1.3.3 C ác thành phần Model, View, Controller cuộn Hình 1.3.4 Sự tương tác thành phần MVC Hình 1.4.2 Các cách hiển thị khác liệu Hình 1.5.2 C hu trình hỏi/đáp (request/response) cùa H T TP Hình II.3.1 Kiến trúc Java Foundation Classes Hình II.3.2 Kiến trúc tách Model Java Swing Hình II.3.4 Giao diện chương trình Toolbar Example Hình III.2.1.3 a Lược đồ lựa chọn hình hiển thị Hình III.2.1.3 b Lược đồ lựa chọn hình hiển thị đăng xuất Hình III.2.1.4 Sơ đồ Đơn điều khiển Hình III.2.1.4.b Sơ đồ Đa điều khiển Hình III.2.1 4.C Sơ đồ Đa điều khiển kết hợp Router Hình III.2.2.1 Bố cục mẫu trang web Hình II 1.3.5 Lược đồ cấu trúc ứng dụng w eb kiến trúc J2EE Hỉnh III.5.4 M hình UML Hình IV Mơ hình hoạt động hệ thổng ISP Billing System Hình IV.3 Sơ đồ phân rã chức hệ thống ISP Billing System Hình IV.2 Sơ đồ quan hệ thực thể chức Sercurity Hình IV.4.a Giao diện Đăng nhập hệ thống Hình IV.4.b Giao diện thêm Admin Hình IV.4.C Giao diện Danh sách Admin Hình IV.4.d Giao diện Cập nhật thơng tin Admin Một số công nghệ áp dụng kiến trúc Model - View - Controller MỞ ĐÀU Phân tích thiết kế khâu có ý nghĩa định cho :hành công hệ thống phần mềm xây dựng Các yêu cầu chủ yếu đổi với phần mềm tốt như: tính bào trì được, độ tin cậy cao, tính mềm đèo, có giao diện sứ dụng thích hợp định trước hết giai đoạn phân tích thiết kế Một thống kê trước cho thấy: lỗi phân tích hệ thống bị bị qua, thiết kế xong phát chi phí sừa chữa lăng lên 10 lần; bị bỏ qua cài đặt phát chi phí tăng lên 40 lần; đến vận hành phát chi phí sửa chữa lên tới 90 lần M ặt khác, chi phí cho khâu phân tích thiết kế phần mềm nước phát triển (như Mỹ, Anh, Ấn Đ ộ ) lên đến 30% tồng chi phí phát triển phần mềm Trong đó, chi phí cho khâu lập trình có dự án giảm xuống 10% Điều cho thấy vai trị cùa phân tích thiết kế phần mềm ngày trở nên quan trọng, điều kiện hệ thống phần mềm ngày có quy mơ lớn độ phức tạp ngày cao, cơng cụ lập trình ngày phong phú tiện lợi Trong năm gần đây, thiết kế theo mơ hình mẫu lên lĩnh vực mẻ nhà khoa học quan tâm nghiên cứu bời tính ứng dụng cao lĩnh vực thiết kế phần mềm Với hàng loạt nghiên cứu, đề xuất thử nghiệm ứng dụng thành công vào sàn phẩm công nghệ cao chứng minh thiết kế theo mơ hình mẫu lĩnh vực nghiên cứu có tàng lý thuyết vững Thiết kế theo mơ hình mẫu ứng dụng nhiều khâu trình thiết kế ứng dụng Từ việc lựa chọn kiến trúc tồng thể ứng dụng thiết kế tương tác bên thành phần hệ thống M odel - View - Controller (M VC) mẫu thiết kế phần mềm Một số công nghệ áp dụng kiến trúc Model - View - Controller cược đánh giá phương pháp thiết kế hướng đối tượng tìành cơng M VC đà nhiều nhà khoa học tìm hiểu, nghiên cứu thu nhiều thành công lớn Với lĩnh vực khoa học công nghệ nhiều triển vọng tirơng lai, em chọn hướng nghiên cứu “ M ột số công nghệ áp dụng kiến trúc Model - View - Controller” cho luận văn Luận văn xày dựng tổng hợp nội dung dựa số nghiên cứu thiết kế theo mơ hình mầu mà trọng tâm kiến trúc M V C nhà nghiên cứu tiong năm gần nhiều báo công bố tạp chí chuyên nghành Internet Nội dung luận văn gồm chương mục sau: C h n g I: T ổ n g q u a n M V C Chương trình bày nét khái quát kiến trúc Model View - Controller bao gồm kiến thức lịch sử phát triền MVC, thiết kế theo mơ hình mầu, thành phần M VC, tương tác thành phần M odel, View, Controller số mẫu thiết kế để tạo thành kiến trúc MVC C h n g II : Á p d ụ n g M V C tr o n g cá c ứ n g d ụ n g đ ỗ h ọ a Trong chương trình bày việc áp dụng M VC việc xây dựng ứng dụng đồ họa bao gồm việc áp dụng M VC ngôn ngữ lập trình SmallTalk việc áp dụng MVC thành phần Java Swing C h n g I I I : Á p d ụ n g k iế n tr ú c M V C tr o n g c c ứ n g d ụ n g w eb Chương trình bày cách thức áp dụng kiến trúc M VC ưng dụng web nói chung bao gồm kiến thức việc lựa chọn mơ hình tổng thể cho dự án web, cách thức phân tách thành phần ứng Một số công nghệ áp dụng kiến trúc Model - View - Controller dụng thành thành phần M odel, View, C ontroller cách thức phối hợp thành phần lại để tạo thành m ột ứng dụng w eb hoàn chinh Chương trình bày số cơng nghệ áp dụng kiến trúc M VC như: Công nghệ J2EE, Struts Fram ework , PHP C h ĩig I V : X â y d ự n g ứ n g d ụ n g w e b I S P B i llin g S y s te m b ằ n g A p a c h e S tr u ts F r a m e w o r k Chương trình bày cách thức xây dụng m ột ứng dụng w eb cụ thể Apache Struts Framework: Hệ thống ISP Billing System Một sổ công nghệ áp dụng kiến trúc Model —View - Controller CHƯƠNG I TỎNG QUAN VÉ MVC 1.1 Lịch s phát triển cùa MVC Tháng năm 1973, thành phố Oslo Na Uy, Tiến sỹ Trygve Reenskaug lúc làm việc cho Viện Nghiên cứu Công nghiệp Trung ương (Central Institute for Industrial Research) viết báo “Quản lý điều hành xưởng đóng tàu” (Administrative Control in the Shipyard) công bố lần hội thào quốc tế ứng dụng máy tính ngành đóng tàu vào mùa thu năm Trong báo mình, Reenskaug phân tích xưởng đóng tàu đại hệ thống thơng tin đưa nhiều kliía cạnh kỳ thuật khía cạnh xã hội phức tạp vốn có xường đóng tàu Với mục tiêu làm giảm độ phức tạp cho ứng dụng máy tính, ơng đă đề xuất hàng loạt công nghệ nên sử dụng việc mô tá hệ thống Ý tưởng trung tâm chiến lược ông “phân rã hệ thống lớn hay hệ thống phức tạp thành m ô đun thành phần” Tiếp đến, Reenskaug mô tả yêu cầu tổng quát mà framework cần có để xây dựng hệ thống hệ thống có, phù hợp với có hệ thống có đủ tính mềm dẻo để thích ứng với thay đồi tồ chức, n g đưa tính chất mà framework cần có là: Có thể can thiệp thủ công vào hệ thống cách dễ dàng Các nhóm xưởng tàu phải có trách nhiệm, quyền hạn lực phù hợp Hệ thống xử lý liệu tổng hợp phải chia thành hệ thống gẳn với vùng trách nhiệm Các hệ thống điều khiển phát triển dựa nhóm cụ thể M ột hệ thống phải có trách nhiệm rõ ràng để người Một số công nghệ áp dụng kiến trúc Model —View —Controller 10 hệ thống hiểu hoạt động cách đầy đủ Tất hệ thống phải có tính mở để có thề gắn kết với hệ thống khác nhóm khác nhóm trách nhiệm Hệ thống tổng thể phải có khả phát triển tiếp; thêm vào hệ thống hay thay đổi hệ thống cũ mà không cần xây dựng lại tồn hệ thống Nó nhúng hệ thống lạ vào mà không cần thiết lập lại hệ thống Việc chuyển đổi hệ hệ thống đơn giàn M ặc dù, tàng framework cùa Reenskaug vững chẳc, lại thiếu m ột ngơn ngữ lập trình hướng đối tượng để trờ thành gọi M VC M ột vài năm sau đó, Califonia, Reenskaug tiếp cận với máy tính ALTO , “chiếc máy vi tính giới có khả điều khiển thơng qua giao diện” N hờ đó, giúp ơng đồng nghiệp phát thấy “M VC giải pháp cho việc điều khiển tập liệu lớn phức tạp” - vào năm 1978, Xerox Palo Alto R esearch Center (PARC) M ô tả m ột fram ework để làm công việc vấn đề không dễ dàng Cơng việc khó tìm tên cho thành phần kiến trúc khác hệ thống, Reenskaug viết “M odel - View - Editor tập thứ nhất” Trong báo “ Thing - M odel - View - Editor” ông định nghĩa khái niệm sau: Thing: “N hững mà người sử dụng quan tâm ” (khái niệm giới thực) Model: “ M ột trình diễn tích cực cùa việc trừu tượng hóa Một sổ cơng nghệ áp dụng kiến trúc Model - Vietv —Controller 109 this.password = null; } //Kiếm tra tính hợp lệ liệu nhập vào public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { if ("load".equals(mapping.getParameter())) return new ActionErrorsO; ActionErrors errors = new ActionErrorsO; if ((loginname == null) II (loginname.lengthO < 1)) errors.add(”ỉoginname", new ActionError("validators.required"/new string ("Loginname"))); if ((password == null) II (password.Iength() < 6)) errors.addfpassword", new ActionError("validators.required",new string ("Password"))); return errors; > > / / packages.form s.InsertA dm inF orm java //D ù n g đ ể lưu t r ữ th ô n g tin quản trị th êm m ộ t Admin package packages.forms; import java.io.Serializable; import java.util.ArrayUst; import java.uti I.Col lection; import java.util.Date; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.validator.ValidatorForm; import packages.common.util.baseutil; import java.text.SimpleDateFormat; public class InsertAdminForm extends ValidatorForm { private String adminid; private String private string private string private string loginname; password; passwordCheck; fname; M ộ t s ổ c ô n g n g h ệ p d ụ n g k iế n tr ú c M o d e l - V ie w - C o n tr o lle r 110 private String private String private string private private private private private string string string String string private String private String private String private string private string private String private string private string mname; Iname; admintype; tel; fax; address; email; paymentbalance; remoteuser; remoteip; creationdate; description; status = "1"; setamntlimit; amntlimit; setcreditlimit; private String maxcreditlimit; private string maxpayment; private String setacctlimit; private string acctlimit; private string accessownusers; private string agencyid; private string adminstring; public String getAdminidO return (String)adminid; public void setAdminid(String value) adminid = value; //Xây dựng hàm getxxx, setxxx tương ứng cho thuộc tính //Kiếm tra tính hỢp lệ cùa liệu public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { if (nload".equals(mapping.getParameter())) return new ActionErrorsO; baseutil util = new baseutilO; ActionErrors errors = super.validate(mapping, request); if (errors==nu!l) errors = new ActionErrorsO; errors = util.formValidation(request, errors, loginname, "admin.loginname", "Required"); M ộ t s ố c ô n g n g h ệ p d ụ n g k iế n tr ú c M o d e l - V ie w - C o n tr o lle r I l l errors = util.formValidation(request,errors,password,"admin.password","Required"); if (!password.equals(passwordCheck)) { errors.addO'password", new ActionError("insertAdmin.password.nomatch")); > errors = util.formValidation(request,errors,admintype, "admin.admintype”,"Required,Integer"); errors = util.formValidation(request,errors,tel,"admin.tel","Integer"); errors = util.formValidation(request,errors;fax,"admin.fax","Integer"); errors = util.formValidationirequestierrors^mail/'admin.emair'/'Required,Email"); errors = util.formValidation(request,errors,paymentbalance, "admin.paymentbatance","Required;Double"); errors = util.formValidation(request,errors,creationdate,"admin.creationdate","Date"); errors = util.formValidation(request,errors,status,"status","admin Required,Integer"); errors = util.formValidation(request,errors,setamntlimit, "admin.setamntlimit","Integer"); errors = util.formValidationirequest/errors^amntlimit/'admin.amntlimit","Integer"); errors = util.formValidation(request,errors,setcreditlimit, "admin.setcreditlimit","Integer"); errors = util.formValidation(request, errors, maxcreditlimit, "admin.maxcreditlimit","Integer"); errors = util.formValidation(request,errors,maxpayment, "admin.maxpayment","Integer"); errors = util.formValidation(request,errors,setacctlimit / ’admin.setacctiimit","Integer"); errors = util.formValidation(request,errors,acctlimit,"admin.acctlimit","Integer"); errors = util.formValidation(request:,errors,aceessownusers, "admin.accessownusers",”Integer"); errors = util.formValidationirequesterrors^gencyid, "admin.agencyid","Required,Integer"); errors = util.formValidation(request,errors,adminstring, "admin.adminstring","Required"); return errors; > > / / p a c k a g e s , b e a n s A d m in ja v a / /D ù n g đ ể lưu th ô n g tin cùa m ộ t Admin package packages.beans; import java.io.Serializable; import java.util.Hashtable; public class Admin implements Serializable { private string adminid; M ộ t s ổ c ô n g n g h ệ p d ụ n g k iế n tr ú c M o d e l - V ie w — C o n tr o lle r 112 private string private string private Hashtable loginname; password; taskcodeList; //Một sổ thuộc tính khác public Hashtable getTaskcodeListO { return taskcodeList; } public void setTaskcodeList(Hashtable value) { taskcodeList = value; > //Các hàm getxxx setxxx viết tương tự cho thuộc tính > //packages.dao.A dm inD A O java //L g iao diện ch ứ a phương th ứ c tru y cập đến bảng Admins tro n g CSDL package packages.dao; import java.util.*; import packages.beans.Admin; import java.io.Seria lizable; public interface AdminDAO extends Serializable { public void createAdmin(Admin admin); public List listAdmirts(String agentid) ; public List listAdmins(int type, String where, string agentid) ; public void deleteAdmin(String string); public void deleteAdmin(String string, boolean closeConnection); public Admin readAdmin(String string); public void updateAdmin(Admin admin); public void changePassword(String loginname,string newPassword, boolean closeConnection); public void changePassword(String loginame,String newPassword); public Admin findAdminByLoginnamePassword(String Loginname, String Password); public Hashtable listTblField(); public void lock(String loginname, boolean closeConnection); public void lock(String loginname); public void unlock(String loginname, boolean closeConnection); public void unlock(String loginname); public Admin findAdminByLoginname(String Loginname); public Admin findAdminByAdminid(String Adminid); M ộ t s ố c ô n g n g h ệ p d ụ n g k iế n tr ú c M o d e l — V ie w - C o n tr o lle r 113 public Admin findAdminByAField(String param l, String param2, int type); public List listAdmins(int begin, int rangset, string agentid); public int countMaxRowO; public Hashtable getTaskCodeList(String adminid); public Hashtable getAdminHashTable(String agencyid); public Admin readAdmin(String adminid, string agentid); > II T hành p h ần View //te m p la te js p //Đ ịn h nghĩa b ố cụ c trìn h diễn ứng dụng < title x te m p la te :g e t n a m e = ’tit!e7> < /title> cm eta name="description" content="ISP BILLING SYSTEM"> cm eta name="keywords" content="BILL, Billling, billsys> cmeta name="copyright" content="(c>2005 Can Xuan Hoan"> ; ; M ộ t s ố c ô n g n g h ệ p d ụ n g k iế n tr ú c M o d e l - V ie w - C o n tr o lle r 114 < T R x T D CLASS="pageheader" VAUGN="middle" AQGN="left" width="100%"> < b x t e m p la te :g e t n a m e = ’header7> < h tm l:e r r o r s /x b r /> < te m p la te :g e t n a m e = ’content7>

& nbsp;

< /tr> < t r x t d colspan=3 > < tem p la te :g e t n am e= 'fo o ter7 > < /td > < /tr> < /tab le> //lo g o n js p / /T ran g đăng n h ập h ệ thông //lo g o n C o n te n t.js p .password"/> //in sertA d m in C o n ten t.jsp //T h ê m m ộ t Admin * < tr x td x b e a n :m e s s a g e key="prompt.admin.emai!" />* < trx td > < b ean :m essag e key="prompt.admin.fname" /> < /td> < /tr> < tr x td x b e a n :m e s s a g e key="prompt.admin.mname" / > < td x h tm l:te x t property="mname" / x / t d x / t r > < trx td > < b ean :m essag e key="prompt.admin.lname" / x / t d > < /td > < /tr> < bean ¡message key="prompt.admin.tel" /> < td x h tm l:te x t property="tel" /> < /td x /tr > < trx td > < b ean :m essag e key="prompt.admin.fax” / x / t d > < td x h tm l:te x t property="fax" / x / t d x / t r > < trx td > < b ean :m essag e key="prompt.admin.address" / > < td x h tm l:te x t property="address" /> < / td x /t r > < tdxh tm l:tex tarea property="description7> < tr x td x b e a n :m e s s a g e key="prompt.admin.paymentbalance" />* < /td> < trx td > < b ean :m essag e key="prompt.admin.admintype" />* < td x h tm l:select property="admintype"> Admin < html ¡option value=" 1" > ReSeller Saier < /h tm l:select> < /td x /tr> < t r x t d > < bean ¡message key="prompt.admin.agencyid" />* < td x h tm l:select property="agencyid"> < / td x /t r > < trx td > < b ean :m essag e key="prompt.admln.adminstring" />* M ộ t s o c ô n g n g h ệ p d ụ n g k iế n tr ú c M o d e l - V ie w - C o n tr o lle r 116 < td x h tm l:te x t property="adminstring" /> < / t d x / t r > < t r x t d x b e a n : message key="prompt.admin.setamntlimit" /> < / t d x / t r > < trx td > < b ean :m essag e key="prompt.admin.setcreditlimitn /> < htmltcheckbox property="setcreditlimit" value="l"/> < bean: message key="prompt.admin.maxcredit!imit" /> c T R x th co lsp an = x h r> < /th > < jnrR> < /T D x /T R > < ta b le > < trx td x b e a n :m e ssa g e key="prompt.admin.status" />* < tdxhtm l:radio property="status" value=" 17 > < /td x /tr > tr> < html :su bmit property="action" > < bean :message key= "button save"/> M o t s o c o n g n g h e d p d u n g k ie n tr u e M o d e l - V i& v - C o n t r o l l e r 118 log.debug("Cancel Button was pushed!"); return mapping.findForward("cancel"); > dbutil db = new dbutil(); Connection conn = db.cn(); try{ /* Create AdminDAO */ AdminDAO dao = DAOFactory.createAdminDAO(conn); LogonForm logonForm - (LogonForm) form; if ("load".equals(mapping.getParameter())) { return loadLogonForm(mapping, dao, logonForm); } else if ("submit".equals(mapping.getParameter())) { return doSubmitLogonForm(mapping, dao, logonForm, request, conn); > else { throw new IllegalStateExceptionQ; } >finally{ if(conn !=null) conn.close(); > > private ActionForward doSubmitLogonForm(ActionMapping mapping, AdminDAO dao, LogonForm logonForm, HttpServletRequest request, Connection conn) throws Exception{ String encriptedPassword = base.PasswordEncript(logonForm.getPassword()); Admin admin = dao.findAdminByLoginnamePassword(logonForm.getLoginname(), encriptedPassword); if (admin != null && "l".equals(admin.getStatus())){ Hashtable taskcodeList = dao.getTaskCodeList(admin.getAdminid(>); admin.setTaskcodeList(taskcodeList); request.getSession(true).setAttribute("currentAdmin", admin); }else if (admin != null && "0".equals(admin.getStatus())){ log.trace('This loginname was locked"); ActionErrors errors = new ActionErrorsO; errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.ad min.locked")); saveErrors( request, errors); return (new ActionForward(mapping.getInput())); }else{ log.trace("Login name and password not match"); ActionErrors errors = new ActionErrorsO; errors.add(ActionErrors.GLOBAL_ERROR, M o t s o c o n g n g h $ d p d u n g k ie n tr u e M o d e l - V ie w - C o n tr o lle r 119 new ActionError("error.password.mismatch")); saveErrors(request, errors); return (new ActionForward(mapping.getlnputO)); > if (mapping.getAttributeO != null) { if ("request".equals(mapping.getScope())){ log.info("Remove object form request scope"); request.removeAttribute(mapping.getAttributeO); }else{ log.info("Remove object form session scope"); request.getSession(true).removeAttribute(mapping.getAttribute()); > > return mapping.findForward("success"); > private ActionForward loadLogonForm(ActionMapping mapping, AdminDAO dao, LogonForm logonForm) { log.debug("Loading logon form"); return (new ActionForward(mapping.getlnputO)); > } //p ack ag es.actio n s.In sertA d m in A ctio n jav a //X lý việc th ê m m ộ t Admin package packages.actions; import java.sql.Connection; import java.text.SimpleDateFormat; import java util Date; import java.util.HashMap; import java util Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import org.apache.struts.actions.LookupDispatchAction; import org.apache.struts.action.Action; import org.apache.struts.action.ActionError; M ộ t s o c ô n g n g h ệ p (lụ n g k iế n tr ú c M o d e l - V ie w - C o n tr o lle r 120 import org a pache struts.action.ActionErrors; import org apache, struts, util.MessageResources; import packages.dao.*; import packages.common.dao.*; import packages.beans.*; import packages.common.util.*; import packages.forms.*; public class InsertAdminAction extends LookupDispatchAction { private Log log = LogFactory.getLog(this.getClass().getName()); baseutil base = new baseutil(); protected Map getKeyMethodMap() { Map map = new HashMap(); map.put("button.save", "save"); return map; > public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { Admin admin = (Admin)request.getSession(true).getAttribute("currentAdminM); if(admin!=null) log.info(#ADMIN:"+admin.getLoginname()+ 7"+base.getIP(request)+"#"); else return mapping.findForward("failure"); if(!Permission.checkPermission(TaskCode.CreateAdministrator,admin)) return mapping.findForward("notpermission"); log.info("Begin Insert Admin Action"); if (isCancelled(request)) { if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) request.removeAttribute(mapping.getAttribute()); else request.getSession(true).removeAttribute(mapping.getAttribute()); > log.debug("Cancel Button was pushed!"); return mapping.findForward("cancel"); > InsertAdminForm adminForm = (InsertAdminForm) form; if ("load".equals(mapping.getParameter())) return load(mapping, adminForm, request, response); return super.execute(mapping, form, request, response); M o t s o c o n g r ig h t* d p d u n g k i e n t r u e M o d e l - V ie n ’ - C o n tr o lle r 121 > private ActionForward load(ActionMapping mapping, InsertAdminForm adminForm, HttpServletRequest request, HttpServletResponse response) throws Exception{ log.info("Begin Load Insert Admin Action"); dbutil db = new dbutil(); Connection conn = db.cnQ; try { Admin currentAdmin = (Admin) request.getSession(true).getAttribute("currentAdmin"); AgentDAO dao = DAOFactory.createAgentDAO(conn); adminForm.setRemoteip(base.getIP( request)); adminForm.setRemoteuser(currentAdmin.getLoginname()); adminForm.setAgencyid(new String(currentAdmin.getAgencyidQ)); request.getSession(true).setAttribute("AgentFromInsertAdminAction", dao.listAgents(currentAdmin.getAgencyid())); > finally { conn.close(); > logJnfo("End Load Insert Admin Action"); saveToken(request); return mapping.findForward("success"); > public ActionForward save(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception { log.info("Begin Submit Insert Admin Action"); Admin admin = new Admin(); BeanUtils.copyProperties(admin, form); dbutil db = new dbutil(); Connection conn = db.cn(); try { AdminDAO dao = DAOFactory.createAdminDAO(conn); Admin newAdmin = dao.findAdminByLoginname(admin.getLoginnameO); if(newAdmin!=null){ log.trace("Loginname's already u s e r!"); ActionErrors errors - new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.loginname.existed")); saveErrors(request, errors); M o t s o c o n g n g h $ d p d u n g k ie n tr u e M o d e l - V ie w - C o n tr o lle r 122 return (new ActionForward(mapping.getInput())); > admin.setPassword(base.PasswordEncript(admin.getPassword())); admin.setCreationdate(base.getDate()); dao.createAdmin(admin); if (mapping.getAttributeO != null) < if ("request".equals(mapping.getScope())) request.removeAttribute( mapping.getAttributeO); else > request.getSession(true).removeAttribute(mapping.getAttribute()); return mapping.findForward("success"); } finally { conn.doseQ; } > } / /s tru ts-c o n f ig.xm I < ! - = = = = = = = = = = = Validator Plugin Configs = = = = = = = = = = = = = = = = = = = = = = = M o t s o c o n g n g h e d p d u n g k ie n tr u e M o d e l - V ie w - C o n tr o lle r ... phát triể n 10 4 KÉT L U Ậ N 10 5 TÀJ LIỆU TH A M K H Ả O 10 6 PH Ụ LỤ C 10 7 Một sổ công nghệ áp dụng kiến trúc Model - View - Controller DANH MỤC... .85 11 1.5.2 Xây d ự ng thành phần M o d e l 86 M ột số công nghệ áp (lụng kiến trúc M odel - View - Controller 11 1.5.3 X ây dựng thành phận V ie w 89 11 1.5.4 X âỵ dựng... M V C tro n g công nghệ J2EE S u n 73 11 1.3 .1 Giới thiệu công nghệ J E E 73 11 1.3.2 Thành p h ần V ie w 73 11 1.3.3 T hành p h ần M o d e l 74 11 1.3.4 Thành p

Ngày đăng: 30/09/2020, 19:55

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN