text:
Đánh giá - Góp ý
Nguồn tham khảo
Đánh dấu TL ưa thích
Nhặt tạm vào giỏ
Loại: Giáo trình-Bài giảng-Giáo án
Tác giả:
Đinh Như Huy
Nguồn gốc:
Chưa xác định, 2008
Từ khoá: môn toán môn đại số môn giải tích giáo án
Chuyên ngành:
/ Giáo dục phổ thông / Trung học phổ thông / Lớp 11
Sơ lược:
Giáo án môn Đại số và Giải tích lớp 11, ban khoa học Cơ Bản A.
Tổng kích thước gói: 365.0 kB
Nguồn tham khảo:
Toán bồi dưỡng học sinh giỏi THCS
Phụ đạo Toán 7
Ôn tập môn toán 9
Hình học 7
Đại số 7
Lời giải và bình luận đề thi các tỉnh, các trường đại học 2009-2010
Bồi dưỡng học sinh giỏi Toán 9 năm học 2010 - 2011
Tài liệu bồi dưỡng HSG môn toán lớp 5
Toán 9 - Ôn tập vào 10
Bồi dưỡng học sinh lớp 5
Bồi dưỡng học sinh giỏi toán 8
Chuyên đề Hệ phương trình
Ôn thi vào lớp 10 – môn toán
Thiết kế bài giảng Toán 9 - Tập 2
20 Chuyên đề bồi dưỡng toán 8
Thiết kế bài giảng Toán 9 - Tập 1
Một số phương pháp xác định công thức tổng quát của dãy số
Tài liệu ôn thi vào các lớp chuyên 2010-2011 môn Toán
Một số bài toán chọn lọc bồi dưỡng học sinh giỏi môn toán
Luyện thi vào THPT năm học 2008 – 2009
Phương Pháp Tọa Độ Trong Mặt Phẳng
Tài liệu ôn thi Tốt nghiệp 12 (cơ bản)
Ôn tập Tốt nghiệp Môn Toán 2012
Chủ đề tự chọn môn toán 6 - Nâng cao
Giáo án Dạy thêm toán 7
Ôn luyện Toán 9
Đại số 8
Giáo án dạy thêm Toán 7 – Lớp yếu
Bài tập Giải tích 12
Kinh nghiệm giải Toán trên máy tính Casio II
Toán 10 (cơ bản)
Toán 10 (nâng cao)
Tài liệu luyện thi đại học môn toán
Khảo sát hàm số và các dạng toán thường gặp
Toán 7
Tài liệu dạy ôn tập cho học sinh lớp 6 lên lớp 7
Toán tự chọn 10
Toán 5
Các lí thuyết cơ bản về tích phân
Giải tích 12 (cơ bản)
Hướng dẫn ôn tập thi tốt nghiệp môn toán 2009 - 2010
Tóm tắt lí thuyết và phương pháp giải toán 12
Tuyển tập Đại số tổ hợp
Ôn tập Toán 9
Toán 7 - Đại số
Toán 5: Hình tam giác
Tích phân & ứng dụng
Giáo án Bồi dưỡng học sinh giỏi toán 7
Một số chuyên đề nâng cao số học 6
Đề thi Học sinh giỏi Toán 7
Phương pháp giải các bài toán hình giải tích Oxy trong kỳ thi TSĐH
Chuyên đề Nguyên hàm – Tích phân
Bộ đề thi học sinh giỏi bậc tiểu học tỉnh Quảng Trị
Một số đề thi học sinh giỏi toán 9
Đề thi học sinh giỏi toán 8
Tuyển tập đề thi học sinh giỏi các tỉnh thành 2008-2009
Tuyển tập các đề tuyển sinh THPT và chuyên
30 bài hình 9
Chuyên đề Bất đẳng thức luyện thi đại học
Bộ đề ôn thi THPH
50 đề thi học sinh giỏi toán 9
Tài liệu ôn thi vào bậc THPT
500 bài toán ôn thi vào lớp 10
Đề tuyển sinh vào lớp 10 Hà Nội
Đề tuyển sinh vào lớp 10 chuyên
Hệ phương trình và các dạng toán liên quan
Đề thi tuyển sinh lớp 10 THPT chuyên ngoại ngữ
Phương trình lượng giác
40 đề thi vào lớp 10 (có đáp án)
Bộ đề luyện thi Đại học và Cao đẳng môn Toán – 2009
Phương pháp giải toán phương trình vô tỷ
Các đề thi học sinh giỏi toán lớp 12 Tp.HCM
Ứng dụng của vecto trong giải toán cực trị
Đề luyện thi vào lớp 10 THPT
Chuyên đề Phương trình nghiệm nguyên
Chuyên đề ôn thi toán đại học năm 2011
Bài tập hình học 9
16 Đề, Đáp Toán thi vào THPT
Chuyên đề Ứng dụng của hệ thức Vi-ét trong giải toán
Đề thi thử đại học, cao đẳng 2012
Các dạng Toán về quan hệ vuông góc trong không gian
Các bài toán đại số trong các cuộc thi Olympic Toán
Đại số tổ hợp
Bài giảng Tích phân
30 đề thi học sinh giỏi toán cấp 2
Các lỗi cơ bản khi giải toán
Tuyển tập đề thi IMO
128 đề thi vào lớp 10
Một số đề luyện thi đại học môn toán
Tra cứu lý thuyết toán 10,11,12
Đề thi và đáp án Toán thi ĐH 2008
Một số phương pháp tìm giá trị nhỏ nhất, giá trị lớn nhất của một biểu thức đại số
Tự Ôn Thi Đại Học Môn Toán
Đề thi học sinh giỏi môn toán toàn quốc 1962-2005
Chuyên đề toán THCS
16 đề luyện thi vào lớp 10
Đề thi và đáp án thi toán tuyển sinh lớp 10
Chuyên đề nhị thức Newton
Phương pháp giảng dạy hình học
Kỷ yếu HN Nghiên cứu và giảng dạy toán học phổ thông
Chuyên đề Giá trị nhỏ nhất - Giá trị lớn nhất
Giúp học sinh phát hiện và tránh sai lầm trong khi giải toán về căn bậc hai
+ Ngoài số lượt download cho phép mỗi ngày, bạn có thể yêu cầu thêm bằng cách soạn tin:
EK D <username>
Nhắn tới các số 8577, 8677, 8777.
Chú ý xem hướng dẫn.
Tự động
TELEX
VNI
VIQR
VIQR*
Tắt
Chính tả
Kiểu cũ

markdown:
|
|
Sử dụng tốt nhất với FireFox(+), Chrome(+), Safari(+), Opera(+), IE7(-), hỗ trợ iPhone, Android, Nokia..
![]()
|
|
Thẻ thư mục..
|
|
|
|
+ Tại sao không đăng ký được?
+ Tại sao click download lại bị nhắc đăng nhập? Tại sao không download được?
+ Lỗi download 99% vì sao?
Hãy xem
|
|


text:
Mô tả BST Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng
Thư viện eLib trân trọng gửi tới các bạn bộ Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng. Chúng tôi đã chọn lọc những đề kiểm tra tiêu biểu nhất để giới thiệu đến các bạn học sinh. Hy vọng, bộ đề kiểm tra này sẽ giúp ích nhiều cho việc ôn tập của các bạn. Chúc các bạn thành công!
Tóm tắt Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng
Đây là một đoạn trích hay trong bộ sưu tập Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng. Mời quý thầy cô và các em học sinh cùng tham khảo:
Câu 1(2đ) Phát biểu định nghĩa và công thức tính điện thế tại một điểm trong điện trường, nêu rõ các ý nghĩa đại lượng?
Câu 2(3đ) Điện năng tiêu thụ của một đoạn mạch được xác định như thế nào? Viết công thức tính điện năng tiêu thụ của một đoạn mạch khi có dòng điện chạy qua và nêu rõ các ý nghĩa đại lượng? Áp dụng: Một bóng đèn có điện trở 12 Ω mắc một mạch điện có cường độ 0,5A chạy qua. Tính điện năng bóng đèn tiêu thụ trong thời gian 1 phút?
Câu 3(2đ) Cho 2 điện tích q1 = 4.10-9C, q2 = 2.10-9C đặt tại A, B trong không khí. AB = 4cm. Xác định vectơ cường độ điện trường tại điểm C cách A 6cm, cách B 2cm.
Câu 4:(3đ) Cho mạch điện như hình vẽ: R1 Với: hai nguồn điện giống hệt nhau có: = 6V, r = 0.5Ω R2
R1= 2Ω, R2= 3Ω
a) Tính cường độ dòng điện mạch chính?
b) Tính công suất điện của mỗi điện trở?
c) Thay R2 bằng một bóng đèn Đ: 6V – 6W thì đèn sáng bình thường không?

markdown:
![](http://static.elib.tlvnimg.com/tlver2013/3/templates/version1/edu/images/graphics/like24x24.png)
![](http://static.elib.tlvnimg.com/tlver2013/3/templates/version1/edu/images/graphics/muiten36x20.png)
![ Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng](http://image.elib.tlvnimg.com/document/thumbnail/2015/20150918/kyniemchieumua_09/240x160/2027882385.jpg)
##
Mô tả BST Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng
Thư viện eLib trân trọng gửi tới các bạn bộ Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng. Chúng tôi đã chọn lọc những đề kiểm tra tiêu biểu nhất để giới thiệu đến các bạn học sinh. Hy vọng, bộ đề kiểm tra này sẽ giúp ích nhiều cho việc ôn tập của các bạn. Chúc các bạn thành công!
[Đề thi](http://www.elib.vn/de-thi/)» [Đề kiểm tra](http://www.elib.vn/de-thi/de-kiem-tra/) ![](http://static.elib.tlvnimg.com/tlver2013/3/templates/version1/edu/images/graphics/muiten100x40.jpg)
##
Tóm tắt Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng
Đây là một đoạn trích hay trong bộ sưu tập
**Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng**. Mời quý thầy cô và các em học sinh cùng tham khảo:
Thư viện eLib mong rằng bộ sưu tập
**Câu 1**(2đ) Phát biểu định nghĩa và công thức tính điện thế tại một điểm trong điện trường, nêu rõ các ý nghĩa đại lượng?
**Câu 2**(3đ) Điện năng tiêu thụ của một đoạn mạch được xác định như thế nào? Viết công thức tính điện năng tiêu thụ của một đoạn mạch khi có dòng điện chạy qua và nêu rõ các ý nghĩa đại lượng? Áp dụng: Một bóng đèn có điện trở 12 Ω mắc một mạch điện có cường độ 0,5A chạy qua. Tính điện năng bóng đèn tiêu thụ trong thời gian 1 phút?
**Câu 3**(2đ) Cho 2 điện tích q1 = 4.10-9C, q2 = 2.10-9C đặt tại A, B trong không khí. AB = 4cm. Xác định vectơ cường độ điện trường tại điểm C cách A 6cm, cách B 2cm.
**Câu 4**:(3đ) Cho mạch điện như hình vẽ: R1 Với: hai nguồn điện giống hệt nhau có: = 6V, r = 0.5Ω R2
R1= 2Ω, R2= 3Ω
a) Tính cường độ dòng điện mạch chính?
b) Tính công suất điện của mỗi điện trở?
c) Thay R2 bằng một bóng đèn Đ: 6V – 6W thì đèn sáng bình thường không?
**Đề kiểm tra 1 tiết môn Vật lý lớp 11 đề số 1 năm 2012-2013 trường THPT Phan Đình Phùng**sẽ hữu ích cho quý thầy cô và các bạn học sinh.

WARC-Type: response

Content-Type: application/http; msgtype=response

Connection: close

Server: Apache/2.2.15 (CentOS)

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Vary: Accept-Encoding

Content-Type: text/html; charset=UTF-8


text:
Giới thiệu
Người dùng hiện nay mong đợi các ứng dụng linh động, nhanh chóng có thể truy cập được từ trang web. Loạt bài này cho bạn thấy cách phát triển các ứng dụng web theo hướng sự kiện bằng cách sử dụng các kỹ thuật Reverse Ajax. Phần 1 đã giới thiệu Reverse Ajax, polling, streaming, Comet, long-polling. Bạn đã tìm hiểu vì sao Comet sử dụng HTTP long-polling là cách tốt nhất để thực hiện Reverse Ajax, khi hiện nay tất cả các trình duyệt đều hỗ trợ nó. Phần 2 đã mô tả cách thực hiện Reverse Ajax bằng cách sử dụng WebSockets. Các ví dụ mã giúp minh họa các ràng buộc WebSockets, FlashSocket bên phía máy chủ, các dịch vụ phạm vi-yêu cầu, và cách để tạm dừng các yêu cầu long-lived.
Trong bài này, hãy đi chi tiết về cách sử dụng Comet và WebSockets trong ứng dụng web của bạn với các API và các web container khác nhau (Servlet 3.0 và Continuations của Jetty). Hãy tìm hiểu cách sử dụng Comet và WebSockets một cách trong suốt bằng cách sử dụng các thư viện trừu tượng hóa, chẳng hạn như Socket.IO. Socket.IO sử dụng tính năng nhận dạng để quyết định xem kết nối đó sẽ được thiết lập với WebSocket, AJAX long-polling, Flash và v.v hay không.
Bạn có thể tải về mã nguồn được sử dụng trong bài này.
Điều kiện tiên quyết
Tốt nhất bạn nên biết trước về JavaScript và Java. Các ví dụ trong bài này đã được xây dựng bằng cách sử dụng Google Guice, một framework tích hợp phụ thuộc (dependency injection framework) được viết bằng Java. Để làm theo cùng với bài này, bạn nên hiểu rõ các khái niệm về dependency injection framework, chẳng hạn như Guice, Spring hoặc Pico.
Để chạy được các ví dụ trong bài này, bạn cần có phiên bản mới nhất của Maven và JDK (xem phần Tài nguyên).
Các giải pháp máy chủ cho Comet và WebSocket
Ở Phần 1, bạn đã tìm hiểu về phương pháp Comet (long-polling hay streaming) có khả năng yêu cầu máy chủ có thể tạm dừng một request và tiếp tục hay hoàn thành nó sau một thời gian nắm giữ. Phần 2 đã mô tả cách mà máy chủ cần sử dụng tính năng I/O non-blocking như thế nào để xử lý nhiều kết nối và chúng chỉ sử dụng các luồng để phục vụ các yêu cầu (mô hình luồng cho mỗi yêu cầu). Bạn cũng đã biết rằng việc sử dụng WebSocket phụ thuộc vào máy chủ và không phải tất cả các máy chủ đều hỗ trợ WebSockets.
Phần này sẽ cho bạn thấy cách sử dụng Comet và WebSockets, nếu có, trên các máy chủ web Jetty, Tomcat và Grizzly. Mã nguồn được cung cấp cùng với bài này có một ứng dụng web chat (trò chuyện trực tuyến) là ví dụ mẫu cho Jetty và Tomcat. Phần này cũng thảo luận về các API hỗ trợ cho các máy chủ ứng dụng sau: Jboss, Glassfish và WebSphere.
Jetty
Jetty là một máy chủ web hỗ trợ đặc tả Java Servlet 3.0, WebSockets và nhiều đặc tả tích hợp khác. Jetty là:
- Mạnh mẽ và linh hoạt.
- Dễ dàng nhúng.
- Hỗ trợ các máy chủ ảo, phân cụm session và rất nhiều tính năng có thể được cấu hình dễ dàng thông qua mã Java hoặc XML.
- Được dùng cho dịch vụ lưu trữ của Google App Engine.
Dự án Jetty được quản lý bởi Quỹ Eclipse.
Kể từ phiên bản 6, Jetty bao gồm một API không đồng bộ được gọi là Jetty Continuations, cho phép một yêu cầu được tạm dừng và có thể tiếp tục lại sau đó. Bảng 1 cho thấy bản đồ về đặc tả và API hỗ trợ với các họ phiên bản Jetty chính.
Bảng 1. Các phiên bản Jetty và khả năng hỗ trợ
Để thực hiện Reverse Ajax với Comet, bạn có thể sử dụng các API Continuation của Jetty, như thể hiện trong Liệt kê 1:
Liệt kê 1. API Continuation của Jetty cho Comet
// Pausing a request from a servlet's method (get, post, ...): protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Continuation continuation = ContinuationSupport.getContinuation(req); // optionally set a timeout to avoid suspending requests for too long continuation.setTimeout(0); // suspend the request continuation.suspend(); // then hold a reference for future usage from another thread continuations.offer(continuation); } // Then, from another thread which wants to send an event to the client: while (!continuations.isEmpty()) { Continuation continuation = continuations.poll(); HttpServletResponse response = (HttpServletResponse) continuation.getServletResponse(); // write to the response continuation.complete(); }
Ứng dụng web hoàn chỉnh có trong mã nguồn đi kèm với bài này. Jetty Continuations được đóng gói trong một tệp JAR. Bạn phải đặt tệp JAR này trong thư mục WEB-INF/lib của ứng dụng web của mình để có thể sử dụng các tính năng Comet của Jetty. Continuations của Jetty sẽ làm việc trên Jetty 6, 7 và 8.
Bắt đầu với Jetty 7, bạn cũng có quyền truy cập vào tính năng WebSockets. Đặt tệp JAR WebSocket của Jetty vào thư mục WEB-INF/lib của ứng dụng web của bạn để có quyền truy cập vào API WebSocket của Jetty, như trong Liệt kê 2:
Liệt kê 2. API WebSocket của Jetty
// Implement the doWebSocketConnect and returns an implementation of // WebSocket: public final class ReverseAjaxServlet extends WebSocketServlet { @Override protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) { return [...] } } // Sample implementation of WebSocket: class Endpoint implements WebSocket { Outbound outbound; public void onConnect(Outbound outbound) { this.outbound = outbound; } public void onMessage(byte opcode, String data) { outbound.sendMessage("Echo: " + data); if("close".equals(data)) outbound.disconnect(); } public void onFragment(boolean more, byte opcode, byte[] data, int offset, int length) { } public void onMessage(byte opcode, byte[] data, int offset, int length) { onMessage(opcode, new String(data, offset, length)); } public void onDisconnect() { outbound = null; } }
Trong thư mục jetty-websocket củamã nguồn có một ví dụ chat mẫu để trình bày cách sử dụng API WebSocket của Jetty.
Tomcat
Có lẽ Tomcat là máy chủ web nổi tiếng nhất. Nó đã được sử dụng trong nhiều năm và đã được tích hợp như là một web container vào các phiên bản đầu tiên của máy chủ ứng dụng Jboss. Ngoài ra, Tomcat còn được dùng cho việc thực thi tham khảo đặc tả servlet. Nó đã được loại bỏ khỏi phiên bản API servlet 2.5 khi mọi người bắt đầu xem xét các lựa chọn thay thế dựa trên I/O non-blocking (như Jetty). Bảng 2 cho thấy API và các đặc tả được hỗ trợ cho hai họ phiên bản Tomcat mới nhất.
Bảng 2. Sự hỗ trợ của Tomcat
Như thể hiện trong Bảng 2, Tomcat không hỗ trợ WebSockets; nó có một bản tương đương với Continuations của Jetty được gọi là I/O nâng cao (Advanced I/O) để hỗ trợ Comet. I/O nâng cao là một trình bao bọc mức thấp xung quanh NIO mạnh hơn một API tốt để làm cho việc sử dụng Comet dễ dàng hơn. Nó có ít tài liệu và chỉ có một vài ví dụ mô tả cách sử dụng API này. Liệt kê 3 cho thấy một ví dụ về servlet được sử dụng để treo và tiếp tục lại các yêu cầu trong một ứng dụng web chat. Bạn có thể tìm thấy ứng dụng web hoàn chỉnh trong mã nguồn đi kèm với bài này.
Liệt kê 3. API của Tomcat cho Comet
public final class ChatServlet extends HttpServlet implements CometProcessor { private final BlockingQueue<CometEvent> events = new LinkedBlockingQueue<CometEvent>(); public void event(CometEvent evt) throws IOException, ServletException { HttpServletRequest request = evt.getHttpServletRequest(); String user = (String) request.getSession().getAttribute("user"); switch (evt.getEventType()) { case BEGIN: { if ("GET".equals(request.getMethod())) { evt.setTimeout(Integer.MAX_VALUE); events.offer(evt); } else { String message = request.getParameter("message"); if ("/disconnect".equals(message)) { broadcast(user + " disconnected"); request.getSession().removeAttribute("user"); events.remove(evt); } else if (message != null) { broadcast("[" + user + "]" + message); } evt.close(); } } } } void broadcast(String message) throws IOException { Queue<CometEvent> q = new LinkedList<CometEvent>(); events.drainTo(q); while (!q.isEmpty()) { CometEvent event = q.poll(); HttpServletResponse resp = event.getHttpServletResponse(); resp.setStatus(HttpServletResponse.SC_OK); resp.setContentType("text/html"); resp.getWriter().write(message); event.close(); } } }
Trong Tomcat, một servlet không đồng bộ phải thực hiện một
CometProcessor. Đối với các servlet không đồng bộ, Tomcat không gọi các
phương thức HTTP tiêu chuẩn (
doGet,
doPost và v.v). Thay vào đó, nó gửi một sự kiện đến phương thức
event(CometdEvent). Khi yêu cầu đầu tiên gửi đến, ví dụ sẽ
kiểm tra để xem liệu nó có là một
GET để treo nó không;
evt.close() không được gọi. Nếu nó là một
POST, có nghĩa là người dùng đã gửi một thông báo, do đó,
nó được broadcast (phát hàng loạt) đến
CometEvent khác và
evt.close() được gọi để hoàn thành yêu cầu đăng thông
báo. Về phía máy khách, việc broadcast sẽ thực hiện tất cả các yêu cầu long-polling
để hoàn thành thông báo đã gửi và một yêu cầu long-polling khác được gửi ngay để
nhận được các sự kiện tiếp theo.
Grizzly và Glassfish
Grizzly không phải là web container, nhưng hơn một framework NIO giúp các nhà phát triển xây dựng các ứng dụng có khả năng co giãn. Nó được phát triển như là một phần trong dự án Glassfish, nhưng nó cũng có thể được sử dụng độc lập hoặc nhúng vào hệ thống khác. Grizzly cung cấp các thành phần như một máy chủ HTTP/HTTPS và các thành phần cho Bayeux Protocol, Servlet, HTTPService OSGi và Comet, trong số những thứ khác. Grizzly hỗ trợ WebSockets và được sử dụng trong Glassfish để cung cấp Comet và hỗ trợ WebSocket.
Glassfish, Application Server (Máy chủ ứng dụng) của Oracle, là cách thực hiện tham khảo của các đặc tả J2EE 6. Glassfish là một gói hoàn chỉnh, như WebSphere và Jboss, khi sử dụng Grizzly để hỗ trợ NIO, WebSocket và Comet. Kiến trúc mô đun của nó, dựa trên OSGI, giúp nó linh hoạt trong việc thay đổi các thành phần. Bảng 3 cho thấy Glassfish hỗ trợ Comet và WebSockets.
Bảng 3. Sự hỗ trợ của Glassfish
Cách sử dụng Grizzly cũng rất quan trọng, khi người ta dự định sử dụng nó theo cách nhúng hoặc trực tiếp từ mã Java. Nó được sử dụng rộng rãi như một framework để hỗ trợ Comet và WebSockets, mà nó có thể được nhúng trong một ứng dụng lớn hơn, ví dụ như Glassfish, cung cấp các khả năng triển khai web và API đặc tả Servlet.
Xem phần Tài nguyên để biết các liên kết đến các ví dụ của WebSockets và Comet trong Grizzly hoặc Glassfish. Vì Glassfish sử dụng Grizzly, nên các ví dụ sẽ làm việc trên cả hai. API WebSocket cũng rất giống như một API trong Jetty, nhưng API của Comet phức tạp hơn.
Jboss
Jboss là một máy chủ ứng dụng được xây dựng dựa trên Tomcat. Nó đã hỗ trợ Comet và NIO kể từ phiên bản 5. Jboss 7 vẫn còn đang phát triển, nhưng được đưa vào trong Bảng 4 dưới đây.
Bảng 4. Sự hỗ trợ của Jboss
WebSphere
WebSphere là một máy chủ ứng dụng của IBM. Phiên bản 8 của WebSphere đã hỗ trợ của API Servlet 3 (có chứa API không đồng bộ tiêu chuẩn hóa cho Comet) (xem phần Tài nguyên để đọc thông báo).
Bảng 5. Sự hỗ trợ của WebSphere
Thế còn các API chung thì như thế nào?
Mỗi máy chủ đưa ra API nguyên gốc của riêng mình cho Comet và WebSocket. Như bạn có thể đoán là việc viết một ứng dụng web di động có thể khó khăn. Đặc tả Servlet 3.0 gồm có các phương thức bổ sung để treo và tiếp tục lại một yêu cầu sau đó, cho phép tất cả các web container hỗ trợ Đặc tả Servlet 3.0 đều hỗ trợ các yêu cầu Comet long-polling.
Nhóm phát triển Jetty cung cấp một thư viện được gọi là Continuation của Jetty, độc lập với Jetty container. Thư viện Continuation của Jetty đủ thông minh để phát hiện ra container hoặc đặc tả có sẵn. Nếu bạn đang chạy trên một máy chủ Jetty, API của Jetty nguyên gốc sẽ được sử dụng. Nếu bạn đang chạy trên một container hỗ trợ Đặc tả Servlet3.0, API chung (common API) này sẽ được sử dụng. Nếu không, việc thực hiện không có khả năng co giãn sẽ được sử dụng.
Về WebSockets, vẫn chưa có tiêu chuẩn nào trong Java và do đó bạn cần sử dụng API container của nhà cung cấp trong ứng dụng web của mình nếu bạn muốn sử dụng WebSockets.
Bảng 6 tóm tắt các công nghệ được các máy chủ khác nhau hỗ trợ.
Bảng 6. Các công nghệ được các máy chủ hỗ trợ
Không có giải pháp rõ ràng nào cho WebSockets ngoại trừ việc sử dụng API container. Như với Comet, mỗi container hỗ trợ Đặc tả Servlet 3.0 đều hỗ trợ Comet. Ở đây lợi thế của Jetty Continuations là cung cấp hỗ trợ Comet trên tất cả các container này. Vì vậy, một số thư viện Reverse Ajax (được tiếp tục thảo luận dưới đây và trong phần tiếp theo của loạt bài này) đang sử dụng Jetty Continuations API phía máy chủ.
API Jetty Continuation được hiển thị trong ví dụ mẫu trong bài này. Đặc tả Servlet 3.0 đã được mô tả và được sử dụng trong hai ví dụ Comet trong Phần 1 của loạt bài này.
Các thư viện trừu tượng hóa
Khi xem xét tất cả các API chủ yếu (Servlet 3.0 và Jetty Continuations), cộng với tất cả sự hỗ trợ bên phía máy chủ và hai cách chủ yếu để thực hiện Reverse Ajax bên phía máy khách (Comet và WebSocket) sẽ thấy thật khó để viết JavaScript và mã Java riêng của bạn để nối chúng lại với nhau. Bạn cũng phải tính đến các yếu tố như thời gian chờ timeout, các lỗi kết nối, tin báo nhận, chỉ dẫn, giữ dữ liệu trong bộ đệm và v.v.
Phần còn lại của bài này sẽ cho bạn thấy Socket.IO hoạt động như thế nào. Phần 4 của loạt bài này sẽ tìm hiểu Atmosphere và CometD. Tất cả ba thư viện này đều là nguồn mở và tất cả chúng đều hỗ trợ Comet và WebSocket trên nhiều máy chủ.
Socket.IO
Socket.IO là một thư viện máy khách JavaScript cung cấp một API riêng, tương tự như WebSocket, để kết nối đến một máy chủ từ xa để gửi và nhận thông báo không đồng bộ. Bằng cách cung cấp một API chung, Socket.IO hỗ trợ một số kiểu truyền tải: WebSocket, Flash Sockets, long-polling, streaming, forever Iframes (Các khung nội tuyến vô hạn) và JSONP polling. Socket.IO phát hiện ra các khả năng của trình duyệt và cố gắng lựa chọn kiểu truyền tải tốt nhất có thể. Thư viện Socket.IO tương thích với hầu hết tất cả các trình duyệt (bao gồm cả các trình duyệt cũ, chẳng hạn như IE 5.5) cũng như các trình duyệt di động. Nó cũng có các tính năng như các nhịp hoạt động (heartbeat), thời gian chờ, ngắt kết nối và xử lý lỗi.
Trang web Socket.IO (xem phần Tài nguyên) mô tả chi tiết thư viện này hoạt động ra sao và trình duyệt và kỹ thuật Reverse Ajax nào được sử dụng. Về cơ bản, Socket.IO sử dụng một giao thức truyền thông cho phép thư viện máy khách truyền thông với một điểm cuối ở phía máy chủ, mà điểm này có thể hiểu được giao thức Socket.IO. Đầu tiên người ta phát triển Socket.IO cho Node JS, một công cụ JavaScript được sử dụng để xây dựng các máy chủ nhanh hơn. Nhưng giờ đây, nhiều dự án đã mang đến sự hỗ trợ cho các ngôn ngữ khác, bao gồm cả Java.
Liệt kê 4 cho thấy một ví dụ về sử dụng thư viện JavaScript Socket.IO bên phía máy khách. Trang web Socket.IO có tài liệu hướng dẫn và các ví dụ.
Liệt kê 4. Sử dụng thư viện máy khách Socket.IO
var socket = new io.Socket(document.domain, { resource: 'chat' }); socket.on('connect', function() { // Socket.IO is connected }); socket.on('disconnect', function(disconnectReason, errorMessage) { // Socket.IO disconnected }); socket.on('message', function(mtype, data, error) { // The server sent an event }); // Now that the handlers are defined, establish the connection: socket.connect();
Để sử dụng thư viện JavaScript Socket.IO, bạn sẽ cần một thành phần Java tương ứng được gọi là Socket.IO Java (xem phần Tài nguyên). Ban đầu dự án này được nhóm công tác Apache Wave khởi động để đem đến sự hỗ trợ Reverse Ajax cho Wave trước khi WebSockets được hỗ trợ. Socket.IO Java được chia làm hai nhánh và được duy trì bởi Ovea (một công ty chuyên về phát triển web theo hướng sự kiện) và sau đó bị bỏ rơi. Việc phát triển tầng sau để hỗ trợ thư viện máy khách Socket.IO có phức tạp là do có nhiều kiểu truyền tải. Phần 4 của loạt bài này sẽ chỉ ra vì sao việc hỗ trợ nhiều kiểu truyền tải trong một thư viện máy khách là không cần thiết để đạt được khả năng co giãn và hỗ trợ trình duyệt tốt hơn, do chỉ cần long-polling và WebSockets là đủ. Khi chưa hỗ trợ WebSockets, Socket.IO đã là một lựa chọn tốt.
Socket.IO Java sử dụng API Jetty Continuation để treo và tiếp tục lại các yêu cầu. Nó sử dụng API WebSockets của Jetty nguyên gốc để hỗ trợ WebSockets. Bạn có thể xác định máy chủ nào sẽ làm việc đúng với một ứng dụng web khi sử dụng Socket.IO Java.
Liệt kê 5, dưới đây, cho thấy một ví dụ về cách sử dụng Socket.IO trên
máy chủ. Bạn phải định nghĩa một
SocketIOServlet mở rộng
của servlet và thực hiện một phương thức để trả về một loại đại diện điểm cuối. API
này rất giống với API WebSockets. Ưu điểm là ở chỗ API này được sử dụng bên phía máy
chủ, độc lập với việc truyền tải được chọn bên phía máy khách. Socket.IO chuyển dịch
tất cả các kiểu truyền tải tới API tương tự bên phía máy chủ.
Liệt kê 5. Thư viện Socket.IO Java được sử dụng cho ví dụ mẫu chat - servlet
public final class ChatServlet extends SocketIOServlet { private final BlockingQueue<Endpoint> endpoints = new LinkedBlockingQueue<Endpoint>(); @Override protected SocketIOInbound doSocketIOConnect (HttpServletRequest request) { String user = (String) request.getSession().getAttribute("user"); return user == null ? null : new Endpoint(this, user, request); } void broadcast(String data) { for (Endpoint endpoint : endpoints) { endpoint.send(data); } } void add(Endpoint endpoint) { endpoints.offer(endpoint); } void remove(Endpoint endpoint) { endpoints.remove(endpoint); } }
Liệt kê 6 cho thấy cách trả về điểm cuối.
Liệt kê 6. Sử dụng thư viện Socket.IO Java cho ví dụ mẫu chat - điểm cuối
class Endpoint implements SocketIOInbound { [...] private SocketIOOutbound outbound; [...] @Override public void onConnect(SocketIOOutbound outbound) { this.outbound = outbound; servlet.add(this); servlet.broadcast(user + " connected"); } @Override public void onDisconnect(DisconnectReason reason, String errorMessage) { outbound = null; request.getSession().removeAttribute("user"); servlet.remove(this); servlet.broadcast(user + " disconnected"); } @Override public void onMessage(int messageType, String message) { if ("/disconnect".equals(message)) { outbound.close(); } else { servlet.broadcast("[" + user + "] " + message); } } void send(String data) { try { if (outbound != null && outbound.getConnectionState() == ConnectionState.CONNECTED) { outbound.sendMessage(data); } } catch (IOException e) { outbound.close(); } } }
Ví dụ hoàn chỉnh của Socket.IO được đưa vào mã nguồn trong thư mục socketio.
Kết luận
Tất cả các web container đều hỗ trợ Comet và hầu như tất cả chúng đều hỗ trợ WebSockets. Thậm chí nếu các đặc tả dẫn đến một số việc triển khai hiện thực nguyên gốc khác nhau, bạn vẫn có thể phát triển một ứng dụng web bằng cách sử dụng Comet với các API chung (Servlet 3.0 hoặc Jetty Continuations). Và, thậm chí tốt hơn nữa, bạn có thể sử dụng sức mạnh của Comet và WebSockets một cách trong suốt bằng cách sử dụng các thư viện ví dụ như Socket.IO. Hai thư viện bổ sung, Atmosphere và CometD, sẽ được trình bày trong phần tiếp theo của loạt bài này. Tất cả ba thư viện đều được nhiều trình duyệt hỗ trợ, một trải nghiệm người dùng tuyệt vời và nhiều lợi ích về xử lý lỗi, một API dễ dàng hơn, thời gian chờ và các kết nối lại.
Tải về
Tài nguyên
Học tập
- Đọc các phần trước của loạt bài này:
- JSR 315: Đặc tả Servlet 3.0 của Java là bản đặc tả cập nhật từ phiên bản 2.5.
- Đọc thông báo phát hành Phiên bản 8.0 của IBM WebSphere Application Server (Máy chủ ứng dụng WebSphere của IBM).
- "Google AppEngine sử dụng Jetty!" mô tả tuỳ chỉnh Jetty của Google.
- Tìm hiểu thêm về Jetty Continuations và các tính năng của nó.
- Xem ví dụ mẫu về WebSockets trong Glassfish có sử dụng Grizzly.
- WebSphere Application Server: Tìm hiểu thêm về sản phẩm tốt nhất trong dòng thương hiệu WebSphere của IBM.
- WebSphere 8 (có hỗ trợ Comet) cho phép quản lý thông minh các môi trường ứng dụng và giúp phân phối những trải nghiệm người dùng phong phú nhanh hơn.
- Socket.IO nhằm mục đích giúp các ứng dụng thời gian thực có thể chạy được trong tất cả các trình duyệt và thiết bị di động, làm mờ đi sự khác biệt giữa các cơ chế truyền tải khác nhau.
- "Bắt đầu bằng cách sử dụng HTML5 WebSockets hiện nay" (Nettuts+): Hãy xem xét cách chạy một máy chủ WebSocket bằng PHP và xem cách xây dựng một máy khách để gửi và nhận các thông báo đến nó qua giao thức WebSocket.
- "API WebSocket " (W3C, 07.2011): Đặc tả này định nghĩa một API cho phép các trang web sử dụng giao thức WebSocket để truyền thông hai chiều với một máy chủ từ xa.
- Tìm hiểu thêm về hỗ trợ xử lý không đồng bộ trong Servlet 3.0.
- Weblog của Philip McCarthy có nhiều bài viết về Comet & Java: Threaded so với Nonblocking I/O.
- Hướng dẫn Rox Java NIO xem trải nghiệm của tác giả khi sử dụng các thư viện Java NIO với những gợi ý, lời khuyên, dẫn dắt và những khuyến cáo.
- Trên Wikipedia, hãy đọc về:
- Khám phá Reverse AJAX: Giới thiệu về một số kỹ thuật Reverse-Ajax.
- "Truyền thông giữa các miền với JSONP, Phần 1: Kết hợp JSONP và jQuery để nhanh chóng xây dựng các mashup mạnh" (developerWorks, 02.2009): Hãy tìm hiểu cách bạn có thể kết hợp một kỹ thuật cuộc gọi giữa các miền mờ (JSONP) và một thư viện JavaScript linh hoạt ( jQuery) để nhanh chóng xây dựng các mashup (ứng dụng hỗn hợp) mạnh mẽ đáng ngạc nhiên.
- "Xây dựng các ứng dụng Ajax với Ext JS" (developerWorks, 07.2008): Tổng quan về các khái niệm thiết kế JavaScript hướng đối tượng đằng sau Ext JS và cho thấy cách sử dụng framework Ext JS cho các phần tử UI của ứng dụng Internet giàu nội dung.
- "So sánh các khung công tác JavaScript" (developerWorks, 02.2010): Tổng quan về các framework để tăng cường phát triển JavaScript.
- "Mastering Ajax, Phần 2: Thực hiện các yêu cầu không đồng bộ với Javascript và Ajax" (developerWorks, 01.2006): Tìm hiểu cách sử dụng Ajax và đối tượng XMLHttpRequest để tạo ra một mô hình yêu cầu/phản hồi mà không cần người dùng phải rời khỏi trang web.
- "Tạo các ứng dụng Ajax cho Web di động" (developerWorks, 03.2010): Tìm hiểu cách xây dựng các ứng dụng điện thoại thông minh giữa các trình duyệt khi sử dụng Ajax.
- "Nên sử dụng Ajax ở đâu và vào lúc nào trong các ứng dụng của bạn" (developerWorks, 02.2008): Hãy xem cách bạn có thể sử dụng Ajax để cải thiện trang web của mình để tránh những trải nghiệm người dùng xấu.
- "Cải thiện hiệu năng của các ứng dụng Web 2.0" (developerWorks, 12.2009): Khám phá cơ chế bộ nhớ đệm phía trình duyệt khác nhau.
- "Giới thiệu về JSON" (JSON.org): Giới thiệu về cú pháp JSON.
- Vùng phát triển Web trên developerWorks: Tìm các bài viết trình bày các giải pháp dựa trên web khác nhau.
- developerWorks podcasts: Nghe các cuộc phỏng vấn và các cuộc thảo luận thú vị dành cho các nhà phát triển phần mềm.
- Webcast và các sự kiện kỹ thuật của developerWorks: Cập nhật công nghệ thông qua các sự kiện và webcast của developerWorks.
Lấy sản phẩm và công nghệ
- Jetty: Nhận Jetty, một máy chủ web và container javax.servlet, thêm sự hỗ trợ WebSockets.
- Tài liệu hướng dẫn I/O nâng cao Tomcat của Apache: Nhận các liên kết có giá trị, Hướng dẫn người dùng, tài liệu tham khảo và các chỉ dẫn Phát triển Tomcat của Apache.
- Framework Grizzly NIO: Giúp bạn tận dụng lợi thế của API Java NIO.
- Ví dụ về Grizzly Comet: Xem những mà bạn có thể thay đổi được trên ứng dụng hiện có trước khi bắt đầu xây dựng một cái mới.
- Glassfish Application Server: Nhận ấn bản nguồn mở chính thức của máy chủ GlassFish.
- Socket.IO Java: Tìm hiểu về dự án của Ovea với những cập nhật mới nhất.
- Apache Maven: Nhận Maven, một công cụ gộp và quản lý dự án phần mềm.
- Bộ công cụ phát triển Java, Phiên bản 6: Nhận nền tảng Java, ấn bản chuẩn (Java SE), cho phép bạn phát triển và triển khai các ứng dụng Java trên các máy tính để bàn và các máy chủ, cũng như trong các môi trường nhúng đòi hỏi khắt khe hiện nay.
- Hãy dùng thử hơn 100 phần mềm IBM miễn phí. Tải về hay đăng nhập vào bản dùng thử trực tuyến, làm việc với sản phẩm trong một môi trường sandbox hoặc truy cập nó thông qua đám mây.
Thảo luận
- Tham gia diễn đàn thảo luận.
- Tạo hồ sơ developerWorks của bạn ngày hôm nay và thiết lập một danh sách theo dõi về Reverse Ajax. Kết nối và duy trì kết nối với cộng đồng developerWorks.
- Tìm các thành viên developerWorks khác quan tâm đến sự phát triển web.
- Chia sẻ những gì bạn biết: Tham gia một trong các nhóm developerWorks của chúng tôi tập trung vào các chủ đề web.
- Roland Barcia nói về Web 2.0 và phần mềm trung gian trong blog của mình.
- Theo dõi các dấu trang chia sẻ về các chủ đề web của các thành viên developerWorks.
- Nhận các câu trả lời nhanh chóng: Truy cập vào diễn đàn Các ứng dụng Web 2.0.
- Nhận các câu trả lời nhanh chóng: Truy cập vào diễn đàn Ajax.
Bình luận
-
Vùng dữ liệu trên developerWorks
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
-
Vùng mã nguồn mở trên developerWorks
Xem các bài viết về HTML, CSS, JavaScript,...
-
Điện toán đám mây
Tìm hiểu về điện toán đám mây

markdown:
## Giới thiệu
Người dùng hiện nay mong đợi các ứng dụng linh động, nhanh chóng có thể truy cập được
từ trang web.
[Loạt bài](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp?search_by=reverse+ajax,) này cho bạn thấy cách phát triển các ứng dụng web theo hướng sự
kiện bằng cách sử dụng các kỹ thuật Reverse Ajax. [Phần 1](https://www.ibm.com/developerworks/vn/library/opensource/201301/wa-reverseajax1/) đã giới thiệu Reverse Ajax, polling, streaming, Comet, long-polling.
Bạn đã tìm hiểu vì sao Comet sử dụng HTTP long-polling là cách tốt nhất để thực hiện
Reverse Ajax, khi hiện nay tất cả các trình duyệt đều hỗ trợ nó. [Phần 2](https://www.ibm.com/developerworks/vn/library/opensource/201301/wa-reverseajax2/) đã mô tả cách thực hiện Reverse Ajax bằng cách sử dụng WebSockets.
Các ví dụ mã giúp minh họa các ràng buộc WebSockets, FlashSocket bên phía máy chủ,
các dịch vụ phạm vi-yêu cầu, và cách để tạm dừng các yêu cầu long-lived.
Trong bài này, hãy đi chi tiết về cách sử dụng Comet và WebSockets trong ứng dụng web của bạn với các API và các web container khác nhau (Servlet 3.0 và Continuations của Jetty). Hãy tìm hiểu cách sử dụng Comet và WebSockets một cách trong suốt bằng cách sử dụng các thư viện trừu tượng hóa, chẳng hạn như Socket.IO. Socket.IO sử dụng tính năng nhận dạng để quyết định xem kết nối đó sẽ được thiết lập với WebSocket, AJAX long-polling, Flash và v.v hay không.
Bạn có thể
[tải về mã nguồn](#download) được sử dụng trong bài này.
### Điều kiện tiên quyết
Tốt nhất bạn nên biết trước về JavaScript và Java. Các ví dụ trong bài này đã được xây dựng bằng cách sử dụng Google Guice, một framework tích hợp phụ thuộc (dependency injection framework) được viết bằng Java. Để làm theo cùng với bài này, bạn nên hiểu rõ các khái niệm về dependency injection framework, chẳng hạn như Guice, Spring hoặc Pico.
Để chạy được các ví dụ trong bài này, bạn cần có phiên bản mới nhất của Maven và JDK
(xem phần
[Tài nguyên](#resources)).
## Các giải pháp máy chủ cho Comet và WebSocket
Ở
[Phần 1](https://www.ibm.com/developerworks/vn/library/opensource/201301/wa-reverseajax1/), bạn đã tìm hiểu về phương pháp Comet (long-polling hay streaming)
có khả năng yêu cầu máy chủ có thể tạm dừng một request và tiếp tục hay hoàn thành
nó sau một thời gian nắm giữ. [Phần 2](https://www.ibm.com/developerworks/vn/library/opensource/201301/wa-reverseajax2/) đã mô tả cách mà máy chủ cần sử dụng tính năng I/O non-blocking như
thế nào để xử lý nhiều kết nối và chúng chỉ sử dụng các luồng để phục vụ các yêu cầu
(mô hình luồng cho mỗi yêu cầu). Bạn cũng đã biết rằng việc sử dụng WebSocket phụ
thuộc vào máy chủ và không phải tất cả các máy chủ đều hỗ trợ WebSockets.
Phần này sẽ cho bạn thấy cách sử dụng Comet và WebSockets, nếu có, trên các máy chủ
web Jetty, Tomcat và Grizzly.
[Mã nguồn](#download) được cung cấp cùng
với bài này có một ứng dụng web chat (trò chuyện trực tuyến) là ví dụ mẫu cho Jetty
và Tomcat. Phần này cũng thảo luận về các API hỗ trợ cho các máy chủ ứng dụng sau:
Jboss, Glassfish và WebSphere.
### Jetty
Jetty là một máy chủ web hỗ trợ đặc tả Java Servlet 3.0, WebSockets và nhiều đặc tả tích hợp khác. Jetty là:
- Mạnh mẽ và linh hoạt.
- Dễ dàng nhúng.
- Hỗ trợ các máy chủ ảo, phân cụm session và rất nhiều tính năng có thể được cấu hình dễ dàng thông qua mã Java hoặc XML.
- Được dùng cho dịch vụ lưu trữ của Google App Engine.
Dự án Jetty được quản lý bởi Quỹ Eclipse.
Kể từ phiên bản 6, Jetty bao gồm một API không đồng bộ được gọi là Jetty Continuations, cho phép một yêu cầu được tạm dừng và có thể tiếp tục lại sau đó. Bảng 1 cho thấy bản đồ về đặc tả và API hỗ trợ với các họ phiên bản Jetty chính.
##### Bảng 1. Các phiên bản Jetty và khả năng hỗ trợ
|Các sự hỗ trợ||Jetty 6||Jetty 7||Jetty 8|
|Non-blocking I/O||X||X||X|
|Servlet 2.5||X||X||X|
|Servlet 3.0||X||X|
|Jetty Continuations (Comet)||X||X||X|
|WebSockets||X||X|
Để thực hiện Reverse Ajax với Comet, bạn có thể sử dụng các API Continuation của Jetty, như thể hiện trong Liệt kê 1:
##### Liệt kê 1. API Continuation của Jetty cho Comet
// Pausing a request from a servlet's method (get, post, ...): protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Continuation continuation = ContinuationSupport.getContinuation(req); // optionally set a timeout to avoid suspending requests for too long continuation.setTimeout(0); // suspend the request continuation.suspend(); // then hold a reference for future usage from another thread continuations.offer(continuation); } // Then, from another thread which wants to send an event to the client: while (!continuations.isEmpty()) { Continuation continuation = continuations.poll(); HttpServletResponse response = (HttpServletResponse) continuation.getServletResponse(); // write to the response continuation.complete(); }
Ứng dụng web hoàn chỉnh có trong
[mã nguồn](#download) đi kèm với bài này.
Jetty Continuations được đóng gói trong một tệp JAR. Bạn phải đặt tệp JAR này trong
thư mục WEB-INF/lib của ứng dụng web của mình để có thể sử dụng các tính năng Comet
của Jetty. Continuations của Jetty sẽ làm việc trên Jetty 6, 7 và 8.
Bắt đầu với Jetty 7, bạn cũng có quyền truy cập vào tính năng WebSockets. Đặt tệp JAR WebSocket của Jetty vào thư mục WEB-INF/lib của ứng dụng web của bạn để có quyền truy cập vào API WebSocket của Jetty, như trong Liệt kê 2:
##### Liệt kê 2. API WebSocket của Jetty
// Implement the doWebSocketConnect and returns an implementation of // WebSocket: public final class ReverseAjaxServlet extends WebSocketServlet { @Override protected WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) { return [...] } } // Sample implementation of WebSocket: class Endpoint implements WebSocket { Outbound outbound; public void onConnect(Outbound outbound) { this.outbound = outbound; } public void onMessage(byte opcode, String data) { outbound.sendMessage("Echo: " + data); if("close".equals(data)) outbound.disconnect(); } public void onFragment(boolean more, byte opcode, byte[] data, int offset, int length) { } public void onMessage(byte opcode, byte[] data, int offset, int length) { onMessage(opcode, new String(data, offset, length)); } public void onDisconnect() { outbound = null; } }
Trong thư mục jetty-websocket của
[mã nguồn](#download) có một ví dụ chat
mẫu để trình bày cách sử dụng API WebSocket của Jetty.
### Tomcat
Có lẽ Tomcat là máy chủ web nổi tiếng nhất. Nó đã được sử dụng trong nhiều năm và đã được tích hợp như là một web container vào các phiên bản đầu tiên của máy chủ ứng dụng Jboss. Ngoài ra, Tomcat còn được dùng cho việc thực thi tham khảo đặc tả servlet. Nó đã được loại bỏ khỏi phiên bản API servlet 2.5 khi mọi người bắt đầu xem xét các lựa chọn thay thế dựa trên I/O non-blocking (như Jetty). Bảng 2 cho thấy API và các đặc tả được hỗ trợ cho hai họ phiên bản Tomcat mới nhất.
##### Bảng 2. Sự hỗ trợ của Tomcat
|Các sự hỗ trợ||Tomcat 6||Tomcat 7|
|Non-blocking I/O||X||X|
|Servlet 2.5||X||X|
|Servlet 3.0||X|
|Advanced I/O (Comet)||X||X|
|WebSockets|
Như thể hiện trong Bảng 2, Tomcat không hỗ trợ WebSockets; nó có một
bản tương đương với Continuations của Jetty được gọi là I/O nâng cao (Advanced I/O)
để hỗ trợ Comet. I/O nâng cao là một trình bao bọc mức thấp xung quanh NIO mạnh hơn
một API tốt để làm cho việc sử dụng Comet dễ dàng hơn. Nó có ít tài liệu và chỉ có
một vài ví dụ mô tả cách sử dụng API này. Liệt kê 3 cho thấy một ví dụ về servlet
được sử dụng để treo và tiếp tục lại các yêu cầu trong một ứng dụng web chat. Bạn có
thể tìm thấy ứng dụng web hoàn chỉnh trong
[mã nguồn](#download) đi kèm
với bài này.
##### Liệt kê 3. API của Tomcat cho Comet
public final class ChatServlet extends HttpServlet implements CometProcessor { private final BlockingQueue<CometEvent> events = new LinkedBlockingQueue<CometEvent>(); public void event(CometEvent evt) throws IOException, ServletException { HttpServletRequest request = evt.getHttpServletRequest(); String user = (String) request.getSession().getAttribute("user"); switch (evt.getEventType()) { case BEGIN: { if ("GET".equals(request.getMethod())) { evt.setTimeout(Integer.MAX_VALUE); events.offer(evt); } else { String message = request.getParameter("message"); if ("/disconnect".equals(message)) { broadcast(user + " disconnected"); request.getSession().removeAttribute("user"); events.remove(evt); } else if (message != null) { broadcast("[" + user + "]" + message); } evt.close(); } } } } void broadcast(String message) throws IOException { Queue<CometEvent> q = new LinkedList<CometEvent>(); events.drainTo(q); while (!q.isEmpty()) { CometEvent event = q.poll(); HttpServletResponse resp = event.getHttpServletResponse(); resp.setStatus(HttpServletResponse.SC_OK); resp.setContentType("text/html"); resp.getWriter().write(message); event.close(); } } }
Trong Tomcat, một servlet không đồng bộ phải thực hiện một
CometProcessor. Đối với các servlet không đồng bộ, Tomcat không gọi các
phương thức HTTP tiêu chuẩn (
doGet,
doPost và v.v). Thay vào đó, nó gửi một sự kiện đến phương thức
event(CometdEvent). Khi yêu cầu đầu tiên gửi đến, ví dụ sẽ
kiểm tra để xem liệu nó có là một
GET để treo nó không;
evt.close() không được gọi. Nếu nó là một
POST, có nghĩa là người dùng đã gửi một thông báo, do đó,
nó được broadcast (phát hàng loạt) đến
CometEvent khác và
evt.close() được gọi để hoàn thành yêu cầu đăng thông
báo. Về phía máy khách, việc broadcast sẽ thực hiện tất cả các yêu cầu long-polling
để hoàn thành thông báo đã gửi và một yêu cầu long-polling khác được gửi ngay để
nhận được các sự kiện tiếp theo.
### Grizzly và Glassfish
Grizzly không phải là web container, nhưng hơn một framework NIO giúp các nhà phát triển xây dựng các ứng dụng có khả năng co giãn. Nó được phát triển như là một phần trong dự án Glassfish, nhưng nó cũng có thể được sử dụng độc lập hoặc nhúng vào hệ thống khác. Grizzly cung cấp các thành phần như một máy chủ HTTP/HTTPS và các thành phần cho Bayeux Protocol, Servlet, HTTPService OSGi và Comet, trong số những thứ khác. Grizzly hỗ trợ WebSockets và được sử dụng trong Glassfish để cung cấp Comet và hỗ trợ WebSocket.
Glassfish, Application Server (Máy chủ ứng dụng) của Oracle, là cách thực hiện tham khảo của các đặc tả J2EE 6. Glassfish là một gói hoàn chỉnh, như WebSphere và Jboss, khi sử dụng Grizzly để hỗ trợ NIO, WebSocket và Comet. Kiến trúc mô đun của nó, dựa trên OSGI, giúp nó linh hoạt trong việc thay đổi các thành phần. Bảng 3 cho thấy Glassfish hỗ trợ Comet và WebSockets.
##### Bảng 3. Sự hỗ trợ của Glassfish
|Các sự hỗ trợ||Glassfish 2||Glassfish 3|
|Non-blocking I/O||X||X|
|Servlet 2.5||X||X|
|Servlet 3.0||X|
|Comet||X||X|
|WebSockets||X|
Cách sử dụng Grizzly cũng rất quan trọng, khi người ta dự định sử dụng nó theo cách nhúng hoặc trực tiếp từ mã Java. Nó được sử dụng rộng rãi như một framework để hỗ trợ Comet và WebSockets, mà nó có thể được nhúng trong một ứng dụng lớn hơn, ví dụ như Glassfish, cung cấp các khả năng triển khai web và API đặc tả Servlet.
Xem phần
[Tài nguyên](#resources) để biết các liên kết đến các ví dụ của
WebSockets và Comet trong Grizzly hoặc Glassfish. Vì Glassfish sử dụng Grizzly, nên
các ví dụ sẽ làm việc trên cả hai. API WebSocket cũng rất giống như một API trong
Jetty, nhưng API của Comet phức tạp hơn.
### Jboss
Jboss là một máy chủ ứng dụng được xây dựng dựa trên Tomcat. Nó đã hỗ trợ Comet và NIO kể từ phiên bản 5. Jboss 7 vẫn còn đang phát triển, nhưng được đưa vào trong Bảng 4 dưới đây.
##### Bảng 4. Sự hỗ trợ của Jboss
|Các sự hỗ trợ||Jboss 5||Jboss 6||Jboss 7|
|Non-blocking I/O||X||X||X|
|Servlet 2.5||X||X||X|
|Servlet 3.0||X||X|
|Comet||X||X||X|
|WebSockets|
### WebSphere
WebSphere là một máy chủ ứng dụng của IBM. Phiên bản 8 của WebSphere đã hỗ trợ của
API Servlet 3 (có chứa API không đồng bộ tiêu chuẩn hóa cho Comet) (xem phần
[Tài nguyên](#resources) để đọc thông báo).
##### Bảng 5. Sự hỗ trợ của WebSphere
|Các sự hỗ trợ||WebSphere 8|
|Non-blocking I/O||X|
|Servlet 2.5||X|
|Servlet 3.0||X|
|Comet||X|
|WebSockets|
## Thế còn các API chung thì như thế nào?
Mỗi máy chủ đưa ra API nguyên gốc của riêng mình cho Comet và WebSocket. Như bạn có thể đoán là việc viết một ứng dụng web di động có thể khó khăn. Đặc tả Servlet 3.0 gồm có các phương thức bổ sung để treo và tiếp tục lại một yêu cầu sau đó, cho phép tất cả các web container hỗ trợ Đặc tả Servlet 3.0 đều hỗ trợ các yêu cầu Comet long-polling.
Nhóm phát triển Jetty cung cấp một thư viện được gọi là Continuation của Jetty, độc lập với Jetty container. Thư viện Continuation của Jetty đủ thông minh để phát hiện ra container hoặc đặc tả có sẵn. Nếu bạn đang chạy trên một máy chủ Jetty, API của Jetty nguyên gốc sẽ được sử dụng. Nếu bạn đang chạy trên một container hỗ trợ Đặc tả Servlet3.0, API chung (common API) này sẽ được sử dụng. Nếu không, việc thực hiện không có khả năng co giãn sẽ được sử dụng.
Về WebSockets, vẫn chưa có tiêu chuẩn nào trong Java và do đó bạn cần sử dụng API container của nhà cung cấp trong ứng dụng web của mình nếu bạn muốn sử dụng WebSockets.
Bảng 6 tóm tắt các công nghệ được các máy chủ khác nhau hỗ trợ.
##### Bảng 6. Các công nghệ được các máy chủ hỗ trợ
|Container||Comet||WebSocket|
|Jetty 6||Jetty Continuations||Không có|
|Jetty 7||Servlet 3.0|
Jetty Continuations
|Native Jetty API (API Jetty nguyên gốc)|
|Jetty 8||Servlet 3.0 |
Jetty Continuations
|Native Jetty API|
|Tomcat 6||Advanced I/O (Vào/ra nâng cao)||Không có|
|Tomcat 7||Servlet 3.0|
Advanced I/O
Jetty Continuations
|Không có|
|Glassfish 2||Native Grizzly API (API Grizzly nguyên gốc)||Không có|
|Glassfish 3||Servlet 3.0|
Native Grizzly API
Jetty Continuations
|Native Grizzly API|
|Jboss 5||Native Jboss API (API Jboss nguyên gốc)||Không có|
|Jboss 6||Servlet 3.0 |
Native Jboss API
Jetty Continuations
|Không có|
|Jboss 7||Servlet 3.0|
Native Jboss API
Jetty Continuations
|Không có|
|WebSphere 8||Servlet 3.0|
Jetty Continuations
|Không có|
Không có giải pháp rõ ràng nào cho WebSockets ngoại trừ việc sử dụng API container.
Như với Comet, mỗi container hỗ trợ Đặc tả Servlet 3.0 đều hỗ trợ Comet. Ở đây lợi
thế của Jetty Continuations là cung cấp hỗ trợ Comet trên tất cả các container này.
Vì vậy, một số thư viện Reverse Ajax (được tiếp tục thảo luận
[dưới
đây](#abs) và trong phần tiếp theo của [loạt bài](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp?search_by=reverse+ajax,) này) đang sử dụng Jetty Continuations API phía máy chủ.
API Jetty Continuation được hiển thị trong
[ví dụ mẫu](#download) trong
bài này. Đặc tả Servlet 3.0 đã được mô tả và được sử dụng trong hai ví dụ Comet
trong [Phần 1](https://www.ibm.com/developerworks/vn/library/opensource/201301/wa-reverseajax1/) của loạt bài này.
## Các thư viện trừu tượng hóa
Khi xem xét tất cả các API chủ yếu (Servlet 3.0 và Jetty Continuations), cộng với tất cả sự hỗ trợ bên phía máy chủ và hai cách chủ yếu để thực hiện Reverse Ajax bên phía máy khách (Comet và WebSocket) sẽ thấy thật khó để viết JavaScript và mã Java riêng của bạn để nối chúng lại với nhau. Bạn cũng phải tính đến các yếu tố như thời gian chờ timeout, các lỗi kết nối, tin báo nhận, chỉ dẫn, giữ dữ liệu trong bộ đệm và v.v.
Phần còn lại của bài này sẽ cho bạn thấy Socket.IO hoạt động như thế nào. Phần 4 của
[loạt bài](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp?search_by=reverse+ajax,) này sẽ tìm hiểu Atmosphere và CometD. Tất cả ba thư viện này đều
là nguồn mở và tất cả chúng đều hỗ trợ Comet và WebSocket trên nhiều máy chủ.
### Socket.IO
Socket.IO là một thư viện máy khách JavaScript cung cấp một API riêng, tương tự như WebSocket, để kết nối đến một máy chủ từ xa để gửi và nhận thông báo không đồng bộ. Bằng cách cung cấp một API chung, Socket.IO hỗ trợ một số kiểu truyền tải: WebSocket, Flash Sockets, long-polling, streaming, forever Iframes (Các khung nội tuyến vô hạn) và JSONP polling. Socket.IO phát hiện ra các khả năng của trình duyệt và cố gắng lựa chọn kiểu truyền tải tốt nhất có thể. Thư viện Socket.IO tương thích với hầu hết tất cả các trình duyệt (bao gồm cả các trình duyệt cũ, chẳng hạn như IE 5.5) cũng như các trình duyệt di động. Nó cũng có các tính năng như các nhịp hoạt động (heartbeat), thời gian chờ, ngắt kết nối và xử lý lỗi.
Trang web Socket.IO (xem phần
[Tài nguyên](#resources)) mô tả chi tiết thư
viện này hoạt động ra sao và trình duyệt và kỹ thuật Reverse Ajax nào được sử dụng.
Về cơ bản, Socket.IO sử dụng một giao thức truyền thông cho phép thư viện máy khách
truyền thông với một điểm cuối ở phía máy chủ, mà điểm này có thể hiểu được giao
thức Socket.IO. Đầu tiên người ta phát triển Socket.IO cho Node JS, một công cụ
JavaScript được sử dụng để xây dựng các máy chủ nhanh hơn. Nhưng giờ đây, nhiều dự
án đã mang đến sự hỗ trợ cho các ngôn ngữ khác, bao gồm cả Java.
Liệt kê 4 cho thấy một ví dụ về sử dụng thư viện JavaScript Socket.IO bên phía máy khách. Trang web Socket.IO có tài liệu hướng dẫn và các ví dụ.
##### Liệt kê 4. Sử dụng thư viện máy khách Socket.IO
var socket = new io.Socket(document.domain, { resource: 'chat' }); socket.on('connect', function() { // Socket.IO is connected }); socket.on('disconnect', function(disconnectReason, errorMessage) { // Socket.IO disconnected }); socket.on('message', function(mtype, data, error) { // The server sent an event }); // Now that the handlers are defined, establish the connection: socket.connect();
Để sử dụng thư viện JavaScript Socket.IO, bạn sẽ cần một thành phần Java tương ứng
được gọi là Socket.IO Java (xem phần
[Tài nguyên](#resources)). Ban đầu
dự án này được nhóm công tác Apache Wave khởi động để đem đến sự hỗ trợ Reverse Ajax
cho Wave trước khi WebSockets được hỗ trợ. Socket.IO Java được chia làm hai nhánh và
được duy trì bởi Ovea (một công ty chuyên về phát triển web theo hướng sự kiện) và
sau đó bị bỏ rơi. Việc phát triển tầng sau để hỗ trợ thư viện máy khách Socket.IO có
phức tạp là do có nhiều kiểu truyền tải. Phần 4 của loạt bài này sẽ chỉ ra vì sao
việc hỗ trợ nhiều kiểu truyền tải trong một thư viện máy khách là không cần thiết để
đạt được khả năng co giãn và hỗ trợ trình duyệt tốt hơn, do chỉ cần long-polling và
WebSockets là đủ. Khi chưa hỗ trợ WebSockets, Socket.IO đã là một lựa chọn tốt.
Socket.IO Java sử dụng API Jetty Continuation để treo và tiếp tục lại các yêu cầu. Nó sử dụng API WebSockets của Jetty nguyên gốc để hỗ trợ WebSockets. Bạn có thể xác định máy chủ nào sẽ làm việc đúng với một ứng dụng web khi sử dụng Socket.IO Java.
Liệt kê 5, dưới đây, cho thấy một ví dụ về cách sử dụng Socket.IO trên
máy chủ. Bạn phải định nghĩa một
SocketIOServlet mở rộng
của servlet và thực hiện một phương thức để trả về một loại đại diện điểm cuối. API
này rất giống với API WebSockets. Ưu điểm là ở chỗ API này được sử dụng bên phía máy
chủ, độc lập với việc truyền tải được chọn bên phía máy khách. Socket.IO chuyển dịch
tất cả các kiểu truyền tải tới API tương tự bên phía máy chủ.
##### Liệt kê 5. Thư viện Socket.IO Java được sử dụng cho ví dụ mẫu chat - servlet
public final class ChatServlet extends SocketIOServlet { private final BlockingQueue<Endpoint> endpoints = new LinkedBlockingQueue<Endpoint>(); @Override protected SocketIOInbound doSocketIOConnect (HttpServletRequest request) { String user = (String) request.getSession().getAttribute("user"); return user == null ? null : new Endpoint(this, user, request); } void broadcast(String data) { for (Endpoint endpoint : endpoints) { endpoint.send(data); } } void add(Endpoint endpoint) { endpoints.offer(endpoint); } void remove(Endpoint endpoint) { endpoints.remove(endpoint); } }
Liệt kê 6 cho thấy cách trả về điểm cuối.
##### Liệt kê 6. Sử dụng thư viện Socket.IO Java cho ví dụ mẫu chat - điểm cuối
class Endpoint implements SocketIOInbound { [...] private SocketIOOutbound outbound; [...] @Override public void onConnect(SocketIOOutbound outbound) { this.outbound = outbound; servlet.add(this); servlet.broadcast(user + " connected"); } @Override public void onDisconnect(DisconnectReason reason, String errorMessage) { outbound = null; request.getSession().removeAttribute("user"); servlet.remove(this); servlet.broadcast(user + " disconnected"); } @Override public void onMessage(int messageType, String message) { if ("/disconnect".equals(message)) { outbound.close(); } else { servlet.broadcast("[" + user + "] " + message); } } void send(String data) { try { if (outbound != null && outbound.getConnectionState() == ConnectionState.CONNECTED) { outbound.sendMessage(data); } } catch (IOException e) { outbound.close(); } } }
Ví dụ hoàn chỉnh của Socket.IO được đưa vào
[mã nguồn](#download) trong
thư mục socketio.
## Kết luận
Tất cả các web container đều hỗ trợ Comet và hầu như tất cả chúng đều hỗ trợ
WebSockets. Thậm chí nếu các đặc tả dẫn đến một số việc triển khai hiện thực nguyên
gốc khác nhau, bạn vẫn có thể phát triển một ứng dụng web bằng cách sử dụng Comet
với các API chung (Servlet 3.0 hoặc Jetty Continuations). Và, thậm chí tốt hơn nữa,
bạn có thể sử dụng sức mạnh của Comet và WebSockets một cách trong suốt bằng cách sử
dụng các thư viện ví dụ như Socket.IO. Hai thư viện bổ sung, Atmosphere và CometD,
sẽ được trình bày trong phần tiếp theo của
[loạt bài](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp?search_by=reverse+ajax,) này. Tất cả ba thư viện đều được nhiều trình duyệt hỗ trợ, một
trải nghiệm người dùng tuyệt vời và nhiều lợi ích về xử lý lỗi, một API dễ dàng hơn,
thời gian chờ và các kết nối lại.
## Tải về
|Mô tả||Tên||Kích thước|
|Article source code|
## Tài nguyên
### Học tập
- Đọc các phần trước của loạt bài này:
[JSR 315: Đặc tả Servlet 3.0 của Java](http://jcp.org/en/jsr/detail?id=315)là bản đặc tả cập nhật từ phiên bản 2.5.
- Đọc
[thông báo phát hành Phiên bản 8.0 của IBM WebSphere Application Server](http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?infotype=AN&subtype=CA&htmlfid=897/ENUS211-139&appname=USN)(Máy chủ ứng dụng WebSphere của IBM).
- "
[Google AppEngine sử dụng Jetty!](http://blogs.webtide.com/gregw/entry/google_appengine_uses_jetty)" mô tả tuỳ chỉnh Jetty của Google.
- Tìm hiểu thêm về
[Jetty Continuations](http://wiki.eclipse.org/Jetty/Feature/Continuations)và các tính năng của nó.
- Xem
[ví dụ mẫu về WebSockets trong Glassfish](http://antwerkz.com/glassfish-web-sockets-sample/)có sử dụng Grizzly. [WebSphere Application Server](http://en.wikipedia.org/wiki/IBM_WebSphere_Application_Server): Tìm hiểu thêm về sản phẩm tốt nhất trong dòng thương hiệu WebSphere của IBM. [WebSphere 8 (có hỗ trợ Comet)](http://www-01.ibm.com/common/ssi/cgi-bin/ssialias?infotype=AN&subtype=CA&htmlfid=897/ENUS211-139&appname=USN)cho phép quản lý thông minh các môi trường ứng dụng và giúp phân phối những trải nghiệm người dùng phong phú nhanh hơn. [Socket.IO](http://socket.io/)nhằm mục đích giúp các ứng dụng thời gian thực có thể chạy được trong tất cả các trình duyệt và thiết bị di động, làm mờ đi sự khác biệt giữa các cơ chế truyền tải khác nhau.
- "
[Bắt đầu bằng cách sử dụng HTML5 WebSockets hiện nay](http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/)" (Nettuts+): Hãy xem xét cách chạy một máy chủ WebSocket bằng PHP và xem cách xây dựng một máy khách để gửi và nhận các thông báo đến nó qua giao thức WebSocket.
- "
[API WebSocket](http://dev.w3.org/html5/websockets/)" (W3C, 07.2011): Đặc tả này định nghĩa một API cho phép các trang web sử dụng giao thức WebSocket để truyền thông hai chiều với một máy chủ từ xa.
- Tìm hiểu thêm về
[hỗ trợ xử lý không đồng bộ trong Servlet 3.0](http://hi.baidu.com/rangemq/blog/item/e65c5b272cb6b30d918f9da0.html).
- Weblog của Philip McCarthy có nhiều bài viết về
[Comet & Java: Threaded so với Nonblocking I/O](http://iobound.com/2008/11/comet-nio/). [Hướng dẫn Rox Java NIO](http://rox-xmlrpc.sourceforge.net/niotut/)xem trải nghiệm của tác giả khi sử dụng các thư viện Java NIO với những gợi ý, lời khuyên, dẫn dắt và những khuyến cáo.
- Trên Wikipedia, hãy đọc về:
[Khám phá Reverse AJAX](http://gmapsdotnetcontrol.blogspot.com/2006/08/exploring-reverse-ajax-ajax.html): Giới thiệu về một số kỹ thuật Reverse-Ajax.
- "
[Truyền thông giữa các miền với JSONP, Phần 1: Kết hợp JSONP và jQuery để nhanh chóng xây dựng các mashup mạnh](https://www.ibm.com/developerworks/web/library/wa-aj-jsonp1/?S_TACT=105AGY75)" (developerWorks, 02.2009): Hãy tìm hiểu cách bạn có thể kết hợp một kỹ thuật cuộc gọi giữa các miền mờ (JSONP) và một thư viện JavaScript linh hoạt ( jQuery) để nhanh chóng xây dựng các mashup (ứng dụng hỗn hợp) mạnh mẽ đáng ngạc nhiên.
- "
[Xây dựng các ứng dụng Ajax với Ext JS](http://www.ibm.com/developerworks/web/library/wa-aj-extjs/?S_TACT=105AGY75)" (developerWorks, 07.2008): Tổng quan về các khái niệm thiết kế JavaScript hướng đối tượng đằng sau Ext JS và cho thấy cách sử dụng framework Ext JS cho các phần tử UI của ứng dụng Internet giàu nội dung.
- "
[So sánh các khung công tác JavaScript](http://www.ibm.com/developerworks/web/library/wa-jsframeworks/?S_TACT=105AGY75)" (developerWorks, 02.2010): Tổng quan về các framework để tăng cường phát triển JavaScript.
- "
[Mastering Ajax, Phần 2: Thực hiện các yêu cầu không đồng bộ với Javascript và Ajax](http://www.ibm.com/developerworks/web/library/wa-ajaxintro2/?S_TACT=105AGY75)" (developerWorks, 01.2006): Tìm hiểu cách sử dụng Ajax và đối tượng XMLHttpRequest để tạo ra một mô hình yêu cầu/phản hồi mà không cần người dùng phải rời khỏi trang web.
- "
[Tạo các ứng dụng Ajax cho Web di động](http://www.ibm.com/developerworks/opensource/library/wa-aj-mobileajax/?S_TACT=105AGY75)" (developerWorks, 03.2010): Tìm hiểu cách xây dựng các ứng dụng điện thoại thông minh giữa các trình duyệt khi sử dụng Ajax.
- "
[Nên sử dụng Ajax ở đâu và vào lúc nào trong các ứng dụng của bạn](http://www.ibm.com/developerworks/web/library/wa-aj-when/?S_TACT=105AGY75)" (developerWorks, 02.2008): Hãy xem cách bạn có thể sử dụng Ajax để cải thiện trang web của mình để tránh những trải nghiệm người dùng xấu.
- "
[Cải thiện hiệu năng của các ứng dụng Web 2.0](http://www.ibm.com/developerworks/web/library/wa-aj-cache/?S_TACT=105AGY75)" (developerWorks, 12.2009): Khám phá cơ chế bộ nhớ đệm phía trình duyệt khác nhau.
- "
[Giới thiệu về JSON](http://json.org)" (JSON.org): Giới thiệu về cú pháp JSON. [Vùng phát triển Web trên developerWorks](http://www.ibm.com/developerworks/web/?S_TACT=105AGY75): Tìm các bài viết trình bày các giải pháp dựa trên web khác nhau. [developerWorks podcasts](http://www.ibm.com/developerworks/podcast/?S_TACT=105AGY75&S_CMP=ART): Nghe các cuộc phỏng vấn và các cuộc thảo luận thú vị dành cho các nhà phát triển phần mềm. [Webcast và các sự kiện kỹ thuật của developerWorks](http://www.ibm.com/developerworks/offers/techbriefings/?S_TACT=105AGY75): Cập nhật công nghệ thông qua các sự kiện và webcast của developerWorks.
### Lấy sản phẩm và công nghệ
[Jetty](http://www.eclipse.org/jetty/): Nhận Jetty, một máy chủ web và container javax.servlet, thêm sự hỗ trợ WebSockets. [Tài liệu hướng dẫn I/O nâng cao Tomcat](http://tomcat.apache.org/tomcat-6.0-doc/aio.html)của Apache: Nhận các liên kết có giá trị, Hướng dẫn người dùng, tài liệu tham khảo và các chỉ dẫn Phát triển Tomcat của Apache. [Framework Grizzly NIO](http://grizzly.java.net/): Giúp bạn tận dụng lợi thế của API Java NIO. [Ví dụ về Grizzly Comet](http://antwerkz.com/grizzly-2-0-and-comet/): Xem những mà bạn có thể thay đổi được trên ứng dụng hiện có trước khi bắt đầu xây dựng một cái mới. [Glassfish Application Server](http://glassfish.java.net/public/downloadsindex.html#top): Nhận ấn bản nguồn mở chính thức của máy chủ GlassFish. [Socket.IO Java](https://github.com/tadglines/Socket.IO-Java): Tìm hiểu về dự án của Ovea với những cập nhật mới nhất.
- Apache
[Maven](http://maven.apache.org/): Nhận Maven, một công cụ gộp và quản lý dự án phần mềm. [Bộ công cụ phát triển Java, Phiên bản 6](http://www.oracle.com/technetwork/java/javase/downloads/index.html): Nhận nền tảng Java, ấn bản chuẩn (Java SE), cho phép bạn phát triển và triển khai các ứng dụng Java trên các máy tính để bàn và các máy chủ, cũng như trong các môi trường nhúng đòi hỏi khắt khe hiện nay. [Hãy dùng thử hơn 100 phần mềm IBM](http://www.ibm.com/developerworks/downloads/product.html?S_TACT=105AGY75)miễn phí. Tải về hay đăng nhập vào bản dùng thử trực tuyến, làm việc với sản phẩm trong một môi trường sandbox hoặc truy cập nó thông qua đám mây.
### Thảo luận
[Tham gia diễn đàn thảo luận](http://www.ibm.com/developerworks/community/).
- Tạo
[hồ sơ developerWorks](https://www.ibm.com/developerworks/mydeveloperworks/profiles/home.do?lang=en&S_TACT=105AGY75)của bạn ngày hôm nay và [thiết lập một danh sách theo dõi](https://www.ibm.com/developerworks/mydeveloperworks/homepage/help/doc/en/homepage_watchlistuse.html?S_TACT=105AGY75)về Reverse Ajax. Kết nối và duy trì kết nối với [cộng đồng developerWorks](http://www.ibm.com/developerworks/mydeveloperworks/#community?S_TACT=105AGY75).
- Tìm
[các thành viên developerWorks khác quan tâm đến sự phát triển web](https://www.ibm.com/developerworks/mydeveloperworks/profiles/html/keywordSearch.do?keyword=web&lang=en&S_TACT=105AGY75).
- Chia sẻ những gì bạn biết:
[Tham gia một trong các nhóm developerWorks của chúng tôi tập trung vào các chủ đề web](https://www.ibm.com/developerworks/mydeveloperworks/search/web/search/?S_TACT=105AGY75).
- Roland Barcia nói về
[Web 2.0 và phần mềm trung gian](https://www.ibm.com/developerworks/mydeveloperworks/blogs/barcia/?lang=en&S_TACT=105AGY75)trong blog của mình.
- Theo dõi
[các dấu trang chia sẻ về các chủ đề web](https://www.ibm.com/developerworks/mydeveloperworks/bookmarks/html?ps=50&search=web&searchType=mode&sortOrder=desc&lang=en&S_TACT=105AGY75)của các thành viên developerWorks.
- Nhận các câu trả lời nhanh chóng: Truy cập vào
[diễn đàn Các ứng dụng Web 2.0](http://www.ibm.com/developerworks/forums/forum.jspa?forumID=1182).
- Nhận các câu trả lời nhanh chóng: Truy cập vào
[diễn đàn Ajax](http://www.ibm.com/developerworks/forums/forum.jspa?forumID=965).
## Bình luận
[Vùng dữ liệu trên developerWorks](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp)
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
[Vùng mã nguồn mở trên developerWorks](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp)
Xem các bài viết về HTML, CSS, JavaScript,...
[Điện toán đám mây](http://www.ibm.com/developerworks/vn/views/cloud/libraryview.jsp)
Tìm hiểu về điện toán đám mây

Content-Language: en-US


text:
HD
Ba Chàng Ngốc (The Three Stooges) (2012)
Thể loại: Hài Hước
Diễn viên: Sean Hayes, Chris Diamantopoulos, Will Sasso
Đạo diễn: Bobby Farrelly, Peter Farrelly
Quốc gia: Mỹ
Năm phát hành: 2012
Thời lượng: 83 phút
Lượt xem: 648188
Ba Chàng Ngốc (The Three Stooges) (2012)Bị bỏ rơi trước thềm cửa một trại trẻ mồ côi của các ni cô, 3 cậu bé sơ sinh Moe, Larry và Curly đã lớn lên cùng nhau và trải qua vô vàn những rủi ro và bất hạnh của những kẻ ngốc nghếch. Giờ đây, để cứu lấy ngôi nhà thời thơ ấu, nhóm ba chàng ngốc bị dính líu vào một kế hoạch giết người rất kỳ quặc, đồng thời họ lại trở thành những ngôi sao trong một chương trình truyền hình thực tế vô cùng thành công.
Phim liên quan với: Ba Chàng Ngốc
Bạn phải cài đặt Flash player mới xem được phim
TagsBa, Chang, Ngoc, The, Three, Stooges, 2012, Bobby Farrelly, Peter Farrelly, Sean Hayes, Chris Diamantopoulos, Will Sasso, Phim Hai Huoc, Phim My, Ba Chàng Ngốc, The Three Stooges, Ba Chang Ngoc, Ba Chàng Ngốc online, The Three Stooges online, Ba Chang Ngoc online, Ba Chàng Ngốc vietsub online, The Three Stooges vietsub online, Ba Chang Ngoc vietsub online, xem Ba Chang Ngoc, xem phim nhanh Ba Chàng Ngốc, xem phim nhanh Ba Chang Ngoc, xem phim nhanh The Three Stooges, The Three Stooges full, Ba Chang Ngoc full, Ba Chàng Ngốc full, Ba Chàng Ngốc hd, Ba Chang Ngoc hd, The Three Stooges hd, phim nhanh The Three Stooges, phim nhanh Ba Chang Ngoc, phim nhanh Ba Chàng Ngốc, Download The Three Stooges, Download phim Ba Chang Ngoc, Download Ba Chàng Ngốc, phim Ba Chàng Ngốc, phim The Three Stooges, phim Ba Chang Ngoc, xem phim Ba Chàng Ngốc, xem phim Ba Chang Ngoc, xem phim The Three Stooges, Ba Chang Ngoc 4share, Ba Chang Ngoc fshare, Ba Chang Ngoc mediafire, Ba Chang Ngoc phimphim.com, Ba Chang Ngoc 22vn.com, Ba Chang Ngoc v1vn.com, Ba Chang Ngoc xuongphim.com, Ba Chang Ngoc kenh88.com, Ba Chang Ngoc phim47.com, xem online The Three Stooges, xem online Ba Chang Ngoc, xem online Ba Chàng Ngốc

markdown:
![](/image.php?w=160&h=213&name=data/movie/fullsize/2012/07/15/175_poster.jpg)
HD
# Ba Chàng Ngốc (The Three Stooges) (2012)
Thể loại:
[Hài Hước](/the-loai/7/hai-huoc.html)
Diễn viên:
[Sean Hayes](/dien-vien/sean hayes.html), [Chris Diamantopoulos](/dien-vien/chris diamantopoulos.html), [Will Sasso](/dien-vien/will sasso.html)
Đạo diễn:
[Bobby Farrelly](/dao-dien/bobby farrelly.html), [Peter Farrelly](/dao-dien/peter farrelly.html)
Quốc gia:
[Mỹ](/quoc-gia/23/my.html)
Năm phát hành: 2012
Thời lượng: 83 phút
Lượt xem: 648188
## Ba Chàng Ngốc (The Three Stooges) (2012)Bị bỏ rơi trước thềm cửa một trại trẻ mồ côi của các ni cô, 3 cậu bé sơ sinh Moe, Larry và Curly đã lớn lên cùng nhau và trải qua vô vàn những rủi ro và bất hạnh của những kẻ ngốc nghếch. Giờ đây, để cứu lấy ngôi nhà thời thơ ấu, nhóm ba chàng ngốc bị dính líu vào một kế hoạch giết người rất kỳ quặc, đồng thời họ lại trở thành những ngôi sao trong một chương trình truyền hình thực tế vô cùng thành công.
### Phim liên quan với: Ba Chàng Ngốc
Bạn phải cài đặt Flash player mới xem được phim
**Tags** [Ba](http://phim4v.com/tim-kiem/ba.html), [Chang](http://phim4v.com/tim-kiem/chang.html), [Ngoc](http://phim4v.com/tim-kiem/ngoc.html), [The](http://phim4v.com/tim-kiem/the.html), [Three](http://phim4v.com/tim-kiem/three.html), [Stooges](http://phim4v.com/tim-kiem/stooges.html), [2012](http://phim4v.com/tim-kiem/2012.html), [Bobby Farrelly](http://phim4v.com/tag/175/bobby-farrelly.html), [Peter Farrelly](http://phim4v.com/tag/175/peter-farrelly.html), [Sean Hayes](http://phim4v.com/tag/175/sean-hayes.html), [Chris Diamantopoulos](http://phim4v.com/tag/175/chris-diamantopoulos.html), [Will Sasso](http://phim4v.com/tag/175/will-sasso.html), [Phim Hai Huoc](http://phim4v.com/tag/175/phim-hai-huoc.html), [Phim My](http://phim4v.com/tag/175/phim-my.html), [Ba Chàng Ngốc](http://phim4v.com/tag/175/ba-chàng-ngốc.html), [The Three Stooges](http://phim4v.com/tag/175/the-three-stooges.html), [Ba Chang Ngoc](http://phim4v.com/tag/175/ba-chang-ngoc.html), [Ba Chàng Ngốc online](http://phim4v.com/tag/175/ba-chàng-ngốc-online.html), [The Three Stooges online](http://phim4v.com/tag/175/the-three-stooges-online.html), [Ba Chang Ngoc online](http://phim4v.com/tag/175/ba-chang-ngoc-online.html), [Ba Chàng Ngốc vietsub online](http://phim4v.com/tag/175/ba-chàng-ngốc-vietsub-online.html), [The Three Stooges vietsub online](http://phim4v.com/tag/175/the-three-stooges-vietsub-online.html), [Ba Chang Ngoc vietsub online](http://phim4v.com/tag/175/the-three-stooges-vietsub-online.html), [xem Ba Chang Ngoc](http://phim4v.com/tag/175/xem-ba-chàng-ngốc.html), [xem phim nhanh Ba Chàng Ngốc](http://phim4v.com/tag/175/xem-phim-nhanh-ba-chàng-ngốc.html), [xem phim nhanh Ba Chang Ngoc](http://phim4v.com/tag/175/xem-phim-nhanh-ba-chang-ngoc.html), [xem phim nhanh The Three Stooges](http://phim4v.com/tag/175/xem-phim-nhanh-the-three-stooges.html), [The Three Stooges full](http://phim4v.com/tag/175/the-three-stooges-full.html), [Ba Chang Ngoc full](http://phim4v.com/tag/175/kthe-three-stooges-full.html), [Ba Chàng Ngốc full](http://phim4v.com/tag/175/ba-chàng-ngốc-full.html), [Ba Chàng Ngốc hd](http://phim4v.com/tag/175/ba-chàng-ngốc-hd.html), [Ba Chang Ngoc hd](http://phim4v.com/tag/175/ba-chang-ngoc-hd.html), [The Three Stooges hd](http://phim4v.com/tag/175/the-three-stooges-hd.html), [phim nhanh The Three Stooges](http://phim4v.com/tag/175/phim-nhanh-the-three-stooges.html), [phim nhanh Ba Chang Ngoc](http://phim4v.com/tag/175/phim-nhanh-the-three-stooges.html), [phim nhanh Ba Chàng Ngốc](http://phim4v.com/tag/175/phim-nhanh-ba-chàng-ngốc.html), [Download The Three Stooges](http://phim4v.com/tag/175/download-the-three-stooges.html), [Download phim Ba Chang Ngoc](http://phim4v.com/tag/175/download-phim-ba-chang-ngoc.html), [Download Ba Chàng Ngốc](http://phim4v.com/tag/175/download-ba-chàng-ngốc.html), [phim Ba Chàng Ngốc](http://phim4v.com/tag/175/phim-ba-chàng-ngốc.html), [phim The Three Stooges](http://phim4v.com/tag/175/phim-the-three-stooges.html), [phim Ba Chang Ngoc](http://phim4v.com/tag/175/phim-ba-chang-ngoc.html), [xem phim Ba Chàng Ngốc](http://phim4v.com/tag/175/xem-phim-ba-chàng-ngốc.html), [xem phim Ba Chang Ngoc](http://phim4v.com/tag/175/xem-phim-ba-chang-ngoc.html), [xem phim The Three Stooges](http://phim4v.com/tag/175/xem-phim-the-three-stooges.html), [Ba Chang Ngoc 4share](http://phim4v.com/tag/175/ba-chang-ngoc-4share.html), [Ba Chang Ngoc fshare](http://phim4v.com/tag/175/ba-chang-ngoc-fshare.html), [Ba Chang Ngoc mediafire](http://phim4v.com/tag/175/ba-chang-ngoc-mediafire.html), [Ba Chang Ngoc phimphim.com](http://phim4v.com/tag/175/ba-chang-ngoc-phimphim.com.html), [Ba Chang Ngoc 22vn.com](http://phim4v.com/tag/175/ba-chang-ngoc-22vn.com.html), [Ba Chang Ngoc v1vn.com](http://phim4v.com/tag/175/ba-chang-ngoc-v1vn.com.html), [Ba Chang Ngoc xuongphim.com](http://phim4v.com/tag/175/ba-chang-ngoc-xuongphim.com.html), [Ba Chang Ngoc kenh88.com](http://phim4v.com/tag/175/ba-chang-ngoc-kenh88.com.html), [Ba Chang Ngoc phim47.com](http://phim4v.com/tag/175/ba-chang-ngoc-phim47.com.html), [xem online The Three Stooges](http://phim4v.com/tag/175/xem-online-the-three-stooges.html), [xem online Ba Chang Ngoc](http://phim4v.com/tag/175/xem-online-the-three-stooges.html), [xem online Ba Chàng Ngốc](http://phim4v.com/tag/175/xem-online-ba-chàng-ngốc.html)

WARC-Truncated: length

Server: cloudflare-nginx


text:
Being Good Plastic Coins
Sản phẩm này được bán tại www.amazon.com
Thương hiệu: US Toy
Ngay sau khi quý khách đặt hàng và thanh toán, ShipTo.vn sẽ mua sản phẩm từ Mỹ và vận chuyển về Việt Nam
Thời gian giao hàng dự kiến từ 10 - 20 ngày làm việc kể từ khi thanh toán
Chọn số lượng:Xem chi tiết sản phẩm tại www.amazon.com
-
Giá giảm 10-50%
so với hàng xách tay
-
100% sản phẩm thật
được mua trực tiếp từ Mỹ
-
Hoàn tiền 100%
nếu hàng bị thất lạc hư hỏng
-
Miễn phí dịch vụ
nếu giao hàng trễ
Product Features
Product Description
Product information
Mua hàng theo yêu cầu
-
1.Đặt mua
Đặt mua những sản phẩm được ShipTo.vn tuyển chọn, hoặc gửi link của sản phẩm muốn mua để nhận báo giá.
-
2.Thanh toán
Thanh toán cho ShipTo.vn (tiền mặt, chuyển khoản, hoặc thẻ tín dụng).
-
3.Vận chuyển
ShipTo.vn mua hàng từ nước ngoài, chuyển về Việt Nam, và lo tất cả thủ tục hải quan.
-
4. Giao hàng
ShipTo.vn giao hàng tận nơi miễn phí trong vòng 10 - 20 ngày làm việc kể từ ngày thanh toán.
Vận chuyển theo yêu cầu
-
1.Đăng ký địa chỉ Mỹ
Đăng ký tài khoản ShipTo.vn có ngay địa chỉ riêng tại Mỹ.
-
2.Tự mua hàng
Tự mua tại bất kỳ website nào và chuyển hàng tới địa chỉ Mỹ của bạn.
-
3.Vận chuyển
ShipTo.vn nhận hàng, kiểm hàng và chuyển quốc tế.
-
4. Giao hàng
ShipTo.vn thông quan, giao hàng tận tay và thu tiền dịch vụ.
ĐĂNG KÝ EMAIL ĐỂ BẮT ĐẦU

markdown:
[0](/mua-hang/gio-hang)
# Being Good Plastic Coins
Sản phẩm này được bán tại
[www.amazon.com](http://www.amazon.com/US-Toy-Being-Plastic-Coins/dp/B00362ONJ8)
Thương hiệu:
[US Toy](/thuong-hieu/us-toy_th631)
Ngay sau khi quý khách đặt hàng và thanh toán, ShipTo.vn sẽ mua sản phẩm từ Mỹ và vận chuyển về Việt Nam
Thời gian giao hàng dự kiến từ 10 - 20 ngày làm việc kể từ khi thanh toán
Chọn số lượng:
[Xem chi tiết sản phẩm tại www.amazon.com](http://www.amazon.com/US-Toy-Being-Plastic-Coins/dp/B00362ONJ8)
-
Giá giảm 10-50%
so với hàng xách tay
-
100% sản phẩm thật
được mua trực tiếp từ Mỹ
-
Hoàn tiền 100%
nếu hàng bị thất lạc hư hỏng
-
Miễn phí dịch vụ
nếu giao hàng trễ
#### Product Features
#### Product Description
#### Product information
|Product Dimensions||1.2 x 1 x 0.5 inches|
|Shipping Weight||0.4 pounds|
|ASIN||B00362ONJ8|
|Item model number|
#### Mua hàng theo yêu cầu
-
1.Đặt mua
Đặt mua những sản phẩm được ShipTo.vn tuyển chọn, hoặc gửi link của sản phẩm muốn mua để nhận báo giá.
-
2.Thanh toán
Thanh toán cho ShipTo.vn (tiền mặt, chuyển khoản, hoặc thẻ tín dụng).
-
3.Vận chuyển
ShipTo.vn mua hàng từ nước ngoài, chuyển về Việt Nam, và lo tất cả thủ tục hải quan.
-
4. Giao hàng
ShipTo.vn giao hàng tận nơi miễn phí trong vòng 10 - 20 ngày làm việc kể từ ngày thanh toán.
#### Vận chuyển theo yêu cầu
-
1.Đăng ký địa chỉ Mỹ
Đăng ký tài khoản ShipTo.vn có ngay địa chỉ riêng tại Mỹ.
-
2.Tự mua hàng
Tự mua tại bất kỳ website nào và chuyển hàng tới địa chỉ Mỹ của bạn.
-
3.Vận chuyển
ShipTo.vn nhận hàng, kiểm hàng và chuyển quốc tế.
-
4. Giao hàng
ShipTo.vn thông quan, giao hàng tận tay và thu tiền dịch vụ.
ĐĂNG KÝ EMAIL ĐỂ BẮT ĐẦU

Cache-Control: private, no-cache="Set-Cookie"

Content-Type: text/html; charset=utf-8

Set-Cookie: website_id=1; expires=Sat, 24-Mar-2018 17:00:00 GMT; path=/


text:
Carson Dellosa Leaves Cut-Outs (120017)
Sản phẩm này được bán tại www.amazon.com
Thương hiệu: Carson-Dellosa
Ngay sau khi quý khách đặt hàng và thanh toán, ShipTo.vn sẽ mua sản phẩm từ Mỹ và vận chuyển về Việt Nam
Thời gian giao hàng dự kiến từ 10 - 20 ngày làm việc kể từ khi thanh toán
Chọn số lượng:Xem chi tiết sản phẩm tại www.amazon.com
-
Giá giảm 10-50%
so với hàng xách tay
-
100% sản phẩm thật
được mua trực tiếp từ Mỹ
-
Hoàn tiền 100%
nếu hàng bị thất lạc hư hỏng
-
Miễn phí dịch vụ
nếu giao hàng trễ
Product Features
Printed on card stock
Each shape approx. 3" x 3"-an ideal size to use with Carson-Dellosa calendars
36 pieces
Bonus design on back allows for sorting and patterning activities
Product Description
Product information
Mua hàng theo yêu cầu
-
1.Đặt mua
Đặt mua những sản phẩm được ShipTo.vn tuyển chọn, hoặc gửi link của sản phẩm muốn mua để nhận báo giá.
-
2.Thanh toán
Thanh toán cho ShipTo.vn (tiền mặt, chuyển khoản, hoặc thẻ tín dụng).
-
3.Vận chuyển
ShipTo.vn mua hàng từ nước ngoài, chuyển về Việt Nam, và lo tất cả thủ tục hải quan.
-
4. Giao hàng
ShipTo.vn giao hàng tận nơi miễn phí trong vòng 10 - 20 ngày làm việc kể từ ngày thanh toán.
Vận chuyển theo yêu cầu
-
1.Đăng ký địa chỉ Mỹ
Đăng ký tài khoản ShipTo.vn có ngay địa chỉ riêng tại Mỹ.
-
2.Tự mua hàng
Tự mua tại bất kỳ website nào và chuyển hàng tới địa chỉ Mỹ của bạn.
-
3.Vận chuyển
ShipTo.vn nhận hàng, kiểm hàng và chuyển quốc tế.
-
4. Giao hàng
ShipTo.vn thông quan, giao hàng tận tay và thu tiền dịch vụ.
ĐĂNG KÝ EMAIL ĐỂ BẮT ĐẦU

markdown:
[0](/mua-hang/gio-hang)
# Carson Dellosa Leaves Cut-Outs (120017)
Sản phẩm này được bán tại
[www.amazon.com](http://www.amazon.com/Carson-Dellosa-Leaves-Cut-Outs-120017/dp/1594415897)
Thương hiệu:
[Carson-Dellosa](/thuong-hieu/carson-dellosa_th24)
Ngay sau khi quý khách đặt hàng và thanh toán, ShipTo.vn sẽ mua sản phẩm từ Mỹ và vận chuyển về Việt Nam
Thời gian giao hàng dự kiến từ 10 - 20 ngày làm việc kể từ khi thanh toán
Chọn số lượng:
[Xem chi tiết sản phẩm tại www.amazon.com](http://www.amazon.com/Carson-Dellosa-Leaves-Cut-Outs-120017/dp/1594415897)
-
Giá giảm 10-50%
so với hàng xách tay
-
100% sản phẩm thật
được mua trực tiếp từ Mỹ
-
Hoàn tiền 100%
nếu hàng bị thất lạc hư hỏng
-
Miễn phí dịch vụ
nếu giao hàng trễ
#### Product Features
Printed on card stock
Each shape approx. 3" x 3"-an ideal size to use with Carson-Dellosa calendars
36 pieces
Bonus design on back allows for sorting and patterning activities
#### Product Description
#### Product information
|Product Dimensions||5.2 x 3.5 x 0.2 inches|
|Shipping Weight||0.05 pounds|
|ASIN||1594415897|
|Item model number||120017|
#### Mua hàng theo yêu cầu
-
1.Đặt mua
Đặt mua những sản phẩm được ShipTo.vn tuyển chọn, hoặc gửi link của sản phẩm muốn mua để nhận báo giá.
-
2.Thanh toán
Thanh toán cho ShipTo.vn (tiền mặt, chuyển khoản, hoặc thẻ tín dụng).
-
3.Vận chuyển
ShipTo.vn mua hàng từ nước ngoài, chuyển về Việt Nam, và lo tất cả thủ tục hải quan.
-
4. Giao hàng
ShipTo.vn giao hàng tận nơi miễn phí trong vòng 10 - 20 ngày làm việc kể từ ngày thanh toán.
#### Vận chuyển theo yêu cầu
-
1.Đăng ký địa chỉ Mỹ
Đăng ký tài khoản ShipTo.vn có ngay địa chỉ riêng tại Mỹ.
-
2.Tự mua hàng
Tự mua tại bất kỳ website nào và chuyển hàng tới địa chỉ Mỹ của bạn.
-
3.Vận chuyển
ShipTo.vn nhận hàng, kiểm hàng và chuyển quốc tế.
-
4. Giao hàng
ShipTo.vn thông quan, giao hàng tận tay và thu tiền dịch vụ.
[ Mở rộng](javascript:void(0);) [ Thu gọn](javascript:void(0);)
ĐĂNG KÝ EMAIL ĐỂ BẮT ĐẦU


text:
NECA Simpsons 25th Anniversary Series 4 Tom Jones 5" Celebrity Action Figure
Sản phẩm này được bán tại www.amazon.com
Thương hiệu: NECA
Ngay sau khi quý khách đặt hàng và thanh toán, ShipTo.vn sẽ mua sản phẩm từ Mỹ và vận chuyển về Việt Nam
Thời gian giao hàng dự kiến từ 10 - 20 ngày làm việc kể từ khi thanh toán
Chọn số lượng:Xem chi tiết sản phẩm tại www.amazon.com
-
Giá giảm 10-50%
so với hàng xách tay
-
100% sản phẩm thật
được mua trực tiếp từ Mỹ
-
Hoàn tiền 100%
nếu hàng bị thất lạc hư hỏng
-
Miễn phí dịch vụ
nếu giao hàng trễ
Product Features
Incredible likeness to Tom Jones
Includes character specific accessory
Product Description
Product information
Mua hàng theo yêu cầu
-
1.Đặt mua
Đặt mua những sản phẩm được ShipTo.vn tuyển chọn, hoặc gửi link của sản phẩm muốn mua để nhận báo giá.
-
2.Thanh toán
Thanh toán cho ShipTo.vn (tiền mặt, chuyển khoản, hoặc thẻ tín dụng).
-
3.Vận chuyển
ShipTo.vn mua hàng từ nước ngoài, chuyển về Việt Nam, và lo tất cả thủ tục hải quan.
-
4. Giao hàng
ShipTo.vn giao hàng tận nơi miễn phí trong vòng 10 - 20 ngày làm việc kể từ ngày thanh toán.
Vận chuyển theo yêu cầu
-
1.Đăng ký địa chỉ Mỹ
Đăng ký tài khoản ShipTo.vn có ngay địa chỉ riêng tại Mỹ.
-
2.Tự mua hàng
Tự mua tại bất kỳ website nào và chuyển hàng tới địa chỉ Mỹ của bạn.
-
3.Vận chuyển
ShipTo.vn nhận hàng, kiểm hàng và chuyển quốc tế.
-
4. Giao hàng
ShipTo.vn thông quan, giao hàng tận tay và thu tiền dịch vụ.
ĐĂNG KÝ EMAIL ĐỂ BẮT ĐẦU

markdown:
[0](/mua-hang/gio-hang)
# NECA Simpsons 25th Anniversary Series 4 Tom Jones 5" Celebrity Action Figure
Sản phẩm này được bán tại
[www.amazon.com](http://www.amazon.com/NECA-Simpsons-Anniversary-Series-Celebrity/dp/B00P1U6DVE)
Thương hiệu:
[NECA](/thuong-hieu/neca_th952)
Ngay sau khi quý khách đặt hàng và thanh toán, ShipTo.vn sẽ mua sản phẩm từ Mỹ và vận chuyển về Việt Nam
Thời gian giao hàng dự kiến từ 10 - 20 ngày làm việc kể từ khi thanh toán
Chọn số lượng:
[Xem chi tiết sản phẩm tại www.amazon.com](http://www.amazon.com/NECA-Simpsons-Anniversary-Series-Celebrity/dp/B00P1U6DVE)
-
Giá giảm 10-50%
so với hàng xách tay
-
100% sản phẩm thật
được mua trực tiếp từ Mỹ
-
Hoàn tiền 100%
nếu hàng bị thất lạc hư hỏng
-
Miễn phí dịch vụ
nếu giao hàng trễ
#### Product Features
Incredible likeness to Tom Jones
Includes character specific accessory
#### Product Description
#### Product information
|Product Dimensions||10 x 4.7 x 2.3 inches|
|Shipping Weight||0.15 pounds|
|ASIN||B00P1U6DVE|
|Item model number||16062|
#### Mua hàng theo yêu cầu
-
1.Đặt mua
Đặt mua những sản phẩm được ShipTo.vn tuyển chọn, hoặc gửi link của sản phẩm muốn mua để nhận báo giá.
-
2.Thanh toán
Thanh toán cho ShipTo.vn (tiền mặt, chuyển khoản, hoặc thẻ tín dụng).
-
3.Vận chuyển
ShipTo.vn mua hàng từ nước ngoài, chuyển về Việt Nam, và lo tất cả thủ tục hải quan.
-
4. Giao hàng
ShipTo.vn giao hàng tận nơi miễn phí trong vòng 10 - 20 ngày làm việc kể từ ngày thanh toán.
#### Vận chuyển theo yêu cầu
-
1.Đăng ký địa chỉ Mỹ
Đăng ký tài khoản ShipTo.vn có ngay địa chỉ riêng tại Mỹ.
-
2.Tự mua hàng
Tự mua tại bất kỳ website nào và chuyển hàng tới địa chỉ Mỹ của bạn.
-
3.Vận chuyển
ShipTo.vn nhận hàng, kiểm hàng và chuyển quốc tế.
-
4. Giao hàng
ShipTo.vn thông quan, giao hàng tận tay và thu tiền dịch vụ.
[ Mở rộng](javascript:void(0);) [ Thu gọn](javascript:void(0);)
ĐĂNG KÝ EMAIL ĐỂ BẮT ĐẦU


text:
Sticky Glow Eyes - 12 per unit
Sản phẩm này được bán tại www.amazon.com
Thương hiệu: SmallToys
Ngay sau khi quý khách đặt hàng và thanh toán, ShipTo.vn sẽ mua sản phẩm từ Mỹ và vận chuyển về Việt Nam
Thời gian giao hàng dự kiến từ 10 - 20 ngày làm việc kể từ khi thanh toán
Chọn số lượng:Xem chi tiết sản phẩm tại www.amazon.com
-
Giá giảm 10-50%
so với hàng xách tay
-
100% sản phẩm thật
được mua trực tiếp từ Mỹ
-
Hoàn tiền 100%
nếu hàng bị thất lạc hư hỏng
-
Miễn phí dịch vụ
nếu giao hàng trễ
Product Features
Halloween
Eyeball
Sticky Eyes
Spook House specialty!
Product Description
Product information
Mua hàng theo yêu cầu
-
1.Đặt mua
Đặt mua những sản phẩm được ShipTo.vn tuyển chọn, hoặc gửi link của sản phẩm muốn mua để nhận báo giá.
-
2.Thanh toán
Thanh toán cho ShipTo.vn (tiền mặt, chuyển khoản, hoặc thẻ tín dụng).
-
3.Vận chuyển
ShipTo.vn mua hàng từ nước ngoài, chuyển về Việt Nam, và lo tất cả thủ tục hải quan.
-
4. Giao hàng
ShipTo.vn giao hàng tận nơi miễn phí trong vòng 10 - 20 ngày làm việc kể từ ngày thanh toán.
Vận chuyển theo yêu cầu
-
1.Đăng ký địa chỉ Mỹ
Đăng ký tài khoản ShipTo.vn có ngay địa chỉ riêng tại Mỹ.
-
2.Tự mua hàng
Tự mua tại bất kỳ website nào và chuyển hàng tới địa chỉ Mỹ của bạn.
-
3.Vận chuyển
ShipTo.vn nhận hàng, kiểm hàng và chuyển quốc tế.
-
4. Giao hàng
ShipTo.vn thông quan, giao hàng tận tay và thu tiền dịch vụ.
ĐĂNG KÝ EMAIL ĐỂ BẮT ĐẦU

markdown:
[0](/mua-hang/gio-hang)
# Sticky Glow Eyes - 12 per unit
Sản phẩm này được bán tại
[www.amazon.com](http://www.amazon.com/Sticky-Glow-Eyes-12-unit/dp/B0071MSI68)
Thương hiệu:
[SmallToys](/thuong-hieu/smalltoys_th7665)
Ngay sau khi quý khách đặt hàng và thanh toán, ShipTo.vn sẽ mua sản phẩm từ Mỹ và vận chuyển về Việt Nam
Thời gian giao hàng dự kiến từ 10 - 20 ngày làm việc kể từ khi thanh toán
Chọn số lượng:
[Xem chi tiết sản phẩm tại www.amazon.com](http://www.amazon.com/Sticky-Glow-Eyes-12-unit/dp/B0071MSI68)
-
Giá giảm 10-50%
so với hàng xách tay
-
100% sản phẩm thật
được mua trực tiếp từ Mỹ
-
Hoàn tiền 100%
nếu hàng bị thất lạc hư hỏng
-
Miễn phí dịch vụ
nếu giao hàng trễ
#### Product Features
Halloween
Eyeball
Sticky Eyes
Spook House specialty!
#### Product Description
#### Product information
|Product Dimensions||5.9 x 4 x 1 inches|
|Shipping Weight||0.1 pounds|
|ASIN||B0071MSI68|
|Item model number|
#### Mua hàng theo yêu cầu
-
1.Đặt mua
Đặt mua những sản phẩm được ShipTo.vn tuyển chọn, hoặc gửi link của sản phẩm muốn mua để nhận báo giá.
-
2.Thanh toán
Thanh toán cho ShipTo.vn (tiền mặt, chuyển khoản, hoặc thẻ tín dụng).
-
3.Vận chuyển
ShipTo.vn mua hàng từ nước ngoài, chuyển về Việt Nam, và lo tất cả thủ tục hải quan.
-
4. Giao hàng
ShipTo.vn giao hàng tận nơi miễn phí trong vòng 10 - 20 ngày làm việc kể từ ngày thanh toán.
#### Vận chuyển theo yêu cầu
-
1.Đăng ký địa chỉ Mỹ
Đăng ký tài khoản ShipTo.vn có ngay địa chỉ riêng tại Mỹ.
-
2.Tự mua hàng
Tự mua tại bất kỳ website nào và chuyển hàng tới địa chỉ Mỹ của bạn.
-
3.Vận chuyển
ShipTo.vn nhận hàng, kiểm hàng và chuyển quốc tế.
-
4. Giao hàng
ShipTo.vn thông quan, giao hàng tận tay và thu tiền dịch vụ.
ĐĂNG KÝ EMAIL ĐỂ BẮT ĐẦU


text:
Saturday, January 21, 2012
Go Fish with letters
this set from School Zone very inexpensively, but I think you could make your own as well. The point is to play the age-old card game of Go Fish, but instead of matching "mommy animals" to "baby animals" you match uppercase and lowercase letters. I like this set particularly because it also shows animals on each card (whose names begin with the particular letter) so kids who are just learning to associate upper- and lowercase letters have a helpful hint on every card.
This activity could be used for a variety of learning experiences for kids, don't you think?
And yes, as you can see in these photos, we almost always eat snack while doing school. :)
Posted by Emily Keniston at 7:56 AM
Labels: Learn
Subscribe to: Post Comments (Atom)
Dịch vụ kế toán thuế trọn gói tại quận 4ReplyDelete
Dịch vụ kế toán thuế trọn gói tại quận 5
Dịch vụ kế toán thuế trọn gói tại quận 6
Dịch vụ kế toán thuế trọn gói tại quận 7
Dịch vụ kế toán thuế trọn gói tại quận 8
Dịch vụ kế toán thuế trọn gói tại quận 9
Dịch vụ kế toán thuế trọn gói tại quận 10
Dịch vụ kế toán thuế trọn gói tại quận 11
Dịch vụ kế toán thuế trọn gói tại quận 12
Dịch vụ kế toán thuế trọn gói tại quận thủ đức
Dịch vụ kế toán thuế trọn gói tại quận bình thạnh
Dịch vụ kế toán thuế trọn gói tại quận tân phú
Dịch vụ kế toán thuế trọn gói tại quận gò vấp
Dịch vụ kế toán thuế trọn gói tại quận phú nhuận
Dịch vụ kế toán thuế trọn gói tại quận bình tân
Dịch vụ kế toán thuế trọn gói tại quận tân bình
Dịch vụ kế toán thuế trọn gói tại huyện nhà bè
Dịch vụ kế toán thuế trọn gói tại huyện cần giờ
Dịch vụ kế toán thuế trọn gói tại huyện hóc môn

markdown:
[this set](http://www.amazon.com/Pack-SCHOOL-ZONE-PUBLISHING-CARDS/dp/B0053R1EG4/ref=sr_1_4?ie=UTF8&qid=1327149966&sr=8-4)from School Zone very inexpensively, but I think you could make your own as well. The point is to play the age-old card game of [Go Fish](http://boardgames.about.com/od/cardgames/a/go_fish.htm), but instead of matching "mommy animals" to "baby animals" you match uppercase and lowercase letters. I like this set particularly because it also shows animals on each card (whose names begin with the particular letter) so kids who are just learning to associate upper- and lowercase letters have a helpful hint on every card.
This activity could be used for a variety of learning experiences for kids, don't you think?
And yes, as you can see in these photos, we almost always eat snack while doing school. :)
Dịch vụ kế toán thuế trọn gói tại quận 4ReplyDelete
Dịch vụ kế toán thuế trọn gói tại quận 5
Dịch vụ kế toán thuế trọn gói tại quận 6
Dịch vụ kế toán thuế trọn gói tại quận 7
Dịch vụ kế toán thuế trọn gói tại quận 8
Dịch vụ kế toán thuế trọn gói tại quận 9
Dịch vụ kế toán thuế trọn gói tại quận 10
Dịch vụ kế toán thuế trọn gói tại quận 11
Dịch vụ kế toán thuế trọn gói tại quận 12
Dịch vụ kế toán thuế trọn gói tại quận thủ đức
Dịch vụ kế toán thuế trọn gói tại quận bình thạnh
Dịch vụ kế toán thuế trọn gói tại quận tân phú
Dịch vụ kế toán thuế trọn gói tại quận gò vấp
Dịch vụ kế toán thuế trọn gói tại quận phú nhuận
Dịch vụ kế toán thuế trọn gói tại quận bình tân
Dịch vụ kế toán thuế trọn gói tại quận tân bình
Dịch vụ kế toán thuế trọn gói tại huyện nhà bè
Dịch vụ kế toán thuế trọn gói tại huyện cần giờ
Dịch vụ kế toán thuế trọn gói tại huyện hóc môn

X-XSS-Protection: 1; mode=block

Server: GSE

Cache-Control: private, max-age=0

X-Content-Type-Options: nosniff


text:
Bán iPhone trả góp thủ tục "siêu nhanh", chỉ cần bằng lái & CMND
(Techz.vn) Theo nhiều nguồn tin, một số trang web bán vé tàu giả mạo có giá cao gấp nhiều lần so với giá vé niêm yết của Đường sắt Việt Nam nhằm trục lợi khi nhu cầu đi lại của hành khách tăng cao vào dịp Tết 2017.
iPhone 6 “gây bão” thị trường, người dùng chen lấn nhau mua, giá từ 4 triệu
LG V20 “bị săn" đến cháy hàng bởi thiết kế quá độc đáo: 2 màn hình (5.7 inch), 3 camera (16MP), RAM “khủng” 4GB
Các trang web giả mạo này có tên miền gần giống với website “chính chủ” của ngành đường sắt. Chính vì vậy, một số hành khách, đặc biệt những người nước ngoài đã hiểu nhầm rồi mua vé tàu với mức giá rất cao.
Nhằm hạn chế tình trạng này, Tổng công ty Đường sắt Việt Nam đã đưa ra cảnh báo cho các khách hàng khi mua vé tàu trực tuyến, hãy truy cập vào trang web http://dsvn.vn. Theo đó, khách hàng có thể tìm hiểu thông tin giờ tàu, giá vé, một số quy định khác và đặt mua vé tàu tại đây.
Ảnh minh họa
Công ty cổ phần Vận tải đường sắt Sài Gòn cho biết còn khoảng 263.130 chỗ đi (tính đến ngày 7/12) đến tất cả các ga trên tuyến đường sắt Bắc Nam vào thời gian trước Tết từ ngày 17/1/2017 đến ngày 26/1/2017 (nhằm ngày 20 đến 29 Âm lịch) và sau Tết từ ngày 31/1/2017 đến 12/2/2017 (nhằm ngày 4 đến 16 Âm lịch).
Bên cạnh đó, công ty cổ phần vận tải đường sắt Hà Nội cũng lập thêm các đội tàu tuyến Hà Nội - Vinh, Hà Nội - Thanh Hóa, Hà Nội - Lào Cai nhằm phục vụ nhu cầu của hành khách trong dịp Tết Nguyên đán 2017 sắp tới.
(Techz.vn) Online Friday là một trong những điểm nhấn của ngành thương mại điện tử Việt Nam với hàng trăm ngàn sản phẩm được giảm giá nhằm kích cầu tiêu dùng và phổ biến việc mua hàng online.
Tin tuyển dụng: - TechZ tuyển dụng cộng tác viên nội dung tại Hà Nội Đăng ký
Theo tinnhanhonline.vn
Tag Vé xe lửa giá rẻ, Máy bay giá rẻ, Ngày Xuân, Xe Tết, Vé giả, Vé tàu online, Đặt mua vé online, Lừa đảo

markdown:
[ Bán iPhone trả góp thủ tục "siêu nhanh", chỉ cần bằng lái & CMND](https://goo.gl/LK9v46)
(Techz.vn) Theo nhiều nguồn tin, một số trang web bán vé tàu giả mạo có giá cao gấp nhiều lần so với giá vé niêm yết của Đường sắt Việt Nam nhằm trục lợi khi nhu cầu đi lại của hành khách tăng cao vào dịp Tết 2017.
[ iPhone 6 “gây bão” thị trường, người dùng chen lấn nhau mua, giá từ 4 triệu ](https://goo.gl/ZgJdhu) [ LG V20 “bị săn" đến cháy hàng bởi thiết kế quá độc đáo: 2 màn hình (5.7 inch), 3 camera (16MP), RAM “khủng” 4GB ](https://goo.gl/xWNjWx)
Các trang web giả mạo này có tên miền gần giống với website “chính chủ” của ngành đường sắt. Chính vì vậy, một số hành khách, đặc biệt những người nước ngoài đã hiểu nhầm rồi mua vé tàu với mức giá rất cao.
Nhằm hạn chế tình trạng này, Tổng công ty Đường sắt Việt Nam đã đưa ra cảnh báo cho các khách hàng khi mua vé tàu trực tuyến, hãy truy cập vào trang web http://dsvn.vn. Theo đó, khách hàng có thể tìm hiểu thông tin giờ tàu, giá vé, một số quy định khác và đặt mua vé tàu tại đây.
*Ảnh minh họa*
Công ty cổ phần Vận tải đường sắt Sài Gòn cho biết còn khoảng 263.130 chỗ đi (tính đến ngày 7/12) đến tất cả các ga trên tuyến đường sắt Bắc Nam vào thời gian trước Tết từ ngày 17/1/2017 đến ngày 26/1/2017 (nhằm ngày 20 đến 29 Âm lịch) và sau Tết từ ngày 31/1/2017 đến 12/2/2017 (nhằm ngày 4 đến 16 Âm lịch).
Bên cạnh đó, công ty cổ phần vận tải đường sắt Hà Nội cũng lập thêm các đội tàu tuyến Hà Nội - Vinh, Hà Nội - Thanh Hóa, Hà Nội - Lào Cai nhằm phục vụ nhu cầu của hành khách trong dịp Tết Nguyên đán 2017 sắp tới.
(Techz.vn) Online Friday là một trong những điểm nhấn của ngành thương mại điện tử Việt Nam với hàng trăm ngàn sản phẩm được giảm giá nhằm kích cầu tiêu dùng và phổ biến việc mua hàng online.
__Tin tuyển dụng__: - TechZ tuyển dụng cộng tác viên nội dung tại Hà Nội [Đăng ký](https://docs.google.com/forms/d/e/1FAIpQLSdv3tuRoKI4QjizpRjsLBSXavDsW4krFC73u2taRqKyC1KjBw/viewform?c=0&w=1&usp=send_form)
Theo
[tinnhanhonline.vn](javascript:;)
Tag
[Vé xe lửa giá rẻ](http://www.techz.vn/tag/Vé-xe-lửa-giá-rẻ), [Máy bay giá rẻ](http://www.techz.vn/tag/Máy-bay-giá-rẻ), [Ngày Xuân](http://www.techz.vn/tag/Ngày-Xuân), [Xe Tết](http://www.techz.vn/tag/Xe-Tết), [Vé giả](http://www.techz.vn/tag/Vé-giả), [Vé tàu online](http://www.techz.vn/tag/Vé-tàu-online), [Đặt mua vé online](http://www.techz.vn/tag/Đặt-mua-vé-online), [Lừa đảo](http://www.techz.vn/tag/Lừa-đảo)

Server: nginx

Content-Type: text/html