bai1 gioi thieu_servlet_va_jsp_8952

54
Bài 1. Giới thiệu về Servlet & JSP

Upload: ham-choi

Post on 14-Jun-2015

726 views

Category:

Education


7 download

DESCRIPTION

Serlvet

TRANSCRIPT

Page 1: Bai1 gioi thieu_servlet_va_jsp_8952

Bài 1. Giới thiệu về

Servlet & JSP

Page 2: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 3: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 4: Bai1 gioi thieu_servlet_va_jsp_8952

Web server và client

4

Page 5: Bai1 gioi thieu_servlet_va_jsp_8952

Server làm những gì?

5

Page 6: Bai1 gioi thieu_servlet_va_jsp_8952

Client làm những gì?

6

Page 7: Bai1 gioi thieu_servlet_va_jsp_8952

HTML, HTTP protocol

7

Page 8: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 9: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 10: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 11: Bai1 gioi thieu_servlet_va_jsp_8952

URL

11

Page 12: Bai1 gioi thieu_servlet_va_jsp_8952

Website vs web application

12

Page 13: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 14: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 15: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 16: Bai1 gioi thieu_servlet_va_jsp_8952

Web Request Handling

16

Page 17: Bai1 gioi thieu_servlet_va_jsp_8952

3. Các bước phát triển và triển khai ứng dụng Web

17

Page 18: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 19: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 20: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 21: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 22: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 23: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 24: Bai1 gioi thieu_servlet_va_jsp_8952

Request từ client

Trên trình duyệt gõ: http://localhost:8084/ch1/Serv

24

Page 25: Bai1 gioi thieu_servlet_va_jsp_8952

Cấu trúc triển khai trong Tomcat

25

Page 26: Bai1 gioi thieu_servlet_va_jsp_8952

Request từ client

Run Tomcat

Trên trình duyệt gõ

http://localhost:8080/ch1/Serv

26

Page 27: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 28: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 29: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 30: Bai1 gioi thieu_servlet_va_jsp_8952

http://localhost:8080/hello2/greeting

30

Page 31: Bai1 gioi thieu_servlet_va_jsp_8952

31

Page 32: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 33: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 34: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 35: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 36: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 37: Bai1 gioi thieu_servlet_va_jsp_8952

4. Web Application Archive (*.WAR)

37

Page 38: Bai1 gioi thieu_servlet_va_jsp_8952

Ứ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

Page 39: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 40: Bai1 gioi thieu_servlet_va_jsp_8952

Cấu trúc thư mục của 1 file *.WAR

40

Page 41: Bai1 gioi thieu_servlet_va_jsp_8952

Cấu trúc thư mục của 1 file *.WAR

41

Page 42: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 43: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 44: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 45: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 46: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 47: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 48: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 49: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 50: Bai1 gioi thieu_servlet_va_jsp_8952

6. Web Container

50

Page 51: Bai1 gioi thieu_servlet_va_jsp_8952

51

Page 52: Bai1 gioi thieu_servlet_va_jsp_8952

52

Page 53: Bai1 gioi thieu_servlet_va_jsp_8952

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

Page 54: Bai1 gioi thieu_servlet_va_jsp_8952

Thảo luận

54