PDA

View Full Version : [DIS] JSP stateFull vs stateLess



nganminh
19-05-2003, 22:29
Chào mọi người!

JSP là một ngôn ngữ dùng trong phát triển Web có liên kết với cơ sở dữ liệu khá tốt. Ưu điểm của nó là có thể deploy ứng dụng lên các Web server hiểu Java.

Tuy vậy, đối với các ứng dụng kiểu stateLess thì tốc độ hiển thị nội dung rất kém! nếu không nói là ... rùa bò!!! Điều này là do các JSP, servlet phải mất rất nhiều thời gian để connect, tạo Connection với Database. Một giải pháp là sử dụng kiểu stateFull, nghĩa là lưu các Connection của client vào các biến session hay tương đương. Điều này sẽ khiến cho ứng dụng của bạn cải thiện được tốc độ rất nhiều.

Tất nhiên, còn nhiều yếu tố khác chi phối đến performance của APP server như: CPU speed, RAM, thiết kế, ... nhưng khi sử dụng chỉ một lần object Connection thì ứng dụng sẽ được cải thiện về tốc độ rất nhiều...

Hy vọng các bạn có được những ngày thư thái khi lập trình với JSP.

Thân :rolleyes:

applet
20-05-2003, 12:06
Hi,
Tôi cũng là một tín đồ, đã đang và sẽ sử dụng jsp. Nhưng tôi chỉ xin chú ý các bạn một điểm nhỏ sau:

Việc tìm host support jsp rất khó. Nếu có thì giá rất đắt.
Do đó, nếu bạn có ý định viết những ứng dụng web nhỏ nhỏ để đem bán thì đừng nên dùng jsp. Không có ai mua dau heehe


Bài viết được gửi bởi nganminh
Chào mọi người!

JSP là một ngôn ngữ dùng trong phát triển Web có liên kết với cơ sở dữ liệu khá tốt. Ưu điểm của nó là có thể deploy ứng dụng lên các Web server hiểu Java.

Tuy vậy, đối với các ứng dụng kiểu stateLess thì tốc độ hiển thị nội dung rất kém! nếu không nói là ... rùa bò!!! Điều này là do các JSP, servlet phải mất rất nhiều thời gian để connect, tạo Connection với Database. Một giải pháp là sử dụng kiểu stateFull, nghĩa là lưu các Connection của client vào các biến session hay tương đương. Điều này sẽ khiến cho ứng dụng của bạn cải thiện được tốc độ rất nhiều.

Tất nhiên, còn nhiều yếu tố khác chi phối đến performance của APP server như: CPU speed, RAM, thiết kế, ... nhưng khi sử dụng chỉ một lần object Connection thì ứng dụng sẽ được cải thiện về tốc độ rất nhiều...

Hy vọng các bạn có được những ngày thư thái khi lập trình với JSP.

Thân :rolleyes:

nganminh
20-05-2003, 14:54
Nếu các bạn chỉ viết các ứng dụng nho nhỏ thì chớ có dùng. Các server cho jsp thường là Unix cho nên Security rất cao nên tiền host rất đắt.
Tuy vậy JSP lại có khả năng áp dụng cho các ứng dụng có diện triển khai rộng, đòi hỏi multi-platform...

Thân

skull
24-05-2003, 00:46
Co le ban chua tim hieu ve ConnectionPool nen moi luu connection vao bien session, do la mot viec ko nen, khi ta co the tao ra nhieu va chia xe connection trong servlet bang connection Pool, toc do cai thien dang ngac nhien.
Sau nay khi ban lam Ejb, viec connect vao Database se do Ejb thuc hien, tot nhat la dung Entity Bean, khi do serlvet hoan toan chi dung de thuc hien chuc nang controller trong mo hinh MVC, va doi voi cac patter khac, servlet cung ko phai quan tam den viec ket noi voi database
chuc thanh cong

nganminh
26-05-2003, 19:50
Cảm ơn skull nhiều!

Bạn có thể nói thêm đôi chút kinh nghiệm khi dùng Connection Pooling. :D He he, mình cũng đang thí nghiệm với JSP thôi. Nên khi thấy lưu COnnection vào session làm cho tốc độ cải thiện đáng kể cho nên mình muốn chia sẻ một chút với mọi người thôi mà.

Cám ơn skull nhiều.

Hy vọng chúng ta sẽ còn nhiều dịp để trao đổi...

Thân

skull
29-05-2003, 00:42
http://www.coreservlets.com/

Ban co the vao day download book ve xem, co han 1 chuong ve JDBC1.0 va Connection Pool, tat nhien la JDBC 2.0 co ho tro nhieu hon ve Connection Pool, ko phai viet ConnectionPool nua. Thong thuong thi nguoi ta dung servlet de thuc hien viec xu ly tren server, con JSP chi dung cho presentation thoi.
Ban nen tim hieu mo hinh MVC - JSP model2, co the vao Javaworld search ra article dung vao chu de nay.
Sorry vi toi dang ban nen trao doi cu the hon duoc :-D

nganminh
31-05-2003, 19:30
Trang nay minh da vao vao roi, download book roi nhung chua co thoi gian de doc. Thanks skull...
Sau day co le minh se de thoi gian de doc cuon do.

--> To others:

I have found a very usefull site for JSP Developer:

http://www.servletsuit.com/

Wish U have a good resource to begin with JSP...

lol

thien_say
01-09-2003, 18:52
Ông nganminh nói nhảm về stateless và stateful rồi. Con cái vụ connection với database thì để tăng hiệu quả phải có cơ chế connection pooling. JDBC optional package chỉ chứa các interface cho connection pool, server nào hỗ trợ EJB (tức là có một EJB container) phải implements các interface này, developer không phải làm gì. Tự viết một pool cho ứng dụng của mình cũng không phải là khó.

nganminh
01-09-2003, 23:54
He he

thien_say noi cung phai, co dieu ban khong nghi rang cai do co ich cho nhung nguoi moi bat dau voi JSP sao?

Ai ma chang biet pooling khi viet JSP thanh thao roi.

Khong hoc tu nhung cai sai thi lam sao co cai dung ngay duoc...!

Xin loi neu bai viet do lam thien_say phat y nhe...

thien_say
03-09-2003, 18:50
Tức điên lên, gõ mãi mới xong, ấn Post nó lại đòi vào lại password rồi nó xoá sạch? Công toi.
Đề nghị ông admin tăng session timeout.

nbs191
03-09-2003, 20:58
Professional Java Server Programming - Chapter 9: Connection Pools

Host : http://www.lunarpages.com .

Have a good time :D

bill
04-09-2003, 06:22
Cách tốt nhất đúng là dùng Entity Bean để abstract lớp DB connection (legacy và rdbms system). Khi đó clients chỉ giao tiếp với các EJB và ứng dụng có khả năng scalable rất lớn(connection sharing, cache, pooling...). Nhân đây, bạn mình có bài toán sau: "De viet mot webProject trong do ket qua tim kiem gom rat nhieu ban ghi. Hien tai de dat cai ket qua nay vao session. Nhung de cam thay neu dat vao session nhu vay thi qua lon. Neu nhieu nhieu session duoc tao va so connection thuc hien tim kiem nhieu thi Server (hay webApplicaton) cua de "ngoeo" mat. Cac huynh cho loi khuyen duoc khong."
Các bạn cho ý kiến nhá. Xin cám ơn trước.

thien_say
05-09-2003, 16:16
Nếu bound nhiều thứ nặng nề vào session thì rõ ràng ứng dụng không scalable mà nếu server hỗ trợ cluster thì việc truyền chúng cũng cũng vất vả cho các server. Bạn nên cân nhắc việc tìm kiếm lại mỗi khi cần dùng vì như thế mới câp nhật được những thay đổi (giả sử từ một ai đó hay từ một ứng dụng khác ngoài ứng dụng của bạn). Nếu việc tìm kiếm là rất mất thời gian và bạn muốn cache kết quả tìm kiếm lại thì thay vì bound vào session bạn có thể dùng stateful session EJB vì server có cơ chế pool cho session bean sẽ passivate những bean lâu không sử dụng, giảm tải cho server.

nganminh
03-10-2003, 15:45
He he,

Xin chào,

Nếu bạn gặp phải vấn đề này thì nên phân trang kết quả tìm kiếm ra. Khoảng 20 bản ghi / trang chẳng hạn.

Hy vọng bài viết có ích cho bạn!!!


Cách tốt nhất đúng là dùng Entity Bean để abstract lớp DB connection (legacy và rdbms system). Khi đó clients chỉ giao tiếp với các EJB và ứng dụng có khả năng scalable rất lớn(connection sharing, cache, pooling...). Nhân đây, bạn mình có bài toán sau: "De viet mot webProject trong do ket qua tim kiem gom rat nhieu ban ghi. Hien tai de dat cai ket qua nay vao session. Nhung de cam thay neu dat vao session nhu vay thi qua lon. Neu nhieu nhieu session duoc tao va so connection thuc hien tim kiem nhieu thi Server (hay webApplicaton) cua de "ngoeo" mat. Cac huynh cho loi khuyen duoc khong."
Các bạn cho ý kiến nhá. Xin cám ơn trước.