SlideShare a Scribd company logo
1 of 54
Phạm Đức Đệ
ducde1606@gmail.com
Copyright 2018
Servlet nâng cao
1https://facebook.com/jtcpage
Nội dung
• Vòng đời của Servlet
• Một số giao diện của Servlet API
• Quản lý phiên làm việc trong ứng dụng
• Sử dụng Filter trong ứng dụng
• Servlet Listener
2https://facebook.com/jtcpage
Nội dung
• Vòng đời của Servlet
• Một số giao diện của Servlet API
• Quản lý phiên làm việc trong ứng dụng
• Sử dụng Filter trong ứng dụng
• Servlet Listener
3https://facebook.com/jtcpage
Vòng đời của servlet
• Vòng đời của servlet gồm:
• Nạp lớp servlet
• Khởi tạo thực thể servlet
• Gọi hàm init()
• Gọi hàm service() khi nhận request từ client
• Gọi hàm deploy() trước khi xóa thực thể
4https://facebook.com/jtcpage
Sơ đồ chuyển trạng thái servlet
• Một servlet được nạp khi:
• Có request từ client
• Hoặc cấu hình trong
web.xml thông qua thẻ
load-on-startup
https://facebook.com/jtcpage 5
Giao diện Servlet
• Thuộc javax.servlet.Servlet
• Mỗi servlet hiện thực giao diện servlet trực
tiếp hoặc gián tiếp lớp hiện thực giao diện
servlet
Phương thức Mô tả
void init(ServletConfig config) Để khai báo một số thông số cấu hình ứng dụng
ServletConfig getServletConfig() Lấy về đối tượng ServletConfig
String getServletInfo() Trả về tên của servlet-name
void service(ServletRequest request,
ServletResponse response)
Thực hiện nghiệp vụ tương ứng với request của client
void destroy() Dọn dẹp resource trước khi hủy thực thể servlet
https://facebook.com/jtcpage 6
Phương thức vòng đời
• Lifecycle callback method
• Phương thức init
• Servlet container sẽ gọi phương thức init sau khi khởi tạo thực thể của
servlet
• Phương thức service
• Khi Servlet container nhận request từ client và gọi hàm service thi thực
• Hỗ trợ xử lý đồng thời cho nhiều request
public void init(ServletConfig config) throws ServletException
public void service (ServletRequest req,ServletResponse resp)
throws ServletException
https://facebook.com/jtcpage 7
Phương thức vòng đời
• Phương thức destroy:
• Servlet container gọi phương thức này trước khi loại bỏ một thể hiện
servlet
• Phương thức này được gọi là chỉ sau khi tất cả luồng trong phương
thức service() của servlet đã thoát hoặc sau một thời gian chờ
public void destroy()
https://facebook.com/jtcpage 8
Lớp GenericServlet
• Thuộc package javax.servlet
• Là lớp trừu tượng (abstract class) và
hiện thực 2 giao diện Servlet,
ServletConfig
• cung cấp hiện thực cho tất cả các phương
thức ngoại trừ phương thức service()
• Lớp servlet thừa kế GenericServlet phải
hiện thực phương thức service
9https://facebook.com/jtcpage
Lớp HttpServlet
• Thuộc package javax.servlet.http
• Thừa kế lớp GenericServlet và
được dùng cho giao thức HTTP
• Phụ thuộc phương thức của
request thì thực thi hàm tương ứng
trong HttpServlet (phương thức
service sẽ kiểm tra và gọi phương
thức tương ứng với request trong
HttpServlet)
10https://facebook.com/jtcpage
HTTP
method
Phương thức của lớp
HttpServlet
GET doGet()
HEAD doHead()
POST doPost()
PUT doPut()
DELETE doDelete
OPTIONS doOptions()
TRACE doTrace()
Nội dung
• Vòng đời của Servlet
• Một số giao diện của Servlet API
• Quản lý phiên làm việc trong ứng dụng
• Sử dụng Filter trong ứng dụng
• Servlet Listener
11https://facebook.com/jtcpage
Giao diện ServletConfig
• Thuộc package javax.servlet
• Tham chiếu đến cấu hình định
nghĩa trong servlet:
• Thẻ init-param trong web.xml
• Hoặc thuộc tính initParams của
@WebServlet
12https://facebook.com/jtcpage
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>
vn.molu.servlet.LoginServlet
</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>welcome</param-value>
</init-param>
</servlet>
@WebServlet(
urlPatterns = "/uploadFiles",
initParams = @WebInitParam(name = "location", value = "D:/Uploads")
)
public class FileUploadServlet extends HttpServlet { }
Giao diện ServletConfig
• Lấy đối tượng ServletConfig
• Các phương thức:
13https://facebook.com/jtcpage
Phương thức Mô tả
String getInitParameter(String name) Lấy giá trị của đối số thông qua tên (trả về
null nếu đối số không tồn tại)
Enumeration getInitParameterNames() Trả về danh sách tên của đối số
ServletContext getServletContext() Trả về đối tượng ServletContext
String getServletName() Lấy tên của Servlet
ServletConfig servletConfig = getServletConfig(); // hoặc
public void init(ServletConfig config) { }
14https://facebook.com/jtcpage
<servlet>
<servlet-name>InitParamServlet</servlet-name>
<servlet-class>vn.molu.servlet.InitParamServlet</servlet-class>
<init-param>
<param-name>saveDir</param-name>
<param-value>D:/upload</param-value>
</init-param>
<init-param>
<param-name>fileType</param-name>
<param-value>png, gif, jpg</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>InitParamServlet</servlet-name>
<url-pattern>/servlet/initparam.html</url-pattern>
</servlet-mapping>
public class InitParamServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletConfig servletConfig = getServletConfig();
System.out.println(servletConfig.getInitParameter("saveDir"));
System.out.println(servletConfig.getInitParameter("fileType"));
}
}
15https://facebook.com/jtcpage
@WebServlet(urlPatterns = "/servlet/initparam2.html",
initParams = {
@WebInitParam (name = "saveDir", value = "D:/upload"),
@WebInitParam (name = "filetype", value = "jpg, png, gif")
})
public class InitParamServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
public InitParamServlet2() {
super();
}
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println(getInitParameter("saveDir"));
System.out.println(getInitParameter("filetype"));
}
}
Giao diện ServletContext
• Thuộc package javax.servlet
• ServletContext tham chiếu đến các đối số dùng chung giữa các
servlet thẻ context-param trong web.xml
<web-app>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/testdb</param-value>
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>welcome</param-value>
</context-param>
</web-app>
https://facebook.com/jtcpage 16
Giao diện ServletContext
• Lấy đối tượng ServletContext
• Một số phương thức:
Phương thức Mô tả
String getInitParameter(String name) Lấy giá trị thông qua tên đối số
Enumeration getInitParameterNames() Lấy danh sách tên của đối số
void setAttribute(String name,Object object) Tạo mới một biến attribute
Object getAttribute(String name) Lấy giá trị của một attribute
Enumeration getInitParameterNames() Lấy danh sách para-name của context-param
void removeAttribute(String name) Xóa một thuộc tính attribute
ServletContext application = getServletConfig().getServletContext(); // Hoặc
ServletContext application = getServletContext();
https://facebook.com/jtcpage 17
18https://facebook.com/jtcpage
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/servlet/contextparam.html")
public class ContextServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ContextServlet() {
}
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
ServletContext servletContext = getServletContext();
System.out.println(servletContext.getInitParameter("url"));
System.out.println(servletContext.getInitParameter("username"));
System.out.println(servletContext.getInitParameter("password"));
}
}
Giao diện ServletRequest
• Thuộc package javax.servlet và có 1 giao diện con
javax.servlet.http.HttpServletRequest
• Đối tượng đóng gói các thông tin của request tới
servlet:
• Content type
• Header
• Parameters
• Attributes
19https://facebook.com/jtcpage
Giao diện ServletRequest
Phương thức Mô tả
String getParameter(String name) Trả về giá trị của đối số thông qua tên
String[] getParameterValues(String
name)
Trả về danh sách giá trị của đối số (trường hợp đối số có
nhiều giá trị như checkbox, listbox
Enumeration getParameterNames() Lấy danh sách tên của đối số
int getContentLength() Trả về kích thước của dữ liệu từ client gửi lên, -1 nếu
không biết
String getCharacterEncoding() Trả về loại mã hóa chuỗi kí tự từ request gửi lên
String getContentType() Trả về loại file (MIME type)
ServletInputStream getInputStream() Trả về đối tượng ServletInputStream để đọc dữ liệu trong
body của request
abstract String getServerName() Trả về tên của server đang chạy ứng dụng web
int getServerPort() Trả về port của request được nhận
20https://facebook.com/jtcpage
21https://facebook.com/jtcpage
@WebServlet("/servlet/servlet-request.html")
public class ServletRequestDemo extends HttpServlet {
private static final long serialVersionUID = 1L;
public ServletRequestDemo() {
super();
}
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet name = " + request.getServerName());
System.out.println("Servlet port = " + request.getServerPort());
System.out.println("Character Encoding = " +
request.getCharacterEncoding());
System.out.println("Content type = " + request.getContentType());
System.out.println("Content length = " + request.getContentLength());
}
}
Giao diện ServletResponse
• Thuộc package javax.servlet và có 1 giao diện
con javax.servlet.http.HttpServletResponse
• Đối tượng định dạng và gửi đáp ứng lại
request của client
22https://facebook.com/jtcpage
Phương thức Mô tả
PrintWriter getWriter() Trả về đối tượng PrintWriter để gửi dữ liệu tới client
void setContentLength(int len) Thiết lập kích thước body của response
void setContentType(String type) Thiết lập content type của response tới client
Chuyển gọi giữa các servlet/ JSP
• Một servlet có thể chuyển gọi hoặc chuyển sang một tài nguyên
khác để response tới client
• Dùng phương thức sendRedirect của lớp HttpServletResponse
để chuyển sang tài nguyên khác
• Giữa servlet chuyển và tài nguyên chuyển không cùng một request
• Thông qua đối tượng RequestDispatcher từ HttpServletRequest
• Gọi phương thức forward, include của giao diện RequestDispatcher
23https://facebook.com/jtcpage
void sendRedirect(String location)
void forward(ServletRequest request, ServletResponse response)
void include(ServletRequest request, ServletResponse response)
24https://facebook.com/jtcpage
@WebServlet("/servlet/loginAction.html")
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter("username");
String password = request.getParameter("password");
if (userName != null && password != null &&
userName.trim().equalsIgnoreCase(password.trim())){
response.sendRedirect("home.jsp");
} else {
request.setAttribute("errorMsg", "Username or Password incorrect.
Please try again!");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
}
Nội dung
• Vòng đời của Servlet
• Một số giao diện của Servlet API
• Quản lý phiên làm việc trong ứng dụng
• Sử dụng Filter trong ứng dụng
• Servlet Listener
25https://facebook.com/jtcpage
Session là gì?
• Trạng thái kết nối
• Là thông tin trong quá trình tương tác giữa client – server
• Giao thức http không có trạng thái (stateless)  Không có cách để xác
định các yêu cầu gửi cùng một client hay không
• Tuy nhiên, một số trường hợp ứng dụng web cần lưu trữ trạng
thái của client
• Ứng dụng shopping cart
26https://facebook.com/jtcpage
Session là gì?
• Session giúp server lưu trữ trạng thái giao tiếp
của client
• Session bắt đầu khi client gửi yêu cầu đầu tiên
đến web application và kết thúc khi
• Client đóng kết nối
• hoặc quá thời gian tương tác (timeout expired)
• Cơ chế hoạt động của Session
• Server tạo ra ID cho lần yêu cầu đầu tiên và gửi cho
client
• Client gửi yêu cầu lại sẽ chứa ID đó và server dựa trên
ID để xác định trạng thái giao dịch của client đó
27https://facebook.com/jtcpage
Hiện thực session trong ứng dụng
• Mục đích quản lý session là để xác định được các lần request
khác nhau là của một client hay nhiều client,
• Và có nhiều cách để hiện thực session trong ứng dụng:
• User authentication
• HTML hidden field
• URL Rewriting
• HttpSession
• Cookies
28https://facebook.com/jtcpage
Giao diện HttpSession
• Thuộc package javax.servlet.http
• Servlet container tạo ra đối tượng HttpSession khi bắt đầu
phiên giao dịch
• Session ID được gửi và nhận giữa client – server
• Lấy đối tượng HttpSession thông đối tượng HttpServletRequest
và dùng phương thức getSession()
29https://facebook.com/jtcpage
public HttpSession getSession()
public HttpSession getSession(boolean create)
- Đối số create = true thì session mới tạo ra nếu request hiện tại chưa có session, và ngược lại
(create = false) thì không tạo session.
- Trường hợp phương thức getSession() không đối số mặc định là create = true
Giao diện HttpSession
• Một số phương thức thường dùng
30https://facebook.com/jtcpage
Phương thức Mô tả
String getId() Lấy session ID của phiên làm việc
long getCreationTime() Lấy thời gian bắt đầu tạo phiên làm việc
long getLastAccessedTime() Lấy thời điểm lần request gần nhất của phiên làm
viêc
Object getAttribute(String name) Lấy giá trị theo tên của thuộc tính trong session
void setAttribute(String name, Object value) Thiết lập giá trị thuộc tính
void removeAttribute(String name) Xóa bỏ thuộc tính trong session
void invalidate() Xóa session hiện tại
31https://facebook.com/jtcpage
@WebServlet("/servlet/loginAction.html")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("username");
String password = request.getParameter("password");
if (userName != null && password != null && userName.trim().equalsIgnoreCase(password.trim())){
HttpSession session = request.getSession();
session.setAttribute("username", userName);
response.sendRedirect("home.jsp");
} else {
request.setAttribute("errorMsg", "Username or Password incorrect. Please try again!");
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
}
Cookies
• Cookies là file text gồm các thông tin khác nhau và được lưu
trữ bên phía client
• Thông tin trong Cookies được lưu trên header trước khi gửi và nhận
giữa client – server
• Thông tin Cookies sẽ bị hủy sau thời gian timeout
32https://facebook.com/jtcpage
Browser Server
Request 1
Response 1 + Cookies
Request 2 + Cookies
Cookies
• Phân loại Cookies
• Non-persistent cookie: cookies tồn tại trong một phiên làm việc
• Cookie bị hủy khi đóng trình duyệt
• Persistent cookie: cookies tồn tại trong nhiều phiên làm việc
• Cookie bi hủy khi logout
• Sử dụng lớp javax.servlet.http.Cookie và dùng toán tử new để
tạo đối tượng Cookie
33https://facebook.com/jtcpage
Cookie cookie = new Cookie();
Cookie cookie = new Cookie("key","value");
Lớp Cookies
• Thiết lập Cookies ứng dụng
• Tạo đối tượng Cookies
• Thiết lập thời gian tồn tại cho Cookies dùng phương thức setMaxAge
• Nạp Cookies lên HTTP response header thông qua đối tượng
response
• Đọc Cookies từ client gửi lên thông qua đối tượng request
34https://facebook.com/jtcpage
Cookie cookie = new Cookie("key","value");
cookie.setMaxAge(miliseconds); // int miliseconds
response.addCookie(cookie);
request.getCookies();
35https://facebook.com/jtcpage
public class HelloForm extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Create cookies for first and last names.
Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
// Set expiry date after 24 Hrs for both the cookies.
firstName.setMaxAge(60*60*24);
lastName.setMaxAge(60*60*24);
// Add both the cookies in the response header.
response.addCookie( firstName );
response.addCookie( lastName );
}
}
public class ReadCookies extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = null;
Cookie[] cookies = null;
// Get an array of Cookies associated with this domain
cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
System.out.print("Name : " + cookie.getName( ) + ", ");
System.out.println("Value: " + cookie.getValue());
}
}
}
Nội dung
• Vòng đời của Servlet
• Một số giao diện của Servlet API
• Quản lý phiên làm việc trong ứng dụng
• Sử dụng Filter trong ứng dụng
• Servlet Listener
36https://facebook.com/jtcpage
Filter là gì?
• Là một kỹ thuật chặn thông điệp giữa điểm nguồn và đích hỗ trợ
xử lý trước (pre-processing) hoặc sau (post-processing)
• Trong ứng dụng Web:
• Filter chặn request để xử lý trước khi gửi đến server
• Filter chặn response để xử lý trước khi gửi đến client
37https://facebook.com/jtcpage
Client
Servlet Container
Servlet
Filter1
request
response
Client
Servlet Container
Servlet
Filter1
request
response
Filter2
Ứng dụng Filter
• Ghi log các đối số của request vào file log
• Xác thực (authentication) và quyền truy cập (authorization) tài
nguyên
• Định dạng dữ liệu (body và header) của request trước khi gửi
đến servlet
• Nén dữ liệu của response trước khi gửi lại client
• Bổ sung thông tin cookie, header cho response trước khi gửi lại
client
38https://facebook.com/jtcpage
Filter API
• Fitler API cung cấp 3 giao diện và thuộc
package javax.servlet:
• Filter
• FilterChain
• FilterConfig: tham chiếu đến đối số của filter
trong trong cấu hình:
• web.xml
• Annotation
39https://facebook.com/jtcpage
Giao diện Filter
• Là giao diện để tạo ra lớp Filter và hiện thiện các phương thức
vòng đời (lifecycle callback method)
• Phương thức init
• Phương thức doFilter
• Phương thức destroy
40https://facebook.com/jtcpage
void init(FilterConfig filterConfig)
void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
void destroy()
Giao diện FilterChain
• Đối tượng được dùng để thực hiện chuyển thực thi đến:
• Lớp filter kế tiếp
• Hoặc servlet đích
• Hoặc trả lại response cho client
• Có 1 phương thức doFilter để chuyển request hoặc response
41https://facebook.com/jtcpage
void doFilter(ServletRequest request, ServletResponse response)
Xây dụng ứng dụng Filter
• Tạo lớp Filter và:
• Hiện thực giao diện Filter
• Hoặc thừa kế lớp GenericFilter và hiện thực phương thức doFilter
• Hoặc thừa kế lớp HttpFilter
• Cấu hình hình Filter:
• Trong web.xml dùng thẻ filter và filter-mapping
• Dùng WebFilter annotation
42https://facebook.com/jtcpage
43https://facebook.com/jtcpage
public class CharacterEncodingFilter implements Filter {
private String encoding = "utf-8";
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("CharacterEncodingFilter: init method.");
if (fConfig.getInitParameter("encodingParam") == null){
encoding = fConfig.getInitParameter("encodingParam");
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("CharacterEncodingFilter: doFilter method.");
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
// pass the request along the filter chain
chain.doFilter(request, response);
}
public void destroy() {
System.out.println("CharacterEncodingFilter: destroy method.");
}
}
Cấu hình Filter trong web.xml
• Khai báo Filter trong web.xml dủng thẻ filter và filter-mapping
• DTD của thẻ filter
• DTD của thẻ filter-mapping
44https://facebook.com/jtcpage
filter(description?, display-name?, filter-class, filter-name, icon?,
init-param*)
filter-mapping(filter-name, servlet-name?, url-pattern?)
45https://facebook.com/jtcpage
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>JavaEETutorial</display-name>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>vn.molu.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encodingParam</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Cấu hình @WebFilter
46https://facebook.com/jtcpage
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebFilter {
String description() default "";
String displayName() default "";
WebInitParam[] initParams() default {};
String filterName() default "";
String smallIcon() default "";
String largeIcon() default "";
String[] servletNames() default {};
String[] value() default {};
String[] urlPatterns() default {};
DispatcherType[] dispatcherTypes() default {DispatcherType.REQUEST};
boolean asyncSupported() default false;
}
47https://facebook.com/jtcpage
@WebFilter("/*")
public class LoggingFilter extends GenericFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
System.out.println("LoggingFilter: doFilter method.");
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
System.out.println(request.getRequestURI());
Enumeration<String> parameters = request.getParameterNames();
while (parameters.hasMoreElements()){
String paraName = parameters.nextElement();
System.out.println(paraName + "=" + request.getParameter(paraName));
}
chain.doFilter(request, response);
}
}
Nội dung
• Vòng đời của Servlet
• Một số giao diện của Servlet API
• Quản lý phiên làm việc trong ứng dụng
• Sử dụng Filter trong ứng dụng
• Servlet Listener
48https://facebook.com/jtcpage
Event là gì?
• Event là một số các hành động diễn ra trong Servlet Container,
ví dụ:
• Quá trình deploy hoặc undeploy ứng dụng
• Sự khởi tạo và hủy một session
• Sự khởi tạo, xóa và cập nhật lại giá trị thuộc tính của session
• Sự khởi tạo hoặc hủy bỏ Servlet Context
• Được sử dụng để thực hiện các hành động
• Ghi log khi context được khởi tạo
• Hỗ trợ khi context bị hủy
• ...
49https://facebook.com/jtcpage
Servlet Listener API
• Servlet API cung cấp
• Các lớp Event quản lý sự kiện
• Giao diện Listener để hiện thực bộ lắng nghe
50https://facebook.com/jtcpage
Lớp Event:
ServletRequestEvent
ServletContextEvent
ServletRequestAttributeEvent
ServletContextAttributeEvent
HttpSessionEvent
HttpSessionBindingEvent
Giao diện Listener:
ServletRequestListener
ServletRequestAttributeListener
ServletContextListener
ServletContextAttributeListener
HttpSessionListener
HttpSessionAttributeListener
HttpSessionBindingListener
HttpSessionActivationListener
Hiện thực Listener
• Tạo bộ lắng nghe sự kiện và hiện thực một hoặc nhiều giao
diện Servlet Listener cung cấp
• Cấu hình bộ lắng nghe:
• Trong web.xml với thể listener và listener-class với DTD
• Dùng @WebListener annotation
51https://facebook.com/jtcpage
!DTD của listener(desciption?, display-name?, icon?, listener-class)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebListener {
String value() default "";
}
Ví dụ: Listener với web.xml
52https://facebook.com/jtcpage
public class MyServletContextListener implements ServletContextListener {
public MyServletContextListener() {
}
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("MyServletContextListener: contextDestroyed method.");
}
public void contextInitialized(ServletContextEvent sce) {
System.out.println("MyServletContextListener: contextInitialized method.");
}
}
<Web-app>
<listener>
<listener-class>vn.molu.listener.MyServletContextListener</listener-class>
</listener>
</Web-app>
Ví dụ: Listener với @WebListener
53https://facebook.com/jtcpage
@WebListener
public class MySessionAttributeListener implements HttpSessionAttributeListener {
public MySessionAttributeListener() {
}
public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("MySessionAttributeListener: attributeAdded method.");
}
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("MySessionAttributeListener: attributeRemoved method.");
}
public void attributeReplaced(HttpSessionBindingEvent se) {
System.out.println("MySessionAttributeListener: attributeReplaced method.");
}
}
KẾT CHƯƠNG
54https://facebook.com/jtcpage

More Related Content

What's hot

Hỏi tình hình bk tiny bktiny-hdsd
Hỏi tình hình bk tiny   bktiny-hdsdHỏi tình hình bk tiny   bktiny-hdsd
Hỏi tình hình bk tiny bktiny-hdsdVu Hung Nguyen
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderPhuoc Nguyen
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTMasterCode.vn
 

What's hot (6)

Apache+ q logs
Apache+ q logsApache+ q logs
Apache+ q logs
 
Hỏi tình hình bk tiny bktiny-hdsd
Hỏi tình hình bk tiny   bktiny-hdsdHỏi tình hình bk tiny   bktiny-hdsd
Hỏi tình hình bk tiny bktiny-hdsd
 
Web201 slide 3
Web201   slide 3Web201   slide 3
Web201 slide 3
 
Android Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content ProviderAndroid Nâng cao-Bài 4: Content Provider
Android Nâng cao-Bài 4: Content Provider
 
Web201 slide 2
Web201   slide 2Web201   slide 2
Web201 slide 2
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
 

Similar to JavaEE Basic_Chapter4: Servlet Nâng Cao

Lập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biếnLập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biếnSon Nguyen
 
Devwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork
 
Qtu.vn sql - chuong 7
Qtu.vn  sql - chuong 7Qtu.vn  sql - chuong 7
Qtu.vn sql - chuong 7Hoang le Minh
 
JavaEE Basic_Chapter3: Java Server Page
JavaEE Basic_Chapter3: Java Server PageJavaEE Basic_Chapter3: Java Server Page
JavaEE Basic_Chapter3: Java Server PagePhaolo Pham
 
E learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPE learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPelearninglabvn
 
Bài 3: Servlet - Lập Trình Mạng Nâng Cao
Bài 3: Servlet - Lập Trình Mạng Nâng CaoBài 3: Servlet - Lập Trình Mạng Nâng Cao
Bài 3: Servlet - Lập Trình Mạng Nâng CaoTuan Nguyen
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state managementhoangnguyentien
 
7 stl c++
7   stl c++7   stl c++
7 stl c++qnv95
 
Bai2 tong quan_mvc_0567
Bai2 tong quan_mvc_0567Bai2 tong quan_mvc_0567
Bai2 tong quan_mvc_0567Ham Chơi
 
Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Ham Chơi
 
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTBÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTMasterCode.vn
 

Similar to JavaEE Basic_Chapter4: Servlet Nâng Cao (20)

JSP and Database
JSP and DatabaseJSP and Database
JSP and Database
 
Ch06
Ch06Ch06
Ch06
 
Lập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biếnLập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biến
 
Asp
AspAsp
Asp
 
Ung dung web chuong 5
Ung dung web  chuong 5Ung dung web  chuong 5
Ung dung web chuong 5
 
Devwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP Laravel
 
Qtu.vn sql - chuong 7
Qtu.vn  sql - chuong 7Qtu.vn  sql - chuong 7
Qtu.vn sql - chuong 7
 
JavaEE Basic_Chapter3: Java Server Page
JavaEE Basic_Chapter3: Java Server PageJavaEE Basic_Chapter3: Java Server Page
JavaEE Basic_Chapter3: Java Server Page
 
E learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPE learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHP
 
Bai44-48.pptx
Bai44-48.pptxBai44-48.pptx
Bai44-48.pptx
 
Ung dun web chuong 2
Ung dun web  chuong 2Ung dun web  chuong 2
Ung dun web chuong 2
 
chuong_02.ppt
chuong_02.pptchuong_02.ppt
chuong_02.ppt
 
Bài 3: Servlet - Lập Trình Mạng Nâng Cao
Bài 3: Servlet - Lập Trình Mạng Nâng CaoBài 3: Servlet - Lập Trình Mạng Nâng Cao
Bài 3: Servlet - Lập Trình Mạng Nâng Cao
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
 
7 stl c++
7   stl c++7   stl c++
7 stl c++
 
Bai2 tong quan_mvc_0567
Bai2 tong quan_mvc_0567Bai2 tong quan_mvc_0567
Bai2 tong quan_mvc_0567
 
Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952
 
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTBÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
 
7 stl c++
7   stl c++7   stl c++
7 stl c++
 
Timer kernel linux
Timer kernel linuxTimer kernel linux
Timer kernel linux
 

More from Phaolo Pham

Java EE Basic Chapter7: JSTL
Java EE Basic Chapter7: JSTLJava EE Basic Chapter7: JSTL
Java EE Basic Chapter7: JSTLPhaolo Pham
 
Java EE Basic Chapter6: Expression Language
Java EE Basic Chapter6: Expression LanguageJava EE Basic Chapter6: Expression Language
Java EE Basic Chapter6: Expression LanguagePhaolo Pham
 
Java SE Basic Chapter8: Java Exception
Java SE Basic Chapter8: Java ExceptionJava SE Basic Chapter8: Java Exception
Java SE Basic Chapter8: Java ExceptionPhaolo Pham
 
Java SE Basic Chapter9: IO Stream
Java SE Basic Chapter9: IO StreamJava SE Basic Chapter9: IO Stream
Java SE Basic Chapter9: IO StreamPhaolo Pham
 
Java SE Advance Chapter3: Nested Class
Java SE Advance Chapter3: Nested ClassJava SE Advance Chapter3: Nested Class
Java SE Advance Chapter3: Nested ClassPhaolo Pham
 
Java SE Advance Chapter11: Internationlization & Localization
Java SE Advance Chapter11: Internationlization & LocalizationJava SE Advance Chapter11: Internationlization & Localization
Java SE Advance Chapter11: Internationlization & LocalizationPhaolo Pham
 
Java SE Advance Chapter10: Regular Expression
Java SE Advance Chapter10: Regular ExpressionJava SE Advance Chapter10: Regular Expression
Java SE Advance Chapter10: Regular ExpressionPhaolo Pham
 
Java SE Advance Chapter5: Java Generic
Java SE Advance Chapter5: Java GenericJava SE Advance Chapter5: Java Generic
Java SE Advance Chapter5: Java GenericPhaolo Pham
 
Java SE Advance Chapter4: Collections API
Java SE Advance Chapter4: Collections APIJava SE Advance Chapter4: Collections API
Java SE Advance Chapter4: Collections APIPhaolo Pham
 
Java SE Advance Chapter6: JDBC
Java SE Advance Chapter6: JDBCJava SE Advance Chapter6: JDBC
Java SE Advance Chapter6: JDBCPhaolo Pham
 
Java SE Advance Chapter2: OOP2
Java SE Advance Chapter2: OOP2Java SE Advance Chapter2: OOP2
Java SE Advance Chapter2: OOP2Phaolo Pham
 
Java SE Advance Chapter1: OOP1
Java SE Advance Chapter1: OOP1Java SE Advance Chapter1: OOP1
Java SE Advance Chapter1: OOP1Phaolo Pham
 
Java SE Basic chapter5: Array
Java SE Basic chapter5: ArrayJava SE Basic chapter5: Array
Java SE Basic chapter5: ArrayPhaolo Pham
 
Java SE Basic Chapter7: Xử Lý Chuỗi
Java SE Basic Chapter7: Xử Lý ChuỗiJava SE Basic Chapter7: Xử Lý Chuỗi
Java SE Basic Chapter7: Xử Lý ChuỗiPhaolo Pham
 
Java SE Advance Chapter9: Method Reference
Java SE Advance Chapter9: Method ReferenceJava SE Advance Chapter9: Method Reference
Java SE Advance Chapter9: Method ReferencePhaolo Pham
 
Java SE Advance Chapter8: Function Interface
Java SE Advance Chapter8: Function InterfaceJava SE Advance Chapter8: Function Interface
Java SE Advance Chapter8: Function InterfacePhaolo Pham
 
Java SE Advance chapter7: Lambda Expression
Java SE Advance chapter7: Lambda ExpressionJava SE Advance chapter7: Lambda Expression
Java SE Advance chapter7: Lambda ExpressionPhaolo Pham
 
Java SE Basic: Chapter1_Introduce
Java SE Basic: Chapter1_IntroduceJava SE Basic: Chapter1_Introduce
Java SE Basic: Chapter1_IntroducePhaolo Pham
 
Java SE Basic Chapter2: Variable
Java SE Basic Chapter2: VariableJava SE Basic Chapter2: Variable
Java SE Basic Chapter2: VariablePhaolo Pham
 
Java SE Basic Chapter1: Introduce
Java SE Basic Chapter1: IntroduceJava SE Basic Chapter1: Introduce
Java SE Basic Chapter1: IntroducePhaolo Pham
 

More from Phaolo Pham (20)

Java EE Basic Chapter7: JSTL
Java EE Basic Chapter7: JSTLJava EE Basic Chapter7: JSTL
Java EE Basic Chapter7: JSTL
 
Java EE Basic Chapter6: Expression Language
Java EE Basic Chapter6: Expression LanguageJava EE Basic Chapter6: Expression Language
Java EE Basic Chapter6: Expression Language
 
Java SE Basic Chapter8: Java Exception
Java SE Basic Chapter8: Java ExceptionJava SE Basic Chapter8: Java Exception
Java SE Basic Chapter8: Java Exception
 
Java SE Basic Chapter9: IO Stream
Java SE Basic Chapter9: IO StreamJava SE Basic Chapter9: IO Stream
Java SE Basic Chapter9: IO Stream
 
Java SE Advance Chapter3: Nested Class
Java SE Advance Chapter3: Nested ClassJava SE Advance Chapter3: Nested Class
Java SE Advance Chapter3: Nested Class
 
Java SE Advance Chapter11: Internationlization & Localization
Java SE Advance Chapter11: Internationlization & LocalizationJava SE Advance Chapter11: Internationlization & Localization
Java SE Advance Chapter11: Internationlization & Localization
 
Java SE Advance Chapter10: Regular Expression
Java SE Advance Chapter10: Regular ExpressionJava SE Advance Chapter10: Regular Expression
Java SE Advance Chapter10: Regular Expression
 
Java SE Advance Chapter5: Java Generic
Java SE Advance Chapter5: Java GenericJava SE Advance Chapter5: Java Generic
Java SE Advance Chapter5: Java Generic
 
Java SE Advance Chapter4: Collections API
Java SE Advance Chapter4: Collections APIJava SE Advance Chapter4: Collections API
Java SE Advance Chapter4: Collections API
 
Java SE Advance Chapter6: JDBC
Java SE Advance Chapter6: JDBCJava SE Advance Chapter6: JDBC
Java SE Advance Chapter6: JDBC
 
Java SE Advance Chapter2: OOP2
Java SE Advance Chapter2: OOP2Java SE Advance Chapter2: OOP2
Java SE Advance Chapter2: OOP2
 
Java SE Advance Chapter1: OOP1
Java SE Advance Chapter1: OOP1Java SE Advance Chapter1: OOP1
Java SE Advance Chapter1: OOP1
 
Java SE Basic chapter5: Array
Java SE Basic chapter5: ArrayJava SE Basic chapter5: Array
Java SE Basic chapter5: Array
 
Java SE Basic Chapter7: Xử Lý Chuỗi
Java SE Basic Chapter7: Xử Lý ChuỗiJava SE Basic Chapter7: Xử Lý Chuỗi
Java SE Basic Chapter7: Xử Lý Chuỗi
 
Java SE Advance Chapter9: Method Reference
Java SE Advance Chapter9: Method ReferenceJava SE Advance Chapter9: Method Reference
Java SE Advance Chapter9: Method Reference
 
Java SE Advance Chapter8: Function Interface
Java SE Advance Chapter8: Function InterfaceJava SE Advance Chapter8: Function Interface
Java SE Advance Chapter8: Function Interface
 
Java SE Advance chapter7: Lambda Expression
Java SE Advance chapter7: Lambda ExpressionJava SE Advance chapter7: Lambda Expression
Java SE Advance chapter7: Lambda Expression
 
Java SE Basic: Chapter1_Introduce
Java SE Basic: Chapter1_IntroduceJava SE Basic: Chapter1_Introduce
Java SE Basic: Chapter1_Introduce
 
Java SE Basic Chapter2: Variable
Java SE Basic Chapter2: VariableJava SE Basic Chapter2: Variable
Java SE Basic Chapter2: Variable
 
Java SE Basic Chapter1: Introduce
Java SE Basic Chapter1: IntroduceJava SE Basic Chapter1: Introduce
Java SE Basic Chapter1: Introduce
 

Recently uploaded

Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxnhungdt08102004
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...ThunTrn734461
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhvanhathvc
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...Nguyen Thanh Tu Collection
 
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoabài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa2353020138
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdftohoanggiabao81
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...hoangtuansinh1
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...Nguyen Thanh Tu Collection
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNguyễn Đăng Quang
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...Nguyen Thanh Tu Collection
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxendkay31
 

Recently uploaded (19)

Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
QUẢN LÝ HOẠT ĐỘNG GIÁO DỤC KỸ NĂNG SỐNG CHO HỌC SINH CÁC TRƯỜNG TRUNG HỌC CƠ ...
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
 
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
10 ĐỀ KIỂM TRA + 6 ĐỀ ÔN TẬP CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO C...
 
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoabài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
bài 5.1.docx Sinh học di truyền đại cương năm nhất của học sinh y đa khoa
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdf
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 VẬT LÝ 11 - KẾT NỐI TRI THỨC - THEO CẤU TRÚC ĐỀ MIN...
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
 
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
SÁNG KIẾN “THIẾT KẾ VÀ SỬ DỤNG INFOGRAPHIC TRONG DẠY HỌC ĐỊA LÍ 11 (BỘ SÁCH K...
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
 

JavaEE Basic_Chapter4: Servlet Nâng Cao

  • 1. Phạm Đức Đệ ducde1606@gmail.com Copyright 2018 Servlet nâng cao 1https://facebook.com/jtcpage
  • 2. Nội dung • Vòng đời của Servlet • Một số giao diện của Servlet API • Quản lý phiên làm việc trong ứng dụng • Sử dụng Filter trong ứng dụng • Servlet Listener 2https://facebook.com/jtcpage
  • 3. Nội dung • Vòng đời của Servlet • Một số giao diện của Servlet API • Quản lý phiên làm việc trong ứng dụng • Sử dụng Filter trong ứng dụng • Servlet Listener 3https://facebook.com/jtcpage
  • 4. Vòng đời của servlet • Vòng đời của servlet gồm: • Nạp lớp servlet • Khởi tạo thực thể servlet • Gọi hàm init() • Gọi hàm service() khi nhận request từ client • Gọi hàm deploy() trước khi xóa thực thể 4https://facebook.com/jtcpage
  • 5. Sơ đồ chuyển trạng thái servlet • Một servlet được nạp khi: • Có request từ client • Hoặc cấu hình trong web.xml thông qua thẻ load-on-startup https://facebook.com/jtcpage 5
  • 6. Giao diện Servlet • Thuộc javax.servlet.Servlet • Mỗi servlet hiện thực giao diện servlet trực tiếp hoặc gián tiếp lớp hiện thực giao diện servlet Phương thức Mô tả void init(ServletConfig config) Để khai báo một số thông số cấu hình ứng dụng ServletConfig getServletConfig() Lấy về đối tượng ServletConfig String getServletInfo() Trả về tên của servlet-name void service(ServletRequest request, ServletResponse response) Thực hiện nghiệp vụ tương ứng với request của client void destroy() Dọn dẹp resource trước khi hủy thực thể servlet https://facebook.com/jtcpage 6
  • 7. Phương thức vòng đời • Lifecycle callback method • Phương thức init • Servlet container sẽ gọi phương thức init sau khi khởi tạo thực thể của servlet • Phương thức service • Khi Servlet container nhận request từ client và gọi hàm service thi thực • Hỗ trợ xử lý đồng thời cho nhiều request public void init(ServletConfig config) throws ServletException public void service (ServletRequest req,ServletResponse resp) throws ServletException https://facebook.com/jtcpage 7
  • 8. Phương thức vòng đời • Phương thức destroy: • Servlet container gọi phương thức này trước khi loại bỏ một thể hiện servlet • Phương thức này được gọi là chỉ sau khi tất cả luồng trong phương thức service() của servlet đã thoát hoặc sau một thời gian chờ public void destroy() https://facebook.com/jtcpage 8
  • 9. Lớp GenericServlet • Thuộc package javax.servlet • Là lớp trừu tượng (abstract class) và hiện thực 2 giao diện Servlet, ServletConfig • cung cấp hiện thực cho tất cả các phương thức ngoại trừ phương thức service() • Lớp servlet thừa kế GenericServlet phải hiện thực phương thức service 9https://facebook.com/jtcpage
  • 10. Lớp HttpServlet • Thuộc package javax.servlet.http • Thừa kế lớp GenericServlet và được dùng cho giao thức HTTP • Phụ thuộc phương thức của request thì thực thi hàm tương ứng trong HttpServlet (phương thức service sẽ kiểm tra và gọi phương thức tương ứng với request trong HttpServlet) 10https://facebook.com/jtcpage HTTP method Phương thức của lớp HttpServlet GET doGet() HEAD doHead() POST doPost() PUT doPut() DELETE doDelete OPTIONS doOptions() TRACE doTrace()
  • 11. Nội dung • Vòng đời của Servlet • Một số giao diện của Servlet API • Quản lý phiên làm việc trong ứng dụng • Sử dụng Filter trong ứng dụng • Servlet Listener 11https://facebook.com/jtcpage
  • 12. Giao diện ServletConfig • Thuộc package javax.servlet • Tham chiếu đến cấu hình định nghĩa trong servlet: • Thẻ init-param trong web.xml • Hoặc thuộc tính initParams của @WebServlet 12https://facebook.com/jtcpage <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class> vn.molu.servlet.LoginServlet </servlet-class> <init-param> <param-name>username</param-name> <param-value>admin</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>welcome</param-value> </init-param> </servlet> @WebServlet( urlPatterns = "/uploadFiles", initParams = @WebInitParam(name = "location", value = "D:/Uploads") ) public class FileUploadServlet extends HttpServlet { }
  • 13. Giao diện ServletConfig • Lấy đối tượng ServletConfig • Các phương thức: 13https://facebook.com/jtcpage Phương thức Mô tả String getInitParameter(String name) Lấy giá trị của đối số thông qua tên (trả về null nếu đối số không tồn tại) Enumeration getInitParameterNames() Trả về danh sách tên của đối số ServletContext getServletContext() Trả về đối tượng ServletContext String getServletName() Lấy tên của Servlet ServletConfig servletConfig = getServletConfig(); // hoặc public void init(ServletConfig config) { }
  • 14. 14https://facebook.com/jtcpage <servlet> <servlet-name>InitParamServlet</servlet-name> <servlet-class>vn.molu.servlet.InitParamServlet</servlet-class> <init-param> <param-name>saveDir</param-name> <param-value>D:/upload</param-value> </init-param> <init-param> <param-name>fileType</param-name> <param-value>png, gif, jpg</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>InitParamServlet</servlet-name> <url-pattern>/servlet/initparam.html</url-pattern> </servlet-mapping> public class InitParamServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletConfig servletConfig = getServletConfig(); System.out.println(servletConfig.getInitParameter("saveDir")); System.out.println(servletConfig.getInitParameter("fileType")); } }
  • 15. 15https://facebook.com/jtcpage @WebServlet(urlPatterns = "/servlet/initparam2.html", initParams = { @WebInitParam (name = "saveDir", value = "D:/upload"), @WebInitParam (name = "filetype", value = "jpg, png, gif") }) public class InitParamServlet2 extends HttpServlet { private static final long serialVersionUID = 1L; public InitParamServlet2() { super(); } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(getInitParameter("saveDir")); System.out.println(getInitParameter("filetype")); } }
  • 16. Giao diện ServletContext • Thuộc package javax.servlet • ServletContext tham chiếu đến các đối số dùng chung giữa các servlet thẻ context-param trong web.xml <web-app> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/testdb</param-value> </context-param> <context-param> <param-name>username</param-name> <param-value>root</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>welcome</param-value> </context-param> </web-app> https://facebook.com/jtcpage 16
  • 17. Giao diện ServletContext • Lấy đối tượng ServletContext • Một số phương thức: Phương thức Mô tả String getInitParameter(String name) Lấy giá trị thông qua tên đối số Enumeration getInitParameterNames() Lấy danh sách tên của đối số void setAttribute(String name,Object object) Tạo mới một biến attribute Object getAttribute(String name) Lấy giá trị của một attribute Enumeration getInitParameterNames() Lấy danh sách para-name của context-param void removeAttribute(String name) Xóa một thuộc tính attribute ServletContext application = getServletConfig().getServletContext(); // Hoặc ServletContext application = getServletContext(); https://facebook.com/jtcpage 17
  • 18. 18https://facebook.com/jtcpage import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/servlet/contextparam.html") public class ContextServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ContextServlet() { } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext servletContext = getServletContext(); System.out.println(servletContext.getInitParameter("url")); System.out.println(servletContext.getInitParameter("username")); System.out.println(servletContext.getInitParameter("password")); } }
  • 19. Giao diện ServletRequest • Thuộc package javax.servlet và có 1 giao diện con javax.servlet.http.HttpServletRequest • Đối tượng đóng gói các thông tin của request tới servlet: • Content type • Header • Parameters • Attributes 19https://facebook.com/jtcpage
  • 20. Giao diện ServletRequest Phương thức Mô tả String getParameter(String name) Trả về giá trị của đối số thông qua tên String[] getParameterValues(String name) Trả về danh sách giá trị của đối số (trường hợp đối số có nhiều giá trị như checkbox, listbox Enumeration getParameterNames() Lấy danh sách tên của đối số int getContentLength() Trả về kích thước của dữ liệu từ client gửi lên, -1 nếu không biết String getCharacterEncoding() Trả về loại mã hóa chuỗi kí tự từ request gửi lên String getContentType() Trả về loại file (MIME type) ServletInputStream getInputStream() Trả về đối tượng ServletInputStream để đọc dữ liệu trong body của request abstract String getServerName() Trả về tên của server đang chạy ứng dụng web int getServerPort() Trả về port của request được nhận 20https://facebook.com/jtcpage
  • 21. 21https://facebook.com/jtcpage @WebServlet("/servlet/servlet-request.html") public class ServletRequestDemo extends HttpServlet { private static final long serialVersionUID = 1L; public ServletRequestDemo() { super(); } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Servlet name = " + request.getServerName()); System.out.println("Servlet port = " + request.getServerPort()); System.out.println("Character Encoding = " + request.getCharacterEncoding()); System.out.println("Content type = " + request.getContentType()); System.out.println("Content length = " + request.getContentLength()); } }
  • 22. Giao diện ServletResponse • Thuộc package javax.servlet và có 1 giao diện con javax.servlet.http.HttpServletResponse • Đối tượng định dạng và gửi đáp ứng lại request của client 22https://facebook.com/jtcpage Phương thức Mô tả PrintWriter getWriter() Trả về đối tượng PrintWriter để gửi dữ liệu tới client void setContentLength(int len) Thiết lập kích thước body của response void setContentType(String type) Thiết lập content type của response tới client
  • 23. Chuyển gọi giữa các servlet/ JSP • Một servlet có thể chuyển gọi hoặc chuyển sang một tài nguyên khác để response tới client • Dùng phương thức sendRedirect của lớp HttpServletResponse để chuyển sang tài nguyên khác • Giữa servlet chuyển và tài nguyên chuyển không cùng một request • Thông qua đối tượng RequestDispatcher từ HttpServletRequest • Gọi phương thức forward, include của giao diện RequestDispatcher 23https://facebook.com/jtcpage void sendRedirect(String location) void forward(ServletRequest request, ServletResponse response) void include(ServletRequest request, ServletResponse response)
  • 24. 24https://facebook.com/jtcpage @WebServlet("/servlet/loginAction.html") public class LoginServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName = request.getParameter("username"); String password = request.getParameter("password"); if (userName != null && password != null && userName.trim().equalsIgnoreCase(password.trim())){ response.sendRedirect("home.jsp"); } else { request.setAttribute("errorMsg", "Username or Password incorrect. Please try again!"); request.getRequestDispatcher("login.jsp").forward(request, response); } } }
  • 25. Nội dung • Vòng đời của Servlet • Một số giao diện của Servlet API • Quản lý phiên làm việc trong ứng dụng • Sử dụng Filter trong ứng dụng • Servlet Listener 25https://facebook.com/jtcpage
  • 26. Session là gì? • Trạng thái kết nối • Là thông tin trong quá trình tương tác giữa client – server • Giao thức http không có trạng thái (stateless)  Không có cách để xác định các yêu cầu gửi cùng một client hay không • Tuy nhiên, một số trường hợp ứng dụng web cần lưu trữ trạng thái của client • Ứng dụng shopping cart 26https://facebook.com/jtcpage
  • 27. Session là gì? • Session giúp server lưu trữ trạng thái giao tiếp của client • Session bắt đầu khi client gửi yêu cầu đầu tiên đến web application và kết thúc khi • Client đóng kết nối • hoặc quá thời gian tương tác (timeout expired) • Cơ chế hoạt động của Session • Server tạo ra ID cho lần yêu cầu đầu tiên và gửi cho client • Client gửi yêu cầu lại sẽ chứa ID đó và server dựa trên ID để xác định trạng thái giao dịch của client đó 27https://facebook.com/jtcpage
  • 28. Hiện thực session trong ứng dụng • Mục đích quản lý session là để xác định được các lần request khác nhau là của một client hay nhiều client, • Và có nhiều cách để hiện thực session trong ứng dụng: • User authentication • HTML hidden field • URL Rewriting • HttpSession • Cookies 28https://facebook.com/jtcpage
  • 29. Giao diện HttpSession • Thuộc package javax.servlet.http • Servlet container tạo ra đối tượng HttpSession khi bắt đầu phiên giao dịch • Session ID được gửi và nhận giữa client – server • Lấy đối tượng HttpSession thông đối tượng HttpServletRequest và dùng phương thức getSession() 29https://facebook.com/jtcpage public HttpSession getSession() public HttpSession getSession(boolean create) - Đối số create = true thì session mới tạo ra nếu request hiện tại chưa có session, và ngược lại (create = false) thì không tạo session. - Trường hợp phương thức getSession() không đối số mặc định là create = true
  • 30. Giao diện HttpSession • Một số phương thức thường dùng 30https://facebook.com/jtcpage Phương thức Mô tả String getId() Lấy session ID của phiên làm việc long getCreationTime() Lấy thời gian bắt đầu tạo phiên làm việc long getLastAccessedTime() Lấy thời điểm lần request gần nhất của phiên làm viêc Object getAttribute(String name) Lấy giá trị theo tên của thuộc tính trong session void setAttribute(String name, Object value) Thiết lập giá trị thuộc tính void removeAttribute(String name) Xóa bỏ thuộc tính trong session void invalidate() Xóa session hiện tại
  • 31. 31https://facebook.com/jtcpage @WebServlet("/servlet/loginAction.html") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName = request.getParameter("username"); String password = request.getParameter("password"); if (userName != null && password != null && userName.trim().equalsIgnoreCase(password.trim())){ HttpSession session = request.getSession(); session.setAttribute("username", userName); response.sendRedirect("home.jsp"); } else { request.setAttribute("errorMsg", "Username or Password incorrect. Please try again!"); request.getRequestDispatcher("login.jsp").forward(request, response); } } }
  • 32. Cookies • Cookies là file text gồm các thông tin khác nhau và được lưu trữ bên phía client • Thông tin trong Cookies được lưu trên header trước khi gửi và nhận giữa client – server • Thông tin Cookies sẽ bị hủy sau thời gian timeout 32https://facebook.com/jtcpage Browser Server Request 1 Response 1 + Cookies Request 2 + Cookies
  • 33. Cookies • Phân loại Cookies • Non-persistent cookie: cookies tồn tại trong một phiên làm việc • Cookie bị hủy khi đóng trình duyệt • Persistent cookie: cookies tồn tại trong nhiều phiên làm việc • Cookie bi hủy khi logout • Sử dụng lớp javax.servlet.http.Cookie và dùng toán tử new để tạo đối tượng Cookie 33https://facebook.com/jtcpage Cookie cookie = new Cookie(); Cookie cookie = new Cookie("key","value");
  • 34. Lớp Cookies • Thiết lập Cookies ứng dụng • Tạo đối tượng Cookies • Thiết lập thời gian tồn tại cho Cookies dùng phương thức setMaxAge • Nạp Cookies lên HTTP response header thông qua đối tượng response • Đọc Cookies từ client gửi lên thông qua đối tượng request 34https://facebook.com/jtcpage Cookie cookie = new Cookie("key","value"); cookie.setMaxAge(miliseconds); // int miliseconds response.addCookie(cookie); request.getCookies();
  • 35. 35https://facebook.com/jtcpage public class HelloForm extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Create cookies for first and last names. Cookie firstName = new Cookie("first_name", request.getParameter("first_name")); Cookie lastName = new Cookie("last_name", request.getParameter("last_name")); // Set expiry date after 24 Hrs for both the cookies. firstName.setMaxAge(60*60*24); lastName.setMaxAge(60*60*24); // Add both the cookies in the response header. response.addCookie( firstName ); response.addCookie( lastName ); } } public class ReadCookies extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = null; Cookie[] cookies = null; // Get an array of Cookies associated with this domain cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { cookie = cookies[i]; System.out.print("Name : " + cookie.getName( ) + ", "); System.out.println("Value: " + cookie.getValue()); } } }
  • 36. Nội dung • Vòng đời của Servlet • Một số giao diện của Servlet API • Quản lý phiên làm việc trong ứng dụng • Sử dụng Filter trong ứng dụng • Servlet Listener 36https://facebook.com/jtcpage
  • 37. Filter là gì? • Là một kỹ thuật chặn thông điệp giữa điểm nguồn và đích hỗ trợ xử lý trước (pre-processing) hoặc sau (post-processing) • Trong ứng dụng Web: • Filter chặn request để xử lý trước khi gửi đến server • Filter chặn response để xử lý trước khi gửi đến client 37https://facebook.com/jtcpage Client Servlet Container Servlet Filter1 request response Client Servlet Container Servlet Filter1 request response Filter2
  • 38. Ứng dụng Filter • Ghi log các đối số của request vào file log • Xác thực (authentication) và quyền truy cập (authorization) tài nguyên • Định dạng dữ liệu (body và header) của request trước khi gửi đến servlet • Nén dữ liệu của response trước khi gửi lại client • Bổ sung thông tin cookie, header cho response trước khi gửi lại client 38https://facebook.com/jtcpage
  • 39. Filter API • Fitler API cung cấp 3 giao diện và thuộc package javax.servlet: • Filter • FilterChain • FilterConfig: tham chiếu đến đối số của filter trong trong cấu hình: • web.xml • Annotation 39https://facebook.com/jtcpage
  • 40. Giao diện Filter • Là giao diện để tạo ra lớp Filter và hiện thiện các phương thức vòng đời (lifecycle callback method) • Phương thức init • Phương thức doFilter • Phương thức destroy 40https://facebook.com/jtcpage void init(FilterConfig filterConfig) void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) void destroy()
  • 41. Giao diện FilterChain • Đối tượng được dùng để thực hiện chuyển thực thi đến: • Lớp filter kế tiếp • Hoặc servlet đích • Hoặc trả lại response cho client • Có 1 phương thức doFilter để chuyển request hoặc response 41https://facebook.com/jtcpage void doFilter(ServletRequest request, ServletResponse response)
  • 42. Xây dụng ứng dụng Filter • Tạo lớp Filter và: • Hiện thực giao diện Filter • Hoặc thừa kế lớp GenericFilter và hiện thực phương thức doFilter • Hoặc thừa kế lớp HttpFilter • Cấu hình hình Filter: • Trong web.xml dùng thẻ filter và filter-mapping • Dùng WebFilter annotation 42https://facebook.com/jtcpage
  • 43. 43https://facebook.com/jtcpage public class CharacterEncodingFilter implements Filter { private String encoding = "utf-8"; public void init(FilterConfig fConfig) throws ServletException { System.out.println("CharacterEncodingFilter: init method."); if (fConfig.getInitParameter("encodingParam") == null){ encoding = fConfig.getInitParameter("encodingParam"); } } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("CharacterEncodingFilter: doFilter method."); request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); // pass the request along the filter chain chain.doFilter(request, response); } public void destroy() { System.out.println("CharacterEncodingFilter: destroy method."); } }
  • 44. Cấu hình Filter trong web.xml • Khai báo Filter trong web.xml dủng thẻ filter và filter-mapping • DTD của thẻ filter • DTD của thẻ filter-mapping 44https://facebook.com/jtcpage filter(description?, display-name?, filter-class, filter-name, icon?, init-param*) filter-mapping(filter-name, servlet-name?, url-pattern?)
  • 45. 45https://facebook.com/jtcpage <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>JavaEETutorial</display-name> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>vn.molu.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encodingParam</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
  • 46. Cấu hình @WebFilter 46https://facebook.com/jtcpage @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebFilter { String description() default ""; String displayName() default ""; WebInitParam[] initParams() default {}; String filterName() default ""; String smallIcon() default ""; String largeIcon() default ""; String[] servletNames() default {}; String[] value() default {}; String[] urlPatterns() default {}; DispatcherType[] dispatcherTypes() default {DispatcherType.REQUEST}; boolean asyncSupported() default false; }
  • 47. 47https://facebook.com/jtcpage @WebFilter("/*") public class LoggingFilter extends GenericFilter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { System.out.println("LoggingFilter: doFilter method."); HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; System.out.println(request.getRequestURI()); Enumeration<String> parameters = request.getParameterNames(); while (parameters.hasMoreElements()){ String paraName = parameters.nextElement(); System.out.println(paraName + "=" + request.getParameter(paraName)); } chain.doFilter(request, response); } }
  • 48. Nội dung • Vòng đời của Servlet • Một số giao diện của Servlet API • Quản lý phiên làm việc trong ứng dụng • Sử dụng Filter trong ứng dụng • Servlet Listener 48https://facebook.com/jtcpage
  • 49. Event là gì? • Event là một số các hành động diễn ra trong Servlet Container, ví dụ: • Quá trình deploy hoặc undeploy ứng dụng • Sự khởi tạo và hủy một session • Sự khởi tạo, xóa và cập nhật lại giá trị thuộc tính của session • Sự khởi tạo hoặc hủy bỏ Servlet Context • Được sử dụng để thực hiện các hành động • Ghi log khi context được khởi tạo • Hỗ trợ khi context bị hủy • ... 49https://facebook.com/jtcpage
  • 50. Servlet Listener API • Servlet API cung cấp • Các lớp Event quản lý sự kiện • Giao diện Listener để hiện thực bộ lắng nghe 50https://facebook.com/jtcpage Lớp Event: ServletRequestEvent ServletContextEvent ServletRequestAttributeEvent ServletContextAttributeEvent HttpSessionEvent HttpSessionBindingEvent Giao diện Listener: ServletRequestListener ServletRequestAttributeListener ServletContextListener ServletContextAttributeListener HttpSessionListener HttpSessionAttributeListener HttpSessionBindingListener HttpSessionActivationListener
  • 51. Hiện thực Listener • Tạo bộ lắng nghe sự kiện và hiện thực một hoặc nhiều giao diện Servlet Listener cung cấp • Cấu hình bộ lắng nghe: • Trong web.xml với thể listener và listener-class với DTD • Dùng @WebListener annotation 51https://facebook.com/jtcpage !DTD của listener(desciption?, display-name?, icon?, listener-class) @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface WebListener { String value() default ""; }
  • 52. Ví dụ: Listener với web.xml 52https://facebook.com/jtcpage public class MyServletContextListener implements ServletContextListener { public MyServletContextListener() { } public void contextDestroyed(ServletContextEvent sce) { System.out.println("MyServletContextListener: contextDestroyed method."); } public void contextInitialized(ServletContextEvent sce) { System.out.println("MyServletContextListener: contextInitialized method."); } } <Web-app> <listener> <listener-class>vn.molu.listener.MyServletContextListener</listener-class> </listener> </Web-app>
  • 53. Ví dụ: Listener với @WebListener 53https://facebook.com/jtcpage @WebListener public class MySessionAttributeListener implements HttpSessionAttributeListener { public MySessionAttributeListener() { } public void attributeAdded(HttpSessionBindingEvent se) { System.out.println("MySessionAttributeListener: attributeAdded method."); } public void attributeRemoved(HttpSessionBindingEvent se) { System.out.println("MySessionAttributeListener: attributeRemoved method."); } public void attributeReplaced(HttpSessionBindingEvent se) { System.out.println("MySessionAttributeListener: attributeReplaced method."); } }