JSP và Servlets JSP là cái chi JSP hiểu đơn giản là những dòng code java được ghi vào HTML text 1 JSP Fundamentals JSP Element là những element trong HTML chứa code java JSP Expression Công dụng thực hiện một đoạn biểu thức hoặc phương thức trong java và tự động chuyển sang thành HTML, chỉ chứa được 1 dòng code Syntax JSP Scriptles Công dụng thực hiện một dòng hoặc một khối code java nhưng ko tự động chuyển sang thành HTML được, nếu muốn chuyển phải dùng hàm built in out prin.
Trang 1JSP và Servlets JSP là cái chi
JSP hiểu đơn giản là những dòng code java được ghi vào HTML text
1 JSP Fundamentals
*JSP Element: là những element trong HTML chứa code java
- JSP Expression:
o Công dụng: thực hiện một đoạn biểu thức hoặc phương thức trong java và tự động chuyển sang thành HTML, chỉ chứa được 1 dòng code
o Syntax: <%= //some code %>
- JSP Scriptles:
o Công dụng: thực hiện một dòng hoặc một khối code java nhưng ko tự động chuyển sang thành HTML được, nếu muốn chuyển phải dùng hàm built-in out.println
o Syntax: <% //some code %>
- JSP Declarations:
o Công dụng: Khai báo một phương thức trong java
o Syntax: <%! //some methods %>
o Lưu ý: dùng JSP Expression hoặc JSP Scriptles để gọi tới phương thức được khai báo
*Gọi class Java bằng JSP: trong thực tế ta hạn chế viết những dòng JSP Elements mà thay vào đó có
thể viết class java bên ngoài mà sử dụng
- Cách dùng :
o Đi từ package đến class rồi đến methods
o Import package vào với JSP Directives Ví dụ <%@ page import=”tên_package.*” %>
*Include file vào JSP
- Ta có thể include file HTML hoặc là file jsp khác bằng câu lệnh:
<jsp:include page=”tên_file” />
*Một số hàm built –in trong JSP:
- Request : dùng để gửi yêu cầu đến client để nhận về thông tin
- Response: dùng để phản hồi lại yêu cầu từ client
- Out: dùng để chuyển nội dung code java thành HTML
- Session: chứa thông tin riêng về một user
- Application: chứa thông tin chia sẽ từ nhiều user
2 Reading HTML Form Data With JSP
- Để đọc dử liệu từ form HTML thì đầu tiên attribute action của form tag phải chỉ tới file jsp sẽ thực hiện thao tác đọc, khi nhấn submit thì các dữ liệu trong input của form sẽ được gửi về cho file trong attribute action
- Ta dùng câu lệnh:
o request.getParameter(“name của input”) để lấy một giá trị từ input có một giá trị hoặc có thể dùng short hand ${param.name_input}
o request.getParameterValues(“name của input”) để lấy tất cả giá trị của input chứa nhiều giá trị, thường được chứa vào mảng
Trang 2Lưu ý: với syntax shorthand thì không cần đặt tron jsp elements, muốn lấy tất cả giá trị trong input thì phải chứ nó vào một chuỗi ví dụ:
3 State Management in JSP
A Tracking actions ngời dùng bằng session
- Như đã nói ở trên session là phần riêng biệt, duy nhất của mỗi user, Ví dụ : một cái giỏ hàng thì giỏ hàng của mỗi người đều khác nhau -> giỏ hàng là một session
- Cơ chế của session với tomcat: Tomcat nó sẽ luôn dữ liệu session của mỗi người dùng, khi người dùng truy cập thì dựa vào session của mỗi người mà nhận diện được người đó -> nói
dễ hiểu tomcat và trình duyệt sẽ lưu session cũa mỗi user tự động
- Với mỗi trình quản lý sever khác nhau thì sau một khoảng thời gian cụ thể nó sẽ tự động restart session của người dùng (với tomcat là mỗi 5phuts)
*Một số phương thức của session:
- Thêm dữ liệu vào session:
o Syntax: session.setAtribute (String key , Object value);
o Trong đó:
key: là tên người lập trình đặt để có thể truy cập đến
value: là đối tượng được đưa vào session
- Lấy dữ liệu từ session
o Syntax: session.getAtribute(String key);
o Trong đó: muốn lấy ra giá trị nào thì nhập key của giá trị đó
o Lưu ý: khi lưu giá trị lấy từ session vào một collection thì ta phải ép kiểu thành collection đó, VD:
- Lấy id :
o Syntax: session.getId();
- Invalidate:
o Khi bạn muốn hủy bỏ session ngay lập tức không chờ đến thời gian timeout
o Syntax: session.invalidate()
- Configure Session Timeout
o Khi bạn muốn chỉnh sửa thời gian timeout của server
Trang 3o Syntax: session.setMaxInactiveInterval(milisecond)
B Cookies
1 Tổng quan về Cookies
- Cookie là gì : cookies được dùng để chứa thông tin về người dùng giúp web nhận biết được người dùng này là ai, dữ liệu trong cookie được lưu dưới dạng cặp key(name) và value, một trang web có thể có nhiều cookie cho 1 người dùng để lưu nhiều thông tin khác nhau Trình duyệt chỉ gửi cookie mà trùng với tên domain của servẻr
2 Thao tác với Cookie trong jsp
- JSP cung cấp cho ta một class tên là Cookie để thao tác với cookie, class này được định nghĩa trong gói thư viện javax.servlet.http
- Cách để tạo một cookies:
o Syntax: Cookies theCookie = new Cookies(String name, String value)
o Trong đó:
theCookie :tên biến lưu trữ cookies
String name: là name (key) của cookie
String value: là value của name đó
- Gửi cookie cho browser
o Syntax: respone.addCookie(theCookie)
- Set life span cho cookies
o Syntax: theCookie.setMaxAge(second)
- Ví dụ sending cookie cho browser:
- Get cookies từ browser:
o Syntax: Cookie[] theCookies = request.getCookies();
o Vì một web có nhiều cookies cho mỗi người dùng nên khi get ta get tất cả nên phải lưu trữ nó trong 1 mảng các object Cookie
- Lây tên của Cookie:
o Syntax: theCookie.getName()
- Lấy value của Cookie:
o Syntax: theCookie.getValue();
Trang 4- Ví dụ đọc dữ liệu từ Cookies:
C Endcode URL Cookie
- Trong cookie có một số ký tự mà browser không đọc được ví dụ như khoảng trắng, dấu +
-… Lúc này ta sẽ mã hóa các ký tự đó thành code URL theo nguyên tắc của bảng mã UTF-8
- Trong java cung cấp cho chúng ta 2 class để encode (mã hóa) và decode (giải mã) URL :
o java.net.URLEncoder : để encode
o java.net.URLDecoder : để decode
- Cách để encode:
o Syntax: URLEncoder.encode(String s, "UTF-8");
o Trong đó :
String s : là chuỗi muốn mã hóa
UTF-8 : là bảng mã sẽ được dùng để mã hóa
o Vídụ:
- Cách để decode:
o Syntax: URLDecoder.decode(String s, "UTF-8");
o Trong đó:
String s : là chuỗi muốn giải mã
UTF-8 : là bảng mã sẽ được dùng để mã hóa
o Vídụ:
Trang 53 JSP Standard Tag Library (JSTL)
- Tag JSP: Trong thực tế ta luôn hạn chế dùng quá nhiều code scriptles, để giúp hạn chế điều
đó ta dùng tag jsp
- Lợi ích của tag JSP:
o Hạn chế tối đa số lượng code scriptles trong jsp
o Giữ file JSP clean
o Có thể tái sử dụng cho nhiều file, tránh được viết hàng ngành dòng code lặp đi lặp lại
- Có 2 loại tag :
o Custome Tag : Tag do người dùng tự định nghĩa và sử dụng
o JSP Standard Tag Library (JSTL): là thư viện thẻ chuẩn do JSP cung cấp
- JSTL có 5 tag chính : Core Tag, Functions Tag, I18 Tag, XML Tag, SQL Tag
- Để sử dụng JSTL ta phải copy file jar của thư viện vào thư mục lib của project
A Core Tag
- Core Tag là một trong 5 tag cơ bản của JSTL nó cung cấp 1 số thao tác xử lý đơn giản
- Để sử dụng core tag ta dùng câu lệnh:
*Một số tag phổ biến của core tags:
- <c:forEch></c:forEach> : để lặt các phần tử trong một thành phần của trang
o Ví dụ:
o Trong đó :
var : là biến lưu tạm như biến i trong vòng for
items : là thành phần được lặp qua
Lưu ý : vì items là thành phần của trang nên khi ta muốn lặp qua nó ta phải dùng lệnh pageContent.setAtribute(String name, value); để set nó thành một atribute của trang
- <c:if></c:if> : là một câu lệnh if đơn giản (trong core tag ko có else tag cho if)
o Ví dụ:
Trang 6o Trong đó test là điều kiện
- <c:choose></c:choose> : là một câu lệnh switch case trong core tag
o Ví dụ:
o Trong đó:
<c:when> : là từng case
<c:otherwise> : giống như defautl
- <c:set var=”ten_bien” value=”gia_tri” scope=”pham_vi”> : dùng để khai báo một biến
B Function Tag
- Có các hàm dựng sẳn dùng cho JSTL
- Syntax của Function Tag khá khác so với các tag khác, như 1 lời gọi hàm không cần cặp dấu
< />
- Để sử dụng function tag ta dùng câu lệnh:
*Một số hàm phổ biến trong function tag:
- fn:length(data) : cho ra độ dài của data truyền vào
- fn:startsWith(s) : test xem một String có bắt đầu bằng s hay ko
- fn:endWith(s) : test xem một String có kết thúc bằng s hay ko
- fn:join(array,c) : nối các thành phần của mảng thành 1 chuỗi với ký tự ngăn cách giữa các phần tử là c (tương tự trong JS)
Trang 7o Lưu ý : nếu muốn dùng join thì phải dùng split để biến chuỗi thành mảng
- fn:split(string,c) : tách một chuỗi ký tự thành một mảng các phần tử với c là điểm chung được cắt (tương tự JS)
o VD: fn:split(“,”) : khi nó tra tới dấu “,” thì sẽ cắt ra thành 1 phần tử Dấu “, ” sẽ được bỏ
C Formating Tag (I18N Tag)
- Là tag giúp ta định dạng dử liệu cho mỗi ngôn ngữ tránh hard code cho mỗi ngôn ngữ khác nhau
- Để sử dụng formating tag ta dùng câu lệnh:
*Một số hàm phổ biến trong Formarting Tag
- <fmt:setLocale value=”locale”/> : để set locale cho cả trang
- <fmt:setBundel basename=”url” /> : để set bundel hay nguồn dịch cho tất cả các hàm
<fmt:message/>
o Lưu ý : khi set bundle có thể chỉ cần đưa url đến tên cả file không cần nối thêm locale vì nếu ta có setLocale cho trang thì hàm sẽ tự động nối thêm locale cho file
- <fmt:message key = ”tên_key”> : để set 1 label khi ta đã setBundle thì hàm sẽ lấy giá trị từ url được set theo key của hàm, nó sẽ thay đổi tùy theo url được set
o Lưu ý : theo chuẩn đặt tên thì các key của file resources thì key có tên như sau : labels.name (với name là người dùng đặt)
*Một số lưu ý đặt tên file:
- Tên file resources với mỗi locale đều phải được đặt theo quy tắt sau: namefile_lanCode_countryCode.properties Với:
o Namefile : là tên file
o LanCode: là mã ngôn ngữ
o CountryCode : là mã quốc giá
o Ví dụ: mylabels_us_US.properties (ngôn ngữ là tiếng anh và quốc gia là US)
- Trong file resources thì gồm các cặp key và value, ví dụ:
o Labels.greet = Hello
4 Servlet Fundamentals
- Servlet là một class mở rộng của java giúp có thể chạy code java trên server, khởi tạo HTML gửi về cho client
Trang 8- Cơ chế của servlet : client sẽ gửi request về cho java class và java class sẽ gửi response về cho client file HTML
- Vòng đời của Servlet:
- Một vòng đời của servlet có 5 bước:
o Tải lớp Servlet vào bộ nhớ
o Tạo đối tượng lớp Servlet
o Gọi phương thức init() của Servlet
o Gọi phương thức service() của Servlet (trong service thì có phương thức doGet() và doPost() )
o Gọi phương thức destroy() của Servlet
- Ví dụ chương trình Hello World của Servlet
- Ta chỉ cần quan tâm đến phương thức doGet() và @WebServlet(“HelloServlet”) đầu class, trong đó:
o @WebServlet(“HelloServlet”) : là đường dẫn đến file class java
Trang 9o response.setContentType("text/html") : là lệnh dùng để set giá trị trả về cho client là file html Với setContentType là để nói cho client hiểu kiểu trả về là gì và text/html là quy chuẩn để khai báo kiểu trả về là file HTML
o PrintWriter out = response.getWriter() : là để tạo đối tượng out thuộc lớp PrintWriter để ghi nối vào file HTML trả về cho client
o out.print(“HTML content”) : ghi nội dung HTML vào file HTML
*Điểm khác nhau giữa Servlet và JSP
- Là một file class Java (1 file java)
- Nó sẽ generate ra HTMl và gửi về cho
client
- Là một file HTML với đuôi mở rộng là .jsp (1 file HTML tích hợp thêm code java)
- Bản thân nó chứa nd HTML tĩnh và JSP dùng để generate ra HTML bên trong file
- Khi nào dùng Servlet và JSP: trong thực tế ta dùng kết hợp cả 2, Servlet sẽ dùng để xử lý số liệu logic và JSP dùng để generate ra web
A Lấy data form
- Để lấy data form ta dùng câu lệnh : request.getParameter(“name”)
- Ví dụ:
- Trong form khi dùng servlet để xử lý dữ liệu thì ta khai báo thêm một thuộc tính là methods
= “GET/ POST”
- Phương thức GET sẽ gửi data cho phương thức doGet() của servlet còn POST sẽ gửi data cho phương thức doPost
*Điểm khác nhau giữa GET và POST
- Cả 2 đều là phương thức truyền dữ liệu của giao thức HTPP, khi người dùng nhấn submit thì data sẽ được mã hóa theo giản đồ gọi là URL encoding giản đồ này gồm các cặp name = value và các giá trị ngăn cách nhau bởi dấu &
o Ví dụ: name=value1&name1=value2&name2=value3
- GET sẽ gửi thông tin người dùng
thông qua đường dẫn trang Ví dụ : http://www.example.com/index.ht m?name=value1&name1=value1
- POST sẽ gửi thông tin dưới dạng HTML header, nó chính là phần body của HTML header
- Tính bảo mật cao
Trang 10- Kém bảo mật dễ lộ thông tin
- Hạn chế dữ liệu
- Có thể truyền bookmark hoặc email
URL
- Không thể gửi các dử liệu nhị phần,
hình ảnh
- Không giớ hạn dữ liệu
- Không truyền đc bookmark và email URL
- Có thể gửi dữ liệu nhị phân, hình ảnh
*Khi nào dùng GET khi nào dùng POST
- GET thường được dùng để lấy dữ liệu để truy xuất dữ liệu nhanh chóng
- POST được dùng để tạo dữ liệu vì nó bảo mật hơn
B Reading Servlet Parameter
- web.xml là gì : web.xml là file configure cho tất cả file servlet nó có thể chứa đường dẫn cho file servlet, hoặc chứa các Context Parameters File web.xml nằm trong thư mục WEB-INF
- Cách đoc Context Parameters từ file web.xml:
o Context Parameters từ file web.xml có dạng:
o Để đọc được ta cần phải khai báo đối tượng thuộc lớp ServletContext và cho nó bằng phương thức getServletContext()
Trong đó : ServletrContext là interface giúp Servlet giao tiếp với Servler Container,
getServletContext() sẽ trả về một ServletContext mà có session thuộc về nó (?)
o Cuối cùng dùng getInitParameter(“name”) : đẻ lấy parameter ứng với param-name
- Ví dụ :
Trang 115 Mô hình MVC (Model – View – Controller)
A Mô hình MVC
- Mô hình MVC (Model – View – Controller) : là một mô hình tổ chức phần mềm, như tên gọi
nó chia làm 3 phần mỗi phần đảm nhiệm 1 chức năng riêng biệt nhưng có kết nối với nhau
- Model : là trung tâm dữ liệu, nó có thể là database, một file ,… cung cấp dữ liệu cho controller (Database)
- Controller : sẽ nhận request từ client thực hiện các logic từ data của modal và trả về cho view (Servlet)
- View : sẽ nhận data từ Controller để hiển thị ra trang web trả về client (JSP)
*Luồng xử lý trong MVC:
- Client sẽ gửi request về cho Controller
- Controller gửi yêu cầu tới Model, và Model trả dử liệu về cho Controller để tiếp tục xử lý
- Controller nhận data từ Model và thực hiện các xử lý logic Sau khi hoàn tất Controller gửi Data cho View
- View sẽ nhận data và generate ra HTML respone về cho client
B Mô hình MVC trong Java
- Trong Java thì Servlet sẽ là Controller, JSP sẽ là View và một database bất kỳ sẽ là Model
- Một file Servlet trong mô hình MVC:
Trang 12- Một file JSP trong mô hình MVC:
- Phần sau đây ta sẽ giải thích kỹ hơn về các câu lệnh
1 request.setAttribute()
- Là câu lệnh sẽ set dữ liệu cho dòng request để file tiếp theo nhận dòng request có thể xử dụng dữ liệu này
2 RequestDispatcher
- RequestDispatcher là một interface giúp ta định nghĩa 1 object có thể nhận request từ clent
và gửi nó cho bất kỳ nguồn nào (HTML file, JSP file, file Servlet khác) khác
- Ví dụ khai báo object RequestDispatcher
- Trong đó :
o Phương thức request.getRequestDispatcher(“/view_student.jsp”) : sẽ tạo một đối tượng RequestDispatcher và nó chứa địa chỉ để ta có thể gửi request đến (ở đây là 1 file JSP)
- dispatcher.forward(request, response) : là câu lệnh để ta chuyển request đến file khác đã được định dạng từ trước, nó có 2 tham số chính là request và respone được chuyển đi
3 Tóm tắt cơ chế
- Servlet nó sẽ nhận dòng request, sau khi xử lý tính toán tạo ra data, ta đính data đó vào dòng request bằng câu lệnh request.setAttribute() để chuyển nó đi
- Để chuyển dòng request sang file khác trước hết ta cần khai báo đối tượng RequestDispatcher, trong phương thức getRequestDispatcher(“đường dẫn”) ta truyền tham
số là đường dẫn đến file muốn truyền request