Yêu cầu mọi thông tin sao chép từ blog này phải được ghi rõ đầy đủ: Thông tin được sao chép từ "http://www.dangngochoangthanh.blogspot.com".

Cool wallpaper http://www.fancymessage.com

EMOJI KEYBOARD PRO http://emojiselector.com

THƯ VIỆN HÌNH ĐỘNG FLASH ANIMATION: http://flashanimationlibrary.blogspot.ru/

Hệ thống học trực tuyến đang được phát triển và sẽ đưa vào sử dụng vào cuối năm nay. Hãy xem qua một số demo của Học Trực Tuyến.


HỌC TRỰC TUYẾN ĐÃ CUNG CẤP PHIÊN BẢN TRUY CẬP QUA MOBILE http://dangngochoangthanh.blogspot.com/?m=1

XEM KÊNH HỌC TRỰC TUYẾN TRÊN YOUTUBE



Search on This Blog

Thursday, July 29, 2010

Kĩ thuật sử dụng trang điều khiển Controller trong JSP

Một kĩ thuật xử lý tốt cho vấn đề chuyển tải dữ liệu đến hai trang, đó là sử dụng một trang thứ  tư làm trang điều khiển. Ý tưởng này đó chính là sử dụng thuộc tính action cho các form chính là trang điều khiển này. Nó sẽ quyết định xem thử trang nào sẽ hiện diện tiếp theo, tương ứng với việc người dùng nhập đúng dữ liệu hay chưa.

Trong kĩ thuật này, mỗi một trang sẽ có một form, nhưng có thể có nhiều nút nhấn trên form. Ví dụ, trang edit.jsp sẽ chứa một form với hai nút nhấn. Thuộc tính action của form là trang điều khiển controller.jsp và mỗi một nút nhấn đều có định danh là duy nhất. Khi đó, trang điều khiển sẽ xác định trang nào sẽ được hiển thị trong lần tiếp theo dựa trên nút mà người dùng kích hoạt.

<form action="controller.jsp">
      <input type="hidden" name="you" value="${param.you}"/>
      <input type="submit" name="ok" value="Ok"/>
      <input type="submit" name="cancel" value="Cancel"/>
form>
Và đến đây, nhiều bạn sẽ thắc mắc, liệu cái gì sẽ viết ra trong trang controller.jsp. Xin trả lời bạn là, trang này sẽ tự động chọn lựa trang hiển thị  tương ứng với giá trị mà nó nhận được từ các button. Phần tiếp theo, tôi sẽ thảo luận với bạn về điều này. Nhưng tôi xin đưa ra một ý tưởng khác, bạn hãy thử thực thi nó xem nhé. Để thực thi điều này bạn có thể kết hợp với script, nếu người dùng nhấp vào ok hoặc cancel, thì giá trị của hidden nhận được tương ứng với biến boolean là đúng hay sai, và trang controller chỉ việc lấy giá trị tham số từ hidden mà thôi. Đây là phương pháp đơn giản nhất cho việc thực thi này. Bạn hòa toàn có thể thực thi nó.






Bạn hãy tưởng tượng, trang controller giống như gateway trong network vậy. Mỗi một máy tính trên mạng có thể kết nối với máy tính khác, nhưng các máy tính lại không biết địa chỉ ip của tất cả các máy tính trên mạng, khi đó, gateway sẽ xác định tiến trình kết nỗi giữa hai máy tính. Máy tính chỉ biết vị trí của gateway. Gateway biết vị trí của mọi máy tính trên network. Một máy tính có thể được bổ sung vào network và chỉ có gateway là chịu ảnh hưởng. Do đó, sự kết nối giữa hai máy tính đều thông qua gateway giống trang controller của chúng ta.

Các hiển thị của trang controller.

 Một controller chỉ chứa mã java, bạn có thể dùng jsp hay servlet tùy bạn. Mỗi trang jsp sẽ gửi dữ liệu đến cho controller. Mà nó sẽ xác định xem thử nút nhấn nào đã được kích hoạt và sẽ gửi yêu cầu đến trang tương ứng để hoàn tất request.
Controller sẽ xác định cách thức mà trang jsp kết nối với nhau. Mỗi một trang jsp chỉ biết vị trí của trang controller. Trang controller biết vị trí của tất cả các trang jsp. Nếu có một trang mới được bổ sung thêm vào, bạn chỉ thay đổi trang controller mà thôi, các trang khác vẫn giữ nguyên.
Một trong những chức năng  của trang controller là xác định trang kế tiếp sẽ được hiển thị dựa trên nút mà người dùng kích hoạt, và nó sẽ bổ sung thêm một truy vấn lên url. Bằng truy vấn này, bạn có thể xác định được nút nào đã được kích hoạt.
Truy vấn này sẽ gửi đến server như là một phần của request từ trình duyệt. Khi mà controller là một trang jsp thì nó sẽ được thực thi bởi một servlet engine. Servlet engine sẽ tạo ra một đối tượng để bao toàn bộ thông tin mà nó nhận được từ trình duyệt, bao gồm cả truy vấn. Đối tượng này được gọi là đối tượng request và là phương pháp để ta có thể nhận được giá trị của các tham số.
Controller cũng nhận đối tượng response từ servlet engine. Tất cả những hiển thị dùng để kết nối với trình duyệt sẽ được gói gọn trong đối tượng response.
Trên cơ sở người dùng kích hoạt nút nào, controller sẽ gửi đối tượng request và response đến trang jsp tương ứng. Trang jsp sẽ sử dụng đối tượng request để truy cập vào truy vấn string. Nó sẽ sử dụng đối tượng response để gửi mã html đến trình duyệt.
Các nhiệm vụ cơ bản của controller là thi hành mã java. Trong ví dụ trên, mã java sẽ được nhúng vào trang jsp. Sau đó, bạn hãy thay thế trang jsp đó bằng servlet tương ứng. Bạn hoàn toàn có thể thực thi điều này.
Đối tượng request và response.
Khi servlet engine thực thi một trang jsp, nó sẽ tạo ra đối tượng để gói gọn thông tin được gửi trong request từ trình duyệt. Đối tượng này được gọi là đối tượng request, và dễ dàng truy cập bởi mã java trong jsp hoặc serlvet. Lớp đối tượng này là HttpServletRequest.
Servlet engine cũng tạo ra một đối tượng để gói thông tin cần thiết cho sự trả lời với trình duyệt. Đối tượng này gọi là đối tượng response và nó dễ dàng truy cập bởi mã java trong jsp. Lớp đối tượng này là HttpServletResponse.
Các cách thức tham chiếu một tham số.
Như tôi đã thảo luận ở trên, có hai phương pháp để nhận được giá trì từ định danh của các thành phần. Bạn có thể dùng ngôn ngữ EL hoặc dùng phương thức getParameter của đối tượng request.
Các bạn có thể nhận thấy rằng, phương thức mà chúng ta thực hiện, có thể giúp ta lấy giá trị từ form html để chuyển tải vào trang jsp. Vậy điều ngược lại thì thế nào, nghĩa là bạn phải chuyển giá trị của một biến trong java rồi hiển thị nó lên trang html. Có thể đầu tiên bạn nghĩ đến là ngôn ngữ EL phải không. Đó là sự lựa chọn sáng suốt đấy. Nhưng bạn hoàn toàn có thể thực hiện bởi sự nhúng mã java như bình thường. Ví dụ bạn cần in giá trị của biến x = 2 lên một label trong html, bạn chỉ cần
<label value="">label>
Còn rất nhiều cách thức khác giúp bạn thực thi điều này, đó là bạn kết hợp với jstl hoặc jsf. Đây cũng là những kĩ thuật cao cấp giúp đơn giản hóa cho bạn trong việc gõ code. Dĩ nhiên chúng không chỉ đơn thuần là như vậy, chúng là những kĩ thuật nhằm tối ưu hóa các trang jsp.
Kiểm tra sự hoạt động của các nút nhấn.
Phương pháp mà tôi đề nghị bạn thực thi, kết hợp với script thế nào rồi ? Đến đây, tôi xin giới thiệu cho bạn một phương pháp khác để thực thi nhiệm vụ này. Nó thật sự là quá đơn giản, bạn chỉ cần kiểm tra giá trị của định danh nút nhấn mà thôi. Nếu bạn bấm vào nút OK thì ok=Ok và tương tự với cancel. Với phương pháp này, bạn sẽ bớt đi một thành phần để lưu biến so với việc sử dụng kết hợp với script.
Bây giờ, chắc bạn đã hiểu ra vấn đề rồi chứ gì. Bạn là người thông minh đấy. J
Còn nếu bạn vẫn thực sự chưa hiểu thì bạn hãy nhấn nút ok hoặc cancel, và quan sát truy vân bạn thu được, nó sẽ có dạng ...?you=yourname&ok=Ok (nhấn nút ok) hay ...?you=yourname&cancel=Cancel (nhấn nút cancel). Nghĩa là bạn hòa toàn có thể xác định giá trị của các tham số theo định danh của các nút. Định danh ok sẽ cho bạn giá trị Ok và tương tự cancel sẽ cho ra Cancel. Bạn có thể so sánh kết quả chính xác trong câu lệnh if, nhưng để đơn giản hơn, bạn có thể làm như ở trên, các định danh chỉ nhận giá trị khi nó được submit mà thôi. Nếu bạn nhấn vào Ok thì nó mới được khởi tạo, và value mà nó nhận được thì bạn đã khởi tạo cho nó trong html. Còn cancel khi đó chưa được khởi tạo, mặc dù nó đã hiển thị trên form, nhưng nó chỉ được khởi tạo chính thức khi nó được kích hoạt. Vì vậy, bạn nhấp vào nút submit nào, thì định danh của submit đó sẽ được gán giá trị.
Điều khiển quá trình chuyển tải trang trong controller.jsp.
Đến đây, chắc bạn đang lúng túng, làm thế nào để duyệt đến trang cần thiết và bảo lưu tham số người dùng đã nhập vào, dù rằng mọi sự đã gần như hoàn tất. Hãy bình tĩnh nào bạn, bạn hãy tự nghiền ngẫm đoạn mã sau trước khi đọc lời giải thích nhé
Bạn nên tránh việc dùng
response.sendRedirect(url);
vì nó chỉ có thể giúp bạn chuyển đến trang bạn cần, mà không bảo toàn các tham số và giá trị của chúng. RequestDispatcher là phương pháp giúp bạn thực thi điều này. Nó bảo toàn địa chỉ url sau khi chuyển đến trang index hoặc trang success. Và chính điều này giúp bạn không đánh mất giá trị của các định danh.

1 comment: