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

Tổng quan về Struts Framework – một Framework hỗ trợ xây dựng ứng dụng Web áp dụng MVC Pattern, xây dựng ứng dụng đầu tiên áp dụng Struts Framework

Tổng quan về Struts Framework – một Framework hỗ trợ xây dựng ứng dụng Web áp dụng MVC Pattern, xây dựng ứng dụng đầu tiên áp dụng Struts Framework

Mục đích: Chủ đề của bài này đề cập đến khái niệm tổng quát của Struts 1.x Framework. Chúng tôi sẽ tiếp cận tổng quát khái niệm từng thành phần của Struts dựa trên tổng quát mô hình MVC 2 Pattern. Dựa trên khái niệm này, chúng ta sẽ áp dụng Framework này trong phần phân tích và thiết kế ứng dụng web cụ thể để thấy rõ cách thức thiết kế, cách cài đặt ứng dụng cụ thể sử dụng Struts trong việc xây dựng ứng dụng Web

Khái niệm về Struts Framework

  • Đây là Framework hỗ trợ thiết kế và xây dựng ứng dụng web theo mô hình MVC 2 thông qua việc cung cấp hàng loạt các thư viện và tiện ích để hỗ trợ người dùng phát triên ứng dụng Web theo mô hình MVC một cách nhanh chóng và dễ dàng
  • Trong mô hình MVC chuẩn trong các bài giới thiệu trước, chúng ta thấy rằng việc tách ra 03 thành phần riêng biệt đã tạo thuận lợi cho chúng ta rất nhiều khi tách riêng thành phần Controller, Giao diện – View và phần xử lý – Model. Tuy nhiên, mô hình vẫn còn hạn chế đó là việc chuyển trang định hướng kết xuất, sự kết nối và trao đổi dữ liệu và định hướng xử lý đến Model hay View tương ứng vẫn còn lệ thuộc vào khá nhiều code Java trong Servlet. Struts đưa các làm cho việc mapping và kết xuất trở nên uyển chuyển hơn thông qua tập tin cấu hình struts-config.xml, đây tập tin cấu hình mapping, xác định kết xuất, xác định Model xử lý và kết xuất với View. Tập tin này được parsing thành class tương ứng khi thực thi và làm vai trò như Controller để điều phối và xác định xử lý, che dấu bớt sự phức tạp cho người lập trình khi mapping
  • 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
  • Struts Framework hỗ trợ 02 thành phần chính đó là View và Controller, thành phần Model không được hỗ trợ nhiều bởi vì Struts Framework hướng tới lấy hay kết nối thành phần xử lý từ middleware application server.
  • Các thành phần của Struts Framework
    • Basic: hỗ trợ các thành phần cơ bản để xây dựng ứng dụng web trên nền tảng MVC2
    • Tag Libraries: hỗ trợ một số tag library để xây dựng ứng dụng nhưng Struts có khả năng không cần dùng tag library này mà dùng trực tiếp luôn HTML control
    • Tiles Plugins: hỗ trợ việc xây dựng ứng dụng theo dạng Master Page để áp dụng trên toàn trang web
    • Validator Plugins: hỗ trợ validation trên phía server thông qua việc cấu hình thông tin các form và control nhập liệu trên xml
  • Cơ chế hoạt động của Struts Framework

    • Khi user gửi yêu cầu truy xuất ứng dụng web, request được chuyển đến ActionServlet, đây là Servlet được tạo sẵn trong Framework để làm chức năng như Controller
    • Action Server trích xuất thành phần request nhận được để so sánh với nội dung được mapping trong tập tin cấu hình struts-config.xml để tìm ra các thành phần tương ứng cấn xử lý
    • Nếu không tìm thấy sẽ báo lỗi 404 hay lỗi tương ứng. Ngược lại, nếu tìm thấy sẽ xác định action và View tương ứng của phần xử lý. View ở đây bao gồm form đón giá trị nhập và kết xuất để trả về người dùng
    • Giá trị tương ứng của form nhập được lưu trữ vào Form Bean, thực tế là một Java Object  (Action Form) có chứa các thuộc tính – state và các phương thức truy cập get, set. Tại đây, nếu có áp dụng validation thì dữ liệu được checking, checking thành công thì mới được lưu trữ vào form bean và kích hoạt chuyển dữ liệu của FormBean đến Action tương ứng để xử lý
    • Action khi đón nhận FormBean sẽ gọi thành phần xử lý tương ứng tư Java Bean hay Java Object tương ứng hay kết nối lấy dữ liệu từ DB về nếu có để xử lý
    • Sau khi xử lý hoàn tất, Action sẽ phải trả kết quả trở về Action Servlet đồng thời mapping trong struts-config.xml để xác định view kết xuất cho người dùng dựa trên kết quả xử lý trên struts-config.
    • Khi xác định xong, dữ liệu từ kết quả xử lý Action và Form Bean sẽ được đổ vào trang JSP kêt xuất tương ứng và kết quả thành công chuyển về Action Servlet
    • Action Servlet response kết quả về client – hoàn tất quá trình xử lý
  • Nhìn tổng quan mô hình hoạt động giống hoàn toàn khái niệm MVC 2, điểm khác biệt ở đây là tất cả mọi thứ phải thông qua struts-config.xml và một phần nào đó Struts che dấu Action Servlet đối với người lập trình để tạo nên tính linh hoạt trong việc xây dựng và bảo trì ứng dụng Web, đặc biệt là việc mapping kết xuất giữa các trang không còn lệ thuộc và đặt trong code servlet dẫn đến việc mapping trở nên linh hoạt và uyển chuyển hơn
  • Struts Framework vẫn chưa hỗ trợ biến cố và xử lý biến cố như Swing hay WinForm – Desktop application
  • Các thành phần chính yếu và thường dùng của Struts Framework
    • ActionServlet
      • Là một class thực hiện chức năng của controller trong việc đón nhận tất cả HTTP request, khởi tạo những đối tượng thành phần liên quan đến Struts Framework trong khoảng thời gian nó hoạt động và xác định Action xử lý tương ứng của mỗi request yêu cầu để chuyển giao – delivery đến
      • Nếu muốn customized – thay đổi lớp này bạn có thể kế thừa – extend nó để có thể thay đổi theo một số thành phần yêu cầu của ứng dụng
      • ActionServlet phải được mapping trong tập tin web deployment descriptor web.xml bởi vì bản chất nó là một servlet
      • Thông thường khi mapping, nó thường được mapping với url-pattern có dạng *.do, tên “do” hay bất kỳ tên gì khác là do người lập trình quyết định – không nhất thiết lúc nào cũng là “do”
      • Cú pháp mapping trong web.xml

<servlet>

    <servlet-name>action</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

</servlet-mapping>

    • Struts Config (struts-config.xml)
      • Tập tin hỗ trợ cấu hình mapping và xử lý trong Struts Framework
      • Trong quá trình thực thi lúc ban đầu, toàn bộ nội dung tập tin này được parsing và được lưu trong các JavaBeans của gói org.apache.struts.config
    • Action Form
      • Hỗ trợ ứng dụng trong việc lưu trữ dữ liệu cho xử lý, xử lý bắt lỗi validation và gửi dữ liệu đến cho Action xử lý
      • Action Form có thể nói là nơi đón nhận dữ liệu nhập từ form html để checking và lưu trữ tạm trước khi chuyển sang Action để xử lý
      • Action Form được hỗ trợ bởi abstract base class org.apache.struts.action.ActionForm, do vậy, khi cài đặt chúng ta sẽ phải kế thừa từ lớp này
      • Action Form cũng có thành phần tính chất tương tự như JavaBean đó là các thuộc tính khai báo là private và định nghĩa các get/set cho chúng. Ngoài ra, nếu bắt validation chúng ta phải cài đặt thêm hàm validate, để reset giá trị, chúng ta cài đặt thêm hàm reset (thực chất là overriding)
      • Action Form chỉ tồn tại 02 tầm vực là session và request thay vì 04 tầm vực như của JavaBean
      • Action Form được Struts hỗ trợ dưới 02 thành phần đó là Static Form – tạo một java class cụ thể kế thừa từ Action Form hay Dynamic Form – các form được định nghĩa sẵn, người dùng có thể sử dụng thông qua khai báo
      • Action Form phải được định nghĩa trong Struts Config để thông qua đó ứng dụng sử dụng khai thác action form thông qua tên luận lý – mapping không phải tên class cụ thể để tạo sự thuận lợi, linh hoạt và uyển chuyển trong ứng dụng
      • Cú pháp
        • Form tĩnh

<form-beans>

  <form-bean name = “tên luận lý” type = “class với package định nghĩa form”/>

</form-beans>

        • Form động

<form-beans>

  <form-bean name = “tên luận lý” type = “class với package định nghĩa form”>

     <form-property name = “tên property” type = “kiểu dữ liệu của property”/>

     …

  </form-bean>

</form-beans>

 

    • Form bean
      • Bao gồm 02 thành phần hỗ trợ cho việc đón nhận dữ liệu nhập xuất đó là html form và action form
      • Trong một số trường hợp, chúng ta có thể không cần sử dụng action Form mà thông qua request trực tiếp để xử lý, trường hợp này sử dụng khi chúng ta không cần lưu trữ dữ liệu tạm, không cần valid mà chuyển xử lý trực tiếp
    • Action
      • Action là một class xử lý đón nhận request và trả ra response, thực tế Action có thể xem như là nơi xử lý chức năng của ứng dụng thông qua việc gọi các hành vi – phương thức của các JavaObject hay Model
      • Mỗi action phải được mapping trong struts config thông qua khái niệm path để khi một request được gọi, Action Servlet sẽ thông qua path định nghĩa trong struts config để xác định action tương ứng
      • Một trong những phương thức callback bắt buộc phải override để khi Action Servlet chuyển dữ liệu request xử lý tên Action thì Action kích hoạt, đó là hàm execute
      • Hàm execute có chức năng đón nhận request, đưa response, xử lý business logic và quan trọng hơn cả là xác định request sẽ chuyển xử lý tiếp ở đối tượng nào hay kết xuất kết quả thông qua response
      • Cú pháp của hàm execute có dạng

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception

        • Trong đó ActionForward xác định chuyển xử lý request đến một thành phần trong ứng dụng xử lý tiếp hay xác định response đến người dùng
        • Action Mapping xác định định hướng xuất tùy theo nội dung hiện thực trong Action
        • request và response là cặp đôi của HTTP mà Action đón nhận thông tin xử lý và phản hồi
        • ActionForm xác định form dữ liệu kèm theo để đưa vào execute để lấy dữ liệu trong quá trình xử lý
      • Hàm execute được trả về dạng return mapping.findForward(“label”);
        • Label là tên chuỗi string bất kỳ để chúng ta mapping đến một thành phần xử lý tiếp theo hay một view bất kỳ cho người dùng – đây là sự linh động trong mapping
        • Khi được định nghĩa trong struts-config, tùy theo giá trị trả về với một label nhất định, hệ thống sẽ chọn tương ứng label trong cấu hình tương tự như cách so sánh của câu lệnh if. Nếu không tìm thấy tương ứng, thông thường nó sẽ chuyển trình bày trên trang không có dữ liệu gì cả - trang trắng
      • Phải được mapping trong struts-config.xml theo cú pháp

action-mappings>

        <action path="/action" type=“Action class" name=“form name“ input=“/view input file” [scope=“request/session” parameter=“par” validation=“true/ false”]>

     <forward name=“label1" path="/view file“ [redirect=“true/false”]/>

      <forward name=“label2" path="/view file"/>

       …

       <forward name=“labeln" path="/view file"/> </action>

 </action-mappings>

        • Lưu ý: tên action phải bỏ đi .do
      • Từ Action Class, Struts hỗ trợ nhiều action khác để tạo điều kiện phù hợp cho người dùng thao tác một cách nhanh chóng. Chúng tôi giới thiệu 02 class kế thừa thường dùng nhất là
        • Forward Action
          • Hỗ trợ chuyển trang cùng với forward điều khiển hay object sang thành phần trong cùng context thông qua địa chỉ URL – tương tự như kiểu chúng ta dùng RequestDispatcher trong Sevlet. Ngoài ra, Action này cũng hỗ trợ tương tự kiểu response.sendRedirect nếu chúng ta chọn mapping trong struts config tương ứng là redirect
          • Có thể sử dụng trong các <a href=””>…</a> hay <jsp:forward>
          • Có 03 kiểu sử dụng
            • Dùng trực tiếp ForwardAction của struts cung cấp qua org.apache.struts.actions.ForwardAction để sử dụng khi đơn giản cần chuyển trang mà không có sử lý tương ứng. Toàn bộ class này đặt trong type của cú pháp mapping
            • Tạo một JavaClass kế thừa từ Action và giá trị trả về luôn có 1 giá trị mapping duy nhất
            •  
        • Include Action
          • Nhúng một trang này vào một trang khác cũng tương tự như RequestDispatcher với chức năng include (jsp:include)
          • 02 cách dùng
            • Dùng trực tiếp IncludeForward của struts cung cấp qua org.apache.struts.actions.IncludeAction để sử dụng khi đơn giản cần chuyển trang mà không có sử lý tương ứng. Toàn bộ class này đặt trong type của cú pháp mapping
            • Dùng dạng short-hand viết ngắn gọn trong struts-config.xml mà không cần phải cài đặt gì cả
              <action path=“/action” include=“/url”/>
    • Action Forward
      • Hỗ trợ xác định đích đến tiếp theo hay cuối cùng trong xử lý, đây là nội dung return trong hàm execute của Action Class
      • Thành phần này nằm trong một action cụ thể trong khai báo trong struts-config.xml, không thể nằm một mình qua từ khóa tag <forward name = “”/>
      • Cú pháp

        <action path="/action" type=“Action class" name=“form name“ input=“/view input file” [scope=“request/session” parameter=“par” validation=“true/ false”]>

     <forward name=“label1" path="/view file“ [redirect=“true/false”]/>

     ….

 </action-mappings>

  • Các bước để xây dựng ứng dụng sử dụng Struts Framework
    • Tạo ứng dụng Web Application, Add Framework hỗ trợ, thực chất là các thành phần thư viện và tập tin cấu hình liên quan đến Framework, nếu làm bằng tay chỉ cần đơn giản lấy template framework mẫu giải nén và phát triển trên nó
    • Tạo các Form bean tùy theo yêu cầu đặc tả của ứng dụng (bao gồm html form, action form tương ứng) và định nghĩa chúng trong struts-config.xml
    • Định nghĩa các Action tương ứng và mapping Action, Action Form và View tương ứng thông qua Action Forward định nghĩa trong struts-config.xml
    • Build, Deploy và thực thi ứng dụng

Vận dụng Struts Frameword vào việc phân tích và cài đặt một ứ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 để cho thấy việc phân tích MVC có lợi, đặc biệt khi áp dụng trên một framework cụ thể như Struts)

  • Ứ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ề password  hay role 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 Sruts Framework 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, Struts Framework 1.x
    • 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 đến Netbeans 8.2
    • JDK 6 update 22, 7 update 55, 8 update 66
    • Server: Tomcat từ 6 đến 8
    • DBMS: SQL Server 2005 đến 2014
    • Thư viện hỗ trợ: JSTL 1.x, Driver kết nối database SQLServer (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: StrutsBasicDemo
      • Server: Apache Tomcat
      • J2EE version: JavaEE 5
      • Nhấn Next, tại bước Chọn Frameworks, chọn Struts 1.3.x 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 (các hình vẽ về hướng dẫn sẽ mang tính minh họa, quí vị vui long chọn tương đương tùy theo Netbeans đang sử dụng)

      • 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 như sau

      • Tập tin web.xml được tự động cập nhật mapping với Action Servlet và các taglib hỗ trợ 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
      • Chúng ta xóa các trang jsp sẵn có trong project và tạo trang JSP mới với tên index.jsp để tạo form Login
      • Cập nhật trang index để đó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
        • Chọn menu File, new File, chọn Struts trong Categories và Struts ActionForm Bean trong File Types

        • Nhấn Next, đặt tên trong Class Name và chọn package tương ứng
        • Nhấn Finish, Java Class được phát sinh và tập tin struts-config.xml được cập nhật như sau

        • Chúng ta thực hiện chỉnh sửa trong Action Form như sau
          • Xóa hết tất cả các phần định nghĩa sẵn ngoại trừ constructor
          • Định nghĩa 02 thuộc tính username, password giống y tên control đặt trong html form và phát sinh get/set cho nó
          • Phát sinh constructor đón nhận 02 tham số username và password

          • Phát sinh hàm checkLogin để thực hiện cung cấp chức năng login cho object này (lưu ý phải add thư viện sqljdbc vào trước). Ở đây, chúng tôi sẽ thực hiện kết nối động thông qua cấu hình tập tin META-INF tương tự như bài Tạo kết nối động đến DB trong mô hình MVC Pattern trên Web Server (Tomcat)

          • Mapping forward action cho trang khởi động đầu tiên trong struts-config.xml

      • Tạo Action Class để đón nhận xử lý từ Action Servlet và kết xuất kết quả
        • Chọn menu File, chọn new File, chọn Struts trong Categories, chọn Struts Action trong File Types

      • Nhấn Next, nhập tên, chọn package, đặ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
      • Nhấn Next, chọn form tương ứng trong Action Form Bean Name, chọn trang làm form nhập thông qua nút Browse ở Input Resource (ở đâ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
      • Nhấn nút Finish, Action Class được phát sinh với hàm execute và struts-config.xml được cập nhật
      • Cấu trúc project đượ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à LoginStrutsActionForm, và gọi hành vi checkLogin, tùy theo kết quả chúng ta sẽ trả về là nhãn fail hay success để mapping đến trang search page hay trang invalid

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

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

        • 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 để kết quả xử lý phải chuyển đến trang tương ứng
        • Chúng ta mở tập tin struts-config.xml
        • Để trỏ chuột nhấp nháy tại ngay action chúng ta muốn tạo Action Forward (ở dây là action login)
        • Click phải chuột ngày trên hàng trỏ chuột nhấp nháy, chọn Add Forward

      • Nhập lable tương ứng vào Forward Name (ở đây chúng ta làm với success trước), chọn Browse tại Resource File để định hướng xuất (ở đây chúng ta chọn search.jsp)
        • Nhấn nút Add, struts-config.xml được cập nhật forward trong phần action login
        • Nhấn save file và phát sinh tương ứng dùng các bước trên với forward tên fail và di chuyển đến trang invalid (có thể them tùy chọn redirect để tang tốc độ chuyển trang)

        • Chúng ta đã cấu hình hoàn tất
      • Start Server Tomcat, Build Project, Deploy và Test

        • Nếu check sai

        • Thực hiện login đúng

          • Lưu ý: chúng ta thấy trên Address bar không có tên file vì đang áp dụng struts mà chỉ thấy action, qua đó, chúng ta muốn mapping đổi thành phần mới cái nào cũng được thông qua forward và action dưới struts-config.xml mà người dùng không biết, tạo nên sự uyển chuyển trong xây dựng ứng dụng. Ngoài ra, việc mapping trên tập tin xml tạo sự thuận lợi hơn mapping trong Servlet vì phải biên dịch lại, còn xml thì khô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 index. 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
        • Mở tập tin struts-config.xml, di chuyển trỏ chuộc tới action-mapping
        • Click chuột phải, chọn Struts, chọn Add Forward/ Include Action

      • Nhập action (bỏ .do) vào Action Path và nhấn Browse để chọn Resource File chuyển tới (ở đây là login.html)
      • Tập tin struts-config.xml được cập nhật như sau

    • Thực hiện chức năng Search
      • Chúng ta đã có html form search trong trang search.jsp với action search.do
        • Thực hiện tạo Action Form tương tự như Login

        • Cập nhật struts-config.xml

        • Bởi vì search sẽ ra tập hợp các object, do vậy chúng ta sẽ phải tạo JavaObject có tên DTO chứa tất các thuộc tính mapping từ DB và định nghĩa các thành phần get/set cho chúng

      • 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

        • 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
        • 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 nhưng ở đây chúng ta phải sử dụng pattern *.do
          • Chuỗi này cần chứa 02 tham số, tham số thứ nhất 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. Chúng ta sẽ dùng lại tên biến giống y hệt biến trong trang search vì dưới dạng forward tên biến sẽ truyền lặp lại dẫn đến chúng ta sẽ lấy được tham số ban đầu để thực hiện lại chức năng search (tương tự như Request Dispatcher Forward)
          • Link Delete phải thông qua action để đ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
          • Ở đâ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 XxxStrutsAction, 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
        • Trang search.jsp đã được cập nhật trong nội dung trình bày ở trên
        • Chúng ta tạo Action Class xử lý trực tiếp không cần Action Form như chức năng login  và 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

        • Chúng ta nhấn Add thì struts-config.xml được cập nhật.
        • Chúng ta tạo trang deleteErr.html

        • Chúng ta cập nhật struts-config.xml như sau

        • Build, deploy và test project đến chỗ trình bày kết quả của trang search

        • Nhấn nút Delete thì dòng lựa chọn sẽ bị xóa và cập nhật lưới
      • Chúng ta thực hiện tiếp tục với chức năng Update password  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 password 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
        • Trang search.jsp đã được cập nhật và được trình bày ở phần trên chức năng search
        • Tạo Action Class để thực hiện update và xử lý không cần Action Form

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

        • Trang updateErr.html được thực hiện tương tự như deleteErr.html
        • Cấu trúc project cuối cùng được cập nhật như sau

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

          • Nhấn Update kết quả được cập nhật trên giao diện lẫn DB

Chúc mừng các bạn đã hoàn tất và nắm tổng quát khái niệm về Struts 1.x Frameword, cách thức thiết kế, mô hình ứng dụng và cài đặt ứng dụng web theo Struts Framework. Qua đó chúng ta thấy được các ưu điểm và khuyết điểm của framework 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

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