Thứ Tư, 18 tháng 6, 2014

Filter

1.Khái niệm.

- Có thể hiểu một cách đơn giản 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.

2.Vòng đời của Filter

Vòng đời của một FIlter giống như vòng đời của một Servlet: khởi tạo, thi hành và tiêu hủy. Việc khởi tạo một filter chỉ được thực hiện một lần khi Web Application lần đầu gọi Filter đã sử dụng , phần thì hành của một Filter được gọi khi có request hay response cần dùng filter đó, khi Web Application hoàn toàn không còn dùng filter nữa thì vòng đời của filter sẽ kết thúc.
void init(FilterConfig config) throws ServletException: Hàm khởi tạo các thông số cho  Filter, được thi hành khi khởi tạo Filter
void destroy(): hàm hủy Filter
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException: hàm thực thi, được thi hành khi có resquest hay response dùng filter.


Vòng đời của Filter.


3.Cách làm việc của Filter.

Cách làm việc 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.

4.Demo

Tạo 1 Filter class trong Project đã tạo trước đó.

Điền đầy đủ thông tin Class Name và packet...

Tích vào Add information.

Chọn Edit rồi chọn Servlet: Home như trên.
RunFile Home và ta được như trên.
Như ảnh trên ta thấy không thể vào thẳng trang Home mà không Login.
Theo tôi thấy sử dụng tốt filter thì có thể tạo ra một bộ phòng thủ chuyên nghiệp cho application của bạn điều này có thể giúp chúng ta xử lí dữ liệu và quản lý tốt hơn. Cảm ơn.
Các bạn có thể tải Demo của tôi tại đây.

Cảm nhận sau một tuần học theo phương pháp mới.

1.Điều tôi thấy.

- Tôi thấy việc xem video và học lý thuyết qua video khá thú vị và hiệu quả.
- Tôi thấy việc viết blog dài và tốn thời gian nhưng dễ tìm lại để học.
Tôi thấy dường như lần đầu tiên mình chăm chỉ và nó làm tôi thấy vui.
- Tôi thấy việc viết nhiều blog một lúc gây nhàm chán và nản.
- Tôi thấy viết Reflection khá thú vị và vui.

2.Điều tôi cảm nhận được.

- Việc học lập trình chính ra cũng không nhàm chán như tôi thường nghĩ.
- Cảm thấy từ trước tới nay do mình lười biếng không chịu học nên đổ tại cho bài tập khó,
- Cảm thấy việc học và tự học tốt cho chính bản thân mình cũng như nghề nghiệp tương lai.
- Cảm thấy thoải mái với việc học lý thuyết qua video,hơn việc phải nghe thầy nói trong suốt khoảng 1 vài giờ đồng hồ trên lớp.
- Cảm thấy việc làm Demo sẽ áp dụng được phần nào kiến thức tiếp thu được.
- Cảm thấy việc suy nghĩ tự giải quyết vấn đề rất tốt và cho thấy bấy lâu nay mình vẫn luôn ỷ lại.

3.Những mặt hạn chế của tôi.

- Dù đã tự giác học bài nhưng gặp vấn đề khó vẫn lười suy nghĩ dễ nản chí và bỏ bê nó.
- Do lười học nên mất gốc khá nhiều về web nên code còn chậm và nhận thức vấn đề còn kém,phản ứng chưa nhanh cần phải rèn luyện.
- Làm nhiều blog nhưng chưa thể làm một blog hoàn chỉnh đầy đủ và chuyên nghiệp.
- Cơ bản vẫn ỷ lại vào thầy và bạn trong việc làm bài.

4.Những điều đã làm được.

- Học được cách tóm tắt lý thuyết qua video.
- Biết về phương pháp học và chia sẻ nó cho bạn bè.
- Thu được lượng kiến thức nhiều hơn hẳn so với bất kì một môn nào trong các kì trước.
- Hoàn thành các bài tập của thầy đúng hạn.
- Biết cách viết Reflection dù chưa chuyên nghiệp.

5.Nhận xét cơ bản về phương pháp học mới.

a. Điểm tích cực với tôi.

+ Tự tìm tòi những gì mình chưa biết bằng cách tìm kiếm trên web.
+ Thời gian tự học ở nhà nhiều hơn.
+ Tạo cho tôi động lực làm bài khi nhìn thấy deadline.
+ Tự học lý thuyết và tóm tắt qua xem video, rồi việc code Demo ít nhấtcũng giúp tôi nhớ lâu hơn.
+ Tạo hứng thú học hơn khi chuyên tâm và cố gắng làm bằng được bài tập.
+ Bình thường thì thấy học trên lớp rồi về nhà hay quên. Cách học này giúp ta nhớ hơn các kiến thức vì chính mình là người tìm tòi rồi mở mang cho mình.
+ Buổi tối tôi còn cải thiện được kỹ năng làm việc nhóm vì tôi  có clan cùng nhau tự làm bài và trao đổi ngay lập tức qua ứng dụng Alo Alo Chat.Như thế vừa giúp đỡ cho bạn bè cũng như chính mình.

b.Điểm hạn chế với tôi.

+ Thời gian chơi ít đi như đi chơi,game,tụ tập bạn bè, ngủ,xem bóng đá v..v.v
+ Demo của thầy khá đơn giản và với một đứa dốt như mình thì việc áp dụng nó vào ASM hơi khó.

JSP Elements

1.Giới thiệu về JSP.

- JSP được sử dụng để tạo ra các ứng dụng web. Nó tập trung nhiều hơn về trình bày logic của ứng dụng web. Trang JSP được bảo vệ dễ dàng hơn  một Servlet . Cách trình bày code của trang JSP khác với  Servlet. Servlet thêm code HTML trong mã Java còn JSP  thêm mã Java trong HTML.Mọi thứ một Servlet có thể làm thì một trang JSP cũng có thể làm điều đó.
- JSP cho phép chúng ta viết các trang HTML có chứa các thẻ để chạy các chương trình Java. Nhà thiết kế web có thể thiết kế và cập nhật các trang JSP mà không cần học các ngôn ngữ Java và phát triển Java cũng có thể viết mã mà không liên quan đến việc thiết kế web.
Trang JSP được chuyển đổi thành một Servlet bằng Container Web. Container dịch một trang JSP vào tập tin class source.(java) và sau đó biên dịch thành một lớp Java Servlet.

2.JSP Elements.

- JSP Scripting Elements được viết bên trong <code> <%%> </ code>. Các mã bên trong <code> <%%> </ code> được xử lý bởi các công cụ JSP trong bản dịch của các trang JSP. Bất kỳ văn bản khác trong trang JSP được coi là HTML hoặc văn bản đơn giản.
Example of JSP Scripting Elements.
Có tất cả 5 kiểu khác nhau trong JSP Scripting Elements:


+ Comment : JSP comment được sử dụng khi bạn đang tạo một trang JSP và muốn đưa vào bình luận về những gì bạn đang làm. JSP comment ​​chỉ nhìn thấy trong trang JSP. Những ý kiến ​​không có trong mã nguồn servlet trong giai đoạn dịch, cũng không xuất hiện trong các phản ứng HTTP. Cú pháp của JSP bình luận như sau : <%-- JSP comment --%>.
Example of JSP Comment.
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>%>
Example of JSP Sriptlet Tag.

 + Declaration : Chúng ta biết rằng ở cuối một trang JSP sẽ được dịch sang lớp Servlet. Vì vậy, khi chúng ta khai báo một biến hoặc các phương thức trong JSP bên trong Declaration Tag  , nó có nghĩa là declaration được thực hiện bên trong lớp Servlet nhưng ngoài phương thức dịch vụ. Bạn có thể khai báo thành viên tĩnh và phương thức trong Declaration Tag. Cú pháp của Declaration Tag : <%! declaration </ i>%>/
Example of Declaration Tag.
  + Expression TagExpression Tag được sử dụng để in ra biểu hiện ngôn ngữ java được đặt giữa các thẻ. Một Expression Tag có thể giữ bất kỳ biểu hiện ngôn ngữ java có thể được sử dụng như là một đối số cho phương pháp out.print().
Example of Expression Tag.
Directive Tag : Directive Tag  cung cấp những hướng dẫn đặc biệt cho container Web tại thời điểm trang dịch. Directive Tag có 3 loại : page, include and taglib.
include: Bao gồm các chỉ thị được sử dụng để bao gồm một tập tin trong giai đoạn dịch.Với các Container để hợp nhất các nội dung của tập tin bên ngoài khác với JSP hiện tại trong giai đoạn dịch. Code của bạn có thể bao gồm các include bất cứ nơi nào trong trang JSP của bạn.
taglib: Các taglib tuyên bố rằng trang JSP của bạn sử dụng một tập hợp các tùy chỉnh thẻ, xác định vị trí của thư viện, và cung cấp một phương tiện để xác định các thẻ tùy chỉnh trong trang JSP của bạn.
page: cho phép chúng ta điều khiển cấu trúc của servlet bằngcách đưa vào các lớp, đặt MIME type, …. một  page directive có thể được đặt bấtcứ nơi nào trong trang JSP.page directive định nghĩa một số thuộc tính phụ thuộc vào trang và giao tiếp giữa các thuộc tính này với  JSP container .

3.Standard Tag(action elements).

- JSP cung cấp  Standard Tag(Action Element)  được sử dụng để loại bỏ mã scriptlet từ trang JSP của bạn bởi vì scriplet 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ể.
Một số Standard Action Tag có sẵn.

4. Ưu điểm và nhược điểm.

Ưu điểm:

-JSP được dịch và compile thành Java servlet nhưng dễ dàng để phát triển hơn JAVA servlet.
-Cũng như Servlet , JSP cũng có mọi ưu điểm của Java (WORA,...)
-JSP sử dụng ngôn ngữ đơn giản để nhúng HTML vào JSP.
-JSP cung cấp cách dễ dàng để truy cập và xử lí đối tượng.
-JSP có tất cả ưu điểm được cung cấp bởi Java Servlet và môi trường web , nhưng nó trở nên đơn giản hơn cho các nhà phát triển web.
-JSP sử dụng HTTP để yêu cầu/phản hồi và điều này làm cho nó trở nên lí tưởng.

Nhược điểm:

 - Khi các trang JSP được dịch sang servlet và biên soạn, rất khó để dấu vết lỗi xảy ra trong các trang JSP.
 - Yêu cầu tăng gấp đôi không gian đĩa để chứa các trang JSP.
 - Các trang JSP đòi hỏi nhiều thời gian hơn khi truy cập lần đầu tiên khi chúng được được biên soạn trên máy chủ.

Thứ Ba, 17 tháng 6, 2014

Cookie in Servlet

Khái niệm: 

- Cookie là một dạng bản ghi được tạo ra và lưu lại trên trình duyệt khi người dùng truy cập một website.
- 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.

Demo:

Sau đây tôi sẽ làm Demo về Cookie.
Chúng ta xử lí code trong trang index.html như sau
Tiếp theo là code trong Servlet class : Home
Và đây là code trong Servlet class Login
Kết quả Demo:
Ở phần đăng nhập chúng ta điền username tùy ví và pass mặc định là "password" :

kết quả sau khi đăng nhập thành công


Để kiểm tra cookie có hoạt động hay không chúng ta tắt tab hiện tại và gõ như sau vào url :

http://localhost:8080/DemoCookie/Home

Ta sẽ vẫn được kết quả như hình trên.
Cookie là vô cùng tiện lợi , mỗi ngày bạn đều dùng nó có thể bạn biết hoặc không biết. Chẳng hạn như Gmail hoặc là mạng xã hội Facebook,Youtube v..v..v... bạn đã lưu lại account của mình trong cookie nên không phải Login hàng ngày.Nhưng theo tôi cookie rất tiện lợi để dùng cho máy tính cá nhân nhưng sẽ rất nguy hiểm nếu để lộ các thông tin ra ngoài .
Bạn có thể tải Demo của tôi tại đây.Cảm ơn

Working with JDBC and SQL

Chúng ta sẽ thử xây dưng 1 trang web có Login và xem thông tin lấy từ database

Yêu cầu :
Các bạn cần tải jdbc và có SQL Server(ở đây t dùng bản SQL Server 2008 )

Sau khi chúng ta lập 1 project như bình thường , add thêm sqljdbd4 vào project.

Sau đây là code trang index.html. Đây là 1 form đăng nhập. Tôi có sử dụng Css để cho giao diện đẹp hơn nhưng bạn không dùng cũng không sao.
Tiếp theo ta tạo một trang class checkAccount để check username và password khi đăng nhập.
Cần chú ý nhập đúng đường link database , tài khoản SQL Server , một số phương thức với SQL và thêm try catch để bắt lỗi


Tiếp theo là Servlet class Login để truyền username và password.



Giờ chúng ta sẽ lấy dữ liệu từ database để hiện thị cho người dùng.Chúng ta tạo Servlet class ViewAllPost.

Đây là thành quả sau khi Debug.


Vậy là các bạn có thể sử dụng database để có một kho dữ liệu động và không bị giới hạn về số lượng .
Ta có thể thấy việc kết nối dữ liệu từ database là không hề phức tạp , chỉ cần gõ đúng phương thức , tên nếu không sẽ rất khó xác định lỗi .
Kết nối trực tiếp từ database tuy không nhanh và khá nặng so với mockdata ở bài trước nhưng sẽ đem lại sự chính xác , ổn định và hiệu quả cao hơn.
Các bạn có thể tham khảo Demo của tôi tại đây

Thứ Bảy, 14 tháng 6, 2014

Servlet Context

Giới thiệu:

- Servlet Context dùng để duy trì trạng thái cho ứng dụng web được tạo ra bởi các đối tượng container và sử dụng thông tin từ class web.xml,giúp ta chia sẻ dữ liệu được tạo ra bởi các contanier, dùng trên 1 máy ảo java, có phương thức log() giúp ta ghi nhật kí vào file log của server.
-Một số phương thức quan trọng của ServletContext  + getAttribute(String name) : trả về các thuộc tính với tên được chỉ định, hoặc null nếu không có thuộc tính bằng tên đó.  +getInitParameter(String name): trả về giá trị tham số với tên đước chỉ định, hoặc null nếu tên không tồn tại  +Enumeration getInitParameterNames(): trả về tên của tham số khởi tạo của bối cảnh như một Enumeration  +setAttribute(String name,Object obj): thiết lập một đối tượng với tên thuộc tính được đưa ra trong phạm vi  áp dụng  +removeAttribute(String name): loại bỏ các thuộc tính với tên được chỉ định.

-Ưu điểm của Servlet context
 +Cung cấp thông tin liên lạc giữa các servlet
 +Có sẵn cho bất kỳ servlet và JSP là một phần của ứng dụng web
 +Sử dụng để có được thông tin cấu hình web.xml

Demo

Sau đây t sẽ hướng dẫn các bạn làm Demo về Servlet Context như sau:
Bước 1 : Tạo 1 web application và 2 servlet lần lượt là WebPage1 và WebPage2 theo hướng dẫn tại đây và tại đây.
Bước 2: Xử lí code trong WebPage1 và WebPage 2 như sau :

 Bước 3: Click chuột phải vào Servlet class : WebPage1 chọn RunFile=>OK ta được như sau:

Khi ta refresh trình duyệt 1 lần thì con số sẽ nhảy thêm 1 đơn vị , điều này cũng được tiếp tục khi ta chạy page 2 con số vẫn tiếp tục đếm tiếp :
Các bạn có thể tải Demo của tôi tại đây.Cảm ơn



Session

Khái niệm:

Session  được dùng để lưu thông tin của người dùng trong một phiên đăng nhập, Sesssion có giá trị từ lúc khởi tạo cho đến lúc nó được expire hoặc cho đến lúc trình duyệt đóng, phiên làm việc kết thúc. Lúc đó session sẽ không còn khả năng retain nữa.

 Các kỹ thuật  xử lý Session:

-Có khá nhiều kỹ thuật xử lý session trong Servlet và có một số cách như sau:


*Url Rewritting

- Mỗi một yêu cầu mà client gửi đến thông qua url thì chúng ta có thể thêm một tham số định danh session cùng với mỗi yêu cầu và phản hồi để theo dõi phiên làm việc (session). Điều này rất quan trọng  vì chúng ta cần phải theo dõi các thông số này trong mọi phản hồi và chắc chắn rằng nó không xung đột với các thông số khác.

*Persistent Cookies

- Cookie là các mảnh nhỏ lưu thông tin ở trong trình duyệt bên phía client, nó được gửi tới máy chủ. Lúc đó server sẽ nhận ra client qua các thông tin của cookie.Cách này cũng khá thông dụng.


*Hidden Form Variables

- Chúng ta có thể dùng các thẻ ẩn mà người dùng không nhìn thấy nhưng chúng vẫn là các thẻ nằm trong form để gửi lên server.

*Servlet API

- Được xây dựng trên phương pháp theo dõi phiên.

Sau đây tôi sẽ hướng dẫn các bạn làm 1 Demo về Session.
Bước 1 : Các bạn tạo 1 Web Application.Các bạn tham khảo cách tạo tại đây. Rồi sau đó tạo class User và các Servlet như sau.


Các bạn có thể tham khảo cách tạo Servlet class ở đây.

Bước 2: Code các class như các ảnh sau:
Code trong index.html

Code trong class User.

Code trong class DataSource

Code trong Servlet: HomeServlet.

Code trong LoginServlet.
 Sau khi xử lí code. Tôi chạy ứng dụng và được như sau:
Giao diện Form Login.

Khi bạn đăng nhập sai sẽ báo lỗi như trên.

Hình ảnh sau khi bạn dăng nhập đúng.

Sửa link như trên hình ta thấy Session vẫn hoạt động.
Qua bài Demo trên các bạn có thể hiểu thêm về Session. Theo tôi nghĩ thì Session khá phổ biến trong lập trình vì nó Giúp server không phải nhận quá nhiều và người dùng cũng không phải nhập nhiều .
Các bạn có thể tải Demo của tôi tại đây. Cảm ơn.




Thứ Sáu, 13 tháng 6, 2014

Dispatcher In Servlet

Ngày nay việc phát triển các ứng dụng web là một việc mà người lập trình viên cần phải phân phối các yêu cầu xử lý và tạo phản ứng cho nhiều đối tượng Servlet. Điều này được thể hiện rõ hơn với cách sử dụng phương pháp "Request Dispatcher". Phương pháp "Request Dispatcher" được thực hiện bởi servlet container để gửi đi hoặc để vượt qua các yêu cầu một nguồn tài nguyên web như Servlet, trang HTML hoặc trang JSP. Để gửi yêu cầu từ Servlet hoặc JSP để nguồn tài nguyên web sử dụng RequestDispatcher chúng ta cần phải thực hiện các bước sau: 
  1. Có đối tượng để tham chiếu với phương pháp Request Dispatcher
  2. Sử dụng phương thức include(), forwards() và phương pháp Request Dispatcher.
Sau đây chúng ta sẽ tìm hiểu về các phương thức include() và forwards().- phương thức include() :có thể hiểu method này cho phép bao gồm nội dung của tài nguyên (servlet , JSP, file HTML) vào trong response và gửi lên máy chủ xử lý.
include() method.

- phương thức forward(): phương thức chuyển tiếp này làm cho người ta cảm thấy mọi thứ được xử lí đúng đắn và nhanh chóng hơn vì nó chuyển tiếp yêu cầu của người dùng tới server xử lí. Hoàn toàn không giống với phương thức include() là chuyển nội dung lên server xử lí.
forward() method.
Sau đây tôi sẽ làm bài Demo  Dispatcher in Servlet về việc trả lời các câu hỏi dựa trên các dữ liệu có sẵn dùng Mock data như bài trước. Cơ bản có thể hiểu như sau :


Bước 1 :  Các bạn hãy tạo một Web Application như hướng dẫn ở đây.
Bước 2  Tạo các Servlet có tên Banner,Response và GateKeeper và 1 file JSP có tên là View. Cách tạo các file Servlet các bạn có thể tham khảo tại đây . Còn dưới đây là các bước tạo 1 file JSP.
Chuột phải vào Foler WEB-INF chọn New=>Other.

Click vào Web=>JSP đặt tên rồi Finish.
Bước 3: Sau đây là code trong các class.





Hình ảnh sau khi Demo.

Khi bạn chọn đúng.

Khí bạn chọn sai.
Các bạn có thể tham khảo Demo tại đây.
Theo ý kiến cá nhân tôi thì sau khi làm bài Demo này chúng ta sẽ hiểu thêm về Dispatcher trong Servlet. Cảm nhận của tôi thì code khá rành mạch và dễ hiểu sử dụng phương thức forward() thì chúng ta có thể gửi request từ các servlet khác nhau cho nhau và dữ liệu gửi đi chính xác và nhanh chóng.Còn phương thức include() giúp chúng ta thêm thông tin từ các servlet khác nhau cho nhau. Hi vọng bài viết này sẽ có thể giúp đỡ các bạn. Cảm ơn.