Thứ Tư, 22 tháng 3, 2017

                  JPA Cretical API và JPQL Query 

1JPQL Query 

-JPQL(Java Persistence Query Language) nó tương đương với sql và được sử dụng JPA

-Nó là một String query cho phép các lập trình viên viết những câu lệnh query trên object entity trên enterpise application
-Cung cấp những query theo phương pháp tiếp cận hướng đối tượng
-Nó làm cho ứng dụng độc lập với database 
*Đặc điểm của JPQL 
+là một ngôn ngữ truy vấn cụ thể
+cho phép viết query động và tĩnh trên persisted entities 
+complier như ngôn ngữ sql
+sử dụng cú pháp nhận object hoặc value trên abstract schema

-VD về JPQL Named Query
-VD về JPQL Dynamic Query
-nó được sử dụng khí mà  ứng dụng build query trong luc runtime 


-Chúng ta có 4 bước  để thực thi JPQL query là
+chúng ta lấy EntityManager trong PersistenceContext
+tạo ra Query thông qua EntityManager 
+thực thi query 
+nhận kết quả thông qua phương thức query interface 
-Bảng danh sách các phương thức của JPQL interface


2 Cretical Query  API

-Sử dụng để định nghĩa các query động thông qua các đối tượng xác định.
-Được định nghĩa bằng cách khởi tạo các đối tượng của java
-Nó tương tác tốt với ngôn ngữ java hơn là JPQL query và hoạt động cơ sở dữ liệu qua các đối tượng
-Các truy vấn dựa trên giản đồ trìu tượng của các thực thể ,các mối quan hệ của chúng và các đối tượng được nhúng.
-VD Cretical Query API

 -Các  bước để thực hiện Cretical Query API
+Đối tượng CriteriaBulier được  tạo ra bởi EntityManager 
+CriteriaBulier create ra đối tượng CriteriaQuery để tạo select query 
+from method định nghĩa đối tượng mà sẽ để truy vấn
+Mỗi mệnh đề query định nghĩa như một method vd :method where để định nghĩa các diều kiện

2 So sánh 

-Câu hỏi đặt ra là sao có nhiều kiểu query và chúng ta sẽ biết sử dụng cái query nào vào khi nào
+thông thường chúng ta sẽ sử dụng những JPQL với những query tĩnh it biến động thì nó sẽ nhanh hơn rất nhiều so với Cretical API,và chúng ta sẽ sử dụng Cretical API cho những dữ liệu biến đổi liên tục như những parameter được truyền vào.Vì Cretical nó dựa vào cái khỏi tạo hay gọi cái instance đã được khởi tạo trước đó
để truy vấn trên cái đối tượng đó luôn
 -Cretical thì nó cũng dễ debugg hơn là trên query String của JPQL





Thứ Năm, 22 tháng 12, 2016

Asynchronous Servlet Communication

1:Giới thiệu.
-kiến trúc của Servlet dựa trên Multithreaded model. 
-Web container create Servlet threads trong quá trình client request.
-mỗi 1 client request và respon trở lại là một luồng riêng biệt.
-Mỗi 1 xử lí của client sẽ không được xử lý trong một thời gian nào nó và phải chờ vì
 +Servlet có thể mất 1 thời gian rât lâu để thực hiện như gọi đến database thực hiện query và gọi từ xa tới Web service 
 +Servlet phải chờ cho 1 vài  dependent event  trong quá trình cho respon generation 
*quá trình xử lý Asynchronous trong servlet 
-Client request tới servlet sẽ bị chặn bởi Filter dể xử lí 1 vài yêu cầu cho servlet 
-Sau đó servlet nhận request và xử lý chúng.
-Servlet request cho kết nối bên ngoài hặc xử lí dữ liệu.VD JDBC connection
-Sau dó servlet trả lại cho pool mà không sinh ra respon.(Vì VD hệ thống cho phép xử lý 1000 request mà bây h lại có 1001 request thì request  thứ 1001 sẽ được nhảy vào một cái poll khác để chứa.tránh chậm server )
-Sau đó JDBC connection sẽ truy xuất tới  asynchronous context để xử lý request trong background thread. 
-Khi JDBC đã sắn sàng  asynchronous context object  có connection object và thông báo servlet container cho Servlet thread xử lí connection 
2:AsyncContext
-là class cung cấp các phương thức có thể sử dụng được của AsyncContext nằm trong phương thức servive của Servlet 

JSP

1:Giới thiệu

-JSP là 1 công nghệ để phát triển web cung cấp cung cấp server-side cho Aplication
-Nó thực hiện như một vai trò tương tác với giao diện người dùng của java web 

2:Tại sao chúng ta sử dụng jsp

-JavaServer Pages thường phục vụ mục đích tương tự như các chương trình được thực hiện bằng cách sử dụng Common Gateway Interface(CGI).Nhưng jsp cung cấp một số lợi thế so với CGI
+hiệu suất tốt hơn đáng kể vì jsp cho phép nhúng động yếu tố trong trang html riêng của mình thay vì có 1 file CGI riêng biệt
 +JSP luôn được biên dịch trước khi nó được xử lý bởi các máy chủ không giống như CGI/Perl đòi hỏi máy chủ để tải một thông dịch viên và kịch bản mục tiêu mỗi khi trang web được yêu cầu.
 +JSP đươc xây dựng trên API Servlet,Do đó như Servlet jsp cũng có quyền truy cập vào tất cả các API java doanh nghiệp mạnh mẽ bao gồm JDBC,JNDI,EJB..
+kết hợp Servlet xử lí logic của bài toán theo mô hình MVC

3:Vòng đời JSP

-Đầu tiên file jsp translater thanh file servlet file .Sau đó file servlet sẽ được compiler thanh class file.Sau đó gọi đến phuwong thức init để khởi tạo và được gọi bởi jsp container.Sau đó phuwong thức service sẽ được nhận để gọi các phương thức doX() để xứ ly. và sau đó respon về lại cho người dùng. 

3:Scripting element 

*Scriptlet tag
-Trong Jsp,java code có thể viết trong jsp bởi sử dụng scriptlet tag.VD
-Chúng ta có thể viết bất cứ cái gì code java mà chúng ta muôn vào trong dấu <% %>
*expression tag
-Dùng để hiển thị kết quả của java code ra bên ngoài màn hình client bằng phương pháp:  <%="welcome jsp" %>
*Declaration Tag
-Dùng để gọi các trường hay các phương thức bên ngoài phương thức Service() của Servlet.

4:JSP Implicit Object

-chúng ta có 9 implicit Object và được tạo bởi web container
-Những đối tượng này chúng ta có thể gọi trực tiếp trên trang jsp luôn mà không cần khởi tạo.


5:Scripting element 

*JSP page directive 
-Có thể sử dụng để import những Class từ packges.,set ngôn ngữ cho page,set content type cho page
-Định nghĩa và thao tác một số thuộc tính ảnh hưởng tới toàn bộ trang.
-Nó được viết vào đầu của trang jsp
*Một vài atribute của page directive.
-Import:import cho những class hay interface mà chúng ta sử dụng
-contentType:định nghĩa MiME,xét kiểu http respon default "text/html"
-extends:định nghĩa lớp cha mà nó thừa kế bởi servlet đc tạo.Nó rât it khi được sử dụng.
-info:Sét thông tin của trang jsp page.
-bufer:nó sét size kilobyte mà xử lí out put mà jsp tạo ra.mặc định là 8kb;
-language:sét ngon ngữ sử dụng jsp page
-errpage:định nghĩa trang bị lỗi,nếu exception xảy ra trang hiện tai thì nó sẽ ném tới trang đó.
-Iserrpage:nó sẽ khai báo rằng trang hiện tai đang bị lỗi.

*JSP inclue directive 

-Nó sẽ lấy nội dung của trang khác đặt vào trang bạn muốn nó thêm vào.
VD bạn có 1 trang jsp a và một trang jsp b.Bạn muốn trang jsp a có tât cả nội dung của trang jspb và thêm một số html nữa.bạn có thể viết trên trang jspa
<jsp:inclue page="jspb.jsp"></jsp:inclue>

*JSP taglib directive 

-Nó giúp cho jsp tạo ra những custom tag.Nó được định nghĩa bởi user.
-







Thứ Bảy, 17 tháng 12, 2016

Filter And Annotation

1:Filter
-Nó như một bộ lọc của Servlet.Muốn request đến được servlet thì ó phải đi qua bộ lọc này.Nó sẽ xử lí những cái thứ cần thiết trước khi tới servlet,và lọc lại những kết quả từ respon trước khi trả về cho client.

*Một số tính năng mà filter cung cấp cho web aplication như.
 -tối ưu hóa thời gian send respon về cho client
-Nén nội dung file từ Web Server về cho user trên internet.
-chuyển đổi image,text,video theo format yêu cầu.
-Tối ưu hóa băng thông trên network
-tăng độ an toàn của trang web 

-Fitter change:chúng ta có thể lọc qua nhiều filter như từ filter 1 chúng ta lọc tới filter2 rồi filter3 hoặc nhiều hơn rồi đến servlet xử lý.Nhưng nếu lọc qua nhiều filter như vậy tốc độ thời gian mà từ request dến servlet và từ servlet respon về cho client là rât chậm.
*Một vài thể loại filter như.
*Filter API
-Filter interface,FilterConfig interface,Filterchain interface đều nằm trong gói javax.Servlet.
*Filter interface
-Nó cung cấp các phuwong thức cho vòng đời của filter.
  +init():Nó được gọi bởi servlet container dùng để khởi tạo filter.Nó chỉ được gọi 1 lần duy nhất.như    init() của servlet .
   +doFilter():xử lí các request và respon theo yêu cầu và cũng được gọi bởi servlet container.
   +destroy():gọi bởi servlet container khi mà không còn yêu cầu xử lí nào tới nữa.Và nó cũng chỉ được gọi 1 lần duy nhất.
*Configuring filter
-dùng để cấu hình filter bên trong file web.xml
-Được định nghĩa bởi thẻ <filter> </filter> và một số các element định nghĩa bên trong như:
<display-name> 
<description> :Miêu tả cho filter
<filter-name> :Tên của filter
 <filter-class> :nằm trong file packages nào. 
<init-param> :khởi tạo tham số cho filter.
*filter Mapping
  -<filter-name>:Miêu tả tên của filter 
 -<servlet-name>:tên của setvlet mà sở hữu request và respon sẽ modified by the filter.
<url-patern>:URL mà để map tới filter.

-phương thức init() khởi tạo filter.Nó sẽ nhận đối tượng FilterConfig được tạo bởi Web container.
-Một số phương thức của FilterConfig.
 +getFilterName():trả về tên của filter được dịnh nghĩa trong web.xml
 +getInitParameter(String name):trả về value thông qua name của parameter.
+getServletContext():trả về đối tượng Servlet Context sử dụng gọi giao tiếp Servlet container và filter.

2:Annotation
-phát triển từ javaEE 5.0. sử dụng để cấu hình server components.
-Nó được gắn vào các yếu tố bên trong code để miêu tả về nó.
-Đơn giản hóa công việc của nhà phát triển bằng cách giảm số lượng mã được viết bằng cách di chuyển metadata information vào trong source code của nó.
-Có thể add  program element như classes,methods,fields,parameters, local variable ,packages.
-Nó không bao giờ được thực thi.
-Nó là quá trình khi code chứa nó sẽ được biên dịch hoặc thông dịch bởi compilers, deployment tools.
*Những thuận lợi sử dụng annotation
 -dễ dàng sử dung.
-Có tính di động cao.
-Type Checking:
-hướng dẫn cho trình biên dịch,
-chỉ dẫn trong lúc biên dịch(Complier-time)
-chỉ dẫn trong lúc chạy(Runtime)
-Runtime Reflection:lưu trong class file ,truy xuat luc runtime
*Annotation Servlet 
-name:Chỉ định tên của servlet
-description:Miêu tả về servlet
-displayname:hiển thị tên của servlet.
-urlPatterns:url để truy xuất đến servlet
-asyncSupported:support asynchronous cho quá trình xử lý.Value có thể là true hoặc false.
-initParams:truy xuất tới parameter trong servlet config .
-smallIcon:set kick cỡ image nhỏ cho servlet   
-largeIcon:set kick cỡ image lớn cho servlet   
*Listener Annotation
-Cung cấp những cái kiểu khác nhau của listener interface để xử lý các event khác nhau.
-Để khai báo listener class,the @WebListener annotation có thể được sử dụng
 +Một số @WebListener annotation register 
  -Context Listener:
  -Context Attribute Listener
  -Servlet Request Listener
  -Servlet Request Attribute Listener
  -Http Sesion Listener 
  Http Sesion Attribute Listener 



















Thứ Tư, 14 tháng 12, 2016

Session Tracking
1:Protocol
-Nó là cài đặt những quy tắc,cú pháp ngữ nghĩa giao tiếp máy tính.
-Protocal nói nó là stateless khi:
+ cài đặt cấu hình,giao dịch và thông tin không được theo dõi bởi protocal
+các kết nối cuối cùng chỉ có duy nhất 1 lần giao dịch.
-Http ám chỉ như là một Stateless Protocol vì
+ http client mở kết nối và send request message tới HttpServer  và sau đó server gửi trả dữ liệu về cho client và khi trả về xong thì server sẽ đóng kết nối và không lưu bât kì thông tin gì.
2:Sesion Trackinh
-Nó có thể cho phép Web aplication duy trì thông tin tới server miễn là customer không log out ra khỏi trang web.
-Nó sẽ theo dõi client Identity  và thông tin yêu cầu khác thông qua sesion.
* Những kĩ thuật của sesion tracking.
 -URL Writing 
-Hidden field 
-Cookie
*URL Writing. 
 - Disadvantages 
+Nó chỉ có thể được send thông qua hypelink trên Web pages.
+Nó không thể lưu được  nhiều thông tin vì nó bị giới hạn bởi độ dài của URL.
+Độ bảo mật không được cao về an toàn dữ liệu.  

Thứ Hai, 12 tháng 12, 2016

Servlet Life cycle,Gia phả

1:Servlet API
-Tất cả những class liên quan để phát triển và quản lí servlet đều được cung cấp bởi 2 gói đó là:
 -javax.servlet 
   +Nó cung cấp những class và interface chung dùng để kế thừa và implement hầu hết tất cả servlet 
   +Nó cung cấp các frameword 
   +Nó định nghĩa các phương thức cho vòng đời servlet 
    +hầu hết các servlet đều implement trực tiếp hoặc gián tiếp interface javax.servlet.Servlet
-javax.servlet.Http 
 +Nó chứa những class hay interface sử dụng cho phát triển servlet mà làm việc với http protocol.
*Sơ đồ gia phả servlet
javax.servlet chứa abstract class là genericservlet 
+genericservlet extends object và implement 3 interface
-servlet interface:định nghĩa các phương thức vòng đời servlet
-servletconfig interface:định nghĩa các phương thức được sử dụng bởi servletcontainer để đưa thông tin tới cho Servlet intance trong khi nó được khởi tạo.
-Serializable interface:dùng đẻ serialize trạng thái của object.
2:Vòng đời servlet 
-Toàn bộ vòng đời của servlet được quản lí bởi servlet container
1:Instantiation :Servlet container tạo ra đối tượng servlet 
2:Initialization:Servlet container gọi phương thức init() để bắt đầu vong đời servlet 
3:service --doX():quá trình xử lí request lên server và từ server respon tới client
4:destroy():servlet container destroy servlet trong trường hợp này nhưng chưa được giải phóng bộ nhớ.
5:servlet container giải phóng toàn bộ bộ nhớ của servlet chiếm.
3:Kiến trúc Servlet
-Servlet container chịu trách nhiệm xử lý servlet dựa trên nguyên tắc đa luồng.mỗi 1 request được xử lí một luồng riêng biệt
-Web browser sends Http request tới server thông qua URL.Khi nhận request Web engine nhìn trong web.xml để tìm và kết nối xem có URL servlet đã được đăng kí.Khi tìm thấy được rồi.Web engine sẽ chuyển sang cho Servlet container để chuẩn bị khởi tạo đối tượng servlet.Servlet đó sẽ được chuyển lên vị trí đầu tiên của servlet container,load servlet và tạo bộ nhớ servlet đó.Và sau đó Servlet được load bởi servlet container,khởi tạo đối tượng và xử lí request.
4:Servlet Interface
*phuong thuc nằm trong servlet interface là
+getparameter:trả về giá trị được gửi bởi request information 
+getContentLength():trả về độ dài của nọi dung trong mảng và trả về -1 nếu độ dài không biêt.
+getInputstream():trả về binary data.request bởi client và được lưu trong ServletInputStream
+getServerName():trả về tên server mà client request.
5:HttpServlet interface
-It định nghĩa đối tương HttpServerRequest
-phương thức định nghĩa bởi HttpServerRequest Interface
+getCookies():trả về một mảng các cookei mà từ server gửi về client.
+getHeader ():trả về một value của request header như String
+getMethod():yêu cầu xử lí với phuwong thức nào.
+getPathInfor:trả về đường dẫn thông tin truy xuât URL của client  gửi khi nó yêu cầu servlet .
+getAuthtype:trả về tên của một cơ chế quyền nào đó để bảo vệ servlet.
6:Respon  interface
-Định nghĩa các phương thức cho phép nhận output stream để send data tới client,quyêt định về nội dung của nó.
*Phương thức định nghĩa servlet respon 
-setContenttype():trả về kiểu dữ liệu mà respon tới client.
-getWriter():Dùng để viết dữ liệu bên ngoài hiển thị client.
-getOutputStream:trả về ServletOutStram dùng để viết binary data trong respon
-getContenttype():trả về kiểu nội dung được dùng cho phần mime trong chính cái respon này.
7:HttpRespon  interface
-HttpServletResponse interfec kế thừa từ ServletREspon interface và cung cấp thông tin cho HttpServlet 

*phương thức 
-addCookie():thêm một ccokei nào đó và gửi tới cho client.
-addHeader():sử dụng thêm tên và value tới responheader.
-containsHeader():trả về true nếu respon header có giá trị.
8:Servlet Context
-cung cấp truy xuất đến các tài nguyên,mà dùng chung cho tất cả các servlet trong ứng dụng.
-cung cấp môi trường chạy servlet 
-servlet chạy cùng trong 1 máy chủ đôi khí phải chia sẻ tài nguyên  chia sẻ tài nguyên như jsp.tep ten va các servlet khác.

mot so phuong thuc cua serverletContext interface.
+getInitParameter():lay ra gia tri param value thong  qua name trong web.xml.
+setAtribute():gán chia sẻ tài nguyên.tới file khác.
+getAtribute():nhận về atribute thong qua tên xác định.
+getInitParameter:trả về tên của context khởi tạo parameter.
+removeAtribute:dùng để xóa bỏ một atribute. 











Thứ Năm, 8 tháng 12, 2016

                AsyncTask ,volley ,Retrofit 

1,AsyncTask

*AsyncTask là gì và tại sao phải dùng AsyncTask

-Asynctask là một lớp trìu tượng được cung cấp bởi android giúp chúng ta sử dụng các thread UI.Lớp này cho phép chúng ta thực hiện các hoạt động dài và hiển thị kết quả của nó trên thread UI mà không cần thao tác
-trong android đôi khi chúng ta thực hiện một số operation mà thời  gian từ lúc gửi request đến lúc nhận response có thể hơi lâu như network operation:download anh ,down phim...database query ...lấy thông tin danh sách ứng dụng trong hệ điều hành,gửi file bluetooh.Người ta gọi chúng là background operations.
-Main Thread(dùng để update giao diện) thì thực hiện công việc theo cơ chế hàng đợi FIFO,do đó nếu thực hiện background operation bằng main thread sẽ dẫn tới hiện tượng đơ treo màn hình do công việc sau muốn chạy phải đợi công việc trước được thực hiện xong.Do đó google làm ra AsyncTask để thực hiện background operation
*Cơ chế hoạt động của AsyncTask
Trong AsyncTask<Params,Progress,Result> có 3 đối số là Generic Type: 
Params:là giá trị biến được truyền vào khi gọi thực thi tiến trình và nó sẽ được truyền vào doInBackground
Progress:Là giá trị biến dùng để update giao diện lúc tiến trình thực thi biến này sẽ được truyền vào hàm onProgessUpdate
Result:là biến dùng để lưu trữ kết quả trả về sau khi tiến trình được thực thi xong
-những đối số nào không sử dụng trong quá trình thực thi thì ta thay bằng Void
*thông thường 1 AsyncTask có 4 hàm:
onPreExcute():tự động được gọi đầu tiên khi tiến trình được kick hoạt.
doInBackground:Được thực thi trong quá trình chạy nền ,thông qua hàm này đẻ ta gọi hàm onProgressUpdate để cập nhật giao diện(Gọi lệnh publishProgress).ta không thể cập nhật giao diên trong hàm doInBackground();
onProgressUpdate:dùng để cập nhật giao diện luc runtime.
onPostExecute():sau khi tiến trình kêt thúc hàm này tự động xảy ra.Ta có thể lấy được kết quả trả về tại đây.
-Trong 4 hàm trên thì hàm doInbackground() băt buộc phải tồn tại.còn các hàm khác có thể khuyêt.
-Đối với AsyncTask thì ta cần tạo ra 1 lớp kế thừa từ AsyncTask.sau đó từ mainactivity   ta goi hàm execute() để thực hiện. 

2,Volley

* Volley là một thư viện mạng(library network ) được google giới thiệu năm 2013 để quản lí các request network và lưu trữ những respon trên các ứng dụng android mà không cần các developer viết nhiều code như trước nữa.Các tools bên trong Volloy cho phép cùng một lúc thực hiện nhiều request trên các thread(Luồng xử lí dữ liệu ) khác nhau với mức độ ưu tiên khác nhau.Tất cả các request được thực hiện và lưu trữ trong bộ nhớ cache giúp cho việc reload lại dữ liệu nhanh hơn ...nhưng lại không pahir là một ý tưởng tôt cho việc sử dụng các dữ liệu lớn như music hay movies.

*Những Class request có trong thư viện Volley này bao gồm:JsonObjectRequest,JsonArrayRequest,String request,ImageLoader kết nối với các contructor đi kèm như POST,GET,PUT,COPY.
*

3,Retrofit

Retrofit là một rest Client cho android và java và được tạo bởi Square.Họ làm cho việc nhận và tải lên Json(hoặc dữ liệu khác ) một cách dễ dàng tới Webservice dựa trên mô hình REST.

Các gói trang bị thêm cho phép sử dụng các bộ chuyển đổi sau đây:
-Gson:com.squareup.retrofit:converter-gson
-Jackson:com.squareup.retrofit:converter-jackson
-Moshi:com.squareup.retrofit:converter-moshi 
-Protobuf:com.squareup.retrofit:converter-protobuf
-Wire:com.squareup.retrofit:converter-wire 
-Simple XML:com.squareup.retrofit:converter-simplexml
*Để làm việc với retrofit bạn cần triển khai 3 lớp cơ bản:
1Model class to map Json Data 
2 Interfaces để định nghĩa API cho Webservice
3 Retrofit.Buider lớp định ngĩa url Endpoint cho các hoạt động liên quan tới HTTP


4:Bai Tap Ve nha

file index.

file result

servlet dang nhap

servlet welcom