Nếu giá trị của biến kịch bản phụ thuộc vào đối tượng hiện tại trong tag handler thì nó có thể truy xuất đối tượng này bằng cách dùng pageContext.setAttributename, scope.. Các giá trị củ
Trang 1custom tag phải xác định “tên” của biến đối tượng; Tên này có thể truy xuất bằng cách gọi phương thức get[Attribute] của thuộc tính (xem 2) Các tag có thuộc tính)
Nếu giá trị của biến kịch bản phụ thuộc vào đối tượng hiện tại trong tag handler thì nó có thể truy xuất đối tượng này bằng cách dùng pageContext.setAttribute(name, scope) Các giá trị của tham số scope được tóm tắc trong bảng sau:
Phạm vi Có thể truy cập từ Thời gian sống
page Trang hiện hành Cho tới khi lời đáp gởi trở lại user hoặc yêu cầu được chuyển tới trang mới
request Trang hiện hành và bất kỳ trang được include hay forward nào
Cho tới khi lời đáp gởi trở lại user
session Yêu cầu hiện hành và bất kỳ yêu cầu tiếp theo trong cùng browser
Đời sống của một phiên làm việc (session)
application Bất kỳ yêu cầu hiện tại và tương lai nào từ cùng một ứng dụng
Đời sống của một ứng dụng
Ngoài việc cài đặt giá trị của biến trong tag handler, chúng ta còn phải định nghĩa một lớp dẫn xuất từ lớp TagExtrInfo Lớp này cung cấp thông tin cho JSP container về đặt tính của của biến kịch bản, phải cài đặt phương thức getVariableInfo để trả về một mảng các đối tượng VariableInfo chứa các thông tin sau: tên biến, lớp của biến, liệu biến này có tham khảo tới một giá trị đối tượng mới hay đã có, tính sẳn dùng của biến này
Trang 2Bảng sau mô tả tính sẳn dùng của biến kịch bản và các phương thức để xác lập và xác lập lại giá trị của biến
Value Availability Methods
NESTED Giữa start tag và end tag Trong doInitBody và doAfterBody đối với tag handler cài đặt BodyTag; ngược lại trong doStartTag
AT_BEGIN Từ start tag cho đến cuối trang Trong doInitBody, doAfterBody,
và doEndTag đối với tag handler cài đặt BodyTag; ngược lại trong doStartTag và doEndTag
AT_END Sau end tag cho tới cuối trang Trong doEndTag
Lớp tag handler sau lấy dữ liệu từ JNDI lookup được lưu trữ như là thuộc tính của đối tượng pageContext cùng với tên của biến kịch bản
Code 30: LookupTag.java
public LookupTag extends TagSupport {
private String type;
private String name;
public void setName(String name) {
this.name = name;
}
public void setType(String type) {
this type = type;
}
public int doStartTag() {
Trang 3return SKIP_BODY;
}
public int doEndTag() throws JspException {
try {
InitialContext context = new InitialContext();
Object obj = (Object)context.lookup(name);
Code 31: LookupTagTei.java
public class LookupTagTEI extends TagExtraInfo {
public VariableInfo[] getVariableInfo(TagData data) {
Trang 5<%@ taglib uri = "lookup.tld" prefix = "legiang" %>
<! dùng trong body của JSP >
<legiang:lookup id = "sv" type = "UserTransaction"
name = "java:comp/ UserTransaction ">
<! Giả sử trong lớp UserTransaction có phương thức begin >
<% sv.begin() %>
4 Tag handler được triệu gọi như thế nào?
Giao tiếp Tag định nghĩa một qui ước truyền thông cơ bản giữa tag handler và lớp cài đặt trang JSP Giao tiếp này định nghĩa chu kỳ sống và các phương thức được triệu gọi khi gặp phải start tag và end tag của một action
Lớp cài đặt trang JSP triệu gọi các phương thức setPageContext, setParent, và các phương thức cài đặt thuộc tính trước khi gọi phương thức doStartTag Lớp này
Trang 6cũng bảo đảm rằng phương thức release sẽ được gọi trong tag handler trước khi kết thúc trang Ví dụ sau thực hiện từng bước cách gọi tag handler
Code 34: Cách thực hiện tag handler không có BodyContent
ATag t = new ATag();
setBodyContent: tạo nội dung của thân tag và thêm vào tag handler
doInitBody: được gọi trước khi định trị thân của tag
DoAfterBody: được gọi trước khi định trị thân của tag
Trang 7/* thực hiện các khởi tạo cần thiết sau khi nội dung của thân được gán */
Phần II: Phân Tích – Thiết Kế – Cài Đặt
Chương IV: PHÂN TÍCH – THIẾT KẾ
I Phân Tích
1 Đặt vấn đề
Xuất phát từ nhu cầu thực tế trong quản lý công việc ở cacù công ty hiện nay còn nhiều nhược điểm, việc người quản lý ở cấp càng cao càng không nắm bắt thông tin, không trực tiếp quản lý được tốc độ làm việc của nhân viên mình là khá phổ biến Hơn nữa trong thời buổi kinh tế thị trường thời buổi của công nghệ thông tin mỗi con người có quá nhiều công việc phải làm, họ không có thời gian rảnh rỗi để ngồi làm báo cáo rồi cuối tuần đem nộp cho quản lý, họ muốn được ở nhà nhưng vẫn biết công việc của mình phải làm trong ngày là gì?, họ muốn có một khoảng thời gian dù ít ỏi để tranh thủ nghỉ ngơi
Trang 8Để một phần nào tháo gỡ các khó khăn, nhược điểm và xuất phát từ các yêu cầu thực tế của một số công ty chương trình QUẢN LÝ CÔNG VIỆC TRÊN WEB đã được ra đời Trong khuôn khổ của một đồ tốt nghiệp đại học do thời gian, các kiến thức nhất là về chuyên môn nghiệp vụ còn hạn chế chắc chắn không tránh khỏi những sai sót Song với sự nổ lực hết sức nhằm hoàn thành tốt công việc nhưng do thời gian nghiên cứu thực hiện không nhiều, lượng công việc tương đối lớn, trang thiết bị, tài liệu chưa đầy đủ và trình độ hạn chế cho nên chắc chắn đề tài này sẽ có ít nhiều khiếm khuyết từ thực tế đến ý tưởng lập trình, mong được
sự lượng thứ và chỉ bảo thêm của các Thầy, Cô
Rất mong nhận được sự đóng góp ý kiến chân thành từ thầy cô và các bạn để chương trình hoàn thiện hơn sớm được đưa vào sử dụng thực tế
2 Định nghĩa các yêu cầu
• Quản Lý
- Phân công công việc cho từng nhân viên
- Kiểm tra tiến độ thực hiện
- Đánh giá công việc
Trang 9- Báo cáo tiến độ thực hiện theo ngày
- Đề xuất cách giải quyết công việc theo ngày
- Đóng góp ý kiến xây dựng công ty
- Báo cáo công việc thực hiện xong
- Xem các đánh giá của bên quản lý
Trang 10Phân rã từ xử lý 9_Tong Hop Bao Cao
Phân rã từ xử lý 13_Bao Cao Tien Do CV
Phân rã từ xử lý 16_ Cap Nhat Permission
Phân rã từ xử lý 19_ Cap Nhat User
Phân rã từ xử lý 20_Gan Quyen
5 Mô hình dữ liệu quan niệm
Trang 11Thêm công việc:
Nhập: TenCV & NoiDung & MaDA
Xuất: Thông báo đã thêm / thông báo lỗi
Sữa công việc:
Nhập: TenCV | NoiDung | MaDA | DaXong
Xuất: Thông báo đã sữa / thông báo lỗi
Xoá công việc:
Nhập: MaCV
Xuất: Thông báo đã xoá / thông báo lỗi
Phân công công việc
Nhập: MaNV & một hoặc nhiều MaCV & NgayBD, NgayKT Xuất: Thông báo đã phân công / thông báo lỗi
Đánh giá công việc
Nhập: MaDG vào bảng Works
Xuất: Thông báo đã đánh giá / thông báo lỗi
Kiểm tra tiến độ công việc
Chỉ hiện thị các báo cáo tiến độ của nhân viên
Thiết lập chế độ làm việc
Nhập: MaNV & MaCV & ThietLap vào bảng PhanCong Xuất: Thông báo đã chuyển giao công việc / thông báo lỗi Báo cáo tiến độ công việc
Nhập: MaCV & TienDo & Ngay | GhiChu | Kèm tập tin Xuất: Thông báo báo cáo đã chuyển đi / thông báo lỗi
Trang 12Thay đổi mật khẩu
Nhập: Usename & Password củ | Password & Confirm Password mới
Xuất: Thông báo đã đổi mật khẩu / thông báo lỗi
Thống kê công việc
Thống kê công việc theo ba tiêu chuẩn:
+ Từ ngày đến ngày
+ Theo đánh giá (xếp loại)
+ theo đề án
Làm tươi cơ sở dữ liệu
Nhập: Tên CSDL mới cần phục hồi khi bị hỏng & làm tươi từ ngày nào đến ngày nào | từ tháng nào đến tháng nào | năm nào
Xuất: Thông báo đã làm tươi CSDL / thông báo lỗi
Phục hồi cơ sở dữ liệu
Nhập: Tên CSDL cần phục hồi (đã có từ làm tươi CSDL)
Xuất: Thông báo đã phục hồi hoàn toàn / thông báo lỗi
c) Một số giải thuật được thể hiện bàng lưu đồ
Thêm công việc
Phân công công việc
Thống kê công việc
Làm tươi cơ sở dữ liệu
2 Thiết kế cơ sở dữ liệu
a) Mô hình dữ liệu vật lý
Sơ đồ thực thể kết hợp (ERD):
Trang 13b) Bảng mô tả chi tiết
Table Vùng Diễn Giải Kiểu Kích Thước Giới hạn Giá Trị Giá Trị Ngầm định Ràng buộc
(FK)
NOI DUNG Nội Dung Text 50
NGAY Ngày Date
time >=
ngày hiện tại ngày hiện tại
FILES MAFILE Mã File Int >=1 Khoá Chính (PK)
TENFILE Tên File Text 30
FILESIZE Kích thước File Long
CONTENTTYPE Loại Nội Dung File Được Tải Lên Server Text 30
Trang 14LAI Công Việc Sẽ Làm Trong Tuần Tới
DEXUAT Đề Xuất Text 80
DANH
GIA MADG Mã Đánh Giá Int >=1 Khoá Chính (PK)
PHAN
HOI Phản Hồi Text 50
NHAN
VIEN MANV Mã Nhân Viên Int >=1 Khoá Chính (PK)
MA
GROUP Mã Nhóm Int >=1 Khoá Ngoại (FK)
TENNV Tên Nhân Viên Text 25
NGAY
SINH Ngày Sinh Date
Trang 15time < ngày hiện tại
DIACHI Địa chỉ Text 50
PHAI Phái Bit Là số nguyên 0 hoặc 1
PHONE Điện Thoại Text 9
TIENDO Tiến Độ Float 4
NGAY Ngày Date
time >=
ngày hiện tại ngày hiện tại
GHICHU Ghi Chú Text 80
DEXUAT Đề Xuất Ý Kiến Text 50
Chính (PK)
MADA Mã Đề Aùn Int >=1 Khố Ngoại (FK)
Trang 16MADG Mã Đánh Giá Int >=1 Khoá Ngoại (FK) TENCV Tên Công Việc Text 20
NOI
DUNG Nội Dung Text 100
LOAI MAXL Mã Xếp Loại Int >=1 Khoá Chính (PK)
XEPLOAI Xếp Loại Text 30
GHICHU Ghi Chú Text 80
NGAYBD Ngày Bắt Đầu Date
time NgayBD > Ngay KT Ngày hiện tại
THIET
Trang 17NGAYKT Ngày Kết Thúc Date
time NgayKT > Ngay BD > Ngày hiện tại
GROUP Trưởng Nhóm Text 9
NGAYNC Ngày Nhận Chức Date
TENPER Tên Quyền Text 20
GHICHU Ghi Chú Text 80
c) Các ràng buộc toàn vẹn
(RB1) MAGY là khoá chính của GOPY
(RB2) MAFILE là khoá chính của FILES
Trang 18(RB3) MABCTH là khoá chính của BAOCAOTONGHOP
(RB4) MADG là khoá chính của DANHGIA
(RB5) MANV là khoá chính của NHANVIEN
(RB6) MABCN là khoá chính của BAOCAONGAY
(RB7) MACV là khoá chính của WORKS
(RB8) MADA là khoá chính của DEAN
(RB9) MAXL là khoá chính của XEPLOAI
(RB10) MANV&MACV là khoá chính của PHANCONG
(RB11) MAPER là khoá chính của PERMISSION
(RB12) MAGROUP là khoá chính của GROUPS
(RB13) MAPER & MAGROUP là khoá chính của GROUP_PER
(RB14) MANV là khoá ngoại của GOPY tham chiếu từ NHANVIEN
(RB15) MABC là khoá ngoại của FILES tham chiếu từ BAOCAONGAY
(RB16) MACV là khóa ngoại của BAOCAOTONGHOP tham chiếu từ WORKS (RB17) MAXL là khoá ngoại của DANHGIA tham chiếu từ XEPLOAI
(RB18) MAGROUP là khoá ngoại của NHANVIEN tham chiếu từ GROUPS (RB19) MACV là khoá ngoại của BAOCAONGAY tham chiếu từ WORKS (RB20) MADG là khoá ngoại của WORKS tham chiếu từ DANHGIA
(RB21) MADA là khoá ngoại của WORKS tham chiếu từ DEAN
(RB22) MANV là khoá ngoại của PHANCONG tham chiếu từ NHANVIEN (RB23) MACV là khoá ngoại của PHANCONG tham chiếu từ WORKS
(RB24) MAPER & MAGROUP là khoá ngoại của GROUP_PER tham chiếu từ GROUPS & PERMISSION
Trang 19(RB25) Ngày nhận chức > Ngày sinh + 24
(RB26) Ngày kết thúc >= Ngày bắt đầu
(RB27) Một công việc có thể có nhiều nhân viên nhưng tại một thời điểm chỉ có một nhân viên thực hiện một công việc
Loai Groups Groups
_Per Permissions DeAn
Trang 20Sơ đồ cấu trúc chương trình
4 Thiết kế giao diện
Các Site map (thay thế cho sơ đồ dịch chuyển trạng thái)
Chương V : TRIỂN KHAI ỨNG DỤNG
I Các phần mềm cần thiết
Trang 21Đây là ứng dụng độc lập nền nên nó có thể chạy trên các hệ điều hành khác nhau như các hệ thống Windows, Unix, … Do đó chúng ta có thể cài đặt hệ điều hành thuộc một trong các hệ thống trên và các phần mềm sau:
- Jakarta-Tomcat là một Servlet/JSP container Thật ra theo lý thuyết, ứng dụng này có thể chạy trên bất kỳ container hay web server nào có hổ trợ Servlet/JSP nhưng chúng tôi chưa thử nghiệm trên container khác Jakarta-Tomcat 3.1
- JDK 1.2 trở lên
- MySQL Server 3.23.27 bản beta Hiện nay đã ra bản 4.0
- JDBC Driver loại bốn hổ trợ cho MySQL Server: mm.msql-2.0.4
- Xalan và Xerces để chuyển XML thành HTML bằng cách sử dụng XSLT
- Một trong các web browser sau: Netscape, Inernet Explorer, Opera tất cả
từ 4.0 trở lên Ứng dụng này đã thử nghiệm trên các web browser này
- VietKey hoặc bất kỳ bộ gõ tiếng việt nào khác
II Triển khai ứng dụng web
Ứng dụng web (ứng dụng server-side java) là một tập các trang JSPs, Servlets, HTML và các tài nguyên khác được gói gọn trong một gói duy nhất và chạy trên nhiều platform từ nhiều nhà sản xuất khác nhau Ứng dụng Web được xác định trong một đường dẫn đặt biệt ở web server
Một ứng dụng web có thể gồm các thành phần sau:
- JavaServer Pages
- Servlets
- Các lớp tiện ích
Trang 22- Các tài như xml, html, …
- Enterprise JavaBean (EJB) đối với các ứng dụng xử lý phân tán
- Các media như images, sounds, …
- Các đối tượng client như javabeans, applets, các lớp, …
Mô hình hoạt động của The Web Work The Web Work hoạt động dựa trên mô hình ba lớp (3 layer) Sau đây là mô hình ba lớp tổng quát của ứng dụng Web
Trên nền Java hổ trợ cả hai kỷ thuật xử lý Web động là Servlet và JSP Do đó với từng kỷ thuật tôi có chi tiết hai mô hình (có thể nhiều hơn) dựa trên mô hình ba lớp tổng quát này và gọi là Kiến Trúc Mô Hình Một và Mô Hình Hai
Ứng dụng sử dụng cả hai mô hình web trên nền Java là Kiến Trúc Mô Hình Một
và Mô Hình Hai mà đã và đang còn tranh luận trên các sites nỗi tiếng như javaworld.com, developer.com, weblogic.com
Trong mô hình một, một trang JSP đảm nhận cả việc xử lý yêu cầu và trả về các kết quả cho client Ở đây vẫn có sự tách biệt giữa xử lý và hiện thị bởi vì tất cả sự truy cập dữ liệu đều được Beans thực hiện Mô hình này thích hợp cho các ứng dụng đơn gian, thích hợp với các trang JSP có nhiều mã HTML Xem hình vẽ sau:
Trong mô hình kiến trúc hai, đó là sự kết hợp cả hai kỷ thuật xử lý web động là Servlet và JSP Mô hình này rất thích với với các ứng dụng có xử lý phức tạp Ở đây, Servlets hoạt động như một trạm điều khiển (controller) chịu trách nhiệm xử
lý các yêu cầu và khởi tạo các components (Beans, Custom Tag) cho JSP sử dụng Mô hình này tách phần xử lý và trình bày rỏ ràng nhất
Trang 23III Hướng dẫn sử dụng
Sau khi đã cài đặt ứng dụng, bạn mở browser, trong address bar gõ địa chỉ: htttp://servername:port/work/html/showLogin.html
- servername: tên server của bạn, trên máy cục bộ thường là localhost
- port: số cổng mà web server đang mở Nếu số port là 80 thì thông số port không cần nhập
Nếu bạn sử dụng thường xuyên ứng dụng, bạn nên gán giá trị mật định cho browser với địa chỉ trên Khi bạn mở browser, ứng dụng tự động được gọi mà bạn không cần phải gõ địa chỉ trên address bar Thực hiện công việc này trong ba web browser: Internet Explorer, Netscape, Opera như sau:
- Internet Explorer:
Vào Tools menu, chọn Internet Options Trong hộp thoại Internet Options, chọn General tab, trong khung Home page có Address textbox cho phép bạn gõ địa chỉ trên
- Netscape:
Vào Edit menu, chọn Preferences… Trong hộp thoại Preferences, chọn navigator trong hộp thoại category, hiện ra một trang Navigator, chọn Home page button, trong khung Home Page có Location textbox nhập vào địa chỉ trên
- Opera:
Vào Navigation menu, chọn Set home page…, hiện ra một input box cho chép bạn nhập địa chỉ mới vào
KẾT LUẬN