Thứ Hai, 15 tháng 8, 2016

Xây dựng Web Service sử dụng Web Server Tomcat và sử dụng service áp dụng MVC Pattern trên Web

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

Xây dựng Web Service sử dụng Web Server Tomcat và sử dụng service áp dụng MVC Pattern trên Web

Mục đích: Chủ đề của bài này chúng tôi sẽ giới thiệu cách xây dựng web services triển khai trên web server Tomcat. Sau đó, chúng tôi sẽ sử dụng web service đã được triển khai trên tomcat để xây dựng ứng dụng cho người dùng có thể sử dụng những service. Nội dung này chúng tôi mở rộng cách thức tạo web services với nhiều công cụ khác nhau sau loạt bài giới thiệu về axis2. Nội dung đặc thù và hấp dẫn nhất trong xây dựng web service đó là truyền và trao đổi dữ liệu object hay mảng object giữa đối tượng cung cấp dịch vụ và đáp ứng dịch vụ, cũng được giới thiệu trong chủ đề này.

Xây dựng Web Service sử dụng Web Server Tomcat và sử dụng service áp dụng MVC Pattern trên Web

Mục đích: Chủ đề của bài này chúng tôi sẽ giới thiệu cách xây dựng web services triển khai trên web server Tomcat. Sau đó, chúng tôi sẽ sử dụng web service đã được triển khai trên tomcat để xây dựng ứng dụng cho người dùng có thể sử dụng những service. Nội dung này chúng tôi mở rộng cách thức tạo web services với nhiều công cụ khác nhau sau loạt bài giới thiệu về axis2. Nội dung đặc thù và hấp dẫn nhất trong xây dựng web service đó là truyền và trao đổi dữ liệu object hay mảng object giữa đối tượng cung cấp dịch vụ và đáp ứng dịch vụ, cũng được giới thiệu trong chủ đề này.

Các yêu cầu về xây dựng ứng dụng áp dụng web service và consume bằng mô hình MVC Pattern trên web

  • Ứ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 ta đã phân tích và xây dựng ứng dụng này trong bài hướng dẫn MVC Pattern trên web á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. Do vậy, ở đây chúng đang hướng tới xây dựng ứng dụng theo hướng web service để tách thành phần M – Model ra khỏi ứng dụng web deploy trên server, nghĩa là các chức năng checkLogin, search, update, delete, đăng ký sẽ được đặt trong một server riêng biệt hay nói cách khác chúng sẽ là services được đặt trong nhiều web server riêng biệt được cung cấp cho ứng dụng của chúng ta
  • 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, khái niệm liên quan đến Service Oriented Architecture (SOA), kiến trúc của Web Services
    • 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: TomcatWServiceDemo
      • Server: Apache Tomcat 6.0.26
      • J2EE version: JavaEE5

      • Nhấn Next, sau đó nhấn Finish. Cấu trúc project trên Netbeans như sau

    • Tạo WebServices cho project
      • Click Menu File, New File, chọn Web Services trong Categories, và chọn Web Service trong File types

      • Click Next, đặt tên service là AppWebService, package sample.jws.

      • Nhấn Finish, tập tin Java tên AppWebService.java được tạo và project được cập nhật như sau

      • Khai báo class sẽ có annotation @WebService và vẫn báo lỗi vì services chưa có các phương thức business metho
      • Project phát sinh thư muc WebServices và đưa các thư việc hỗ trợ xây dựng Web Services
    • Phát sinh các phương thức business để làm services trong ứng dụng
      • Nhấn chuột phải trong code, chọn Insert Code, click chọn Add Web Service Operation …

 

      • Tạo phương thức checkLogin với 02 tham số truyền là username và password, kết quả trả về là Boolean

        • Nhấn Ok, code được phát sinh và cấu trúc project được cập nhật như sau

        • Không được chỉnh sửa phần thay báo vi @WebMethod để thể hiện đây là 1 service khác biệt so với hàm thông thường và hàm hỗ trợ, khi gặp nội dung này service engine mới phát sinh interface và khai báo trong WSDL, khác thành phần hàm khác coi như hàm hỗ trợ và không cần convert vào trong WSDL. @WebParam thể hiện tham số truyền cho Web Services
        • Chúng ta thực hiện modified code của phương thức để kết nối CSDL – DBMS, và check. Lưu ý: add thư việc sqljdbc.jar hay sqljdbc4.jar vào project để hỗ trợ kết nối DB. Code của hàm check Login được cập nhật như sau

        • Chúng ta đã hoàn tất xong chức năng đầu tiên là checkLogin. Cấu trúc project hiện nay như sau

        • Chúng ta thực hiện Build Project, Start Server, Deploy ứng dụng web. Các thành phần listener bất lên thể hiện việc đăng ký web services cho web server

        • Chúng ta thực hiện test Web Service như sau. Click chuột phải trên tên service (ở đây là AppWebServices), chọn Test Web Service …

          • Trình duyệt Browser xuất hiện như sau

          • Click vào link để xem wsdl, tomcat không cho chúng ta test trực tiếp webservices như .NET, Glassfish hay Axis2 trên Tomcat mà chỉ cho xem wsdl

    • Chúng ta ứng dụng web để sử dụng chức năng Login này
      • Tạo Project - Ứng dụng Web mới có tên TomcatWServiceDemoWeb
      • Chọn Server Tomcat 6.0.26
      • J2EE version : JavaEE 5
      • Project có cấu trúc như sau

      • Để sử dụng web service chúng ta phải reference đến web service để đem các interface gọi service về phía người sử dụng, do vậy, chúng ta cần phải tạo web service client như sau
        • Click chọn menu File, new File, chọn Web Services trong Categories, chọn Web Service Client trong File Type

        • Click Next, chọn WSDL URL để đưa đường dẫn reference đến wsdl, cụ thể ở đây chính là đường link chúng ta đã click và test ở trên (copy từ url của trình duyệt khi test bên trên), cụ thể http://localhost:8084/TomcatWServiceDemo/AppWebService?wsdl , đặt package cho interface phát sinh ở client (sample.jwsClient), chọn client là JAW-WS style

        • Nhấn Finish, tool Netbeans sẽ thực hiện 02 bước đó là đem wsdl về, parsing WSDL để phát sinh interface của ứng dụng sử dụng web services Lưu ý: chờ cho tool phát sinh hoàn tất, không nên vội vã, tất cả hành động vội vã có thể gây nên lỗi nhưng rất tốn thời gian để chỉnh sửa

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

      • Chúng ta thực hiện xây dựng giao diện và chức năng Login, tất cả áp dụng mô hình MVC như sau
        • Modified trang index.jsp

      • Tạo Servlet có tên Controller để đón nhận và xử lý. Thực hiện code như sau

        • Để xử dụng được chức năng service checkLogin, chúng ta click chọn checkLogin trong AppWebServicePort trong AppWebServiceService, kép và thả vào code chúng ta cần sử dụng, code sẽ tự động phát sinh hàm như sau (kéo thả ngay sau biến dòng lệnh String password=…;)

        • Thực hiện gọi hàm trong code tiếp tục như sau

        • Với việc định nghĩa các trang hằng số như sau

      • Tạo tang fail.jsp thông báo lỗi và cho phép đăng ký, và trở về trang chính như sau

    • Tạo trang welcome.jsp thể hiện session và trình bày giao diện search như sau

      • Build, Deploy and Test Project

        • Nhập đúng

        • Nhập sai

      • Chúng ta đã hoàn tất chức năng đầu tiên là Login, cấu trúc của Project consume hiện tại là như sau

    • Chúng ta tiếp tục thực hiện chức năng Register
      • Quay lại project web Service, tên TomcatWServiceDemo, mở lại AppWebService (chọn Source), bổ sung service Register (dùng Add Web Service Operator) tương tự như Login với 4 tham số username, password, lastname, roles. Service có kiểu tra về là boolean. Web Service được cập nhật như sau

      • Clean and Build, Deploy
      • Chúng ta mới deploy web service mới ở server nhưng ở client vẫn là interface và chưa cập nhật web service lại, do vậy chúng ta cần phải refesh web services mới về.
      • Chúng ta quay lại project TomcatWServiceDemoWeb, chọn trên service, click phải chuột chọn refresh

        • Check vào ô Also replace … để đem wsdl mới về, click Yes, quá trình đem wsdl và phát sinh code diễn ra như ở các bước như Login. Lưu ý: chờ cho tool phát sinh hoàn tất, không nên vội vã, tất cả hành động vội vã có thể gây nên lỗi nhưng rất tốn thời gian để chỉnh sửa

      • Tạo mới trang register.jsp

      • Cập nhật Controller cho 02 chức năng tryAgain và Register như sau

...

...

...

      • Lưu ý: phải kéo service register từ AppWebServicePort tương tự như Login để phát sinh hàm trước khi viết code cho hàm Register
      • Build, Deploy và test với giá trị là sai khi Login, click here to try again để về trang Login

        • Login fail nhưng chọn Register link

          • DB trước insert, và nhập liệu vào form

        • Click Register, form được chuyển sang Login và DB được cập nhật

      • Chúng ta đã hoàn tất xong chức năng Register
    • Chúng ta quay lại web services để bổ sung chức năng search
      • Bởi vì chúng ta search với tên gần đúng để cho người dùng nhập ký tự bất kỳ, cho nên chúng ta phải tạo Java Object hay JavaBeans để đón nhận các thành phần dữ liệu trở về
      • Tuy nhiên để Object có thể convert thành XML và được serialize để truyền đi chúng ta phải implement Serializable và đặc biệt để truyền thành XML trong WSDL chúng ta phải khai báo @XmlSeeAlso để thông báo cho service engine khi chuyển đổi sử dụng JAXB convert object thành dạng xml để có thể truyền qua client và convert thành object tương ứng ở client sử dụng ngôn ngữ của client (có thể bất cứ ngôn ngữ nào, không cần phải là ngôn ngữ cùng Server)
      • Chúng ta tạo Java class có tên AccountDTO, package sample.jws như sau

      • Bổ sung service chức năng search như chức năng service Login và Register với 1 tham số truyền và kiểu trả về là một mảng object, cụ thể đây là AccountDTO
        • Để web service có thể serializable và convert thành XML chúng ta lần nữa phải khai báo XmlSeeAlso nhưng với kiểu dữ liệu chúng ta vừa xây dựng xong (AccountDTO)

      • Clean and Build và deploy Web Service lại trên server để cập nhật chức năng mới
      • Chúng ta qua thành phần của client để refresh lại web service reference như thành phần chức năng register, chúng ta sẽ thấy trong project class AccountDTO tư động được phát sinh lại (Lưu ý: chúng ta không sao chép class AccountDTO từ server của service về mà nó tự phát sinh – convert lại thông qua các khai báo XMLSeeAlso của chúng ta)

        • Bổ sung xử lý search cho Controller. Lưu ý: kéo hàm searchLikeLastname vào Controller để phát sinh hàm

        • Tạo trang show.jsp, cập nhật trang show như sau
          • Add JSTL 1.1 đê hỗ trợ trình bày giao diện

        • 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 AccountDTO ở phía client và nó được tạo ra các get/set method trong tập tin AccountDTO class (ở đây là tập tin AccountDTO.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 login đúng để đến trang search, nhập a và nhấn nút Search

      • Chúng ta hoàn tất xong chức năng 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
      • Chúng ta quay lại Web Services để tạo services delete với tham số là username và trả về là Boolean tương tự như Login và Register

      • Clean and Build, Deploy service lại vào server
      • Quay lại phần sử dụng refresh tương tự như Login, Register, Search để dem web services mới cập nhật lại

      • Cập nhật trang show.jsp cho chức năng delete như sau

      • Cập nhật xử lý vào Controller. Lưu ý, phải kéo hàm deleteAccount trước khi bổ sung code

      • Build, Deploy, Login đúng, search chữ a đến show.jsp

        • Click Link dòng hoangkk

      • Chúng ta hoàn tất chức năng cho Delete
    • Chúng ta thực hiện tiếp chức năng Update
      • Quay lại web services phát sinh hàm updateAccount với tham số truyền là username và lastname và roles với ý định cho phép chỉnh sửa lastname và roles của 1 user cụ thể, áp dụng tương tự phát sinh service Login, Register, Delete

      • Thực hiện clean and Build, Deploy lại service
      • Qua thành phần sử dụng service, refresh để đem service mới về

        • Chúng ta qua phần sử dụng service, cập nhật trang show.jsp như sau

        • Bổ sung chỉnh sửa cho Controller, lưu ý phải kéo updateAccount service vào trước khi bổ sung code

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

        • Check vào Roles của TomcatWS và bỏ s trong lastname, nhấn nút Update

Chúc mừng các bạn đã hoàn tất cách cài đặt web services sử dụng Tomcat và sử dụng web services kết hợp với mô hình MVC.  Đây là phần mở rộng cách cài cài đặt Web Services khác nhau để các bạn có thể nâng cao kỹ năng.

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 học web services và áp dụng để sử dụng nó trên 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

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

Đăng nhận xét