Thứ Tư, 17 tháng 8, 2016

Sử dụng Struts Framework kết hợp với EJB 3 để hỗ trợ xây dựng ứng dụng Web

Sử dụng Struts Framework kết hợp với EJB 3 để hỗ trợ xây dựng ứng dụng Web

Mục đích: Chủ đề của bài này thực hiện kết hợp Struts 1.x Framework với EJB3 để cho thấy việc sự dễ dàng và tiện dụng trong quá trình xây dựng ứng dụng. Chúng tôi sẽ dựa trên những thành phần EJB có sẵn và dùng Struts để sử dụng các thành phần EJB này. Qua chủ đề này, chúng tôi cũng muốn giới thiệu việc tích hợp ứng dụng khi có các thành phần EJB riêng lẻ - hay middleware, chúng ta tiến tới tạo giao diện để sử dụng chức năng mà EJB cung cấp như thế nào cho hiệu quả nhất

Sử dụng Struts Framework kết hợp với EJB 3 để hỗ trợ xây dựng ứng dụng Web

Mục đích: Chủ đề của bài này thực hiện kết hợp Struts 1.x Framework với EJB3 để cho thấy việc sự dễ dàng và tiện dụng trong quá trình xây dựng ứng dụng. Chúng tôi sẽ dựa trên những thành phần EJB có sẵn và dùng Struts để sử dụng các thành phần EJB này. Qua chủ đề này, chúng tôi cũng muốn giới thiệu việc tích hợp ứng dụng khi có các thành phần EJB riêng lẻ - hay middleware, chúng ta tiến tới tạo giao diện để sử dụng chức năng mà EJB cung cấp như thế nào cho hiệu quả nhất

Yêu cầu của ứng dụng cụ thể (ở đây chúng tôi sẽ thực hiện nội dung tương tự bài MVC Pattern trên Web – Mô hình thiết kế ứng dụng theo dạng Model – View – Controller, Struts Framework 1.x hay tương tự các bài entity trong EJB 2.1 và 3.0)

  • Ứ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. Ở đây chúng tôi sẽ sử dụng kết quả sản phẩm EJB làm sẵn để tạo ứng dụng Enterprise áp dụng Struts Framework làm giao diện tương tác người dùng.
  • 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, Struts Framework 1.x, EJB và cách thức cài đặt EJB (2.1 lẫn 3.0)
    • 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
    • Phải thực hiện hoàn tất bài Entity Bean trong EJB 3.0 (bởi vì chúng ta sẽ sử dụng thành phần có sẵn của gói jar của bài EJB3 này)
    • Tools sử dụng ở đây là Netbeans 6.9.1
    • JDK 6 update 22
    • Server: JBoss 5.1.0GA
    • 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
    • Vào Tool Netbeans 6.9.1 để mở lại Project có tên Day7EJB3Entity (lưu ý: khi chọn Open Project, phải mở rộng – expand thành phần của project để mở luôn 02 thư mục project con là war và jar ở bên trong – sử dụng tổ hợp phím Shift để chọn 03 project – 1 project ear, 1 project jar và 1 project war), Project được load hay mở vào trong NetBeans như sau

      • Chúng ta sẽ sử dụng thành phần gói jar của project này để tích hợp vào thành phần ứng dụng mới của chúng ta (ở đây chúng tôi muốn thể hiện khả năng tái sử dụng của EJB)
    • Tạo Web Application tương tư như kết hợp JavaFX với JSP và JDBC
      • Tên project: EJB3EntityStruts
      • Server: JBoss5.1.0GA
      • J2EE version: JavaEE 5

      • Nhấn Next, tại bước Chọn Frameworks, chọn Struts 1.3.8 và check vào Add Struts TLDs để hỗ trợ đưa các taglib do Struts Framework hỗ trợ khi cài đặt ứng dụng (tương tự như bài Tổng quan về Struts Framework)

      • Nhấn Finish, cấu trúc project trên Netbeans cập nhật với các tập tin cấu hình struts-config.xml, taglib tlds và các library (tương tự như bài Tổng quan về Struts Framework) như sau

    • Chúng ta thực hiện tạo ứng dụng Enterprise Application để kết hợp gói EJB đã làm nêu trên và gói war mới tạo ra
      • Chúng ta thực hiện tạo Enterprise Application Project tương tự như bước 2 của tutorial trong CMR 1:1 nhưng lưu ý các nội dung sau
        • Tạo Project Enterprise Application có tên  EJB3EntityStrutsCombine
        • Chúng ta chọn Server là JBoss5.1.0 GA và version của Java EE là JavaEE5 bởi vì chúng ta đang tạo trên nền EJB 3.0 nhưng lưu ý bỏ các check về Create EJB Module và Create Web Application Module vì

      • Nhấn nút Finish, project được phát sinh trên Netbeans và thư mục chứa bài chỉ có duy nhất project enterprise mà không có 02 project jar và war như các bài làm về EJB như sau

    • Chúng ta thực hiện tích hợp các thành phần riêng lẻ vào trong project này (lưu ý: chỉ được add một gói web – war vào ứng dụng enterprise nhưng có thể add nhiều module EJB vào trong ứng dụng này hay có thể coi EJB là một thư viện để add gói jar vào Library và sử dụng chúng như bình thường)
      • Nhấn phải chuột trên project enterprise trong phần JavaEE Modules, click chọn Add JavaEE Module …

      • Cửa sổ Add Java EE Module xuất hiện, chúng ta add chọn module EJB gói jar (ở đây là Day7EJB3EntityBean-ejb) và module Web – gói war (ở đây là EJB3EntityStruts)
        • Với thao tác tương tự, chúng ta sẽ add được thêm nhiều project module EJB nhưng không được đối với module Web (đây là cơ chế tích hợp ứng dụng giữa những người khác nhau làm)

      • Chúng ta nhấn nút OK, project Netbeans được cập nhật như sau

    • Chúng ta thực hiện chức năng Login tương tự bài MVC Pattern trên Web – Mô hình thiết kế ứng dụng theo dạng Model – View – Controller hay Tổng quan về Struts Framework
      • Chúng ta tạo trang JSP mới với tên login.jsp để tạo form Login
      • Cập nhật trang login để đón nhận username và password nhưng action name chúng ta đặt tên phải có đuôi .do vì action được mapping phải có do để phân biệt giữa thành phần struts với nhau (ở đây sẽ là login.do). Ngoài ra, tên control của 02 thành phần đặt sẽ là properties của chúng ta tương ứng trong Action Form để khi kích hoạt action thì các hàm get/set được kích hoạt tương ứng

      • Tạo thành phần Action Form để lưu trữ dữ liệu và thực hiện chức năng Login cho form tương ứng ở trên tương tự như bài Tổng quan về Struts Framework, modified Action Form và struts-config.xml được cập nhật như sau

      • Tạo Action Class để đón nhận xử lý từ Action Servlet và kết xuất kết quả tương tự như bài Tổng quan về Struts Framework
        • Nhập tên, chọn package cho Action, đặc biệt nhập tên action sau dấu / trong Action Path. Lưu ý, action lấy trong html form nhưng không có .do (ở đây là login)

 

        • Chọn form tương ứng trong Action Form Bean Name (ở đây là Login Action Form), chọn trang làm form nhập (ở đây sẽ là index.jsp), chọn Scope tương ứng của form bean (ở đây chúng ta chọn là session để chúng ta có thể trình bày username ở trang khác), chúng ta chưa validate trong bài này nên gỡ bỏ check Validate ActionForm Bean
        • Action Class được phát sinh và struts-config.xml được cập nhật

        • Để hỗ trợ tham chiếu trong lúc lập trình EJB chúng ta phải add gói EJB vào trong gói web để lập trình
          • Chúng ta click phải chuột trên Library, chọn Add Project và di chuyển đến thư mục project jar của EJB, chọn và click Add

        • Cấu trúc project của gói war được cập nhật như sau

      • Chúng ta thực hiện thao tác xử lý bằng cách đón nhận tham số ActionForm ép về kiểu form của chúng ta là LoginActionForm, và gọi hành vi checkLogin từ EJB thông qua cơ chế consume EJB trên client mà chúng ta đã từng làm trên bài EJB 3 client, tùy theo kết quả chúng ta sẽ trả về là nhãn fail hay success để mapping đến trang home page  hay trang invalid

      • Chúng ta tạo trang invalid.jsp để trình bày message invalid username and password

      • Tạo trang welcome.jsp với session để trình bày tên user đăng nhập

        • Lưu ý: với việc lấy username chúng ta phải truy cập tầm vực của nó là session, tên attribute chính là tên bean được khai báo ở phần name trong form-bean và thuộc tính tương ứng chúng ta cần lấy thông qua các hàm get trong bean
      • Chúng ta phải thực hiện định nghĩa Action Forward tương tự như bài tổng quan về Struts Framework để kết quả xử lý phải chuyển đến trang tương ứng
        • Chúng ta mở tập tin struts-config.xml để thực hiện tạo Action Forward

        • Chúng ta đã cấu hình hoàn tất
      • Start Server JBoss5.1.0GA, Build Project, Deploy và Test
        • Lưu ý clean and build trên Enterprise Application, nó sẽ tự động build các thành phần

        • Phải deploy tập tin datasource trong gói ejb, cụ thể nơi chứa project ClassF21008_NB691\EJB\Day7EJB3EntityBean\Day7EJB3EntityBean-ejb\setup\, thả vào JBOSS_HOME\server\default\deploy

        • Deploy là deploy gói ear trong dist trong thư mục Enterprise Application

          • Chúng ta mở gói ear này bằng winrar, chúng ta thấy gói này chứa đựng đầy đủ thành phần ứng dụng cho dù chúng không cùng nằm thư mục nhưng được add vào tự động

          • Thư mục lib trong gói war, đặc biệt không chứa gói jar của ejb mà được reference cho dù chúng ta add gói jar của ejb vào library của gói war ở bước trên, bởi vì ứng dụng sẽ reference ejb từ xa không phải cục bộ trong gói war

          • Trạng thái deploy trên server

          • Thực thi ứng dụng

        • Nếu check sai

        • Thực hiện login đúng

      • Chúng ta đã hoàn tất xong chức năng Login
    • Chúng ta thực hiện chức năng Try Again và Register khi Login sai
      • Với chức năng Try Again, chúng ta cần bổ sung link vào trang invalid, và chức năng này đơn giản là chuyển trang về trang login. Do vậy, chúng ta sẽ áp dụng Forward Action để chuyển trang (tên action ở đây là try.do)

      • Cập nhật lại struts-config.xml với Forward Action cho action try tương tự như bài tổng quan Struts Framework

      • Chúng ta thực hiện chức năng Register (lưu ý người dùng chỉ cần nhập username và password, lastname, còn mặt định người dùng sẽ có role Admin là false) bằng cách tạo ra trang register.jsp với action insert.do như sau

      • Chúng ta bổ sung action register.do vào link trong trang invalid.jsp và bổ sung mapping trong struts-config.xml đến tập tin register tương tự như chức năng try

      • Chúng ta cần tạo Action Class để mapping Action Servlet đến kết quả kết xuất mà không thông qua các Action Form. Áp dụng các bước hướng dẫn ở trên tạo Action Class tên RegisterAction

        • Thực hiện thay đổi code của RegisterAction có kết nối EJB lấy dữ liệu trực tiếp mà không cần thông qua action form như sau

        • Thực hiện tạo trang fail.jsp để in thông báo lỗi khi không thành công

      • Thực hiện mapping dùng Action Forward để mapping kết xuất trong trang register đến kết quả thông qua struts-config.xml. Áp dụng các cách nêu trên mapping cho action insert với success đến trang login.jsp, còn fail đến trang lỗi fail.jsp

      • Build, Deploy and Test Project đến trang fail

      • Click Try Again

      • Click Register

        • DB trước khi insert

        • Nhập liệu và nhấn nút Register

        • DB cập nhật

        • Cấu trúc Project của gói war đến bước này như sau

    • Thực hiện chức năng Search
      • Chúng ta đã có html form search trong trang welcome.jsp với action search.do, ở đây chúng tôi sẽ làm ví dụ thông qua truy cập trực tiếp và xử lý trực tiếp trên Action class mà không cần qua Action Form, xử lý dữ liệu trực tiếp từ request để cho các bạn thấy sự đa dạng trong xử lý và không nhất thiết phải có Action Form

      • Chúng ta thực hiện tạo trực tiếp Action Class tên SearchAction, trong màn hình chọn lựa chúng ta gỡ check Use ActionForm Bean vì chúng ta không dùng ActionForm
        • Chúng ta thực hiện bổ sung hàm search trong Action Class và thực hiện xử lý trong execute như sau

      • 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

      • Chúng ta cần mapping Action Forward “success” và “fail” của action search với trang show.jsp trong struts-config.xml như sau

        • Cấu trúc project được cập nhật như sau

        • Build, Deploy và Test Project đến form Search

        • Click nút Search

      • Tạo chức năng Delete để delete một hàng dữ liệu chọn bất kỳ trên trang show và chức năng Update để update dữ liệu của một record bao gồm password và isAdmin
        • 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 tương tự như bài MVC hay tổng quan về Struts Framework như sau
        • Chúng ta cập nhật trang show.jsp như sau

        • Chúng ta tạo Action Class xử lý trực tiếp không cần Action Form như chức năng search với tên DeleteAction với chức năng delete là lấy tham số từ request ra như sau

        • Ở đây chúng ta thực hiện mapping Action Forward trong action delete nhưng ở đây, chúng tôi làm ví dụ cho thấy từ action này gọi action khác (ở đây delete action sẽ gọi action search), do vậy trong lúc chọn Forward, chúng ta không chọn Resource như các bước trên mà chọn Action và nhấn combo box để chọn action tương ứng tương ứng bài tổng quan về Struts Framework
          • Chúng ta thấy struts-config.xml được cập nhật như sau

        • Build, deploy và test project đến chỗ trình bày kết quả của trang search
          • DB trước khi thực hiện

          • Thực thi ứng dụng đến trang kết quả của search

        • Nhấn nút Delete, trang sẽ trả lại chính trang show và DB được cập nhật

      • 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. (áp dụng như phần phân tích của delete)
        • 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
        • Tạo Action Class tên UpdateAction để thực hiện update và xử lý không cần Action Form

        • Thực hiện mapping action update trong struts-config.xml tương tự như delete là chuyển đến action search

        • Build, Deploy và test Project đến trang show

          • DB trước chỉnh sửa

          • Nhập liệu chỉnh sửa, thêm số vào password của strut1 và gỡ check trong phần Roles

          • Nhấn nút Update

        • DB được cập nhật

        • Cấu trúc cuối cùng của project

Chúc mừng các bạn đã hoàn tất và nắm tổng quát các kết hợp hay tích hợp Struts 1.x Framework với EJB. Qua đó chúng ta học được cách kết hợp framework này với middle war và khả năng tích hợp của các framework khác nhau.

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 tích hợp ứng dụng

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

Không có nhận xét nào:

Đăng nhận xét