Thursday, June 19, 2014


PHẦN 14 : FILTER


I. Khái niệm filter :

   - Filter là bộ lọc, nhiệm vụ là lọc dữ liệu từ phía người dùng trước hoặc sau khi nó chạm tới Routing. Do đó nếu bạn tận dụng tốt được Filter bạn sẽ tạo ra bộ ứng dụng phòng thủ chuyên nghiệp trong website của bạn. Điều này sẽ giúp bạn xử lý dữ liệu tối ưu hơn.

II. Cách thức hoạt động của filter :

   -  -Khi yêu cầu gửi trong Web Container, nó sẽ kiểm tra bộ lọc có mẫu URL phù hợp với URL được yêu cầu.
   -  Web container đặt các bộ lọc đầu tiên với một kết hợp mẫu URL và mã bộ lọc được thực thi.
   -  Nếu bộ lọc khác có một mẫu URL phù hợp, mã của nó sau đó được thực hiện. Điều này tiếp tục cho đến khi không có bộ lọc với các mẫu URL phù hợp.
   -  Nếu không có lỗi xảy ra, yêu cầu đi đến các servlet mục tiêu.
   -  Servlet trả về phản ứng(response) lại cho người gọi của nó. Bộ lọc cuối cùng được áp dụng cho các yêu cầu là bộ lọc đầu tiên áp dụng cho các phản ứng.
   -  Cuối cùng phản ứng sẽ được thông qua Web container.

III. Tìm hiểu cách hoạt động của Filter qua demo :

   - Bước 1 : Sử dụng demo login mà các bạn đã thực hiện ở những bài trước
   - Bước 2 : Tạo 1 filter mới :


   - Bước 3 : Truyền Url or Servlet mà bạn muốn filter vào :


   - Bước 4 : Viết code trong doPost của filter :


   - Bước 5 : Chạy ứng dụng, bạn hãy nhập vào thanh url tên Url hay filter bạn vừa truyền ở trên. Kết quả sẽ trở về trang index được viết trong code của filter.
PHẦN 15 : GIỚI THIỆU VỀ JSP



I. Khái niệm về JSP :
   - JSP là một công nghệ, nó cho phép chúng ta tạo ra các trang Web động, từ một trang JSP có thể sinh ra hàng ngàn các trang Web tĩnh khác dựa vào khả năng thông dịch mã Java kết hợp với mã trang HTML từ phía Server

II. Jsp Element :

  -  Thẻ Root

Thẻ này sẽ chứa các thuộc tính, thông tin của trang  jsp.

  -  Comment

 Cũng như trang html, trong jsp cũng cho phép chúng ta có thể comment. Để comment chúng ta dùng kí hiệu này:    <!  your comment  -->

  -  Declaration.

 Chúng ta có thể khai báo biến hoặc phương thức của java ngay trong trang jsp như một trang ngôn ngữ kịch bản. Nhưng nếu như khai báo quá nhiều trong trang thì sẽ bị nhầm lẫn giữa code jsp và code java. Cú pháp khai báo là <%! your code %>

  -  Expression

 Một JSP Expression được sử dụng để chèn một giá trị vào trong trang jsv một cách trực tiếp.
 Thẻ biểu thức JSP được sử dụng để đánh giá một biểu thức và định hướng các output đến một trình duyệt web phù hợp.
Cú pháp khai báo là: <%= your code %>

  - Scriptlet Tag : 

- Scriptlet Tag cho phép bạn viết mã java trong trang JSP. Cú pháp của Scriptlet Tag như sau :   <% <i> mã java </ i>%>

  - Directive Elements:

+ Một JSP directive cung cấp thông tin đặc biệt cũng như các phương tiện của trang jsp.

 -  Standard Tag(Action Elements)

+ JSP cung cấp  Standard Tag(Action Element)  để sử dụng trong các trang JSP của bạn. Các thẻ được sử dụng để loại bỏ hoặc loại bỏ mã scriptlet từ trang JSP của bạn bởi vì scriplet mã được về mặt kỹ thuật không được khuyến cáo hiện nay.

+ Standard tags bắt đầu với tiền tố jsp <code>: </ code>. Có rất nhiều JSP Standard Action tag được sử dụng để thực hiện một số nhiệm vụ cụ thể.

III. Ưu và nhược điểm của JSP

+ Ưu điểm

- Cho phép chúng ta thiết kế giao diện web dễ dàng hơn.
- Jsp có thể cho phép chúng ta tạo nên những trang web động.
- Có thể viết một nơi và chạy bất cứ nơi nào.

+ Nhược điểm

- Nhìn chung thì việc thiết kế giao diện bằng JSP vẫn còn nhiều khó khăn.
- Tiêu tốn dung lượng lưu trữ phía server gấp đôi.
- Lần đầu tiên truy cập vào trang JSP sẽ mất nhiều thời gian chờ.

Tuesday, June 17, 2014

PHẦN 13 : COOKIE IN SERVLET


I. Khái niệm về Cookie : 
   Khi người dùng truy cập đến một trang web có sử dụng cookie, trang web đó sẽ tự động gửi cookie đến máy tính của người dùng. Những cookie này tự động được tổ chức trong hệ thống máy tính. Khi truy cập đến các trang web sử dụng được cookie đã lưu, những cookie này tự động gửi thông tin của người dùng về cho trang web của nó.
   - Cookie là một bộ nhắc nhỏ mà website lưu trữ ở trên máy tính của bạn có thể định danh cho bạn. Khi bạn truy cập và một trang web, website này sẽ đặt một cookie tại trên máy đó, thay cho việc liên tục hỏi bạn các thông tin như nhau, chương trình trên website có thể sao lưu thông tin vào một cookie mà khi cần thông tin sẽ đọc cookie.
   - Cookie được lưu bởi server và gửi về client cùng response. Request được gửi tới server cùng với cookie nhưng ko thay đổi giá trị của cookie. Giá trị của cookie được lưu trong bộ nhớ (ổ cứng ) của client.

II. Bài tập :

   - Để hiêu rõ về tính năng của cookie các bạn hãy cùng tôi làm 1 bài tập sau :
   * Bước 1 sử dụng bài login chúng ta đã cùng làm ở bài bài 10
   * Bước 2 ở phần servlet chúng ta sẽ code như sau :

   - Các bạn nên lưu ý cách để adđ 1 cookie :
                                           response.addCookie(new Cookie("username", un));

Hãy đăng nhập vào ứng dụng sau đó quay trở lại trang index, kết quả username và password của bạn đã được lưu lại



   - Vói việc sử dụng cookie bạn có thể sử dụng các tài khoản trên máy của bạn 1 cách nhanh chóng, tiện lợi, tránh được việc quên acccount ... tuy nhiên cookie lại có tính bảo mật rất kém.



Bạn có thể tải demo tại đây

Monday, June 16, 2014

PHẦN 12 : HƯỚNG DẪN LÀM LOGIN VÀ SHOW POST SỬ DỤNG DATABASE


Ở bài này tôi sẽ hướng dẫn các bạn cách check login và cách show dữ liệu sử dụng database 
Trước hết hãy tạo database gồm các bảng theo ý bạn dưới đây là database của tôi các bạn có thể tham khảo :

I. Check login sử dụng database :








 * Bước 1 :
     - Tạo 1 Web Application , viết code như khi bạn đăng nhập sử dụng giữ liệu được add cứng, chỉ khác ở 1 chỗ bạn đổ dữ liệu. Tạo 1 class Authenticate như sau :


  * Bước 2 :
     - Tạo 1 servlet checkLogin để soát dữ liệu khi đăng nhập :



  - Như vậy là bạn đã thao tác xong với phần check login

II. Load dữ liệu trong database :
  * Ở đây tôi sẽ hướng dẫn bạn thao tác với dữ liệu ở bảng Post những phần tương tự các bạn hãy làm theo nhé.

  * Bước 1 :
   - Tạo 1 class PostEntry và khởi tạo thuộc tính và contructor cho nó :
   * Bước 2 :
   - Tạo 1 class DataSource để khởi tạo phương thức load dữ liệu từ database :

   * Bước 3 : 
   - Khi đã hoàn thành các bước trên, bước cuối cùng các bạn chỉ việc load dữ liệu ra những nơi bạn mong muốn bằng cách : 




Vậy là các bạn đã có thể thao tác với dữ liệu database rồi. Cách này không khó hơn so với cách sử dụng dữ liệu add cứng nhưng bạn đã có thể sử dụng với kho dữ liệu động và không bị giới hạn nhiều. Sau đây là 1 số hình ảnh demo của tôi :


Các bạn có thể download source code của tôi tại đây
   

Saturday, June 14, 2014

PHẦN 11 : SERVLET CONTEXT


 Như chúng ta thường thấy mỗi blog hoặc mỗi trang web đều có 1 biến đếm lượt View, điều này khá quan trọng vì giúp người ta quản lý được số lượt truy cập 1 trang web. Để giải quyết vấn đề này trong java người ta sử dụng servlet context. Nó dùng để duy trì trạng thái cho cho ứng dụng web. 1 Servlet context có phải lưu lại 1 nội dung dùng chung cho nhiều servlet. 

  - Giờ chúng ta hãy cùng nhau thực hiện 1 bài toán nhỏ để thử nhiệm chức năng này nhé. 

* Bước 1 : Tạo 1 Web Application sau đó tạo 2 servlet có tên lần lượt là Page1 và Page2. 
                 Code của 2 page được viết như sau :

* Bước 2 : Run Page1 và Page2. Lần lượt thao tác F5 trên 2 trang Web hiện ra. 2 Page này sẽ cùng nhau thực hiện đếm cùng lúc 1 biến count như sau : 





Vậy là bạn đã thực hiện xong công việc chính của servlet context. Để tham khảo thêm hãy down bản demo của tôi tại  đây

PHẦN 10 : SESSION IN JAVA SERVLET



I. Khái niệm session trong java :

 - Như chúng ta đã được biết HTTP là 1 stateless connection nó sẽ k lưu lại request của phía client sau khi xử lý request đó. Vậy những lúc ta cần lưu lại thông tin bên phía client chúng ta phải làm như thế nào? Đó chính là lúc chúng ta cần đến session.
 - Session được hiểu như 1 phiên làm việc của 1 người dùng, nó chính là khoảng thời gian mà người dùng giao tiếp với ứng dụng. Nó được tính là bắt đầu khi người dùng bắt đầu truy cập vào ứng dụng và kết thúc khi người dùng thoát khỏi ứng dụng.

II. Kỹ thuật xử lý trong Session :

1 . Url rewriting : 
     - Mỗi yêu cầu mà client gửi thông qua url chúng sẽ thêm 1 tham số định danh session và phản hồi để theo dõi phiên làm việc session. Với cách làm này chúng ta sẽ chắc chắn rằng không có sự xung đột về tham số 

2 . Persistent Cookies:
    - Đây là 1 trong những cách thông dụng để phía server có thể nhận biết được client có chứa cookie. Vì các cookie này có chứa thông tin nằm trong client sau đó thông qua request sẽ được gửi về phía máy chủ.

3 . Hidden form variables: 
   - Đây là 1 dạng thẻ ẩn chứa các thông tin khiến người dùng không thể nhìn thấy nhưng vãn được phép gửi lên server.

4 . Servlet APIs : 
    - Hoạt động trên phương pháp theo dõi phiên

III. Bài tập :

   - Để nắm rõ hơn 1 chút về Session chúng ta hãy làm 1 ứng dụng nhỏ là login
   - Hãy bắt đầu bằng cách tạo cho mình 1 Web Application

* BƯỚC 1 : Tạo 1 class Account và khởi tạo thuộc tính, contructor cho nó : 




* BƯỚC 2 : Tạo 1 servlet Authenticate nhằm check sự đúng sai khi bạn login :

* BƯỚC 3 : Tạo 1 servlet Home nhằm show ra thông tin khi bạn login đúng :

* BƯỚC 4 : Quay về trang index và design form login theo ý bạn . Lưu ý những phần comment cần thiết phải có :


Kết quả trang login :



Nếu bạn đăng nhập đúng :


Nếu bạn đăng nhập sai : 

\

 - Vậy là bạn đã hoàn thành xong bài login ngày hôm nay. Bạn có thể download source tại đây

Friday, June 13, 2014

PHẦN 9 : SỬ DỤNG REQUEST DISPATCHER



     Phần này chúng ta sẽ cùng nhau tìm hiểu về cách sử dụng Request Dispatcher vậy trước tiên chúng ta sẽ tìm hiểu qua về Request Dispatcher

I. Request Dispatcher :
    - Request Dispatcher là phương pháp giúp bạn bảo toàn địa chỉ url sau khi chuyển đến trang index hoặc trang success, nó làm trang web của bạn trở nên linh dộng hơn nhờ các compoment được phân bố riêng rẽ. Và chính điều này giúp bạn không đánh mất giá trị của các định danh.

II. Phương thức include() và phương thức forward() :

    1. Phương thức include() : 
        - Là 1 phương thức sẽ giúp ích cho bạn khi bạn muốn chèn thêm các nội dung tĩnh/động vào trong response trả về từ 1 Web compoment nào đó. 


        - Bên phía client sẽ gửi 1 request cho Servlet 1, tại đây Servlet 1 sẽ thực hiện include 1 nội dung tĩnh hoặc động vào đó rồi gửi lên Servlet 2. Servlet 2 sẽ xử lý nội dung và gửi 1 response về cho Servlet 1. Cuối cùng Servlet 1 thực hiện công việc xử lý ra response hoàn chỉnh và trả về phía client.

   2. Phương thức forward() :
       - Là 1 phương thức cho phép 1 Web compoment xử lý qua 1 request từ phía client và sau đó gửi qua 1 Web compoment khác trước khi sinh ra response cho phía client


III. Bài tập nhỏ :

      - Để hiểu rõ hơn về 2 phương thức include() và forward() chúng ta hãy cùng nhau xử lý 1 bài toán như sau :
        Implement an application as following:
Depends of the question, GateKeeper will forward request to corresponding Answers.


    * Bước 1 : Tạo 1 Web Application (WA) , chuột phải vào thư mục Web Pages và tạo 1 trang jsp có tên WrongPage. Trang jsp sẽ có hình thức như sau : 



    * Bước 2 : Quay trở lại trang index bạn sửa lại trang với đoạn code sau :

    * Bước 3 : Tạo 1 Servlet với tên GateKeeper (tên này sẽ trùng với tên action trong thẻ form bạn viết bên trang index). Thêm đoạn code sau vào servlet GateKeeper :
    * Bước 4 : Tạo 1 Servlet với tên Response với chức năng show ra câu trả lời tương ứng với lựa chọn câu hỏi đúng :

    * Chạy thử WA và đây sẽ là thành quả của bạn :


Nếu bạn chọn sai :
Nếu bạn chọn đúng :

Vậy là bài học của chúng ta hôm nay đến đây là kết thúc chúc bạn thành công ! 
Bản demo đầy đủ bạn có thể tải tại đây > RequestDispacherDemo.rar



Thursday, June 12, 2014

PHẦN 8 : CÁCH THỨC LÀM VIỆC CỦA SERVLET VỚI DỮ LIỆU ẢO 




- Trong bài này chúng ta sẽ cùng nhau thực hiện việc thao tác với dữ liệu ảo hay còn gọi là dữ liệu được add cứng.

- Để chuẩn bị cho bài này trước tiên bạn hãy down file css này của tôi để phục vụ cho phần giao diện của web >  style.css 
- Ở trong css này tôi đã thiết kế giao diện cho button và table để hiển thị trên website, bạn có thể tùy chỉnh giao diện theo cách của bạn bằng cách thêm vào css theo ý muốn.

* Bước 1: Tạo 1 Web Application (WA) . Hãy copy file style.css bạn vừa tải ở trên vào folder Web Pages thuộc WA bạn vừa tạo. Sau đó hãy nhập đoạn code này :

    - Ở trong thẻ <input> tôi có kế thừa class="btn" đó là phần giao diện tôi đã viết ở phần css

* Bước 2 : Tạo 1 class Data gán vào Package Entity


Chúng ta sẽ định nghĩa thuộc tính và viết contructor cho class như sau: 


* Bước 3 : Tạo 1 class DataSource gán vào Package Ds 


Chúng ta sẽ truyền dữ liệu vào đây thông qua List<>, dữ liệu này bạn có thể thêm vào tùy ý nhưng nên nhớ chỉ truyền vào 2 thuộc tính vì contructor tôi tạo ở trên chỉ có 2 thuộc tính



* Bước 4 : Tạo 1 Servlet gán vào package Servlet. Sau khi tạo xong  chúng ta nhập code như sau :


 - Ở đây có 2 điều bạn nên ghi nhớ :
       1. Cách để thêm css trong servlet : 
             out.println("<link href='style.css' rel='stylesheet' type='text/css'>"); 

        Phần href tôi chỉ điền tên file vì khi ở trên tôi đã thêm file này vào trong thư mục Web Pages thuộc Web Application, vậy nếu bạn muốn copy file css của bạn sang nơi khác hãy chỉnh sửa lại đường dẫn này cho phù hợp.
       2. Cách sử dụng css trong servlet :
             out.println("<div class=\"tbl\">");

Hãy sử dụng class=\"Tên thuộc tính của css bạn muốn kế thừa\" để sử dụng css

Vậy là bạn đã thực hiện xong bài học ngày hôm này đây là 1 số hình ảnh mà bạn sẽ đạt được :


                          


Với cách làm này bạn có thể quản lý dữ liệu 1 cách dễ dàng vì các file được sắp xếp rất gọn gàng nhưng vẫn có 1 nhược điểm là bạn sẽ khó khăn trong việc viết code html trong Servlet.

Bạn có thể tùy chỉnh để cho giao diện có thể đẹp hơn nhưng tôi hi vọng bài viết của tôi sẽ giúp ích cho bạn. Cảm ơn vì đã theo dõi bài viết này. Have fun



Bạn có thể tải bản full của bài hôm nay tại đây

PHẦN 5 : SERVLET LIFE CYCLE





* Giới thiệu về Servlet Life Cycle : 

-  Servlet Life Cycle là toàn bộ quá trình từ lúc tạo ra đến lúc bị phá hủy của Servlet. Servlet có vai trò quan trọng giúp ta quản lí tài nguyên, tạo ra chính sửa thông tin , lấy ra và xóa thông tin. Nó còn giúp ta phát triển ứng dụng 1 cách an toàn và nhanh hơn vì các đối tượng của Servlet đều được Servlet quản lý. 
 - Vòng đời của Servlet được thể hiện qua hình sau : 



 - Đầu tiên chúng ta tạo 1 class -> Server tạo ra đối tượng mới -> Gọi phương thức init() -> xử lí thông tin yêu cầu bằng phương thức Service() -> khi không còn tác dụng sẽ đưa đến destroy() và đưa vào thùng rác. Đây là 1 vòng đời của Servlet. 

 * Tìm hiểu các phương thức : 
- Phương thức init() : Phương thức này được gọi một lần khi Servlet được tải vào trong service engine,phương thức luôn chứa các mã lệnh mà ta thường dùng có các phương thức khởi tạo. 

- Phương thức Service(): Phương thức này được gọi để xử lý các yêu cầu.Nó có thể không gọi, gọi một lần hay nhiều lần cho đến khi servlet được ngưng tải. Nhiều thread có thể thực thi phương thức này song song vậy nên nó trở nên an toàn. 

- Phương thức destroy(): Phương thức này được gọi 1 lần vào cuối vòng đời servlet và nó thực hiện chức năng dọn dẹp và đưa những thứ không còn tác dụng vào thùng rác. 

PHẦN 7 : CÁCH THỨC LẤY THÔNG TIN CONFIG TỪ SERVLET




    Qua bài viết hôm này chúng ta sẽ học được cách lấy thông tin config từ servlet 1 cách dễ dàng :D

 * Bước 1 : Tạo 1 project theo cách mà bạn đã học được của  phần 6

  Sẽ có 1 số bước khác so với phần 6. Bắt đầu từ bước tạo Servlet

 * Bước 2 : Thêm dữ liệu như hình sau và bấm finish :


 * Bước 3 : Chuột phải chọn Insert code > Overide Method sau đó chọn như hình sau :


 * Bước 4 : Thêm vào đoạn code như sau :



   * Bước 5 : Save lại và run project , đây là kết quả bạn thu được :


 
Vậy là bạn đã nắm được cách thức để lấy ra thông tin config từ servlet. Thật đơn giản phải không ! 

Bạn có thể tải bản demo tại đây