Professional Documents
Culture Documents
Ni dung
DatTT-DSE-SOICT-HUST
DatTT-DSE-SOICT-HUST
1.1. K thut nh km
(include)
DatTT-DSE-SOICT-HUST
Static resource
DatTT-DSE-SOICT-HUST
i khi s rt hu ch nu c th chn cc
ni dung tnh/ng to trong web
resource khc:
9/10/2011
Web Resource c nh km c th v
khng th lm g?
Ly i tng RequestDispatcher t i
tng ServletContext
DatTT-DSE-SOICT-HUST
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("
/banner");
dispatcher.include(request, response);
DatTT-DSE-SOICT-HUST
V d: nh km BannerServlet
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/banner");
if (dispatcher != null)
dispatcher.include(request, response);
}
DatTT-DSE-SOICT-HUST
10
DatTT-DSE-SOICT-HUST
11
DatTT-DSE-SOICT-HUST
12
9/10/2011
Nu truy cp vo i tng
ServletOutputStream hoc PrintWriter trong
servlet, s khng forward c na, nu khng
c c ngoi l IllegalStateException
Nu cn gi li URL gc x l thm, c th lu
li thnh 1 thuc tnh tm vc request
Gi phng thc forward() ca i tng
RequestDispatcher
DatTT-DSE-SOICT-HUST
13
RequestDispatcher dispatcher =
request.getRequestDispatcher("/template.js
p");
dispatcher.forward(request, response);
DatTT-DSE-SOICT-HUST
14
V d: Dispatcher Servlet
public class Dispatcher extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
request.setAttribute("selectedScreen",
request.getServletPath());
RequestDispatcher dispatcher = request.
getRequestDispatcher("/template.jsp");
if (dispatcher != null)
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
...
}
DatTT-DSE-SOICT-HUST
15
DatTT-DSE-SOICT-HUST
16
Redirect mt Request
2. Servlet Filters
res.setStatus(res.SC_MOVED_PERMANTLY);
res.setHeader("Location", "http://...");
Cch 2:
DatTT-DSE-SOICT-HUST
17
DatTT-DSE-SOICT-HUST
18
9/10/2011
2. Servlet Filters
19
DatTT-DSE-SOICT-HUST
Mt Filter c th lm g?
21
DatTT-DSE-SOICT-HUST
V d 1:
22
V d 2
20
Gii php
To mt access-control servlet
Gii php:
23
DatTT-DSE-SOICT-HUST
24
9/10/2011
V d 3
Gii php
DatTT-DSE-SOICT-HUST
25
DatTT-DSE-SOICT-HUST
Servlet
Filter Chain
Cc filters c th mc ni vi nhau
Filter
2
Filter N
User
implemented
filters
Servlet
container
filter
doFilter(
ServletRequest,
ServletResponse,
DatTT-DSE-SOICT-HUST
FilterChain)
Filter 1
26
service(
ServletRequest,
ServletResponse)27
DatTT-DSE-SOICT-HUST
28
init(FilterConfig)
destroy()
DatTT-DSE-SOICT-HUST
29
30
9/10/2011
javax.servlet.FilterChain
javax.servlet.FilterConfig
javax.servlet.HttpServletResponseWrapper
31
DatTT-DSE-SOICT-HUST
32
<filter>
</filter>
<filter-mapping>
DatTT-DSE-SOICT-HUST
33
<filter-name>: tn ca filter
<filter-class>: gip container bit c lp x l tng
ng ca filter
<filter-name>: tn ca filter l g
<url-pattern>: mu URLs (Web resources) p dng cho
filter c tn trn
</filter-mapping>
DatTT-DSE-SOICT-HUST
34
V d: web.xml ca BookStore
<web-app>
<display-name>Bookstore1</display-name>
<description>no description</description>
<filter>
<filter-name>OrderFilter</filter-name>
<filter-class>filters.OrderFilter</filter-class>
</filter>
<filter>
<filter-name>HitCounterFilter</filter-name>
<filter-class>filters.HitCounterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OrderFilter</filter-name>
<url-pattern>/receipt</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>HitCounterFilter</filter-name>
<url-pattern>/enter</url-pattern>
</filter-mapping>
<listener>
...
</listener>
<servlet>
...
DatTT-DSE-SOICT-HUST
</servlet>
2.5. Cc bc xy dng v
trin khai cc Servlet Filters
35
DatTT-DSE-SOICT-HUST
36
9/10/2011
DatTT-DSE-SOICT-HUST
37
DatTT-DSE-SOICT-HUST
V d: HitCounterFilter
38
V d: HitCounterFilter
DatTT-DSE-SOICT-HUST
39
DatTT-DSE-SOICT-HUST
40
Cu hnh HitCounterFilter
<?xml version="1.0" encoding="ISO-8859-1"?>
41
DatTT-DSE-SOICT-HUST
42
9/10/2011
ServletContext
Startup/shutdown
Thay i thuc tnh (Attribute changes )
HttpSession
Creation v invalidation
Thay i thuc tnh (Changes in attributes)
DatTT-DSE-SOICT-HUST
43
DatTT-DSE-SOICT-HUST
ng k Listener
Web container
ServletContextListener
ServletContextAttributeListener
HttpSessionListener
HttpSessionAttributeListener
HttpSessionActivationListener
DatTT-DSE-SOICT-HUST
44
45
contextInitialized/Destroyed(ServletContextEvent)
attributeAdded/Removed/Replaced(ServletContextAttributeEvent)
sessionCreated/Destroyed(HttpSessionEvent)
attributedAdded/Removed/Replaced(HttpSessionBindingEvent)
X l sessions di tr (migrate) t server ny sang server khc
sessionWillPassivate(HttpSessionEvent)
sessionDidActivate(HttpSessionEvent)
DatTT-DSE-SOICT-HUST
V d: Context Listener
46
V d: Context Listener
47
DatTT-DSE-SOICT-HUST
48
9/10/2011
Cu hnh Listener
<web-app>
<display-name>Bookstore1</display-name>
<description>no description</description>
M hnh Thread v ng b
ha cc Servlet
<filter>..</filter>
<filter-mapping>..</filter-mapping>
<listener>
<listener-class>listeners.ContextListener</listener-class>
</listener>
<servlet>..</servlet>
<servlet-mapping>..</servlet-mapping>
<session-config>..</session-config>
<error-page>..</error-page>
...
</web-app>
DatTT-DSE-SOICT-HUST
49
DatTT-DSE-SOICT-HUST
Web Server
request
thread
request
thread
request
thread
request
thread
request
51
52
DatTT-DSE-SOICT-HUST
Servlet container
DatTT-DSE-SOICT-HUST
Servlet
thread
2 la chn ng b ha servlet
50
53
54
9/10/2011
SingleThreadModel
Khuyn co
Web Server
thread
thread
thread
thread
DatTT-DSE-SOICT-HUST
55
DatTT-DSE-SOICT-HUST
56
Invoker Servlet l g?
Invoker Servlet
DatTT-DSE-SOICT-HUST
DatTT-DSE-SOICT-HUST
57
<!-<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
DatTT-DSE-SOICT-HUST
-->
59
http://localhost:8080/myservlets/newservlet2
DatTT-DSE-SOICT-HUST
60
10