Thứ Năm, 31 tháng 7, 2014

validate xml in SAX

Bài 1 : Create an application, which demonstrates the generation of an error duringparsing an XML document. Write the code for handling different types of errors and exceptions. Define an endDocument() method to override the contentHandler. Declare a method to override the error method of errorhandler.

Giải quyết vấn đề :
Ở đây tôi sẽ sử dụng check lỗi trang XML có nội dung như sau :
ta tạo ra class Handler có chức năng xác định lỗi cho XML.ta tạo 2 phương pháp là endDocument nếu không xác định được lỗi và báo về là no error và error nếu xác định ra lỗi. Code như sau :
Class Demo1 có nội dung như sau :
Kết quả thu về :


Bài 2 : Create an application, which demonstrates the implementations of DTDHandlerinterface methods. As the DefaultHandler implements the DTDHandlerinterface, you need to override the desired methods of DTDHandler interface.

Giải quyết vấn đề :
ta vẫn sử dụng file XML ở bài trên :
Ở class handler ta sẽ khai báo các phương pháp : notationDecl (), unparsedEntityDecl (),endDocument () như sau : 


Class Demo1 có nội dung như sau : 

                                

Kết quả thu về : 

Bài 3 : Create an XML file Report.xml that contains the sales data for this financial year. Create an application that demonstrates the implementations of LexicalHandler interface methods The application should display the number of entities, CDATA, and comments in the Report.xml document.

Giải quyết vấn đề :
theo yêu cầu đề bài ta tạo file Report.xml có nội dung như sau :
Sau đó code khai báo :


Kết quả thu về :

Nhận xét :
_ việc sử dụng Handler này giúp ta kiểm soát được dữ liệu ở trang XML tốt hơn do khi sử dụng ta show ra được các thông báo của trang xml
_ Giúp dễ dàng tìm được lỗi và xây dựng web tối ưu

Apply filter in reading xml

Yêu cầu :
Tạo một ứng dụng để có được chỉ tên của nhân viên của phòng 24, có liên hệ với trạng thái (sử dụng file xml trong mẫu)

Bài làm : Ở đây tôi sẽ sử dụng file XML có sẵn của ví dụ Filter đã dùng ở bài trước :



Ta tạo class DataFilter có tác dụng đọc dữ liệu từ file XML

Ở filter này do tôi chi muốn lấy ra tên của những nhân viên có trong phòng 24 nên ta khai báo
!atts.getValue("deptid").contains("24")
Sau khi có Filter ta sẽ tạo một handler có tên là DataProcessor chuyển và ghi ra dữ liệu : 

Ở trang ApplyFilter sẽ có nhiệm vụ là đọc và kết nối Filter với handler.Ta code như sau : 


Nhận xét về việc sử dụng Filter vào việc đọc file XML : 

- Khó hơn cách làm trước do phải thêm 1 class trung gian là filter để đọc dữ liệu
- Việc này dẫn đến code phai dài hơn và sửa lỗi cũng sẽ lằng nhằng hơn.
- Tuy nhiên cách làm trước đây chi phù hơp khi ta muốn sử dụng hết dữ liệu trong XML.Nhưng khi ta không muốn đọc toàn bộ mà chỉ lấy 1 phần thì ta phải chèn filter giữa đọc XML và handler 
Download Demo tại đây

Thứ Tư, 30 tháng 7, 2014

Advanced topics of SAX

Các nội dung chính học ở bài này : 

1: Handling Errors :




 Non validating parser :  Khi chúng ta làm việc với XML thường xuyên mắc phải lỗi quét giữ liệu.Handling Errors sẽ kiểm tra xem lỗi này có nghiêm trọng hay không.Nếu nó được coi là nghiêm trọng Handling Errors sẽ tung ra 1 Session rồi tung vào Stack trace.Còn nếu không nó sẽ tung ra một Default Errors rồi cũng gửi vào Stace trace


   Validating parser :  khi chúng ta dùng parsers được config để validate dữ liệu  chúng ta vẫn làm những bước như bình thường,ta phải tạo ra parser,khác biệt ở đây là ta set mode cho validation có report error,và set XML Schema.Để sử lý lỗi ta phải create va register ErrorHandler vào parser tức là ta implement ErrorHandler.Trong quá trình quét dữ liệu thì ErrorHandler sẽ xử lý.

2: DTDHandler :
Ở đây tôi sẽ nói đến việc cách chúng ta sử dụng DTD handler như thế nào : 

Khi chúng ta gặp 1 entities DTDHandler sẽ set DTDhandler methods và thông báo unparsed entities cho ứng dụng

Còn khi  SAX lấy thông tin về notations thì dứng dụng sẽ không overwrite ra DTDHandler nữa mà nó sẽ hiện ra thông báo cho ứng dụng

Chúng ta có thể tham khảo ví dụ ở đường link sau : Demo


3: Lexical Event : 
Được sử dụng để xác định các comment và những thứ liên quan đến parserd entities.
Chúng ta tham khảo demo về Lexical Handler tại đâyLexical Event


Một trong những chủ đề cần nhớ của bài này là Filter:
Định nghĩa : 
Là một interface đóng vai trò là sự kiện từ  SAX driver (thường là một XMLReader) cho các ứng dụng và liên kết các ứng dụng đến với SAX driver
Demo tham khảo : Demo filter

Nhận xét : 
Các công cụ của SAX giúp chung ta kiêm soát được lỗi hơn nhờ Handling Errors
Code trở nên rõ ràng hơn nhiều nhờ  Lexical Event , Filter
Cải tiến hơn nhiều so với công cụ trước 

Thứ Hai, 28 tháng 7, 2014

Use SAX to read XML file

DEMO 1 : 
Tạo một chương trình để chấp nhận các tập tin tomcat-users.xml như một dòng lệnh tham số và đếm số lượng người dùng định nghĩa trong file cấu hình này. tại cuối chế biến, nó đòi hỏi phải in số lượng người dùng trên giao diện điều khiển.
DOWNLOAD DEMO tại đây
Cách giải quyết : 
_Tạo new project java application :

_Sau đó ta sẽ tạo 1 file xml có tên là tomcat-users.xml. Ở đây tôi sử dụng tại nguyên của server tomcat cài sẵn trên máy :

_ Tạo class CounterNumber.java để viết câu lệch bắt đầu đêm và kết thúc :


_ Ở class demosax.java ta code như sau :

Kết quả thu về : chương trình đã chạy được số user có ở trong file tomcat-users.xml :


DEMO 2 :  
Tạo tập tin student.xml lưu trữ một danh sách các sinh viên đăng ký. viết chương trình để in tên và ID của tất cả học sinh đăng ký cung cấp student.xml. Sắp xếp cần thiết để chấp nhận một tham số dòng lệnh từ người sử dụng để xác định tên của tài liệu XML chứa danh sách các đăng ký sinh viên.
DOWNLOAD DEMO tại đây
Cách giải quyết : 
tạo file ListStudent.xml như trong ảnh :


Tạo class ShowStudent.java để  khai báo hành động :

Khai báo class DemoSAX như sau :
Kết quả thu được : 
DEMO 3: 
Viết chương trình đó chứng tỏ việc sử dụng SAX phân tích cú pháp cho một tìm kiếm đơn giản
trong tài liệu XML. Chương trình tìm kiếm một người sử dụng quy định trong tomcat-
tập tin users.xml và in một vai trò của người sử dụng được cung cấp trên hoàn thành tìm kiếm.Chương trình này bao gồm hai tham số dòng lệnh. Tham số đầu tiên xác định tập tin tomcat-users.xml và tham số thứ hai xác định người sử dụng tên để tìm kiếm trong các tập tin cấu hình.
DOWNLOAD DEMO tại đây
Cách giải quyết : 
Ở đây tôi vẫn sử dụng XML ListStudent để chứa thông tin như cũ.
tôi sẽ code lại  2 class DemoSAX.java và ShowStudent.java như sau : 

Kết quả thu được : 

Chủ Nhật, 27 tháng 7, 2014

Introduction to JAXP

Định nghĩa : 
JAXP viết tắt của : Java API for XML Processing được coi là một API trong lập trình Java sử dụng XML. Nó có khả năng phân tích và sử dụng các dữ liệu dưới dạng XML.

Phân tích cú pháp XML : 
XML parsers là những chương trình mà có nhiệm vụ phân tích và sử dụng  dữ liệu trong trang XML.
Các đặc điểm nổi trội của XML parsers : 
              - Ngôn ngữ độc lập 
              - Mã độc lập 
              - Tính linh hoạt cao 
              - Phù hợp hơn với nhiều mục đích sử dụng 


JAXP chia XML prasers làm 2 loại là : 
  + Event-Based Parsers : Giao diện phân tích API đơn giản dành cho XML ( ví dụ như SAX)
  + Object-Based : Giao diện phân tích dạng Mô hình đối tượng tài liệu (ví dụ như DOM) 

Tìm hiểu thêm về giao diện DOM : là giao diện rất dễ hiểu , DOM phân tích toàn bộ tài liệu XML và kiến thiết một cấu trúc hoàn chỉnh đại diện cho bản tài liệu, trong bộ nhớ, bằng cách dùng các lớp để mô hình hóa các khái niệm
Tìm hiểu thêm về giao diện SAXBộ phân tích SAX được gọi là SAXParser và được tạo bằng javax.xml.parsers.SAXParserFactory. Khác với bộ phân tích DOM, bộ SAXParser không tạo ra một hình thức đại diện của tài liệu XML trong bộ nhớ và vì thế nó hoạt động nhanh hơn, ít tốn bộ nhớ hơn. Thay vào đó, bộ phân tích SAXParser thông báo cho các trình khách cấu trúc của tài liệu XML bằng cách gọi các hàm callbacks, nghĩa là, bằng cách gọi các phương pháp của trường hợp Bản mẫu:Javadoc:SE đã được cung cấp cho bộ phân tích.
Nếu muốn thêm thông tin bạn có thể tham khảo ở đây

So sánh về 2 giao diện : 
 + DOM chỉ tích hợp để dùng với các tài liệu nhỏ còn SAX có thể dùng để đọc các tài liệu lớn
 + DOM phù hợp cho việc đọc toàn bộ 1 trang XML còn SAX thì chia nhỏ nó ra
 + DOM thực hiển nhiệm vụ của mình khá chậm so với SAX

XSLT : là ngôn ngữ tập tin dạng XML cho phép chuyển đổi các dạng tài liệu sang các loại dữ liệu khác.Định dạng muốn chuyển sang thường có thể là là một tài liệu XML hoặc không; bạn có thể chuyển đổi dữ liệu XML sang bất cứ dạng gì bằng cách tạo ra các bảng định kiểu XSLT và thực hiện chuyển đổi dữ liệu. Nếu bạn muốn thay đổi định dạng đích, bạn chỉ việc thay đổi bảng định kiểu XSLT và thực hiện việc chuyển đổi lần nữa. Điều này rất hiệu quả cho những người không phải là lập trình viên, ví dụ như nhà thiết kế, họ có thể thay đổi XSLT để có được kết quả như ý.
Nhận xét : 

Chủ Nhật, 20 tháng 7, 2014

Login using JSF

Yêu cầu : tạo web aplication có chức năng login bằng jsf.

Bài làm :
Tạo database :

Sau đó tạo project < lưu ý khi tao ta nhớ chọn phần use JSF để tạo class có đuôi xhtml.
Sau khi tao project ta add các thư viện như trong hình  :


Ở trang index.xhtml ta code form login như sau :

Sau đó ta tạo class DBconnection để kết nối với database :


Tạo class managedbean có chức năng khai báo action login để nó check các thông tin của db sau khi đã lấy ở lớp trên.

Kết quả thu được : 


JSF Page comunication using param / query string

Yêu cầu đề bài :  phát triển ứng dụng web có chức năng show ra list các sản phẩm và có 1 trang hiển thị thông tin đầy đủ sản phẩm đó

Giải quyết vấn đề :  code tham khảo : down tại đây
Trước tiên như thường lệ ta có database :
Ta thêm đầy đủ thư viện JSF 2.2( được add sẵn khi tao project) , JSTL 1.2.2 , SQLJDBC4 như bình thường 

Code ViewDetail:
Code  index.xhtml để hiển thị nội dung show all và dẫn link sang trang detail
Code detail.xhtml:

Kết quả:

Nhận xét : 
-JSF là  "component" framework trong khi Struts là 1 "action" framework do đó sử dụng dễ dàng hơn Struts.
JSF tách biệt hoàn toàn giữa hành động và hiển thị dữ liệu do đó khi sửa lỗi, biên soạn sẽ rành mạch hơn 

Develop Basic Component of jsf

 Khái niện JSF
JSF (JavaServer Faces)  một frameworks được xây dựng lên nhằm giúp đơn giản hóa việc phát triển giao diện cho các ứng dụng Web viết bằng Java bằng cách dùng các thành phần dùng lại được.
JSF giúp p
hát triển các ứng dụng Web viết bằng Java nhằm làm đơn giản hóa quá trình phát triển giao diện người dùng cho các ứng dụng J2EE

Ưu điểm của JSF:
  •  - Tách biệt hoàn toàn giữa hành vi và giao diện nên việc tìm hiểu và viết sẽ dễ dàng hơn nhiều
  •  - Liên kết với máy chủ dễ dàng hơn
  •  - Sử dụng các khái niệm thành phần UI và tầng Web (Web-tier) đã biết trước 
  •  - Cung cấp nhiều dụng cụ của nhà sản xuất phần mềm đã tiêu chuẩn hóa
  •  - Sự hỗ trợ IDE tuyệt vời

8 mục tiêu thiết kế sau là lí do cho sự ra đời của JSF:<nguồn tham khảo : wiki >
  1. Tạo ra một bộ khung gồm các thành phần giao diện người dùng chuẩn (standard GUI component framework) nhằm giúp cho các công cụ phát triển dễ dàng hơn cho người dùng trong việc tạo GUI chất lượng cao đồng thời quản lí các kết quả của GUI với xử lí thực thi của chương trình.
  2. Định ra một tập các lớp cơ sở của Java (lightweight Java base classes) biểu diễn cho các thành phần UI, trạng thái mỗi thành phần, và các sự kiện đầu vào. Những lớp này sẽ xử lí những vấn đề liên quan đến chu kì sống của GUI, đặc biệt là quản lí trạng thái trong suốt chu trình sống của một trang của thành phần GUI đó.
  3. Cung cấp một tập các thành phần GUI chung, bao gồm các thành phần HTML form input. Những thành phần này sẽ được dẫn xuất từ tập đơn giản các lớp cơ sở (đề cập ở #1) đề từ đó có thể định ra các thành phần mới.
  4. Cung cấp một mô hình JavaBeans để có thể truyền đi (dispatch) các sự kiện từ các GUI controls phía máy khách đến các xử lí hiện thực cụ thể từ phía ứng dụng máy chủ.
  5. Định ra các hàm APIs để kiểm chứng dữ liệu nhập, bao gồm hỗ trợ kiểm chứng từ phía máy chủ.
  6. Chỉ định một mô hình để có thể đa ngôn ngữ hóa hay địa phương hóa các GUI.
  7. Khởi tạo tự động dữ liệu ra phù hợp cho máy khách đích, dựa vào mọi dữ liệu cấu hình ở máy khách đó, bao gồm cả dựa vào phiên bản trình duyệt, ví dụ.
  8. Việc khởi tạo tự động dữ liệu ra còn kèm theo các đòi hỏi về hỗ trợ người dùng (accessibility), được qui định bởi WAI.

Demo : ở đây ta sẽ viết 1 chương trình web cơ bản có chức năng search company bằng JSF
  • Ta bổ sung database để cung cấp thông tin cho chức năng search

  • Trong netbean chúng ta tạo mới 1 web application với các class sau:

  • Thêm thư viện JSF 2.2 và add rar : sqljdbc4.jar 


  • Code trang index.xhtml:
    • Tạo file model.java để kêt nối với database như sau : 



    •  Tạo trang JSF Managed Bean Home.java

    Sau khi chạy ta thu về được kết quả : 

    Nhận xét : 
    Ưu điểm của cách làm này : 

    - So với Struts thì JSF kết hợp các GUI phức tạp vào một component có thể quản lý một cách dễ dàng và có tính liên kết cao
    -Giao diện người dùng của một ứng dụng JSF bao gồm các trang JavaServer Pages (JSP) do đó dễ dàng trong việc tiếp cận vấn đề mới 
    Thay vì tự code các dữ liệu vào chương trình JAVA thì nhiều giá trị JSF hỗ trợ dưới dạng XML. Do đó các thay đổi chỉ cần chỉnh sửa trên 1 tập tin duy nhất mà không cần chỉnh sửa code.Điều này giúp ích rất nhiều trong việc tìm lỗi , nâng cấp và bảo dưỡng chương trình.
    - JFS được sử dụng các thẻ tùy biến đa dạng và không bị hạn chế trong html

    Nhượng điểm  : 
    - Khó khăn trong việc đặt tên , thường hay bị lỗi  exception mà chưa nghĩ ra cách giải quyết.

    Thứ Bảy, 19 tháng 7, 2014

    Controller Components

    Thiết kế một thành phần điều khiển cho các ứng dụng web dựa trên Struts có tên là "trực tuyến
    Câu lạc bộ đọc sách ". Ứng dụng này yêu cầu người sử dụng nhập vào các chi tiết của cuốn sách
    để được đọc trực tuyến. Nếu cuốn sách theo yêu cầu của người sử dụng được tìm thấy trong các cổ phiếu sau đó bộ điều khiển sẽ cung cấp một nút để tải về một phiên bản đọc của cuốn sách.
    Nếu không điều khiển nên cung cấp một hình thức để giới thiệu một cuốn sách. các mẫu đề nghị nên yêu cầu các chi tiết sau đây về cuốn sách được đề nghị:
    + Tiêu đề
    + Tác giả
    + công bố
    + Tiêu đề
    + Đánh giá độc giả trên thang điểm từ 1 đến 5.

    Kết quả thu được :

    Trang struts ta code như sau :

    Ta khao báo Các lớp load thông tin database :

    doạn code lấy thông tin search dữ liệu trong db :

    Tạo booklist để show ra list book sau khi search :