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

Expression Language

Expression Language là một tính năng mới trong JSP 2. Nó là cách đơn giản để viết lại các biểu thức trên trang JSP ngắn gọn hơn và có thể dùng các thẻ custom tag.
- Cấu trúc của Expression Language: 
${Expression}

- Đặc điểm :
+ Truy xuất các biến dễ dàng.
+ Hỗ trợ cả mạng và collection object.
+ Hỗ trợ các Implicit Object.
+ Expression Language được tính toán trong thời gian chạy.

- Cách truy xuất vào một thuộc tính nào đó hoặc một biến :
- ${pageScope.color}
- ${pageScope["color"]}


- Các implicit objects cơ bản của Expression Language :
+ PageScope :tồn tại trong phạm vi của trang JSP.
+ SessionScope : mô tả các phiên làm việc của người dùng
+ RequestScope : Vòng đời Request -> Respone
+ ApplicationScope : phạm vi ứng dụng ,khi ứng dụng được bật lên.

- Toán tử cơ bản trong Expression Language:


Các Operators.

+ Arithmetic Operators(Toán tử số học): +,-,*,/ or div,% or mod.
+ Relational Operators(Toán tử quan hệ): < or lt, > or gt, <= or le, >= or ge, == or eq, != or ne.
+ Logical Operators: && or and, || or or, ! or not.
+ Empty Operators: Nếu đối tượng có giá trị là null thì trả về true và ngược lại. Cú pháp: ${empty x}


Standard Action and JavaBean

1.Khái niệm.

JavaBean là một đối tượng java,components java được tái sử dụng nhiều nơi khác nhau và được mã hóa theo JavaBean API.JavaBean là một complaint java.Chúng ta có bao gói các thuộc tính ở đó lại tất cả behavior nghĩa là các method cũng như các state nghĩa là các dữ liệu để xử lí dữ liệu.

2.Thuộc tính của JavaBean.

-Tính bao gói(toàn bộ dữ liệu,function).
-Thiết kế được tái sử dụng ở nhiều nơi khác nhau.
-Cung cấp hiển thị cụ thể dựa trên các qui định.
-Class javabean là public.

3.Cấu trúc của file JavaBean.

- Nằm trong 1 packages
- Constructor không có tham số đầu vào.Constructor này được gọi khi element của JSP tạo bean.
- Có các phương thức setter và getter để thao tác với các attribute.
*JSP cung cấp 3 java bean tag (standard action) :
-jsp:usebean.
-jsp:setProperty.
-jsp:getProperty.

4.Cách sử dụng JavaBean trong JSP

 Khai báo :  

          <jsp:useBean id="định danh" class="tên class" [scope="loại scope"]/>
giải thích:
-id : đại diện cho đối tượng truy xuất đến bean.
-class : tên class sử dụng.
-scope : tầm hoạt động của bean.mặc định là request.

Cơ chế thực hiện :

- Tìm kiếm class tương ứng được khai báo trong class.
- Khởi tạo instance thông qua constuctor.
- Gán định danh id cho instance để có thể truy xuất trên trang JSP.
- Xác định phạm vi hoạt động của istance này.

Cách khai báo biến dùng scriptlet tương đương javabean

 <%<tên class> <định danh> = new <tên class>();%>

Bài viết có tham khảo: http://thanhha112.blogspot.com/2014/07/javabean-and-standard-action.html 

Implicit Object

JSP Implicit Object là các đối tượng có sẵn trong JSP Container.Ta có thể gọi chúng ra bằng tên  đã được Java định nghĩa sẵn trong bằng các API.Chúng  được sử dụng trong các biểu thức expressions hoặc các đoạn Scriptlet:- Ví dụ về Scriptlet:
 <% out.print("Today is:"+java.util.Calendar.getInstance().getTime()); %>  Scriptlet là đoạn code được viết trong dấu <% ... %> .- Ví dụ về expressions: ${sessionScope.attributeName}  cú pháp expressions bắt đầu bằng ${ và kết thúc bằng  }.
Có 9 Scpope trong  Implicit Object :

Nhưng ta sẽ tìm hiểu 4 Scope cơ bản của Implicit Object :
  • Page : Gọi các phương thức bởi Servlet class.
  • Request : Là đối tượng HttpServletRequest liên quan đến việc yêu cầu và Implicit Object tồn tại từ lúc client request đến khi respone trả về.
  • Session : Là đối tượng thuộc HttpSession liên quan đến việc yêu cầu. 
  • Application: Là đối tượng thuộc ServletContext liên quan đến bối cảnh ứng dụng và tồn tại trong vòng đời của ứng dụng.
     
Implicit Object được chia làm 4 nhóm:
  • Những đối tượng liên hệ tới trang JSP.
  • Các đối tượng context.
  • Nhóm đối tượng xử lí lỗi.
  • Nhóm đối tượng liên quan tới input và output trong JSP.
Demo

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