Chào mừng đến với site của Bee! Chúc các bạn có những giây phút thực sự vui vẻ!!!

Thứ Bảy, 25 tháng 5, 2013

Mô hình MVC Java Web JSP Servlet và ví dụ demo

Mô hình MVC Java Web JSP Servlet



MVC Pattern trên Web – Mô hình thiết kế ứng dụng theo dạng Model – View – Controller



Mục đích: Chủ đề của bài này đề cập đến khái niệm của việc thiết kế web sử dụng mô hình MVC. Chúng tôi sẽ đi vào từng phần trong mô hình, các ưu điểm, khuyết điểm của mô hình này, từ đó chúng ta sẽ áp dụng mô hình này trong phần phân tích và thiết kế ứng dụng web cụ thể áp dụng mô hình này để thấy rõ cách thức thiết kế, cách cài đặt một ứng dụng theo đúng tính mô tả của mô hình
Khái niệm về mô hình MVC
  • Ý niệm chính của mô hình này là tách biệt phần ánh xạ, lưu trữ và xử lý dữ liệu (model) tách biệt hoàn toàn với thành phần trình bày giao diện kết quả cho người dùng hay phần giao diện giúp đón nhập nhập xuất cho người dùng (View)
  • Ý niệm trên cho phép người lập trình có thể tách biệt công việc trong quá trình xây dựng chức năng cho ứng dụng và quá trình xây dựng giao diện cho người dùng.
  • Bên cạnh đó, ý niệm trên cho phép việc thay đổi thành phần của dữ liệu (model) sẽ không ảnh hưởng nhiều đến giao diện của người dùng vì mô hình đưa ra Model để không cho người dùng thao tác trực tiếp vào dữ liệu vật lý (Cơ sở dữ liệu hay là tập tin) mà phải thông qua Model, do vậy cho dù dữ liệu vật lý thay đổi cấu trúc nhưng cấu trúc Model cho việc truy cập, xử lý, lưu trữ dữ liệu sẽ không bị ảnh hưởng. Nhìn theo khái niệm các thành phần giao tiếp trên Model là tên hàm – tham số truyền (interface) ít khi thay đổi, nội dung thay đổi chính là cách thức cài đặt bên trong hàm. Nhưng nội dung đó người sử dụng chức năng trên giao diện không quan tâm vì đa số họ chỉ quan tâm interface là gì, giá trị nhập và kết xuất ra sao. Do vậy, đây là một trong tính linh hoạt và uyển chuyển của mô hình MVC
  • Ngoài ra, việc tách biệt rời rạc giữa Model và View theo phân tích của chúng ta đang thể hiện tính uy việt. Tuy nhiên, một ứng dụng có rất nhiều Model và nhiều View, do vậy, mô hình cần có một thành phần lựa chọn và kết nối các thành phần này lại với nhau theo cách hiệu quả nhất. Controller là một trong những đối tượng đưa ra để đón nhận yêu cầu nhập xuất từ người dùng, xác định model tương ứng với view nhập để đưa model xử lý, kết quả xử lý của model sẽ được chuyển đến controller để controller xác định view kết xuất để đổ kết quả xử lý và hiển thị cho người dùng
  • Để hiểu rõ hơn về mô hình MVC này, chúng tôi chủ quan đưa ra một mô hình thực tế tiếp cận khái niệm của mô hình này như sau
    • Mô hình tiếp cận của chúng tôi được mô tả về việc công việc hàng ngày chúng ta thường làm để giải trí, đó là xem truyền hình. Câu chuyện được mô tả như sau
    • Một người A muốn xem các phim chọn lọc được lựa chọn từ các đĩa CD/DVD trên truyền hình của nhà A
    • Để đọc được các đĩa CD/DVD thì phải dùng đầu máy đọc đĩa trong nhà A
    • Đầu máy này đặc biệt không có nút điều khiển trực tiếp, đầu máy này nhận hàng loạt các đĩa – tối đa là 5 cái, do vậy muốn kích hoạt và chọn đĩa xem A bắt buộc phải sử dụng remote control – điều khiển từ xa
    • Như vậy, chúng ta sẽ nhận thấy cách thức A xem phim như sau
      • A sẽ sử dụng remote control điều khiển đầu máy để chọn đĩa mà A thích xem nhất để mở nó ra
      • Đĩa được chọn từ đọc máy được đọc và trình chiếu trên màn hình truyền hình
      • Khi dữ liệu đã hiển thị trên màn hình truyền hình thì A sẽ thấy được nội dung
      • Và cách thức này sẽ được lập đi lập lại khi A chọn một phim khác, đó là vẫn dùng đồ điều khiển để chọn đĩa và đầu đĩa đưa dữ liệu lên truyền hình và A thấy. …
    • Mô hình tiếp cận chúng tôi mô tả như hình vẽ sau
    • Qua hình ảnh mô tả trên, chúng ta nhận thấy rằng
      • Đầu máy là nơi xử lý dữ liệu, chọn lựa các thức xử lý, nội dung cần thiết nghĩa là đầu máy là Model
      • Truyền hình chỉ làm nhiệm vụ duy nhất để trình bày kết quả mà đầu máy – Model đã thực hiện, được lựa chọn. Truyền hình không thể lựa chọn và không có cách chọn lựa là trình bày các thành phần truyền đến đã được xử lý. Truyền hình là View
      • Thành phần hỗ trợ đưa dữ liệu từ Model đến View đó là đồ điều khiển, ngoài ra đồ điểu khiển cũng là nơi kết nối người dùng với đầu máy với truyền hình. Chức năng của điều khiển là chọn đúng model để đưa ra view. Đồ điều khiển – remote control là một Controller
    • Dựa trên một cách tiếp cận chúng ta thấy được sự tối ưu của MVC đó là
      • Khi chúng ta thay đổi Truyền hình đang xem thành truyền hình khác thì việc thay đổi không ảnh hưởng gì đến toàn hệ thống
      • Tương tự như thế nếu đầu máy hư thì thay đổi máy khác vẫn không ảnh hưởng gì lớn
      • Như vậy, việc tách biệt giúp chúng ta có nhiều lợi ích trong việc phân chia công việc và các xử lý công việc
    • Dựa trên cách tiếp cận như trên chúng ta định nghĩa các thành phần trong mô hình MVC như sau
      • Model
        • Là các thành phần hỗ trợ ánh xạ dữ liệu vật lý lên bộ nhớ, lưu trữ dữ liệu tạm thời trên bộ nhớ, hỗ trợ các cách thức xử lý dữ liệu, hỗ trợ khả năng giao tiếp và trao đổi dữ liệu giữa các đối tượng khác trong bộ nhớ và cơ sở dữ liệu
        • Cụ thể là một đối tượng Object trong khái niệm của lập trình hướng đối tượng OOP và mang đầy đủ khái niệm và tính chất của một Object
        • Trong ứng dụng Web của Java, Model sẽ là JavaBean hay Enterprise JavaBean hay Web Service
      • View
        • Là thành phần hỗ trợ trình bày dữ liệu hay kết quả ra màn hình, hỗ trợ nhập thông tin từ phía người dùng
        • Các thành phần này có khả năng truy cập Model, truy xuất Model thông qua những hành vi mà Model cho phép nhưng View không thể thay đổi các thành phần trong Model
        • Trong mô hình ứng dụng Web thì html, servlet, jsp … là những thành phần đại diện cho View
      • Controller
        • Là các thành phần hỗ trợ kết nối người dùng server, đón nhập yêu cầu người dùng, thực hiện chuyển xử lý, lựa chọn và cập nhật model và view tương ứng để trình bày về phía người dùng
        • Hỗ trợ kết nối giữa người model và view, giúp model xác định được view trình bày
        • Trong mô hình ứng dụng Web thì Servlet đóng vai trò của Controller
    • Mối quan hệ giữa các thành phần trong mô hình MVC
      • Dựa trên bản chất của MVC, khái niệm và cách tiếp cận chúng ta nhận thấy mối quan hệ giữa controller và model là như thế nào? Giữa Controller và Model, đối tượng nào phụ thuộc đối tượng nào?
        • Ý tưởng đó là khi chúng ta thay đổi đầu máy đọc, đồ điều khiển từ xa có thay đổi theo hay không? Hay chúng ta vẫn dùng cái điều khiển cũ (không tính khái niệm điều khiển đa năng)? Đồ điều khiển được thiết kế dựa trên đầu máy hay đầu máy được thiết kế dựa trên đồ điều khiển?
        • Câu trả lời chúng ta quá rõ ràng, đó là controller phụ thuộc vào model bởi vì controller được thiết kế đề kết nối với model, điều khiển, truy xuất model. Do vậy, model có sự thay đổi là controller phải thay đổi theo để có thể truy xuất và điều khiển model cho phù hợp
      • Giữa Model và View trên khái niệm, đối tượng nào phụ thuộc đối tượng nào?
        • View lệ thuộc vào Model bởi vì khi các tổ chức interface của Model thay đổi nghĩa là View phải thay đổi theo
        • Chúng ta tránh nhầm lẫn về khái niệm ở trên là tách biệt giữa View và Model là có lợi nhưng tại sao ở đây View lại lệ thuộc Model? Khái niệm của chúng ta ở đây đó là tách biệt dữ liệu và thành phần xử lý bên trong, hệ thống sẽ trở nên uyển chuyển khi chúng ta thành đổi thành phần cài đặt trong Model, không phải thay đổi interface Model. Và khái niệm trên đã nêu rõ giữa dữ liệu vật lý và dữ liệu được chứa trong Model
      • Mối quan hệ cuối cùng của chúng ta đó là giữa View và Controller,
        • Controller sẽ là đối tượng lựa chọn View tùy thuộc theo việc yêu cầu sử dụng của người dùng, tùy thuộc theo kết quả xử lý của Model
  • Quá trình phát triển của MVC được thực hiện tuần tự như sau
    • Không có khái niệm gì về mô hình: tất cả thiết kế đều tập trung viết code trực tiếp trên các ngôn ngữ script và ngôn ngữ tag để hỗ trợ trình bày dữ liệu trên Browser – dạng web tĩnh. Ví dụ đây chính là là các trang html có nhúng javascript, nếu người phát triển web khi làm qua nội dung này sẽ thấy sự phức tạp và rắc rối của nó khi chúng ta cần chỉnh sửa trang web khi đã hoàn tất
    • Mô hình MVC1:
      • Là mô hình tương tự như html nhưng các trang web ở dạng động có thể đón nhận và trình bày dữ liệu từ server nhưng tất cả các trang liên kết đều là các đường dẫn tĩnh và các cách thức xử lý đều thực hiện trực tiếp trên trang. Ngoài ra, các trang thực hiện gọi trực tiếp lẫn nhau.
      • Ví dụ:
      • Mô hình này chỉ phù hợp với ứng dụng nhỏ vì các đưởng dẫn rất khó để tìm kiếm và sửa đổi, đặc biệt trên trang đang trộn lẫn giữa code html, javascript, xml, javacode …
    • Mô hình MVC2:
      • Đây là mô hình thực tế áp dụng tiếp cận theo đúng khái niệm đã nêu ra ở trên, tách biệt riêng biệt thành từng thành phần, tạo nên sự uyển chuyển khi vận dụng và cài đặt, đặc biệt là bảo trì nâng cấp
      • Khái niệm về mô hình MVC2
      • Cơ chế thực hiện
        • Web Browser gửi request đến server thông qua các control trên form HTML hay JSP, hay query string url hay qua cookies.
        • Servlet – Controller đón nhận request và xác định Model tương ứng để tạo ra instance của JavaBean để đón nhận các giá trị nhập từ request để lưu trữ và xử lý
        • Model thực hiện xử lý, kết nối dữ liệu vật lý dưới DBMS (nếu có) và trả kết quả trả về cho Controller
        • Kết quả xử lý được chuyển vào Servlet – Controller, Servlet Controller thực hiện tạo hay lựa chọn View để từ đó đưa kết quả xử lý hay dữ liệu lấy từ Model để cập nhật lại trang kết quả View.
        • Controller gửi View qua response cho người dùng để browser có thể trình bày dữ liệu trong Web Browser
      • Cơ chế thực hiện trên cho thấy mọi tập trung xử lý và kết xuất đều hướng vào Controller
        • Do vậy, đây cũng là một phần khiếm khuyết khi Controller là nơi tập trung xử lý dữ liệu
        • Do vậy, một trong những khái niệm để giảm bớt tải của Controller chính là Filter (chúng tôi sẽ trình bày trong một chủ đề khác)
      • Ưu điểm
        • Tính tin cậy (reliability): việc chia từng phần riêng biệt giúp chúng ta sửa đổi từng thành phần riêng biệt, không ảnh hưởng, có thể thay thế thành từng phần tương đương, có thể chia công việc theo nhóm, biên dịch độc lập, tăng cường khả năng tích hợp với khả năng đúng đắn cao
        • Tính tương thích cao (compatibility): có khả năng sử dụng các loại công nghệ khác nhau không lệ thuộc vì chúng ta đã được tách biệt và khái niệm cho từng loại thành phần riêng biệt
        • Tính tái sử dụng (reusable): chúng ta có thể sử dụng các thành phần chia cắt lại trong các ứng dụng khác hay sử dụng lại nhiều lần trong cùng một ứng dụng, tăng tính hiệu quả trong lập trình
        • Khả năng triền khai nhanh chóng và bảo trì nhanh chóng (quick deploy and easy maintenance): vì các thành phần độc lập với nhau
    • Chúng ta tiếp tục mô tả thành phần Controller, ở đây chúng tôi mô tả khái niệm về Servlet
      • Servlet là đoạn chương trình java thực thi trên Web Server hỗ trợ người lập trình Java xây dựng trang web động mà không cần học ngôn ngữ lập trình web mới
      • Servlets nhận request – yêu cầu từ client, sao đó thực hiện các yêu cầu xử lý để gửi response – phản hồi đến người dùng sử dụng HTTP
      • Servlet được load sẵn ở Web Server duy nhất lần đầu tiên khi ứng dụng được deploy và đáp ứng tức thời yêu cầu của người dùng thông qua Web Container. Người dùng không lo lắng đến chuyện khởi tạo servlet (như cách chúng ta phải dùng lệnh new đối với việc tạo ra một instance mới cho một object).
      • Servlet được server hỗ trợ cơ chế multithread giúp giảm tài nguyên và quá tải trong việc xử lý của server hay container
      • Khuyết điểm
        • Không thích hợp cho việc trình bày và xử lý giao diện vì code html được viết trong chuỗi String của các câu lệnh Java, rất khó trong việc checking và kiểm tra lỗi về tính đúng đắn của văn bản xml (well-form)
        • Không hỗ trợ đầy đủ các thành phần liên quan đến session
        • Về phía người dùng có thể nói tương tác chỉ là single thread vì người dùng không thể xác định instance servlet phục vụ cho mình mà container và server tự động xác định instance tương ứng và yêu cầu nó xử lý. Chúng ta chỉ biết được xử lý khi thấy kết quả được hiển thị ở browser. Nghĩa là mọi thứ xử lý phải lệ thuộc container
      • Cơ chế hoạt động
        • Khi có request từ client gửi đến Server hay Web Container
        • Container sẽ lựa chọn một instance Servlet tương ứng để đáp ứng request đó (người dùng sẽ không bao giờ biết instance nào được lựa chọn, nó lựa chọn khi nào, servlet xử lý khi nào)
        • Servlet lựa chọn sẽ thực hiện xử lý và kết nối DB nếu cần
        • Sau khi servlet thực hiện xong, sẽ gửi kết quả ra container để gửi response về cho người dùng
        • Browser đón nhận kết quả và trình bày ra màn hình dữ liệu
      • Chu kỳ sống hay tồn tại của servlet trong server hay container
      • Khi một ứng dụng chưa được deploy vào trong server thì servlet chưa được khởi tạo (uninstantiated)
      • Khi ứng dụng được deploy vào server thì container sẽ thực hiện khởi tạo instance cho servlet, trong lúc khới tạo kích hoạt hàm init. Lưu ý, hàm init chỉ được kích hoạt lần duy nhất khi deploy
      • Khi có một request đến servlet của người dùng, container đón nhận request và chọn instance bean bất kỳ tương ứng với yêu cầu để đáp ứng.
      • Sau khi chọn được bean, container sẽ kích hoạt hàm service tương ứng. Lưu ý ở đây, ở lần yêu cầu thứ 2 thì container cũng sẽ chọn bean và kích hoạt hàm service tương ứng, do vậy, hàm service sẽ được gọi rất nhiều lần
      • Khi servlet được cập nhật mới hay server bị crash hay undeploy ứng dụng ra khỏi server – container, thì hàm destroy của servlet được kích hoạt. Nghĩa là servlet chỉ kích hoạt phương thức destroy lần cuối cùng duy nhất
      • Lưu ý: các giá trị chỉ số ‘ trong hình trên thể hiện khi lỗi xảy ra thì server sẽ báo lỗi
    • Để tạo một servlet chúng ta phải implements HttpServlet
      • HttpServlet được kế thừa từ GenericServlet
      • GenericServlet được kế thừa từ phần chính yếu là Servlet, đây là interface cho tất cả servlet và định nghĩa một trong ba phương thức đã được định nghĩa trong chu kỳ sống (init, services, destroy).
      • GenericServlet ngoài được kế thức từ Servlet, nó còn được kế thừa từ ServletConfig, java.io.Serializable
      • Lưu ý: tất cả các lớp đều thuộc package javax.servlet
      • Khi servlet chấp nhận lời gọi từ client, nó sẽ đón nhận 02 tham số là ServletRequest (đối tượng chứa đựng dữ liệu được truyền từ client đến server) và ServletResponse (đối tượng chứa đựng dữ liệu được truyền từ server đến client)
        • Khi servlet áp dụng protocol HTTP để giao tiếp thì các thành phần mở rộng từ 02 lớp trên tương ứng được cung cấp đó là HttpServletRequest và HttpServletResponse
      • Servlet định nghĩa 3 tầm vực thao tác: request, session, ServletContext
        • Đây là vùng không gian bộ nhớ (memory segment) được cung cấp cho mỗi ứng dụng web dùng để chứa các thông tin để giao tiếp với các thành phần khác trong server
        • Mỗi vùng không gian này tồn tại trong một khoảng thời gian nhất định tùy theo qui định
          • request: tồn tại từ lúc gửi request cho đến khi response
          • session: một khoảng thời gian từ lúc mở trình duyệt đến đóng trình duyệt, hết thời gian session, session bị hủy, …
          • ServletContext: có thể gọi là application tồn tại từ lúc bắt đầu ứng dụng đến khi ứng dụng bị undeploy ra khỏi server hay server bị crash
      • Servlet cung cấp thêm một interface RequestDispatcher để hỗ trợ việc giao tiếp và xác định view tương ứng trong xử lý
        • RequestDispatcher hỗ trợ container chuyển request object từ đối tượng của server từ thành phần này sang thành phần khác (đây là ưu điểm vượt trội so với response.sendRedirect hay click một link trên trang web vì 02 đối tượng này không truyền object request đi)
        • Đối tượng cuối cùng là đối tượng sẽ reponse kết quả trả về hay cho phép nhúng đối tượng này sang đối tượng khác
        • Cơ chế này còn giúp che dấu thông tin xử lý của các đối tượng xử lý trên thành url của trình duyệt – đảm bảo tính bảo mật cao
    • Sau khi mô tả tổng quan về Controller, chúng tôi sẽ mô tả Model
      • Một thành phần cấu thành object – đối tượng và chứa đây đủ đặc tính của object đó là
        • Một object bao gồm state – trạng thái và behaviors – các hành vi
        • Đảm bảo 4 tính chất
          • abstraction (mang tính chất chung nhất của object)
          • encapsulation (cho phép người dùng truy cập các trạng thái của object thông qua các behavior)
          • hierarchy (có tính kế thừa)
          • modularity (phân chia module theo từng nhóm chức năng và tách biệt các thành phần theo dạng component để có thể dễ dàng cài đặt, maintenance – bảo trì, và tái sử dụng – reusable )
      • JavaBeans là một đối tượng đại diện cho object và được sử dụng như Model bởi vì nó chứa đầy đủ các yêu cầu đã nêu trên
      • Đặc điểm của JavaBeans
        • JavaBeans là một java class được implements từ Serializable vì đây là một object sử dụng qua protocol và để giao tiếp với các thành phần trong và ngoài server, do vậy nó phải được chuyển đổi từ thành dạng byte stram để dễ dàng truyền đi
        • JavaBeans bắt buộc phải được cài đặt có package để có thể tái sử dụng thông qua lệnh import.
        • Các thuộc tính properties trong JavaBeans bắt buộc phải được khai báo là private và các việc khai thác các thuộc tính này phải được thông qua các hàm getTênThuộcTính hay setTênThuộcTính (encapsulate)
          • Hàm get sẽ được đổi thành hàm is nếu kiểu dữ liệu là kiểu boolean
        • Bắt buộc phải có một contrucstor không tham số để có thể khởi tạo object mà không cần khởi tạo giá trị ban đầu cho object luôn luôn ở trạng thái đảm bảo thao tác không bị lỗi kể cả khi giá trị thuộc tính của các object chưa cập nhật gì cả
        • Cài đặt đầy đủ các phương thức hay hành vi mà JavaBeans cần giao tiếp với thế giới bên ngoài. Lưu ý: hàm thiết kế phải tuân theo chuẩn đó là hàm chỉ truyền tham số khi các giá trị này không thể tồn tại trong các thuộc tính của chính instance JavaBeans mà chúng ta đang thao tác – thiết kế
    • Cuối cùng trong mô hình này, chúng tôi sẽ mô tả kiến thức tổng quan về view
      • Những đối tượng có khả năng trình bày dữ liệu ra màn hình như html, jsp … Ở đây chúng tôi trình bày kiến thức sơ lược về jsp
      • JSP viết tắt của Java Server Pages
        • Đây là ngôn ngữ scripting được dùng ở server để hỗ trợ ứng dụng trong việc trình bày trang web động – cập nhật dữ liệu
        • JSP tích hợp bao gồm HTML, XML, Java Code, và kể cả Servlet nghĩa là
          • Nó tạo thuận lợi cho người dùng trong việc xây dựng giao diện – khắc phục nhược điểm của servlet về giao diện.
          • Ngoài ra, nó cho người dùng mở rộng khả năng sử dụng JSP qua việc định nghĩa các tag mới như XML – khắc phục nhược điểm của HTML
          • Đặc biệt cho phép người dùng sử dụng nhúng trưc tiếp code Java vào trong JSP thông qua Declaration – khai báo biến và hàm, Scriptlets – chứa code trực tiếp của Java và Expression – tính toán biểu thức và in kết quả ra màn hình. Những điều này tạo điều kiện cho người lập trình Java không cần học các ngôn ngữ script mới khi lập trình
        • Bản chất của JSP là Servlet, do vậy các thành phần của Servlet sẽ có tồn tại hết trên JSP
        • Ngoài ra, JSP không cần phải biên dịch mà nó được biên dịch khi có request lần đầu tiên yêu cầu đến server, do vậy JSP khắc phục nhược điểm chỉnh sửa phải cần có source code và biên dịch lại khi deploy sau khi chỉnh sửa của Servlet
        • JSP cung cấp các thành phần implicit Object để người dùng có thể sử dụng các thành phần tương tác trên server mà không cần khai báo và khởi tạo
        • Kết xuất của JSP thực chất là HTML. File JSP có phần mở rộng là .jsp
      • Chu kỳ sống của JSP
        • Khi có một yêu cầu từ client đến server, container xác định trang jsp được yêu cầu
        • Trang JSP được đưa qua JSP Engine để xử lý. JSP Engine thực hiện các bước sau
          • Đọc cấu trúc file của JSP File từ trên xuống dưới, từ trái qua phải để chuyên đổi (Parsing) sang Java code tương ứng
          • Phát sinh Servlet từ nội dung parsing ở bước trên để cấu tạo thành servlet
          • Thực hiện biên dịch code Servlet
          • Sau khi biên dịch thành công thì quá trình hoạt động sẽ thực hiện đúng theo chu kỳ sống của Servlet như đã nêu trong các phần trên
          • Tương tự 03 phương thức init, services, destroy của Servlet thì JSP sẽ có 03 phương thức tương ứng là jspInit, jspService và jspDestroy
        • JSP định nghĩa ra 4 tầm vực thao tác đó là page – tồn tại trong page, request – tồn tại từ lúc bắt đầu gửi request cho đến khi response thành cồng, session, application (từ khi deploy đến khi kết thúc ứng dụng) – ServletContext
      • Để trang JSP mang tính chất đặc thù của View thì Java Sun đưa ra các thành phần cải tiến để tránh việc trộn lẫn code và xử lý giao diện và tạo tính đặc thù của giao diện. Chúng đó là
        • EL expression language
          • Cách viết tắt ngắn gọn trên trang JSP và che dấu một phần code java được xử lý truy cập
          • Định nghĩa các tầm vực truy cập là requestScope, pageScope, sessionScope, applicationScope
          • Cú pháp: ${trị hay biểu thức hay hằng số}
        • JSTL: JSP Standard Tag Library định nghĩa ra các tag hỗ trợ chức năng xử lý trên trang JSP một cách đơn giản và rõ ràng. Chúng gồm các tag như core, sql, fmt – format, xml, function
        • Chúng ta đã nắm được cách sử dụng EL và JSTL qua các bài tutorial cụ thể như EJB (xem phần giao diện trình bày của EJB)
Vận dụng MVC vào việc phân tích và cài đặt một ứng dụng cụ thể
  • Ứng dụng ở đây mô tả việc xây dựng một ứng dụng cung cấp chức năng như sau
    • Ngưởi dùng muốn truy cập vào hệ thống phải thực hiện login để kiểm tra username và password có hợp lệ hay không
    • Hệ thống thông qua DB kiểm tra tính xác thực của dữ liệu
      • Nếu username và password không chính xác hay không tồn tại ứng dụng thông báo cho người dùng thông tin “Invalid username and password” và cho người dùng trở về trang Login thông qua một Link có tên là try again và cung cấp một Link Register cho phép người dùng đăng ký một account mới
      • Nếu user tồn tại thì chương trình bày form Search. Đặc biệt, trên đầu trang phải sử dụng session để lưu trữ user và tất cả các trang phải có câu “Welcome, tênUser”
    • Form Search cho phép người dùng tìm kiếm một user bất kỳ khi biết một phần tên của họ
      • Kết quả Search sẽ trình bày trên lưới dữ liệu
      • Nếu tìm không thấy sẽ in ra câu “No Result is matched!”
    • Kết quả trên lưới dữ liệu cho phép người dùng xóa một hàng bất kỳ bằng cách click vào link hay update thông tin về lastname hay roles bằng click nút update trên hàng được lựa chọn
    • Khi các thao tác update, delete được thực hiện thành công thì lưới dữ liệu sẽ được cập nhật lại và trình bày kết quả cho người dùng
  • Mô tả yêu cầu của bài trên thể hiện đầy đủ chức năng cơ bản của một ứng dụng thực tế và kết nối DB. Chúng tôi sẽ phân tích và làm bài theo từng chức năng và áp dụng mô hình MVC từng chức năng một từng bước từng bước một.
  • DB chúng tôi thao tác có dạng như sau
  • Yêu cầu
    • Nắm vững các khái niệm về MVC
    • Nắm vững về ngôn ngữ lập trình Java, lập trình thao tác hướng đối tượng
    • Cách thức sử dụng JSTL, EL, HTML
    • Tools sử dụng ở đây là Netbeans 6.9.1
    • JDK 6 update 22
    • Server: Tomcat 6.0.26
    • DBMS: SQL Server 2005
    • Thư viện hỗ trợ: JSTL 1.1, Driver kết nối database SQLServer (sqljdbc.jar hay sqljdbc4.jar)
  • Các bước thực hiện
    • Tạo Web Application tương tư như kết hợp JavaFX với JSP và JDBC
      • Tên project: MVCDemo
      • Server: Apache Tomcat 6.0.26
      • J2EE version: 1.4
      • Cấu trúc project trên Netbeans như sau
    • Chúng ta thực hiện chức năng Login
      • Dựa mô hình phân tích trên chúng ta thấy cần phải tạo ra LoginBean chứa đựng hành vi kiểm tra login của user để có thể sử dụng nhiều lần và rút ngọn code trình bày trên servlet
      • Cập nhật trang index để đón nhận username và password
      • Tạo LoginBean cho xử lý với phương thức checkLogin
        • Lưu ý: add thư viện driver hỗ trợ kết nối SQLServer (sqljdbc.jar, sqljdbc4.jar) vào library
        • Tạo Bean như sau: click phải chuột trên Source Package, chọn New, chọn Other
          • Chọn Java trong Categories, chọn Java Class trong File Types
          • Đặt tên class và đặt package (ở đây tôi đặt sample.mvc)
          • Click Finish, và cập nhật code như sau
          • Các thư viện import là java.sql
      • Tạo Servlet – Controller thực hiện code như sau
        • Lấy tham số truyền từ client, gọi bean, gọi hàm checkLogin và đưa trang trả về
    • Tạo trang fail.jsp như sau
      • Tạo trang welcome.jsp như sau
        • Dùng EL để lấy giá trị session và trình bày form
      • Cấu trúc project chúng ta như sau
      • Start Server Tomcat, Build Project, Deploy và Test
        • Nếu check sai
        • Lưu ý: chúng ta thấy trên Address bar không có tên file vì đang áp dụng RequestDispathcher như đã đề cập trong phần Servlet – Controller
    • Chúng ta thực hiện chức năng Try again và Register khi Login sai
      • Cập nhật trang fail.jsp như sau
      • Cập nhật lại Controller như sau


      • Tạo trang register.jsp như sau
      • Build, Deploy and Test Project

    • Thực hiện chức năng đăng ký một account mới
      • Cập nhật thành phần của LoginBean – Model với chức năng insert
      • Cập nhật lại Controller như sau
      • Build, Deploy và Testing Project
        • DB trước khi thao tác
        • Test
      • DB sau khi Register
    • Thực hiện chức năng Search
      • Kết quả trả về có thể là tập hợp Object, do vậy LoginBean phải được cập nhật thuộc tính để chứa đựng giá trị dữ liệu trả về bao gồm username, lastname, roles
        • Khai báo các biến properties trong LoginBean
        • Phát sinh get và set cho các thuộc tính này
          • Click phải chuột trên code, chọn Refactor, chọn Encapsulate Fields

          • Nhấn Select All, click chọn Refactor, code sẽ phát sinh các hàm get và set tương ứng
        • Cập nhật Constructor có 3 tham số và hàm SearchLikeLastName vào LoginBean

      • Cập nhật Controller để xử lý
        • Bổ sung định nghĩa về trang show.jsp
        • Cập nhật nội dung xử lý tương ứng với Search


      • Tạo trang show để lấy dữ liệu từ requestScope để trình bày ra màn hình
        • Sử dụng JSTL kết hợp với EL, HTML để trình bày dữ liệu ra màn hình
        • Import thư viện JSTL 1.1 vào library
          • Gõ JSTL, chọn JSTL 1.1, nhấn Add Library
        • Tạo trang show.jsp (cấu trúc như hình vẽ trên), cập nhật trang show như sau
          • Import taglib vào trang, và trình bày dữ liệu

        • Lưu ý:
          • Giá trị điền trong EL language ${rows.<tên thuộc tính trong bean Class>} (ví dụ ${rows.username}) đây là field chúng ta lấy từ các thuộc tính có trong LoginBean và nó được tạo ra các get/set method trong tập tin LoginBean class (ở đây là tập tin LoginBean.java)
          • Các thành phần trong khung xanh là EL expression
          • Các thành phần trong khung đỏ là JSTL
        • Build, Deploy và Test Project

      • Tạo chức năng Delete để delete một hàng dữ liệu chọn bất kỳ trên trang show
        • Dựa trên mô hình phân tích như trên, chúng ta cần cập nhật trang show như sau
          • Chúng ta cần phải áp dụng kỹ thuật URL Writing để cập nhật chuỗi query String truyền về server
          • Chuỗi này cần chứa 03 tham số, tham số thứ nhất chứa hành động thể hiện chúng ta đang thực hiện chức năng delete, tham số thứ 2 chứa giá trị khóa để thực hiện tìm kiếm record cần xóa (username) để đem dữ liệu về server, tham số còn lại chứa tham số đang search trong trang trước để truyền đến phần xử lý của kết quả trang delete để tạo cảm giác lưới được cập nhật. Thực chất của vấn đề này trong bước 6 là chúng ta gọi lại toàn bộ chức năng Search như bước trước đó nhưng gọi trực tiếp bằng code không sử dụng form thông qua controller
          • Link Delete phải thông qua controller để điều khiển, do vậy chúng ta phải áp dụng JSTL để tạo link với đầy đủ chuỗi query string
        • Chúng ta cập nhật trang show.jsp như sau
        • Chúng ta thêm mới chức năng delete cho Login Bean
        • Chúng ta tiếp tục cập nhật Controller như sau
        • Build, deploy và test project

        • DB được cập nhật tương ứng
      • Chúng ta thực hiện tiếp tục với chức năng Update lastname và roles
        • Chúng ta cần phải áp dụng kỹ thuật hidden form field để tạo control textbox ẩn chứa giá trị username cần update để đem dữ liệu về server tìm kiếm user tương ứng
        • Lần nữa chúng ta phải tạo textbox ẩn thứ 2 để chứa tham số đang search trong trang trước để truyền đến phần xử lý của kết quả trang update để tạo cảm giác lưới được cập nhật. Thực chất của vấn đề này trong bước 6 là chúng ta gọi lại toàn bộ chức năng Search như bước trước đó nhưng gọi trực tiếp bằng code không sử dụng form thông qua controller
        • Chúng ta cần biến giá trị của lastname và roles trở thành 02 control textbox và checkbox để người dùng có thể cập nhật giá trị
        • Để dữ liệu truyền về server xử lý, chúng ta cần phải có form, và ở đây mỗi hàng là một form – nghĩa là có nhiều form. Nếu chúng ta dùng một form thì giá trị tham số trả về luôn là control đầu tiên – dẫn đến kết quả sai lệch - ở đây chúng ta đang muốn cập nhật đúng hàng đang chọn lựa
        • Chúng ta cập nhật trang show.jsp như sau

        • Bổ sung chức năng Update cho LoginBean
        • Cập nhật chức năng xử lý cho Controller
        • Build, Deploy và test Project
          • Nhập liệu chỉnh sửa
          • Nhấn nút Update
        • DB được cập nhật
      • Chúng ta cập nhật bổ sung một tính chất để trang web từ trang trình bày có thể trở về trang trước đó bằng Link Back. Cái này dùng để hoàn thiện đầy đủ ứng dụng web
        • Chúng ta sẽ áp dụng kỹ thuật JSTL và URL Writing nhưng dựa trên MVC để chúng thấy như các bước trên.
        • Thanh Address bar trên Browser không bao giờ trình bày trang cụ thể mà chỉ trình bày tham số với Controller thể hiện bản chất của mô hình MVC
        • Chúng ta cập nhật phần cuối của trang show.jsp
        • Cập nhật Controller
        • Build, Deploy và Test project




Chúc mừng các bạn đã hoàn tất và nắm tổng quát khái niệm về MVC, cách thức thiết kế, mô hình ứng dụng và cài đặt ứng dụng web theo mô hình MVC. Qua đó chúng ta thấy được các ưu điểm và khuyết điểm của mô hình này.
Chúng tôi hy vọng nội dung của bài này giúp ích các bạn trong việc cài đặt mô hình ứng dụng web áp dụng MVC
Rất mong sự góp ý chân thành và chia sẻ của quí vị về vấn đề này. Hẹn gặp lại quý vị ở chủ đề khác



Nguồn:
Kieutrongkhanh.net

Thứ Năm, 11 tháng 4, 2013

Lập trình hướng đối tượng với mô hình 3 lớp (3 layers)

[Tiếp tục cái sự học...]
Lưu ý: Các bạn không nên nhầm lẫn khái niệm lớp(layer) trong phần này với khái niệm lớp(class) của các ngôn ngữ lập trình hướng đối tượng.
Trong phát triển ứng dụng, để dễ quản lý các thành phần của hệ thống, cũng như không bị ảnh hưởng bởi các thay đổi, người ta hay nhóm các thành phần có cùng chức năng lại với nhau và phân chia trách nhiệm cho từng nhóm để công việc không bị chồng chéo và ảnh hưởng lẫn nhau. Ví dụ trong một công ty bạn có từng phòng ban, mỗi phòng ban sẽ chịu trách nhiệm một công việc cụ thể nào đó, phòng này không được can thiệp vào công việc nội bộ của phòng kia như Phòng tài chính thì chỉ phát lương, còn chuyện lấy tiền đâu phát cho các anh phòng Marketing thì các anh không cần biết.
Trong phát triển phần mềm, người ta cũng áp dụng cách phân chia chức năng này. Bạn sẽ nghe nói đến thuật ngữ kiến trúc đa tầng/nhiều lớp, mỗi lớp sẽ thực hiện một chức năng nào đó, trong đó mô hình 3 lớp là phổ biến nhất. 3 lớp này là gì? Là Presentation, Business Logic, và Data Access. Các lớp này sẽ giao tiếp với nhau thông qua các dịch vụ(services) mà mỗi lớp cung cấp để tạo nên ứng dụng, lớp này cũng không cần biết bên trong lớp kia làm gì mà chỉ cần biết lớp kia cung cấp dịch vụ gì cho mình và sử dụng nó mà thôi.
1. Giới thiệu các thành phần của mô hình 3layer
Mô hình layer gồm có 3 layer:
  • Layer GUI (Graphics User Interface)
  • Layer Business Logic (Đây là layer để xử lý các dữ liệu, thông tin trước khi đưa lên giao diện hoặc đưa xuống dữ liệu.)
  • Layer Data Access – Layer này sẽ nói chuyện Data.


1.1. GUI Layer.
  • Đây là layer tạo lên giao diện cho người dùng, nó sẽ là nơi tiếp nhận và kết xuất ra kết quả của chương trình cho bạn.
  • Nó có nhiệm vụ xử lý, kiểm tra các dữ liệu nhập vào ( ví như ở TextBox này nó phải là số, số phải từ 1-9….).
  • Nó tiếp nhận các Event của người dùng, kiểm tra dữ liệu được nhập vào, gửi yêu cầu xử lý xuống tầng kế tiếp.
1.2. Business Logic Layer
  • Đây là layer xử lý chính các dữ liệu trước khi được đưa lên hiển thị trên màn hình hoặc xử lý các dữ liệu trước khi lưu dữ liệu xuống cơ sở dữ liệu.
  • Đây là nơi đê kiểm tra các yêu cầu nghiệp vụ, tính toán các yêu cầu nghiệp vụ.
  • Tại đây các tính năng tính toán trong chương trình sẽ được thực thi. (Như tính lương theo một công thức.)
1.3. Data Access Layer
  • Layer này sẽ lo nhiệm vụ là đọc cơ sở dữ liệu lên, cập nhật cơ sở dữ liệu, update cơ sở dữ liệu.
  • Nói chung là nó làm nhiệm vụ là nói chuyện phải trái với database.
1.4. Cách các layer “nói chuyện” với nhau.
Vấn đề đặt ra ở đây là 3 layer này ‘Nói chuyện’ với nhau như thế nào
Nhìn vào sơ đồ ta cũng sẽ nhận được câu trả lời:
Quá trình hiển thị dữ liệu:
Data Access layer nói chuyện với Database và lấy dữ liệu lên theo một cách nào đó (có thể là bằng câu lệnh select hay thông qua proceduce) lúc này sau khi lấy được dữ liệu lên thì nó sẽ đẩy lên Business layer tại đây Business cần nhào bột, thêm mắm muối rồi đẩy nó lên trên GUI và tại GUI nó sẽ hiển thị lên cho người dùng
Quá trình đưa dữ liệu xuống.
Người dùng thao tác với GUI layer sau đó ra lệnh thực hiện (ví như Insert) sau đó hệ thống sẽ kiểm tra các thông tin người dùng nhập vào nếu thỏa đi xuống tiếp layer Business để tiếp tục được nhào nặn, tính toán và kiểm tra sau khi xong thì dữ liệu được đẩy xuống thông tin phía dưới Data Access Layer sau đó tại DataAccess Layer sẽ thực thi nó xuống database.
1.5. Cách xử lý “lỗi” trong mô hình 3 layer.
Một khi gặp lỗi (các trường hợp không đúng dữ liệu) thì đang ở layer nào thì quăng lên trên layer cao hơn nó 1 bậc cho tới GUI thì sẽ quăng ra cho người dùng biết.
1.6. Demo mô hình 3 layer trong chương trình quản lý


DOWNLOAD DEMO

Nguồn: vi-infotech.com

[m0nst3rbee] Vũ trụ huyền bí


Một bức ảnh chụp mặt trăng. (Ảnh: Wikipedia)
Hơn 40 năm đã trôi qua kể từ khi con người lần đầu tiên đặt chân lên mặt trăng. Đó là ngày 19/7/1969, khi các phi hành gia người Mỹ của tàu Apollo 11 thực hiện sứ mệnh khám phá mặt trăng. Tuy nhiên cho tới nay, con
người vẫn không khôn ngoan hơn trước bao nhiêu khi hiểu biết về mặt trăng. Ngược lại, các nhà khoa học đang lúng túng bởi những dữ liệu thu thập được từ các thiết bị đặt trên mặt trăng. Khi nhìn lên mặt trăng vào ban đêm, chúng ta vẫn chỉ có một cảm giác xa lạ tương tự. Chúng ta không thể kìm được ngoài việc hỏi: “Mặt trăng, ngươi có thể nói với chúng ta thêm một chút về bản thân ngươi được không? Chẳng hạn, ngươi đến từ đâu?”
Hiện tại, có ba giả thuyết chính giải thích về nguồn gốc của mặt trăng. Giả thuyết thứ nhất là bụi và những đám khí vũ trụ đã hình thành mặt trăng, cũng giống trái đất chúng ta 4,6 tỷ năm trước đây. Giả thuyết thứ hai là mặt trăng đã vỡ ra từ vỏ Trái Đất bởi các lực ly tâm, và để lại một vùng trũng – được cho là Thái Bình Dương ngày nay. Giả thuyết thứ ba là mặt trăng là một hành tinh độc lập bắt được lực hấp dẫn từ trái đất khi đi ngang qua, và nó xoay quanh trái đất kể từ đó.
Hầu hết các nhà khoa học ban đầu tin vào giả thuyết thứ nhất, mặc dù một số thích giả thuyết thứ hai hơn. Tuy nhiên, việc phân tích các mẫu đất mặt trăng được mang về bởi các phi hành gia chỉ ra rằng kết cấu mặt trăng là khác với trái đất. Trái đất có nhiều sắt và ít silicon hơn cấu thành nên nó, trong khi mặt trăng thì ngược lại. Ngoài ra, trái đất có rất ít quặng titan, trong khi mặt trăng có rất nhiều. Như vậy các phát hiện này cho thấy mặt trăng không phải được vỡ ra từ trái đất. Cũng bằng cách tiếp cận tương tự, giả thuyết đầu tiên là không vững chắc. Nếu mặt trăng và trái đất được hình thành bởi quy trình tương tự và cùng lúc, thì tại sao chúng lại khác nhau về kết cấu? Các nhà khoa học đã bỏ qua giả thuyết đầu tiên, và chỉ còn lại giả thuyết thứ ba. Nếu mặt trăng đi vào hệ mặt trời từ không gian bên ngoài, thì nó nên bay về phía mặt trời, thay vì trái đất, vì lực hấp dẫn của mặt trời lớn hơn trái đất rất nhiều.
Như vậy không giả thuyết nào trong ba giả thuyết được các nhà khoa học đưa ra là có thể trả lời tường tận mọi câu hỏi. Nguồn gốc mặt trăng vẫn là một bí ẩn. Có rất nhiều không gian cho con người đưa ra các giả thuyết mới về nguồn gốc mặt trăng. Bất kể chúng có vẻ nực cười như thế nào, người ta không nên dán nhãn chúng là phản khoa học mà không suy xét cẩn thận.
Một số “trùng hợp” đặc biệt giữa mặt trời, trái đất và mặt trăng
Hãy nhìn xem và nghĩ về một số hiện tượng thiên văn đặc biệt khó tin giữa mặt trời, trái đất và mặt trăng.
Khoảng cách trung bình giữa trái đất và mặt trăng là 380.000 km, còn giữa mặt trời và trái đất là 150.000.000 km. Cái sau lớn hơn 395 lần so với cái trước. Đường kính mặt trời là khoảng 1.380.000 km, trong khi mặt trăng là 3.400 km, tỷ lệ giữa chúng cũng lại là 395 lần. Cả hai đều là 395. Liệu có thể là ngẫu nhiên không? Điều này có nghĩa là gì?
Hãy nghĩ về nó. Mặt trời lớn hơn mặt trăng 395 lần, nhưng xa hơn trái đất 395 lần so với mặt trăng. Cả hai đều có cùng kích thước khi nhìn từ trái đất, bởi vì khoảng cách là khác nhau. Đây là một hiện tượng tự nhiên hay nhân tạo? Tại đâu trong vũ trụ, người ta có thể tìm thấy ba hành tinh có cùng loại “ngẫu nhiên” này? 

Mặt trăng muôn hình vạn trạng khiến con người thích thú thưởng ngoạn. (Ảnh:AFP)
Hai hành tinh thay nhau chiếu sáng trái đất, một ban ngày và một ban đêm. Không có ví dụ nào khác của hiện tượng như vậy trong hệ mặt trời của chúng ta. Nhà khoa học uy tín, Isaac Asimov, từng nói rằng theo dữ liệu hiện có, mặt trăng về nguyên tắc không nên tồn tại ở vị trí đó. Ông cũng cho biết: “Mặt trăng đủ lớn để gây ra nhật thực (solar eclipse), nhưng đủ nhỏ để gây ra hiện tượng tán mặt trời (corona). Thiên văn học của chúng ta không thể giải thích sự ngẫu nhiên trong các ngẫu nhiên này.”
Liệu đây có thực sự là ngẫu nhiên? Không hẳn, theo một số nhà khoa học. William R. Sheldon, một nhà khoa học, nói: “Để theo quỹ đạo xoay quanh trái đất, một con tàu vũ trụ phải duy trì một tốc lực 10.800 dặm/giờ ở độ cao 100 dặm. Tương tự, để mặt trăng giữ quỹ đạo cân bằng với lực hấp dẫn của trái đất, nó cũng cần một tốc lực, sức nặng, và độ cao chính xác”. Câu hỏi là: nếu một bộ các điều kiện hiện tại là không thể đạt được bằng tự nhiên, thì tại sao chúng đi theo cách này?
Quá lớn để trở thành một vệ tinh
Có một vài hành tinh trong hệ mặt trời có thể trở thành các vệ tinh tự nhiên. Tuy nhiên, mặt trăng lớn một cách bất thường để có thể là một vệ tinh. Nó quá lớn so với hành tinh mẹ của nó. Chúng ta hãy thử so sánh các dữ liệu sau đây. Đường kính trái đất là 12.756 km, đường kính mặt trăng là 3.467 km, tức bằng khoảng 27% đường kính trái đất. Đường kính sao Hỏa là 6.787 km, và nó có 2 vệ tinh. Cái lớn hơn có đường kính 23 km, tức khoảng 0,34% đường kính sao Hỏa. Đường kính sao Mộc là 142.800 km, và nó có 13 vệ tinh. Cái lớn nhất có đường kính 5.000 km, tức 3,5% đường kính sao Mộc. Đường kính sao Thổ là 120.000 km, và nó có 23 vệ tinh. Cái lớn nhất có đường kính 4.500 km, bằng khoảng 3,75% đường kính sao Thổ. Không vệ tinh nào có đường kính vượt quá 5% đường kính hành tinh mẹ của chúng, nhưng đường kính mặt trăng lại bằng 27% đường kính trái đất. Chẳng phải khi so sánh, mặt trăng lớn một cách bất thường? Dữ liệu thực sự chỉ ra rằng mặt trăng là khác thường.
Các hố thiên thạch đều quá nông
Các nhà khoa học nói với chúng ta rằng các hố trên bề mặt mặt trăng được gây ra bởi tác động của thiên thạch hay sao chổi. Cũng có các hố thiên thạch trên trái đất. Theo tính toán khoa học, nếu một tảng thiên thạch đường kính cỡ vài dặm đâm vào trái đất hay mặt trăng với vận tốc 30.000 dặm/giây, nó tương đương với 1 triệu tấn thuốc nổ, và sẽ tạo ra hố thiên thạch có độ sâu 4-5 lần đường kính của nó. Các hố thiên thạch trên trái đất đã chứng minh tính toán này là chính xác. Thế nhưng các hố thiên thạch trên bề mặt mặt trăng lại nông một cách khác thường. Lấy ví dụ, Gagrin Crater, hố sâu nhất, chỉ sâu 4 dặm, mặc dù đường kính của nó là 186 dặm. Với đường kính 186 dặm này, độ sâu hố thiên thạch nên là ít nhất 700 dặm, thay vì 4 dặm, một độ sâu chỉ bằng 12% đường kính. Đây là một điều không thể giải thích về mặt khoa học.
Tại sao như vậy? Các nhà thiên văn học không thể giải thích một cách hoàn hảo, và họ dường như không muốn đi sâu thêm nữa. Họ biết rằng một giải thích hoàn hảo sẽ lật đổ các lý thuyết đã được thiết lập. Giải thích duy nhất là lớp vỏ mặt trăng được cấu thành bởi một thứ vật chất cứng nằm dưới bề mặt của nó 4 dặm, lớp bề mặt bao phủ bởi đá và bụi. Các thiên thạch đã không thể xuyên qua lớp vỏ cứng này. Và rồi, thứ vật chất rất cứng ấy rốt cuộc là gì?
Thứ kim loại gần như không thể tồn tại
Không có gì là lạ nếu các miệng núi lửa trên bề mặt mặt trăng có một lượng lớn nham thạch. Nhưng điều kỳ lạ là nham thạch ấy chứa các nguyên tố kim loại như titanium, chromium, yttrium, v.v. mà rất hiếm thấy trên trái đất. Các kim loại này đều rất cứng, đồng thời có tính chịu nhiệt và ăn mòn rất mạnh. Các nhà khoa học ước tính cần nhiệt độ 2.000-3.000º C để làm tan chảy các kim loại này. Nhưng mặt trăng là một trái cầu đã nguội lạnh mà không có hoạt động núi lửa nào trong 3 tỷ năm. Vậy tại sao mặt trăng sản sinh ra quá nhiều thứ kim loại có sức chịu nhiệt cao như thế? Ngoài ra, việc phân tích 380 kg mẫu đất mặt trăng được đem về bởi các phi hành gia cho thấy có sắt và titan tinh khiết. Các khoáng chất kim loại tinh khiết như vậy là không thể tìm thấy dưới điều kiện tự nhiên.
Những sự thật không thể giải thích này nói với chúng ta điều gì? Không còn nghi ngờ gì nữa, chúng chứng tỏ các nhân tố kim loại này không được hình thành dưới điều kiện tự nhiên, mà được chiết lọc. Vậy thì câu hỏi là bởi ai, và khi nào?
Mặt không thể được nhìn thấy từ trái đất 

Bề mặt lồi lõm ở mặt sau của mặt trăng. (Ảnh: NASA)
Luôn có một mặt của mặt trăng quay về phía trái đất. Con người không thể thấy mặt bên kia, cho tới khi phi thuyền đáp lên đó và chụp ảnh. Các nhà thiên văn luôn nghĩ rằng mặt sau của mặt trăng nên tương tự mặt trước, với nhiều hố thiên thạch và biển dung nham. Nhưng các bức ảnh cho thấy một cảnh tượng hoàn toàn khác. Mặt sau của mặt trăng rất mấp mô. Hầu hết là các hố nhỏ và những rặng núi với rất ít biển dung nham.
Các nhà khoa học không thể giải thích sự khác biệt. Về mặt lý thuyết, xác suất bị thiên thạch đánh nên là như nhau giữa hai bên mặt của mặt trăng, nếu đây là một hành tinh hình thành một cách tự nhiên. Vậy tại sao có sự khác biệt? Tại sao luôn có một phía của mặt trăng quay mặt về trái đất? Lời giải thích từ các nhà khoa học là mặt trăng xoay quanh trục của nó với vận tốc 16,56 km/giờ, và cũng xoay quanh trái đất với vận tốc tương đương. Do đó một phía của mặt trăng luôn quay mặt về trái đất.
Hiện tượng này không tồn tại ở bất cứ hành tinh nào khác cùng các vệ tinh của nó trong hệ mặt trời của chúng ta, ngoại trừ trái đất và mặt trăng. Liệu có thể lại là “ngẫu nhiên” cùng các “ngẫu nhiên” khác? Có lời giải thích nào ngoài “ngẫu nhiên” chăng?
Các hiện tượng kỳ lạ trong vài trăm năm qua
Trong 300 năm qua, các nhà thiên văn học đã quan sát nhiều hiện tượng không thể giải thích về mặt trăng. Casini đã khám phá ra một đám mây bao phủ mặt trăng vào năm 1671. Tháng 4/1786, William Herser, cha đẻ của thiên văn học hiện đại, đã quan sát được các dấu hiệu núi lửa phun trào trên mặt trăng, mặc dù các nhà khoa học tin rằng không có hoạt động núi lửa nào trên mặt trăng trong 3 tỷ năm qua. Và rồi, điều gì đã được quan sát mà trông như núi lửa phun trào?
Năm 1843, nhà thiên văn người Đức John Schicoto, người đã vẽ hàng trăm tấm bản đồ mặt trăng, đã phát hiện ra rằng hố thiên thạch Leany Crater, với đường kính gốc vài km, đã trở nên nhỏ hơn. Ngày nay, Leany Crater chỉ là một chấm nhỏ với trầm tích màu trắng bao quanh nó. Các nhà khoa học không hiểu tại sao. Ngày 24/4/1882, các nhà khoa học đã khám phá ra rằng có những vật thể không xác định di chuyển trên bề mặt vùng Aristocrat (Aristocrat’s Zone). Ngày 19/10/1945, người ta đã quan sát được 3 điểm sáng trên bức tường Darwin (Darwin Wall) tại bề mặt mặt trăng.
Tối ngày 6/7/1954, trưởng Đài Quan trắc Thiên văn Minnesota và các cộng sự của ông đã nhìn thấy một đường tối bên trong miệng núi lửa Picallomy, rồi biến mất ngay sau đó. Ngày 8/9/1955, tia chớp đã xuất hiện hai lần dọc bờ núi lửa Ross. Lại nữa, ngày 9/2/1956, Tiến sĩ Toyota thuộc Đại học Meiji, Nhật Bản đã nhìn thấy vài vật thể tối dường như đã hình thành hình dạng các ký tự DYAX và JWA. 

Mặt trăng luôn quay một mặt về phía địa cầu, nhưng mấy nghìn năm trước người Maya đã đem mặt sau của nó khắc lên miếu thờ mặt trăng. Trong bức phù điêu còn có hình một thanh niên lái cỗ máy như phi thuyền. (Ảnh: Chánh Kiến Net)
Ngày 4/2/1966, một xe vũ trụ không người lái của Nga, Moon Goddess 9, đã đáp xuống biển Rain (Rain Sea) tại mặt trăng và chụp được hai dãy cấu trúc giống kim tự tháp cách đều nhau. Tiến sĩ Van Sunder tuyên bố: “Chúng có thể phản chiếu mạnh ánh mặt trời, khá giống các dấu trên đường băng”. Từ tính toán độ dài và độ sâu, người ta phát hiện các cấu trúc này có độ cao khoảng tòa nhà 15 tầng. Tiến sĩ Van Sunder nói: “Không có cao nguyên gần đó, nơi những tảng đá có thể lăn xuống vị trí hiện tại để hình thành các dạng hình học trên.”
Thêm nữa, Moon Goddess 9 cũng chụp được một cái hang bí ẩn ở bờ của biển Stormy (Stormy Sea). Chuyên gia nghiên cứu mặt trăng, Tiến sĩ Wilkins tin rằng những cái hang tròn này thông trực tiếp tới trung tâm mặt trăng. Bản thân Wilkins từng khám phá ra một cái hang khổng lồ tại hố Casiny A. Ngày 20/11/1966, tàu vũ trụ American Orbit 2 Exploration Spaceship đã chụp được vài kiến trúc hình kim tự tháp từ độ cao 46 km trên biển Tranquility (Tranquility Sea). Các nhà khoa học ước tính các kim tự tháp cao từ 15-25 mét và cũng được định vị hình học. Các kiến trúc có màu nhạt hơn đất và đá quanh chúng, và chúng rõ ràng không phải các vật thể tự nhiên.
Ngày 11/9/1967, nhóm thiên văn học Montelow đã phát hiện một “đám mây đen với những đường viền màu tía” trên biển Tranquility. Hiện tượng kỳ lạ này không được quan sát bởi mắt thường, mà bởi các nhà thiên văn và tàu thăm dò. Điều này có nghĩa mặt trăng còn nhiều bí mật chưa được nhân loại biết đến. 

Khi phi thuyền Apollo tiếp cận mặt trăng, bề mặt mặt trăng dường như không tồn tại từ trường, từ đó có thể thấy bên trong mặt trăng là rỗng. (Ảnh: Wikipedia)


UFO trên mặt trăng
Ngày 24/11/1968, tàu Apollo 8, trong khi điều tra các điểm đỗ trong tương lai, đã chạm trán một vật thể bay khổng lồ với kích cỡ vài dặm vuông. Khi Apollo 8 trở lại cùng địa điểm từ quỹ đạo của nó quanh mặt trăng, vật thể kia đã không còn ở đó. Nó là gì? Không ai biết. Tàu Apollo 10, khi đang ở độ cao 50.000 feet phía trên mặt trăng, đã được tiếp cận bởi một vật thể bay không xác định. Vụ chạm trán này đã được ghi lại thành phim tài liệu. Ngày 19/7/1969, tàu Apollo 11 mang theo ba phi hành gia, những người đầu tiên đặt chân lên mặt trăng. Khi trên đường tới mặt trăng, các phi hành gia đã nhìn thấy một vật thể lạ thường trước mặt họ. Nhìn từ khoảng cách 6.000 dặm, họ ban đầu nghĩ rằng đó phải là cánh quạt tên lửa từ Apollo 4. Nhưng khi nhìn qua ống nhòm, họ phát hiện rằng vật thể này có hình chữ L. “Nó trông như một cái va-li được mở”, Armstrong nói. Khi nhìn xa hơn bằng một kính lục phân, họ phát hiện vật thể trông như một hình trụ. Một phi hành gia khác, Aldrin, cho biết: “Chúng tôi cũng thấy vài vật thể nhỏ hơn đi ngang qua, gây náo loạn tàu chúng tôi, rồi chúng tôi thấy vật thể sáng màu hơn này bay ngang qua”. Ngày 21/7, khi Aldrin đi vào Landing Capsule để kiểm tra lần cuối, anh đột nhiên nhìn thấy hai vật thể đang bay lượn. Một trong số chúng lớn hơn và sáng hơn, bay với vận tốc cao hướng song song với mặt trước phi thuyền, rồi biến mất ngay sau đó. Nó lại xuất hiện mấy giây sau. Vào thời điểm ấy, hai vật thể phát ra những luồng sáng hợp vào nhau. Rồi chúng thình lình tách nhau ra, thăng lên nhanh chóng rồi biến mất. 

Ngày 19/11/1969, tàu Apollo mang hai phi hành gia lên mặt trăng chấp hành nhiệm vụ. (Ảnh: AFP/NASA)
Khi các phi hành gia đang chuẩn bị đáp xuống mặt trăng, họ nghe một tiếng nói từ Trung tâm Điều khiển: “Trung tâm Điều khiển gọi Apollo 11, điều gì đang xảy ra ở đó?” Apollo 11 trả lời: “Những đứa trẻ nghịch ngợm, Sir… rất nhiều họ… Oh, my God, ngài sẽ không tin nó. Tôi nói rằng có các phi thuyền khác ở đó… trên bờ các hố tròn, và chúng được đỗ ngay ngắn… và chúng đang nhìn chúng tôi từ mặt trăng…” Nhà khoa học người Nga, Tiến sĩ Arched nói: “Theo những tín hiệu đứt quãng của chúng tôi, vụ chạm trán với các vật thể bay khi tàu Apollo 11 đáp xuống đã được báo cáo ngay lập tức.” Ngày 20/11/1969, hai phi hành gia Conrad và Brian của tàu Apollo 12 đã quan sát thấy các vật thể bay khi họ đáp xuống mặt trăng. Các phi hành gia đáp xuống mặt trăng từ tàu Apollo 15 vào tháng 8/1971, Apollo 16 vào tháng 4/1972, và Apollo 17 vào tháng 12/1972 cũng đã chạm trán các vật thể bay.
Gary, một nhà khoa học, từng nói: “Gần như tất cả các phi hành gia đều đã nhìn thấy những vật thể bay không xác định”. Edwards, phi hành gia thứ sáu đáp xuống mặt trăng, nói: “Câu hỏi duy nhất là họ đến từ đâu?” John Younger, phi hành gia thứ chín đáp xuống mặt trăng, nói: “Nếu bạn không tin điều đó, cũng bằng bạn không tin một điều chắc chắn”. Năm 1979, nguyên giám đốc truyền thông NASA Molly Chertlin tuyên bố rằng “chạm trán các vật thể bay” là hết sức phổ biến. Bà tiếp tục: “Tất cả các phi thuyền đều đã bị đi theo bởi một số vật thể bay, hoặc ở xa hoặc ở gần. Cho dù điều gì xảy ra, các phi hành gia sẽ liên lạc với trung tâm chúng tôi”.
Nhiều năm sau, Armstrong tiết lộ: “Thật không thể tin được… Chúng tôi đều được cảnh báo có những thành phố hay phi thuyền trên mặt trăng… Tôi chỉ có thể nói rằng phi thuyền của họ cực kỳ siêu đẳng và chúng rất lớn…” Hàng ngàn hiện tượng bí ẩn trên mặt trăng, như ánh chớp kỳ bí, những đám mây đen trắng, các cấu trúc, những vật thể bay và nhiều nữa, đều là sự thật và đã được quan sát bởi các phi hành gia và nhà khoa học. Thật khó để giải thích chúng là gì.
Mặt trăng là một phi thuyền rỗng
Năm 1970, các nhà khoa học Nga Alexander Scherbakov và Mihkai Vasin đã đưa ra giả thuyết “Phi thuyền Mặt trăng” gây sốc để giải thích nguồn gốc mặt trăng. Họ tin rằng mặt trăng thực tế không phải một vệ tinh tự nhiên của trái đất, mà là một phi thuyền được tạo ra bởi các sinh mệnh có trí tuệ, và được thiết kế và tạo hình như một hành tinh. Có rất nhiều tài liệu về nền văn minh của họ được lưu giữ bên trong mặt trăng, và được cố ý đặt trên trái đất. Tất cả các khám phá về mặt trăng thực ra là công trình xuất chúng của các sinh mệnh có trí tuệ sống bên trong đó. Tất nhiên, giới khoa học khinh miệt lý thuyết này. Tuy nhiên, không thể chối cãi được rằng mặt trăng dường như còn được chúng ta biết quá ít. 

Thí nghiệm về làn sóng rung chứng minh mặt trăng là rỗng.
Điều khiến các nhà khoa học bối rối nhất chính là dữ liệu thu thập được từ các thiết bị để lại trên mặt trăng, thứ đo được các hoạt động rung trên lớp vỏ mặt trăng. Các dữ liệu chỉ ra rằng các làn sóng rung chỉ lan ra từ tâm chấn dọc theo bề mặt mặt trăng, chứ không đi vào trung tâm mặt trăng. Điều này cho thấy mặt trăng là rỗng và nó không có gì khác ngoài cái vỏ. Nếu nó là một hành tinh đặc, thì các làn sóng rung lẽ ra phải truyền vào trung tâm. Làm sao chúng chỉ chạy dọc theo bề mặt?
Xây dựng lại mới các lý thuyết về mặt trăng
Hãy thử xây dựng một lý thuyết mới về mặt trăng. Nó là rỗng và có hai lớp vỏ. Lớp vỏ ngoài cùng bao gồm đá và các quặng khoáng. Thiên thạch chỉ có thể đâm xuyên qua lớp vỏ này. Các hố thiên thạch được biết không sâu quá 4 dặm. Như vậy lớp vỏ ngoài cùng này dày gần 5 dặm. Lớp vỏ bên trong thì cứng, bao bọc bởi thứ hợp kim nhân tạo và không rõ dày bao nhiêu – có lẽ là vài dặm. Các nguyên tố kim loại của nó, bao gồm sắt, titanium, chromium, v.v. có tính chống nhiệt, áp suất và ăn mòn cao. Đây là một hợp kim chưa được biết đến trên trái đất.
Dữ liệu về rung lắc trên mặt trăng chỉ ra rằng các làn sóng rung truyền dọc theo bề mặt chứ không đi vào trung tâm. Điều này có nghĩa là mặt trăng chỉ có hai lớp vỏ nói trên. Do đó mặt trăng phải là nhân tạo, thay vì được hình thành tự nhiên. Các sinh mệnh có trí tuệ đã tiến hành những tính toán chính xác để phóng mặt trăng từ trái đất vào thời xa xưa và đặt nó tại vị trí có thể chiếu sáng trái đất vào ban đêm. Tóm lại, không có giả thuyết nào trong ba giả thuyết về nguồn gốc mặt trăng là đúng. 

Quả cầu triển lãm tại Đài Bắc khiến người ta liên tưởng đến mặt trăng là vệ tinh nhân tạo thời tiền sử. (Ảnh: Tịch Thượng Trân)
Các sinh mệnh đã xây dựng mặt trăng chỉ cho phép một mặt của nó quay về trái đất, bởi vì có nhiều thiết bị quan sát trên trái đất. Phía này được mài nhẵn để phản chiếu ánh sáng mặt trời, còn họ sinh sống ở bên trong mặt trăng, gần phía sau. Bởi vì nhiệt độ bề mặt mặt trăng thay đổi từ 127º C vào buổi trưa đến -183º C vào ban đêm, nên các cư dân đó phải sống bên trong mặt trăng.
Các sinh mệnh tạo ra mặt trăng đã sáng chế ra các đĩa bay và họ thường bay ra để nghiên cứu, duy trì thiết bị bề mặt, hoặc theo dõi các hoạt động của con người trên trái đất. Họ đôi khi bị bắt gặp bởi các phi hành gia từ trái đất hay bị quan sát bởi các kính thiên văn trên trái đất. Chúng ta không biết họ là sinh vật ngoài hành tinh đến, hay là cư dân đã ở đó từ lâu. Có lẽ không lâu nữa, con người trên trái đất sẽ tìm ra sự thật về mặt trăng.
Chúng ta đã xây dựng lý thuyết này để giải thích nguồn gốc và kết cấu mặt trăng bằng cách sử dụng các hiện tượng không thể giải thích bằng khoa học truyền thống. Lý thuyết này giải quyết hoàn hảo và từng bí ẩn bao quanh mặt trăng. Ai có thể bảo cách tiếp cận này là không khoa học?
Theo chanhkien

Thứ Hai, 8 tháng 4, 2013

Hướng dẫn lấy/reg key Norton Internet Security 2011 - 2012 - 2013 120 và 165 ngày

Sau đây mình xin hướng dẫn các bạn cách lấy key norton internet security(NIS) 2011 - 2012 - 2013 có thời hạn 165 > 120 ngày sử dụng.

Tool để lấy key NIS gồm có:

1: Máy ảo (mình dùng Virtualbox):  Virtualbox
2: Bộ cài đặt Nis 2011 OEM: Nis 2011
3: Nis 2011 trial reset v3.3.1:  NTR 3.3.1
4: Nis 2011 trial reset v3.1:  NTR 3.1


Video hướng dẫn Nhớ xem full màn hình cho dễ nhìn nhá



Bước 1: Tải 4 bộ cài đặt trên về máy tính.
               cài đặt máy ảo rồi coppy 3file còn lại vào máy ảo
Bước 2: Tiến hành cài đặt Nis 2011 oem vào máy.
Bước 3: Sau khi cài đặt nis 2011 oem ta bật lên sẽ như hình dưới.
Bước 4:  Vào Settings => Miscellaneous Settings => Norton Product Tamper Protection =>Tắt On => Off => OK => OK.
Bước 5: Chạy crack  NTR 3.3.1 ( tương ứng key 120 ngày ) > INSTALL  Đợi 15 giây
Bước 6: Click vào biểu tượng Nis ở dưới khay Start bên phải. Sẽ bắt chúng ta điền Mail > Nếu bạn có mail account norton sẵn chỉ việc điền vào. Còn chưa có mail account ta cứ điền 1 mail nào đó. VD: Mình sẽ điền 1 mail mới > Next.
Hiện ra bảng đăng kí account chúng ta điền như hình dưới. Sẽ đươc 1 account và 1 key nis 120 ngày.

* Lấy key norton internet security 2012 (nis) 165 ngày.
Bước 1: Bật nis 2011 oem lên sẽ như hình dưới.
Bước 2:  Vào Settings => Miscellaneous Settings =>Norton Product Tamper Protection => Tắt On => Off => OK => OK.
Bước 3: Chạy crack  NTR 3.1 ( tương ứng key 165 ngày ) > INSTALL  Đợi 15 giây sẽ hiện lên bảng thông báo điền account hoặc tạo account mới.
Bước 4:  Lúc này ta điền mail nãy reg key 120 ngày vào. Và nhấn Next > Thanks you.
Bước 5: Lấy key Nis 2012 (Đây là bước quan trọng nhất trong các bước và hướng dẫn trên).
Truy cập vào trang: Manage.norton.com > Login bằng mail nãy điền vào account.
Bước 6:  Chọn My Account  sau đó chọn biểu tượng norton như hình dưới. Lưu ý key theo thứ tự cái nào reg trc là key đó. Tiếp theo nhấn Remove Lincense. Bây giờ các bạn có thể dùng key norton mang active cho Norton Internet Security 2012 hạn sử dụng 165 ngày.
Bước 7: :) Hướng dẫn lấy key NIS đến đây là Hết. Rất mong được sự ủng hộ của các bạn bằng những cái Click vào Like hoặc G+1 chia sẻ bài viết cũng như ủng hộ Blog ( Nếu bài viết hay :) ).  Chúc Mọi người thành công.
                                 Nguồn: bantinso

Thứ Năm, 4 tháng 4, 2013

Cách thiết lập biến môi trường để chạy Java ở cơ chế command line

Cách thiết lập biến môi trường để chạy Java ở cơ chế command line

1. Bấm chuộc phải vào biểu tượng Computer/ chọn Properties
2. Một cửa sổ mới hiện lên, chúng ta chọn Advanced System Settings
3. Cửa sổ System Properties sẽ hiển thị ra, chúng ta vào tab Advanced, click chọn button Environment Variables…Cửa sổ Environment variables sẽ hiển thị như hình bên dưới:
5. Trong mục System variables, click chọn button New.
Mục Variable name, chúng ta nhập vào biến JAVA_HOME
Mục Variable value, chúng ta copy đường dẫn cài đặt JDK vào đây, trong ví dụ này thì JDK được cài đặt như hình minh họa. Tức là nếu máy của bạn cài JDK ở đâu thì copy paste đường dẫn đó vào mục này:
Sau khi chọn OK, bạn quan sát trong vùng System Variables, biến JAVA_HOME và giá trị của nó sẽ xuất hiện như hình minh họa bên dưới:
5. Bước tiếp theo, các bạn tìm tới biến Path trong mục System variables, click chọn Edit:

Trong mục Variable value, các bạn di chuyển tới cuối, nhập vào các giá trị như hình minh họa : ;.;%JAVA_HOME%\bin;
6. Kiểm tra lại cấu hình có chính xác hay không:

Để kiểm tra xem máy tính của bạn đang cài JDK version bao nhiêu, vào Start/ Run. Hoặc gõ tổ hợp phím Windows+R để hiển thị cửa sổ Run, trong cửa sổ này các bạn gõ vào lệnh cmd rồi nhấn phím Enter:

java  –version để kiểm tra JDK version.
javac –version để kiểm tra javac version.
Nếu như khi gõ lệnh javac -version mà bạn thấy command line hiển thị thông báo như sau:
‘javac’ is not recognized as an internal or external command, operable program or batch file.
điều đó có nghĩa là bạn đã thiết lập cấu hình bị sai.

                  Nguồn: https://duythanhcse.wordpress.com/2011/12/20/cach-thiet-lap-bien-moi-truong/