bai1 gioi thieu_servlet_va_jsp_8952
DESCRIPTION
SerlvetTRANSCRIPT
Bài 1. Giới thiệu về
Servlet & JSP
Nội dung
1. Một số khái niệm
2. Giới thiệu về Servlet và JSP
3. Các bước phát triển và triển khai ứng dụng Web
4. File WAR (Web Application Archive)
5. Cấu hình ứng dụng web
6. Web container
2
Web server và client
Số lượng: vô cùng lớn
Mục tiêu:
Xây dựng ứng dụng được truy cập trên toàn cầu
3
Web server và client
4
Server làm những gì?
5
Client làm những gì?
6
HTML, HTTP protocol
7
HTTP Protocol
Giao thức HTTP chạy trên TCP/IP
TCP: đảm bảo file được từ nút mạng này tới nút mạng khác nguyên vẹn
IP: chịu trách nhiệm định tuyến, dịch chuyển gói tin
Cấu trúc HTTP: chuỗi Request và Response
Browser: request
Server: response
8
HTTP Protocol
9
Request:
POST hay GET
Trang request (url)
Tham số
Response
Mã trạng thái
Context type: text, pic..
Nội dung
Phương thức GET và POST
GET POST
Lịch sử,
bookmark
Tham số hiển thị trên URL,
có thể bookmark
Tham số không hiển thị trên
URL, không thể bookmark
Loại dữ
liệu
Chỉ kí tự ASCII Không giới hạn
Giới hạn
về độ dài
Có, vì độ dài URL có giới
hạn, thường 2048 kí tự
Không giới hạn
Sử dụng Không sử dụng khi gửi thông
tin bí mật: password
Sử dụng để gửi các thông tin
bí mật: passowrd
10
GET:
http://phucanh.vn/category-2/laptops.html ?min=10000000&max=12000000
URL
11
Website vs web application
12
2. Giới thiệu về Servlet và JSP
Servlet và JSP: các web component
Cho phép tạo ra các nội dung động
13
Web Components & Container
Các web components chạy trên 1 Web container
Các web containers phổ biến: Tomcat và Resin
Web container cung cấp các dịch vụ hệ thống cho các Web components
Request dispatching, security, và quản lý vòng đời
14
Web Application & Components
Web Application là 1 gói triển khai, gồm:
Web components (Servlets và JSP)
Tài nguyên tĩnh như images
Helper classes (sử dụng bởi web components)
Thư viện Libraries
Deployment descriptor (web.xml file)
Web Application có thể được tổ chức thành
Phân cấp các thư mục và files (dạng chưa đóng gói -unpacked form) hoặc
*.WAR file: có fân cấp như trên (dạng đóng gói-packed form)
15
Web Request Handling
16
3. Các bước phát triển và triển khai ứng dụng Web
17
Các bước phát triển và triển khai ứng dụng Web
Viết code (và biên dịch) cho các Web component Servlet/JSP sử dụng trong web component
Tạo các tài nguyên tĩnh (Images, các trang HTML)
Viết file deployment descriptor (web.xml)
Build ứng dụng Web (Tạo file *.war hoặc thư mục dạng chưa đóng gói nhưng triển khai được)
Triển khai ứng dụng Web trên 1 Web container
Web clients có thể truy cập ứng dụng qua URL
18
Development Tree Structure
Tạo cấu trúc cây thư mục (Development Tree Structure) cho việc viết ứng dụng web
Thư mục gốc bao gồm:
src: Mã nguồn Java cho các servlets và các JavaBeans
web: các trang JSP, HTML, images
Có thể sử dụng IDE Netbeans để hỗ trợ
19
Ví dụ 1: cấu trúc cây project ch1
ch1
src
Ch1Servlet.java
web
WEB-INF
web.xml
20
ch1
websrc
WEB-INF
web.xml
Ch1Servlet.java
Ch1Servlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Ch1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
java.util.Date today = new java.util.Date();
out.println("<html> " + "<body> "
+ "<h1 align=center>Servlet</h1>"
+ "<br>" + today + "</body>" + "</html>" );
}
}21
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>Chuong 1 Servlet</servlet-name>
<servlet-class>Ch1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Chuong 1 Servlet</servlet-name>
<url-pattern>/Serv</url-pattern>
</servlet-mapping>
</web-app>
22
Biên dịch & triển khai trong Netbeans
Biên dịch
Các file được biên dịch thành file .class
23
ch1
web
dist
WEB-INF
web.xml
ch1.war
build
classes
Ch1Servlet.class
Request từ client
Trên trình duyệt gõ: http://localhost:8084/ch1/Serv
24
Cấu trúc triển khai trong Tomcat
25
Request từ client
Run Tomcat
Trên trình duyệt gõ
http://localhost:8080/ch1/Serv
26
Nhận xét
Việc chèn thẻ HTML trong câu lệnh println là dễ dàng?
Giải pháp: JSP
<html>
<body>
<%=new
java.util.Date() %>
</body>
</html>
Ý nghĩa của file web.xml?27
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>Chuong 1 Servlet</servlet-name>
<servlet-class>Ch1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Chuong 1 Servlet</servlet-name>
<url-pattern>/Serv</url-pattern>
</servlet-mapping>
</web-app>
28
Ví dụ 2
Ví dụ hello2 trong tutorial của J2EE 1.4
Mục đích:
Tạo 2 servlet có liên kết với nhau
GreetingServlet chuyển yêu cầu tới ResponseServlet
Tài nguyên tĩnh
File đóng gói war
Hiểu hơn về file web.xml
29
http://localhost:8080/hello2/greeting
30
31
Cấu trúc cây hello2
Hello2
src/servlets
GreetingServlet.java
ResponseServlet.java
web
WEB-INF
web.xml
duke.waving.gif
build.xml
32
Cấu trúc sau khi biên dịch
Hello2
src
web
build.xml
build
WEB-INF
classes
GreetingServlet.class
ResponseServlet.class
web.xml
duke.waving.gif33
GreetingServlet
String username = request.getParameter("username");if ((username != null) && (username.length() > 0)) {
RequestDispatcher dispatcher =getServletContext()
.getRequestDispatcher("/response");
if (dispatcher != null) {dispatcher.include(request, response);
}}
34
ResponseServlet
public class ResponseServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
if ((username != null) && (username.length() > 0)) {
out.println("<h2>Hello, " + username + "!</h2>");
}
}
35
web.xml
<servlet>
<servlet-name>GreetingServlet</servlet-name>
<servlet-class>servlets.GreetingServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ResponseServlet</servlet-name>
<servlet-class>servlets.ResponseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GreetingServlet</servlet-name>
<url-pattern>/greeting</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ResponseServlet</servlet-name>
<url-pattern>/response</url-pattern>
</servlet-mapping>36
4. Web Application Archive (*.WAR)
37
Ứng dụng Web
Ứng dụng Web có thể được triển khai ở 2 dạng
Một file *.war
Một thư mục, cấu trúc giống file *.war file (thư mục build)
Sử dụng dạng file *.war khi muốn triển khai trên 1 remote machine
38
File *.WAR là gì?
Là gói triển khai được trên web container
Tương tự như file *.jar
Chứa tất cả thành phần cần thiết:
Web components (servlets hoặc JSP)
Các Class tiện ích
Nội dung tĩnh (HTML, image, …)
Các lớp phía Client (applets và các lớp tiện ích)
Có nội dung giống như thư mục build
39
Cấu trúc thư mục của 1 file *.WAR
40
Cấu trúc thư mục của 1 file *.WAR
41
Tạo 1 file *.WAR như thế nào?
3 cách khác nhau:
Sử dụng IDE (NetBeans)
Sử dụng công cụ ant
“asant create-war” (J2EE 1.4 tutorial)
Sử dụng lệnh “jar cvf <filename>.war .” khi ở trong thư mục build
42
Ví dụ: Tạo file hello2.war với lệnh “asant create-war”
C:\j2eetutorial14\examples\web\hello2>asant create-war
Buildfile: build.xml
...
create-war:
[echo] Creating the WAR....
[delete] Deleting: C:\j2eetutorial14\examples\web\hello2\assemble\war\hello2.war
[delete] Deleting directory C:\j2eetutorial14\examples\web\hello2\assemble\war\WEB-INF
[copy] Copying 1 file to C:\j2eetutorial14\examples\web\hello2\assemble\war\WEB-INF
[copy] Copying 2 files to C:\j2eetutorial14\examples\web\hello2\assemble\war\WEB-INF\classes
[war] Building war: C:\j2eetutorial14\examples\web\hello2\assemble\war\hello2.war
[copy] Copying 1 file to C:\j2eetutorial14\examples\web\hello243
Ví dụ: Tạo file hello2.war sử dụng lệnh jar
C:\j2eetutorial14\examples\web\hello2\build>jar cvf hello2.war .
added manifest
adding: duke.waving.gif(in = 1305) (out= 1295)(deflated 0%)
adding: servlets/(in = 0) (out= 0)(stored 0%)
adding: servlets/GreetingServlet.class(in = 1680) (out= 887)(deflated 47%)
adding: servlets/ResponseServlet.class(in = 1090) (out= 572)(deflated 47%)
C:\j2eetutorial14\examples\web\hello2\build>jar xvf hello2.war
created: META-INF/
extracted: META-INF/MANIFEST.MF
extracted: duke.waving.gif
created: servlets/
extracted: servlets/GreetingServlet.class
extracted: servlets/ResponseServlet.class
44
Thư mục WEB-INF
Chứa:
web.xml : Web application deployment descriptor
Các file JSP tag library descriptor
Classes : là thư mục chứa các lớp phía server: servlets, lớp tiện ích, các JavaBeans
lib : là thư mục chứa các file thư viện JAR (tag libraries, các thư viện tiện ích được gọi bởi các lớp phía server)
45
5. Cấu hình ứng dụng Web
Thông số cấu hình được đặc tả trong file web.xml (Web Applications Deployment Descriptor)
46
Prolog (web.xml)
Tất cả tài liệu XML cần có prolog<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
xsi:schemaLocation=http://java.sun.com/xml/n
s/javaee
http://java.sun.com/xml/ns/javaee/web-
app_3_0.xsd version="3.0">
47
Alias Paths (web.xml)
Khi 1 Servlet container nhận 1 request, nó cần biết Web component nào trong ứng dụng Web sẽ xử lý request này.
Thực hiện map URL path trong request tới 1 Web component
Alias Path có thể có 2 dạng
/alias-string (cho servlet) hoặc
/*.jsp (cho JSP)
48
web.xml
<servlet>
<servlet-name>GreetingServlet</servlet-name>
<servlet-class>servlets.GreetingServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ResponseServlet</servlet-name>
<servlet-class>servlets.ResponseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GreetingServlet</servlet-name>
<url-pattern>/greeting</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ResponseServlet</servlet-name>
<url-pattern>/response</url-pattern>
</servlet-mapping>49
6. Web Container
50
51
52
Vai trò của Container
Hỗ trợ giao tiếp giữa servlet và web server
Quản lý vòng đời của các servlet: khởi tạo, gọi, hủy
Hỗ trợ đa tuyến
Cấu hình ứng dụng web dễ dàng qua web.xml
Hỗ trợ dịch các trang JSP
53
Thảo luận
54