xây dựng một hệ thống quản lý chấm công nhân viên trên nền web
Trang 1Mục lục
1 Giới thiệu đề tài 2
2 Quy trình phát triển dự án 3
3 Giới thiệu nghiệp vụ 8
4 Mô hình J2EE, Client/Server 11
5 Các công nghệ được sử dụng 17
5.1 Filter 17
5.2 Java Server Faces (JSF) 21
5.3 Richfaces 29
5.4 Hibernate 35
5.5 Jasper report 43
6 UML 48
7 Thiết kế cơ dữ liệu 50
8 Screenshot 51
Trang 21 Giới thiệu đề tài
Ngày nay, việc tin học hóa đang diễn ra mạnh mẽ trong các doanh nghiệp, xínghiệp ở tất cả các quy mô tại Việt Nam Các phần mềm quản lý doanh thu, quản lý nhânviên, quản lý xuất nhập… trong các công ty đã và đang được các nhà quản lý quan tâm
bởi lợi ích nó đem lại Việc ứng dụng các HTTT vào thực tế giúp giảm chi phí cho
việc quản lý trong công ty.
Một trong những công việc được tin học hóa đó là hệ thống quản lý chấm công
nhân viên trong các công ty Chấm công hiện nay là một tác vụ thật sự cần thiết và diễn
ra hàng ngày trong các doanh nghiệp Qua việc quản lý tốt giờ giấc làm việc của nhânviên, doanh nghiệp có thể tăng thêm được hiệu quả hoạt động kinh doanh Riêng với nhàquản lý, họ còn có thể dựa vào đó để lên kế hoạch nhân sự, phân bổ công việc…
Như đã trình bày ở trên, hệ thống chấm công trong doanh nghiệp với mục đíchchính là giúp cho doanh nghiệp kiểm soát được hoạt động, lịch làm việc, công tác của cácnhân viên để từ đó quản lý tiền lương, nhân viên, lịch hoạt động của nhân viên để đảmbảo tính kỹ luật cũng như ổn định của sản xuất
Bằng việc khảo sát thực tế qua các doanh nghiệp cùng với việc tham khảo qua một
số phần mềm chấm công hiện có trên thị trường ATA do Hà Nội CTA phát triển, TAS
do Digitech phát triển và thương mại hóa, nhóm có rút ra một số nhược điểm của các
phần mềm chấm công hiện nay như sau:
- Phần lớn các phần mềm chấm công hiện nay phát triển dựa trên nền tảngdesktop application, phụ thuộc nhiều vào môi trường hệ điều hành, khó khăntrong việc cập nhật, triển khai
- Việc này cũng khó khăn cho nhà quản lý trong việc kiểm soát tiến độ khikhông ở trong công ty
- Việc thiết kế dựa vào chủ yếu mô hình hướng cấu trúc nên khả năng phân tầngkhông rõ ràng, khó khăn khi mở rộng hệ thống hơn so với mô hình hướng đốitượng
- Không có tính tương tác cao với người sử dụng
- Các tác vụ mang tính cứng nhắc, ít linh hoạt
Bởi vậy, nhóm dự án dự định sẽ xây dựng một hệ thống quản lý chấm công
nhân viên trên nền web, vẫn đảm bảo được yêu cầu trong việc quản lý đồng thời cũng khắc phục được các nhược điểm trên.
Trang 32 Quy trình phát triển dự án
2.1 Giới thiệu CMMI
Mô hình CMMI (Capability Maturity Model Integration) là một khung các giảipháp tối ưu cho quá trình sản xuất phần mềm Phiên bản CMMI-DEV hiện nay (CMMIcho chuyên viên phát triển), mô tả những giải pháp tốt nhất trong quá trình kiểm soát, đolường và kiểm tra các quy trình phát triển phần mềm Mô hình CMMI không tập trung
mô tả chính các quá trình mà chỉ mô tả đặc điểm của các quá trình hiệu quả, vì vậy môhình CMMI đưa ra chỉ dẫn cho các công ty để họ có thể tự mình phát triển hoặc điềuchỉnh chính các quá trình của họ
Mô hình CMMI được mô tả trên trang web chính thức CMMI website :dự án CMMI
là một nỗ lực chung nhằm cung cấp các mô hình để cải thiện nâng cấp các sản phẩm vàquy trình Trọng tâm chính của dự án là tập trung xây dựng các công cụ hỗ trợ việc cảithiện các quy trình dùng để phát triển và ổn định các hệ thống và sản phẩm Kết quả của
dự án CMMI là một bộ các sản phẩm cung cấp một phương pháp tiếp cận tích hợp trêntoàn doanh nghiệp để cải thiện các quy trình sản xuất mà vẫn có thể giảm bớt nhân công
dư thừa, độ phức tạp, và chi phí từ việc sử dụng các mô hình CMM (quy trình quản lý sảnxuất phẩn mềm) riêng lẻ và nhiều mô hình CMM
Mô hình này xác định năm cấp độ của CMM đối với một công ty :
1 Khởi đầu (lộn xộn, không theo chuẩn): đây là điểm khởi đầu để sử dụng một quy trình mới
2 Lặp (quản lý dự án, tuân thủ quy trình) : Quy trình này được lặp lại nhiều lần
3 Xác lập (thể chế hóa): Quy trình này được xác lập/ xác nhận như một quy trình doanh nghiệp tiêu chuẩn
4 Kiểm soát (định lượng): Tiến hành kiểm soát và đo lường quy trình sản xuất phần mềm
5 Tối ưu (cải tiến quy trình): Kiểm soát quy trình bao gồm việc cân nhắc kỹ để cải tiến/ tối ưu hóa quy trình
Trang 42.2 Ứng dụng CMMI
CMMI bao gồm hàng loạt các quy trình trong phát triển phần mềm từ khi bắt đầu
dự án đến khi kết thúc, kèm theo là các tài liệu đi kèm, quản lý cấu hình,… Do quy
mô của dự án nhỏ và thời gian không cho phép nên dự án sẽ chỉ tập trung vào cách tổchức thư mục và quản lý source trong quá trình phát triển
Cấu trúc thư mục của dự án:
Mô hình cấu trúc thư mục của dự án (mức System)
Lưu trữ các dữ liệu (các thành phần cấu hình tại version xác định) tại các mốcđặt Baseline của dự án – sử dụng cho việc xây dựng lại
hệ thống sau này (nếu cần) vàcác phiên bản bàn giao (Release) cho khách hàng (hoặc các bên liên quan)Các thành phần cấu hình tại Baseline được lấy từ vùng lưu trữ các thành phần đã được rà soát và phê duyệt (Mục 03_Approval)
02_REL 01_REL_Tên viết tắt của
dự án>_YYYMMDD
03_Approval 01_Requirements Các tài liệu đã được rà soát
và phê chuẩn chốt phiên bản được lưu tại khu vực này
Các tài liệu có phiên bản sẽ được chọn lựa để lập dữ liệu
02_Analysis & Design03_Sources
04_Implementation05_Testing
06_System Deployment07_Project Management
Trang 5cho Baseline và Release bàn giao
08_Development09_Configuration & Change Management
04_Working 01_Requirements Documents Các tài liệu yêu cầu của dự
án Tài liệu đặc tả yêu cầu phần mềm
thành phần của phần mềm: Tài liệu đặc tả usecase02_Analysis &
Design
Analysis Các tài liệu phân tích thiết kế
của phần mềm: Tài liệu Kiến trúc phần mềm, tài liệu thiết
kế dữ liệu, Tài liệu thiết kế lớp, tài liệu thiết kế màn hình
DesignDatabase
của phần mềm
phần mềmSubSystem
án qua các giai đoạn Kiểm thử: Thiết kế Kiểm thử và các kết quả kiểm thử: Các trường hợp Kiểm thử, Báo cáo kết quả Kiểm thử
Integration TestSystem TestAcceptance Test
06_System Deployment
Documents Các tài liệu triển khai dự án:
Thủ tục triển khai, Hướng dẫn sử dụng, Hướng dẫn cài đặt …
ManualsInstallation
07_Project Plans Project Các tài liệu Kế hoạch của dự
Trang 6Management án: Kế hoạch phát triển, Kế
hoạch quản lý cấu hình, Kế hoạch Kiểm thử, Kế hoạch Tích hợp, Kế hoạch triển khai
CCMQATestIntegrationDeploymentTimeSheet Các tài liệu về biểu thời gian,
báo cáo, ghi chú cuộc họp, các tài liệu đánh giá ước lượng dự án
Lịch biểu thời gian cho tất cả các thành viên của dự án
RecordsMeetingEstimationReports
08_Development Khu vực lưu trữ các sản
phẩm của dự án trên các công
cụ sử dụng cho dự án(Mục này là tùy chọn)09_Configuration & Change
Management
Khu vực quản lý cấu hình và kiểm soát thay đổi của dự án:Danh sách các thành phần cấu hình
Yêu cầu thay đổi
05_Backup BAK_<Tên viết tắt của dự
án>_YYYYMMDD
Khu vực lưu trữ các dữ liệu sao lưu của dự án
06_Reused Nếu có
07_References Chứa tài liệu, biểu mẫu tham khảo phục vụ việc thực hiện dự án, Các
tài liệu hướng dẫn đặc biệt của dự án (Project Specific Guidelines)…Người quản lý cấu hình có thể tạo thêm các thư mục khác tại đây nếucần
Trang 7Bên cạnh việc tổ chức thư mục, dự án có sử dụng Subversion (SVN) và Google Code
để quản lý source code
Trang 83 Giới thiệu nghiệp vụ
Qua việc phân tích nghiệp vụ tại công ty cổ phần Archi, hệ thống chia làm các phân hệ chính sau :
3.1 Phân hệ quản lý nhân sự :
3.1.1 Quản lý phòng ban bộ phận :
Thêm mới,xem ,sửa xóa từng bộ phận3.1.2 Quản lý nhân viên cán bộ :
Thêm mới,cập nhật thông tin nhân viên
Quản lý luân chuyển cán bộ giữa các phòng ban
Tìm kiếm thông tin nhân viên
Thống kê nhân viên theo các phong ban3.2 Phân hệ chấm công :
Quản lý tháng chấm công
Quản lý ca làm việc
Quản lý thông tin đăng ký làm thêm giờ của nhân viên
Quản lý lý do vắng mặt
Quản lý lý do xin ra ngoài giữa giờ
Quản lý giờ vào ra của nhân viên
3.2.1 Quản lý tháng chấm công :
Định nghĩa tháng chấm công: tuỳ theo yêu cầu của từng doanh nghiệp, có thể tuỳ
ý đặt ngày bắt đầu và kết thúc của tháng chấm công Mặc định là từ ngày 01 đến ngày cuối cùng hàng tháng Tất cả các báo cáo theo tháng sẽ tính toán dựa theo ngày bắt đầu
và ngày kết thúc đã được định nghĩa
Cập nhật thông tin tháng chấm công:cho phép người quản lý cập nhật lại thông tin tháng chấm công nếu thấy chưa phù hợp
Trang 93.2.2 Quản lý ca làm việc :
Định nghĩa ca làm việc :
Hệ thống cho phép định nghĩa thời gian làm việc theo mốc thời gian áp dụng (từ ngày bất kỳ nào đó)
Có thể định nghĩa được rất nhiều ca và mỗi ca làm việc sẽ được hiểu dưới dạng:
- Ngày bắt đầu hiệu lực (từ ngày)
- Giờ đến, giờ về
- Giờ vào ra riêng cho ngày thứ 7, chủ nhật (nếu không định nghĩa thì sẽ áp dụng giờ vào ra giống như ngày thường)
- Nghỉ giữa ca (giờ ra, giờ vào)
- Quy định thời gian cho phép đi muộn, về sớm, được hiểu là số phút xê dịch cho phép nhân viên đi muộn, và số phút cho phép nhân viên về sớm
- Quy định mốc bắt đầu tính làm thêm giờ được định nghĩa trong Ngưỡng tính làm thêm trước ca và sau ca Đây được hiểu là nếu vượt qua số phút này thì mới được tính làm thêm
3.2.3 Quản lý thông tin đăng ký làm thêm giờ của nhân viên :
Hệ thống cho phép nhân viên đăng ký làm thêm giờ các ngày trong tuần.Để quản
lý công làm thêm giờ được hiệu quả , cũng tránh được trường hợp nhân viên ở lại làm việc riêng đến quá giờ mới quẹt thẻ ra về thì không được hưởng lương làm thêm giờ
Trang 103.2.5 Quản lý lý do xin ra ngoài giữa giờ :
Tương tự như quản lý lý do vắng mặt,
* Dưới góc độ nhà quản lý : Hệ thống giúp công ty lập ra các quy định về lý do ra ngoài hợp lệ,lý do nào là không hợp lệ,
* Dưới góc độ nhân viên : Hệ thống giúp nhân viên đăng ký lý do ra ngoài Cập nhật thông tin đăng ký ra ngoài trong giờ làm
3.2.6 Quản lý giờ vào ra của nhân viên :
Hệ thống cho phép cập nhật thông tin vào ra của nhân viên tự động ,dữ liệu lấy từ các máy quẹt thẻ
Hệ thống cho phép cập nhật thông tin vào ra của nhân viên thủ công khi có lỗi xảy ra với máy quẹt thẻ hoặc khi nhân viên quên thẻ,…
3.3 Phân hệ tính lương :
Hệ thống cho phép tự động tính lương của nhân viên trong công ty trong tháng dựa trên số ngày công thực tế,mức lương cơ bản,phụ cấp,…
Công thức tính lương tại công ty Archi :
• Lương ngày = (Lương cơ bản + Phụ cấp)/Số ngày làm việc trong tháng
• Lương tháng = Lương ngày x (số ngày đi làm + số ngày nghỉ nguyên lương) + (làm thêm NT * 150% + Làm thêm CN * 200% + Làm thêm Lễ * 300%) * Lương giờ - Bảo hiểm + Phụ cấp khác
3.4 Phân hệ báo cáo ,thống kê :
Hệ thống cho phép người sử dụng lập các báo cáo ,thống kê chi tiết như :
Báo cáo nhân viên đi làm từng ngày
Báo cáo nhân viên đi muộn về sớm
Báo cáo châm công tháng
Trang 114 Mô hình J2EE, Client/Server
J2EE là thuật ngữ viết tắc của Java 2 Platform, Enterprise Edition , đây là một framework hỗ trợ xử lý tính toán phân tán của Sun Microsystems Bài viết này dựa trên 1 chương trong 1 cuốn Study Guide của Sun về J2EE, mục đích không phải là mô tả chi tiết
về J2Ê mà là để đem lại cho người đọc những hiểu biết cơ bản về J2EE và các khả năng của nó
4.1 Mở đầu
J2EE là một platform để phát triển những ứng dụng distributed J2EE bao gồm những phần sau (được xem như là J2EE Framwork):
• J2EE Platform - một platform chuẩn để hosting các ứng dụng J2EE
• Reference Implemetation - một application server hỗ trợ chuẩn mới nhất của J2EE, ngoại trừ những tiêu điểm của nó là những đặc tính mới trong phiên bản chuẩn của J2EE,đây chưa phải là 1 sản phẩm hoàn chỉnh
• Compatibility Test Suite - một công cụ để kiểm tra xem một application server có tươngthích với chuẩn J2EE hay không Thiếu cái này thì mỗi nhà cung cấp có thể hiểu và từ đó phát triển chuẩn J2EE theo những hướng khác nhau mà như thế thì làm giảm đi thế mạnh của J2EE platform là “write once, run anywhere”
• Application Programming Model (APM) Blueprint – một mô hình ứng dụng tham khảo,được cung cấp để minh hoạ cách phát triển ứng dụng dùng J2EE
Trang 124.2 Phát triển chương trình dùng J2EE
J2EE Framework cho phép phát triển những ứng dụng distributed bằng cách cung cấp 1 tập các dịch vụ cơ bản như quản lý transaction, kiểm tra security, quản lý trạng thái, quản
lý tài nguyên Các application serve đều cung cấp những dịch vụ cơ bản này của J2EE Framework
4.3 J2EE API
Những công nghệ được sự dùng trong J2EE bao gồm:
• Java 2 Standard Edition (J2SE) - trước kia còn gọi là JDK
• Java Database Connectivity (JDBC) - Một API chuẩn dùng để kết nối Java Platform với
interoperability thông qua chuẩn IDL
• Remote Method Invocation – Internet Inter- ORB Protocol (RMI-IIOP) - Một giao thức cho phép lập trình viên RMI kết hợp những lợi ích của RMI API và giao thức CORBA IIOP để giao tiếp với CORBA-compliant client được phát triển bởi bất cứ ngôn ngữ nào tuân theo CORBA
• Enterprise JavaBean (EJB) - một kiến trúc component để phát triển và triển khai các ứng dụng kiểu component-based distributed
• Servlet – tương tác với Web client thông qua cơ chế request – response Cơ chế này dựatrên giao thức HTTP
• Java Server Page (JSP) – Dùng để xây dựng những ứng dụng có chứa nội dung web động như là HTML, DHTML, XML
• Java Message Service (JMS) - một API để giao tiếp với Message Oriented Middleware (MOM) cho phép truyền nhận message theo cơ chế point-to-point và publish/subcribre
• Java Naming and Directory Interface (JNDI) - một interface duy nhất dùng để truy cập những kiểu dịch vụ khác nhau về naming và directory
• Java Transaction API (JTA) - một tập API cho phép quản lý transaction Ứng dụng có thể sự dụng JTA để start, commint, abord transaction
• JavaMail - một API cung cấp 1 framework platform-independent và
protocol-independent (không phụ thuộc giao thức về platform) để xây dựng ứng dụng về mail và messaging
• JavaBean Activation Framework (JAF) - tập các API được sử dụng bởi các package khác như là JavaMail,…Bạn có thể dùng JAF để xác định kiểu dữ liệu, đóng gói truy cập đến dữ liệu đó, mở rộng những tác vụ dựa trên dữ liệu đó và khởi tạo một bean tương ứng
để thực hiện những tác vụ đó Ví dụ JavaMail dùng JAF để xác định object nào sẽ được khởi tạo dựa trên kiểu MIME của object
Trang 13• Java Application – component này là 1 chương trình standalone chạy bên trong
Application Client container Application Client container cung cấp những API hỗ trợ cho messaging, remote invocation, database connectivity và lookup service Application Client container đòi hỏi những API sau: J2SE, JMS, JNDI, RIM-IIOP và JDBC
Container này được cung cấp bởi nhà cung cấp application server
• Applet – Applet component là java applet chạy bên trong Applet container, chính là web browser có hỗ trợ công nghệ Java Applet phải hỗ trợ J2SE API
• Servlet và JSP – đây là Web-based component chạy ở bên trong Web container, được
hỗ trợ bởi Web Server Web container là một môi trường run-time cho servlet và jsp Web Container phải hỗ trợ những API sau: J2SE, JMS, JNDI, JTA, JavaMail, JAF, RIM-IIOP và JDBC Serlet và JSP cung cấp một cơ chế cho việc chuẩn bị, xử lý, định dạng nộidung động
• Enterprise JavaBean (EJB) – EJB component là business component chạy bên trong EJB container EJB component là phần nhân, cốt lõi của ứng dụng J2EE EJB container cung cấp các dịch vự quản lý transaction, bảo mật, quản lý trạng thái, quay vòng tài nguyên (resource pooling) EJB container phải hỗ trợ những API sau: J2SE, JMS, JNDI, JTA, JavaMail, JAF, RIM-IIOP và JDBC
4.5 Sự dụng EJB
EJB chứa những business logic của ứng dụng, cho nên có thể nói rằng EJB chính là phần lõi của phần lớn các ứng dụng distributed cho enterprise Một enterprise bean có những đặc điểm sau:
• Chứa các business logic để thao tác với dữ liệu
• Được tạo ra và được quản lý bởi một container
• Xử lý các truy cập của client
• Chứa metadata, như là thuộc tính của transaction và security, riêng biệt với các bean
• Cung cấp dịch vụ quản lý transation, quản lý trạng thái, quay vòng tài nguyên và bảo mật Nếu bạn thiết kế 1 ứng dụng không cần có hỗ trợ transaction hoặc bảo mật, lúc đó nên trở lại câu hỏi có nên dùng đến EJB hay không
Mỗi EJB bắt buộc phải có những interface và class sau:
• Home Interface - home interface extend javax.ejb.EJBHome Nó đóng vai trò như một Factory pattern để khởi tạo các instance của EJB
• Remote Interface – remote interface extend javax.ejb.EJBObject Remote interface chứacác business method , được gọi từ client Nó đóng vai trò như 1 proxy của EJB
• Bean Class - chứa phần cài đặt của các method khai báo trong remote interface Bean
Trang 14class extend javax.ejb.SessionBean hoặc javax.ejb.EntityBean hoặc
javax.ejb.MessageDrivenBean
4.5.1 Sự dụng Session và Entity Bean
Các ứng dụng cho enterprise cần những component linh động trong business logic Các component phải có khả đáp ứng stateless service, conversational state, và hỗ trợ việc chia
xẻ dữ liệu EJB có 2 loại bean chính ứng với các nhu cầu khác nhau của component trongứng dụng: session và entity Entity bean phục vụ cho việc persistence và sharing dữ liệu Như thế không có nghĩa là session bean không thể persist object được, nhưng entity bean được thiết kế chuyện dụng cho mục đích này Session bean thì phục vụ cho các bussiness logic và wworkflow liên quan đến ứng dụng J2EE, tương ứng với nhu cầu về stateless service và conversational state
4.5.2 Stateless Bean và Stateful Bean
Có 2 loại session bean: stateless và stateful
Stateless Beans
Stateless bean không giữ conversational state (tạm dịch là trạng thái giao tiếp) của client Tuy nhiên không có nghĩa là stateless bean không thể giữ được trạng thái, nhưng trạng thái này không bảo đảm đủ để xác định client nào đã gọi đến bean này Điều này có nghĩa
là bạn có thể dùng stateless bean để thực hiện bất cứ hành động nào trong ứng dụng
Stateful Beans
Stateful bean có khả năng giữ conversational state (tạm dịch là trạng thái giao tiếp) của client Tất nhiên là có nhiều cách để giử consersational state trong ứng dụng, nhưng nếu state đó cần phải gắn với business logic thì nó nên được lưu giữ trong stateful bean Ví dụđiển hình nhất của session stateful bean là component shopping cart trong các ứng dụng mua hàng trực tuyến
4.5.3 Sự dụng MessageDrivenBean
MessageDrivenBean là một điểm mới trong chuẩn EJB 2.0 (EJB 1.1 chỉ định nghĩa 2 loạibean là session và entity) Mục đích của MesssageDrivenBean là phục vụ cho nhu cầu về các asynchronous service của các component Bởi vì session và entity bean chỉ phục vụ các dịch vụ loại synchronous Do đó cách sử dụng MessageDrivenBean có phần giống với session stateless bean, chỉ khác ở cách gọi bean, với MDB thì client phải gửi messageđến MDB đó để thực hiện các hàm trong MDB
4.5.4 Sự dụng Container-Managed Persistence
Trang 15Có 2 cách để 1 entity bean persist object: container-managed persistence (CMP) và managed persistence (BMP) Trong CMP, container điều khiển việc cài đặt cần thiết cho các tác vụ chèn, đọc, ghi, cập nhật object trong một data source Còn trong BMP, thì LTVphải tự cài đặt các code cho các tác vụ trên CMP lý tưởng cho việc phát triển ứng dụng
bean-vì nó không đòi hỏi LTV phải thay đổi code mỗi khi data model thay đổi Tuy nhiên để
có được tính linh hoạt, CMP không cho phép sinh ra những câu lệnh SQL hiệu quả
Hiện nay các công cụ phục vụ việc mapping object với cơ sở dữ liệu vẫn còn đang trogn quá trình phát triển và chưa đủ chin muồi Trong khi chờ đợi CMP phát triển hoàn thiện thì BMP cộng với pattern DAO có lẽ là 1 giải pháp khá tốt
4.5.5 Sự dụng Data Access Object
Khi bạn quyết định dùng BMP, có nghĩa là bạn sẽ phải tự coding các câu lệnh SQL trong entity bean của bạn Để giảm sự nối kết của entity bean với các câu lệnh SQL cần thiết cho các việc đọc, ghi, xoá , cập nhật object, bạn có thể tạo ra một DAO pattern đóng gói các câu lệnh SQL đó Bằng cách này bạn đã làm giảm sự phụ thuộc của bạn vào code và
sư thay đổi của data model Nói cách khác nếu có sự thay đổi thì BMP entity bean của bạn vẫn có thể giữ nguyên và bạn chỉ phải sửa lại phần DAO thôi
DAO chứa code phục vụ việc đọc , ghi, cập nhật xoá object trên 1 data source Nó cho phép 1 entity bean có thể định nghĩa như 1 BMP, nhưng sau này khi các công cụ hỗ trợ cho CMP trở nên hoàn thiện hơn thi entity bean này có thể chuyển sang thành CMP, và DAO sẽ được thay thế bởi sự hỗ trợ CMP của container
Nếu bạn muốn tìm hiểu thêm về DAO pattern , bạn có thể xem ở địa chỉ sau:
http://java.sun.com/blueprints/patterns/DAO.html
Mô hình client-server sử dụng J2EE
Trang 17Servlet Request
Reponse
Filter Request
Reponse
5 Các công nghệ được sử dụng
5.1.1 Filter
a Khái niệm:
Filter là một kỹ thuật ở mức thấp trong lập trình web của java Nó được hiểu như
là một bộ lọc bao bọc lấy toàn bộ các Servlet và tài nguyên bên trong của server Mọirequest đến và response trả về đều có thể được xử lý bởi những Filter này
b Mô hình:
c Công dụng:
Theo mô hình trên, ta thấy Filter bao bọc lấy các tài nguyên trên server và có khảnăng quản lý đồng thời cả request lẫn response hoặc có thể chỉ quản lý đơn lẻ chúng Mộtrequest/response có thể phải đi qua không, một hoặc nhiều Filter trước khi đi đến đíchcủa nó là các trang jsp, servlet, các server pages hoặc các tài nguyên khác trên server
d Ưu điểm:
Filter cho phép người lập trình có thể cấy các đoạn code để xử lý các luồng yêu cầu vàphản hồi hoặc loại bỏ chúng một cách một cách dễ dàng Chính khả năng này đã giúpfilter hoàn toàn trong suốt với các tầng xử lý phía sau
Trang 18e Các ứng dụng thực tế của Filter:
- Xác thực người dùng, ngăn chặn truy cập trái phép
- Thống kê người sử dụng khi truy cập hệ thống
- Nén dữ liệu trả về cho client
- Xác định vùng địa lý của người truy cập, thông qua đó có thể trả về được nội dung phù hợp nhất
- Chuyển đổi nội dung: cho phép chuyển đổi nội dung trả về ứng với từngclient Ví dụ: sử dụng XSLT để chuyển đổi XML thành HTML đối vớingười dùng sử dụng browser trên PC, WML đối với người dùng sử dụngbrowser trên di động
f Ứng dụng trong bài tập lớn:
Trong bài tập lớn, Filter được dùng để thực hiện chức năng phân quyền người dùng
g Cài đặt Filter:
Bản chất của filter là một Class đặc biệt được thừa kế từ interface javax.servlet.Filter Do
đó cần phải implement các phương thức:
- public void init(FilterConfig config)
- public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
Trong đó phương thức:
- init: dùng để đọc các cấu hình của filter được quy định bởi người lập trình trong
file web.xml
- doFilter: dùng để cài đặt nội dung nội dung của bộ lọc Trong trường hợp xác thực
người dùng, thân phương thức được biểu diễn bởi đoạn mã giả sau:
Trang 19Filter được cài đặt và cấu hình thực tế trong project java chấm công:
public class UserFilter implements Filter {
//private FilterConfig filterConfig;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException{ HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
// Authentication HttpSession session = request.getSession();
if(session==null){
response.sendRedirect("/auth/expired.jsf");
return;
} String contextPath = request.getContextPath();
if(contextPath.length() > 0 && contextPath.endsWith("/"))
contextPath = contextPath.substring(0, contextPath.length()-1);
String relativeURI = request.getRequestURI().substring(contextPath.endsWith("/")?
contextPath.length()-1:contextPath.length());
UserProfileBean user = (UserProfileBean)session.getAttribute("userprofilebean");
Trang 20public void init(FilterConfig config) throws ServletException {
}
}
File web.xml
< filter >
< filter-name > UserFilter </ filter-name >
< filter-class > com.c2h4.timekeeping.common.UserFilter </ filter-class >
</ filter >
< filter-mapping >
< filter-name > UserFilter </ filter-name >
< url-pattern > /timekeeping/* </ url-pattern >
< filter-name > UserFilter </ filter-name >
< url-pattern > /report/* </ url-pattern >
</ filter-mapping >
< filter-mapping >
< filter-name > UserFilter </ filter-name >
< url-pattern > /salary/* </ url-pattern >
</ filter-mapping >
< filter-mapping >
< filter-name > UserFilter </ filter-name >
< url-pattern > /system/* </ url-pattern >
</ filter-mapping >
Trang 215.2. Java Server Faces (JSF)
5.2.1 Sự phát triển của các web application framework
Trải qua 3 giai đoạn chính:
- Không theo mô hình MVC (model, view, controller)
- MVC model 1 (Page-centric)
- MVC model 2 (Servlet-centric)a/ Không theo mô hình MVC
Thời kì mới ra đời của các ứng dụng web, lúc đó chỉ tồn tại các ứng dụngweb tương tác trực tiếp với người sử dụng bằng các trang web tĩnh, không có sự xử lý vàngôn ngữ phía máy chủ Điều này đã gây cản trở rất lớn cho người lập trình cũng nhưngười sử dụng trong việc tiếp cận với các ứng dụng trên nền web
* Trang JSP này sẽ khởi tạo một hoặc nhiều Java Bean (nếu cần thiết), truyền các lệnhcần thi hành tới Java Bean Chú ý rằng đây là các Java Bean thông thường, chứ khôngphải Enterprise Java Bean (EJB)
* Sau khi Java Bean thực hiện xong việc truy xuất hoặc cập nhật dữ liệu, trang JSP banđầu có thể hiển thị dữ liệu lấy từ Bean (JSP ban đầu đóng luôn vai trò View), hoặc chọnmột trang JSP khác để hiện dữ liệu từ Bean (JSP ban đầu đóng luôn vai trò Controller)
Trang 22Trong một thiết kế tốt, để bảo đảm việc tách rời phần trình bày và logic của chương trình,trang JSP nhận request chỉ đóng vai trò Điều khiển (Controller).
MVC model 1 có một nhược điểm là phần logic điều khiển được viết trong trangJSP, như vậy phần chương trình Java phức tạp dùng để điều khiển sẽ bị lẫn vào trong mãHTML dùng để trình bày Độ phức tạp của chương trình càng cao, thì trang JSP càng khóbảo trì Hơn nữa trong các dự án phần mềm phức tạp, thì phẩn hiển thị của trang JSPthường được làm bởi người thiết kế Web, giỏi về HTML và đồ họa, còn phần chươngtrình Java được viết bởi lập trình viên chuyên về lập trình Trong các dự án phức tạp,dùng JSP làm phần điều khiển sẽ làm lẫn lộn việc phân chia ranh giới trách nhiệm giữanhóm thiết kế đồ họa và nhóm lập trình, đôi khi dẫn đến việc bảo trì và phát triển trở nênrất khó khăn, gần như không thể làm được
Để khắc phục nhược điểm này, MVC model 2 ra đời
Các yêu cầu của người dùng được gửi từ trình duyệt Web tới servlet Servlet sẽkhởi tạo Java Bean (nếu cần thiết), ra lệnh thu thập, cập nhật thông tin Khi Java Beanhoàn thành công việc, servlet sẽ chọn trang JSP thích hợp để hiện thông tin trong JavaBean cho người dùng
Trang 235.2.2 JavaServer Faces là gì?
Công nghệ Java Server Faces là một UI framework cho việc xây dựng các ứng dụng webchạy trên Java server và thay thế UI phía sau cho client Các ứng dụng được viết bằngJSF tuân theo mô hình MVC model 2, hỗ trợ tốt cho người phát triển web Các thànhphần chính của công nghệ JSF bao gồm:
Một API và các bổ sung tham khảo cho: thay thế các thành phần UI và quản lýtrạng thái của chúng; xử lý các sự kiện, kiểm tra phía server và chuyển đổi dữ liệu;định nghĩa navigation của trang; hỗ trợ quốc tế hóa và accessibility; và cung cấpkhả năng mở rộng cho tất các đặc điểm này
Một thư viện thẻ tùy biến JavaServer Pages (JSP) cho việc định nghĩa các thành phần UI trong một trang JSP
Mô hình lập trình được định nghĩa tốt này và thư viện thẻ thành phần UI tạo kỹ thuật dễdàng tải việc xây dựng và sửa chữa các ứng dụng web với các UI ở phía server Với sự tổchức nhỏ đó, bạn có thể:
Điều khiển việc tạo ra các sự kiện phía client từ việc viế mã ứng dụng phía server
Ánh xạ các thành phần UI tren một trang cho dữ liệu phía server
Khởi dựng một UI với các thành phần có thể tái sử dụng và có khả năng mở rộng
Lưu trữ và phục hồi trạng thái UI ngay sau các request
5.2.3 Phần mềm yêu cầu
Để xây dựng, deploy và chạy các ứng dụng JSF bạn cần một môi trường deploy chẳnghạn Java Web Software Development Pack và Java 2 Platform, Standard Edition (J2SE)SDK 1.3 trở lên Đồng thời download bổ sung công nghệ Java Server Faces Có thểdownload các phần mềm cần thiết tại các link dưới đây
Việc phân chia luận lý từ presentation cũng cho phép mỗi thành viên của một nhóm pháttriển ứng dụng Web tập trung vào những phần trong tiến trình phát triển của họ, và cung
Trang 24cấp một mô hình lập trình đơn giản để liên kết những phần đó với nhau Một mục tiêuquan trọng khác của công nghệ JSF là cung cấp các mức độ thân thuộc các thành phần UI
và các khái niệm tầng Web mà không giới hạn bạn trong một công nghệ scripting cụ thểhoặc một ngôn ngữ đánh dấu Trong khi công nghệ JSF bao gồm một thư viện thẻ tùybiến JSP dùng thay thế các thành phần trên trang JSP, API của công nghệ JSP được phânlớp trực tiếp trên đỉnh của JavaServlet API Điều này cho phép bạn làm được vài điều: sửdụng công nghệ trình bày khác bên cạnh JSP, tạo ra những thành phần tùy biến của bảnthân bản trực tiếp từ những lớp thành phần, và tạo ra luồng xuất cho những thiết bị clientkhác nhau
Quan trọng hơn hết, công nghệ JSF cung cấp một kiến trúc dành cho việc quản lý trạngthái các thành phần, xử lý dữ liệu thành phần, kiểm tra nhập liệu của người dùng và xử lýcác sự kiện Trong hầu hết những phần đó, các ứng dụng JSF cũng tương tự như bất kỳcác ứng dụng Java Web khác, Chúng chạy trên một Java Servlet container, và thôngthường chứa:
Các thành phầns JavaBean (được gọi là những mô hình đối tượng trong công nghệJSF)
Các event listener
Các trang, chẳng hạn như JSP
Các lớp helper phía server, chẳng hạn như các bean truy cập dữ liệu
Thêm vào những thành phần ở trên, một ứng dụng JSF cũng có:
Một thư viện thẻ tùy biến thực thi các thành phần UI trên một trang
Một thư viện thẻ tùy biến thay thế các xử lý sự kiện, kiểm tra và những hành động khác
Những thành phần UI thay thế trạng thái các đối tượng trên server
Các kiểm tra, xử lý sự kiện, và xử lý navigation
Mỗi ứng dụng JSF phải bao gồm một thư viên thẻ tùy biến nhằm định nghĩa các thẻ thaythế các thành phần UI và một thư viện thẻ tùy biến nhằm thay thế các hành động cốt lõikhác, chẳng hạn như các kiểm tra và các xử lý sự kiện Cả hai loại thư viện thẻ này đượccung cấp bởi việc bổ sung JSF
Thư viện thẻ tùy biến xóa bỏ những gì cần thiết cho các thành phần UI trong HTML hoặcngôn ngữ đánh dấu khác, kết quả là những thành phần tái sử dụng hoàn toàn Và thư việncore tạo nên sự dễ dàng để đăng ký các sự kiện, kiểm tra và những hành động khác Thưviện thẻ tùy biến có thể là thư viện thẻ HTML cơ bản chứa cùng với công nghệ JSF thamkhảo bổ sung, hoặc bạn có thể định nghĩa thư viện thẻ của riêng mình nhằm tạo ra cácthành phần tùy biến hoặc xuất ra kiểu khác HTML
Cuối cùng, công nghệ JSF cho phép bạn chuyển đổi và kiểm tra dữ liệu trên những thànhphần riêng biệt và thông báo bất kỳ lỗi gì trước khi dữ liệu phía server được cập nhật
Trang 255.2.5 Vai trò của Framework
Bởi vì việc phân chia công việc được cho phép bởi thiết kế công nghệ JSF, việc pháttriển và sửa chữa các ứng dụng JSF có thể xử lý dễ dàng và nhanh chóng Các thành viêncủamột nhóm phát triển thông thường bao gồm một danh sách dưới đây Trong nhiềunhóm, các nhà phát triển riêng biệt đóng nhiều hơn một trong những vai trò dưới đây
PageAuthors: người sử dụng ngôn ngữ đánh dấu, giống như HTML, để tạo ra cáctrang cho ứng dụng Web Khi sử dụng framework công nghệ JSF, page authors sẽhầu hết sử dụng thư viện thẻ
Application Developers: người lập trình mô hình các thành phần, các xử lý sựkiện, các kiểm tra, và navigation của trang Application developer có thể cung cấpcác lớp helper mở rộng
Component Developers: người có kinh nghiệm lập trình UI và đề nghị tạo ra cácthành phần tùy biến sự dụng ngôn ngữ lập trình Những người này có thể tạo racác thành phần của riêng họ trực tiếp từ các lớp thành phần, hoặc họ có thể kế thừacác thành phần chuẩn cung cấp bởi công nghệ JSF
Tool Developer: người cung cấp các công cụ nhằm tạo ra công nghệ JSF xây dựng
UI phía server dễ dàng hơn Những thành viên chính của công nghệ JSF sẽ là pageauthors và application developers
5.2.6 Các thành phần chính
Như hầu hết các công nghệ, Faces có những quy định nhằm đưa ra các khái niệm cơbản cho những đặc điểm mà nó cung cấp Đó là những elements như các component UI,validator và rederer Có tám khái niệm khi phát triển các ứng dụng JSF
UI Component (còn gọi là một control hay đơn giản là component) : một đốitượng có trạng thái, được chứa trên server, cung cấp các chức năng cụ thể để
Trang 26tương tác với một người dùng cuối UI component là những JavaBean với cácthuộc tính, phương thức, sự kiện Chúng được tổ chức thành một cây cáccomponent thường hiển thị như một trang
Rederer: Trả lời cho việc hiển thị một UI component và trao đổi một dữ liệu nhậpcủa user vao giá trị của component Renderer có thể được thiết kế để làm việc vớimột hoặc nhiều UI component, và một UI component có thể tập hợp với nhiềurenderer khác nhau
Validator: Trả lời cho việc chắc chắn rằng giá trị nhập vào bởi user được chấpnhận Một hoặc nhiều validator có thể được tập hợp với một UI component
Backing beans: Các Java Bean xác định tập hợp các giá trị từ các UI component và
bổ sung các phương thức listener cho event Chúng cũng có thể nắm giữ các thamchiếu đến các UI component
Converter: Chuyển đổi một giá trị của component thành và từ một chuỗi để hiểnthị Một UI component có thể được tập hợp với một converter duy nhất
Event/listener: JSF sử dụng mô hình event/listener JavaBeans (cũng được sử dụngcho Swing) UI component (và những đối tượng khác) tạo ra các event, và cáclistener có thể đăng ký để xử lý các sự kiện
Messages: Thông tin hiển thị cho user Chỉ bất kỳ phần ứng dụng nào (backingbeans, validators, converter …) có thể tạo ra thông tin hoặc thông điệp lỗi nhằmhiển thị cho user
Navigation: Khả năng di chuyển từ một trang đến trang khác JSF có một hệ thốngnavigation mạnh mẽ tích hợp với những event listeners
5.2.7 Vòng đời của việc xử lý request
Trong khi bạn tìm hiểu frameword bên dưới xử lý request của Servlet API, sẽ phântích Faces xử lý request như thế nào Điều này cho phép bạn xây dựng các ứng dụng tốthơn bởi vì bạn sẽ biết chính xác cái gì được đặt ở đâu và khi nào