1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng lập trình ứng dụng mạng bài 6 GV võ tấn dũng

45 356 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 45
Dung lượng 416,02 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Web server nhận yêu cầu request và gửi nó tới servlet engine, là nơi mà quản lý và tạo ra các thể hiện của servlet.. Servlet engine sẽ gọi phương thức service hoặc doPost, doGet của serv

Trang 1

TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM

LẬP TRÌNH ỨNG DỤNG MẠNG

BÀI 6

SERVLET

Trang 2

PHẦN 1

TỔNG QUAN

SERVLET

Trang 3

TỔNG QUAN SERVLET

Các vấn đề được trình bày trong phần này:

– Giới thiệu Servlet (Servlet là gì?).

– Luồng xử lý Servlet.

– Các thư mục Web trong Tomcat server.

– Chu trình sống của một Servlet.

– Sáu bước để xây dựng và chạy một servlet.

Trang 4

GIỚI THIỆU SERVLET

• Servlet là một lớp Java được nạp tự động và chạy trên

những web server có hỗ trợ Java Những server như thế

được gọi là Servlet Container (hay Java Server).

• Servlet tương tác với web client theo mô hình

request-response dựa theo giao thức HTTP Một số Servlet

Container cũng hỗ trợ cả giao thức HTTPS (HTTP over

SSL) dành cho các giao tác có tính bảo mật.

• Kiến trúc hoạt động:

Trang 5

Luồng xử lý một servlet diễn ra qua các bước như sau:

• Client yêu cầu một servlet, tên của servlet là một phần

của URL

(vd: http://www.music.com/music/SearchServlet).

2 Web server nhận yêu cầu (request) và gửi nó tới

servlet engine, là nơi mà quản lý và tạo ra các thể hiện của servlet.

3 Servlet engine sẽ gọi phương thức service (hoặc

doPost, doGet) của servlet để xử lý yêu cầu.

4 Servlet sẽ tiếp nhận yêu cầu cùng với các tham số, tài

nguyên khác, sau đó xử lý và tạo ra một kết quả trả lời

tương ứng (response) và chuyển kết quả cho Web

server.

LUỒNG XỬ LÝ SERVLET

Trang 6

Để chạy được một servlet cần phải có:

• Cần có package servlet.jar để biên dịch

( http://java.sun.com/products/servlet/ )

Java 2 không chứa các lớp của gói servlet, trong trường

hơp này chúng ta phải chỉ biến môi trường CLASSPATH

đến tập tin servlet.jar, hoặc servlet-api.jar Các tập tin này

có kèm theo trong các Web Server có hỗ trợ Java.

• Các Web Server hỗ trợ Servlet, hiện nay đã có:

– Apache Tomcat (http://jakarta.apache.org)

– Sun’s Java Web Server, free, hiện không cho download (http://wwws.sun.com/software/jwebserver/)

– New Atlanta’s ServletExec, tích hợp ServletEngine vào

các web server(http://newatlanta.com)

GIỚI THIỆU SERVLET

Trang 7

Ví dụ servlet đơn giản: “Hello” Servlet

//HelloWorldServlet.java

import javax.servlet.*;

import java.io.*;

public class helloWorldServlet extends GenericServlet{

public void service(ServletRequest request, ServletResponse

response) throws IOException

Trang 8

CÁC THƯ MỤC WEB TRONG TOMCAT

• Đối với Tomcat Web Server, mỗi ứng dụng web được lưu

trữ trong thư mục riêng, chứa trong thư mục webapps (của thư mục Tomcat khi cài đặt lên đĩa) Mỗi ứng dụng này cần

có tập tin web.xml để mô tả những yếu tố riêng, được đặt

trong thư mục WEB-INF của ứng dụng.

• Ví dụ ta xây dựng một ứng dụng Web bằng cách tạo thư

mục myApp tương ứng trong thư mục webapps Tên thư

mục này sẽ xuất hiện trong URL khi ta gọi servlet

• Tạo một thư mục WEB-INF trong thư mục myApp, và tạo

một thư mục tên classes trong WEB-INF Cấu trúc cây thư

mục này được trình bày ở slide ngay sau đây Nếu ta có

Trang 9

CÁC THƯ MỤC WEB TRONG TOMCAT

Trang 10

Chu trình sống của Servlet

• Chu trình sống của một Servlet bắt đầu khi nó được hệ thống triệu gọi (gọi nạp vào bộ nhớ) cho đến khi nó bị

loại khỏi trình chủ Web server Trải qua các giai đoạn

Trang 11

Giai đoạn Nạp servlet:

• Một servlet có thể được nạp vào bộ nhớ ở ba thời

điểm: khi server khởi động, khi người quản trị yêu

cầu, khi servlet được triệu gọi từ máy client.

• Yêu cầu Server nạp servlet trước sẽ khiến trình

khách có thể gọi servlet ngay mà không phải mất

công chờ.

• Để nạp servlet thì trình chủ phải biết tên lớp của

servlet Tên của một servlet có thể trùng với tên lớp

của servlet hoặc tên mà ta đăng ký với trình chủ

trong quá trình đăng ký và ánh xạ.

Trang 12

Giai đoạn Khởi tạo servlet:

• Khi có một yêu cầu gọi servlet, trình chủ Web

server sẽ xem servlet được nạp vào bộ nhớ hay chưa Khi servlet đã được nạp thì server chuyển sang giai đoạn khởi tạo servlet.

• Trình chủ web server khởi tạo servlet bằng cách gọi

đến phương thức init() được cài đặt trong servlet.

Trang 13

Giai đoạn thực thi Servlet:

• Khi servlet được gọi qua các URL hay từ các trang

HTML hoặc trang JSP khác thì Web server chính

thức gọi servlet thực thi thông qua các phương thức

doGet(), doPost() hoặc service().

• doGet(): được gọi khi ta gọi trực tiếp servlet từ một

URL.

• doPost(): được gọi khi ta gọi servlet thông qua thao

tác post của thẻ <form>.

Trang 14

Giai đoạn dọn dẹp Servlet

• Khi thực hiện dọn dẹp servlet, Web server gọi đến

phương thức destroy() của servlet.

• Đây là cơ hội để Servlet thực hiện các thao tác cần

thiết như dọn dẹp bộ nhớ, lưu trữ dữ liệu xuống đĩa,

đóng các kết nối.

• Mặc dù Java có thể tự động thu gom rác trong bộ

nhớ nhưng nếu ta cấp phát cho servlet một khối

lượng lớn bộ nhớ thì ta nên giải phóng chúng khi

gọi phương thức destroy() này.

Trang 15

Vòng đời của Servlet được tóm tắt bằng hình vẽ sau:

Trang 16

1 Tạo một thư mục trong Tomcat web server cho

ứng dụng web của mình

2 Viết code cho một servlet Khi viết, đầu tiên ta

phải import hai gói sau: javax.servlet và javax.servlet.http

3 Biên dịch code của servlet

4 Tạo một mô tả sử dụng (description)

5 Chạy Tomcat

6 Gọi servlet từ một trình duyệt web

Trang 17

PHẦN 2

VIẾT SERVLET

Trang 18

• Servlet API bao có hai package cần

• Trong môi trường web, giao thức HTTP được sử dụng

giữa Web client và Web server Vì vậy servlet thường được

kế thừa từ lớp javax.servle.http.HttpServlet, sau đó viết

javax.servlet.Servlet javax.servlet.GenericServlet javax.servlet.http.HttpServlet

implements

Trang 19

• Thật sự lớp GenericServlet là phần cài đặt tổng quát cho

đặc tả giao tiếp (interface) mang tên Servlet.

• interface Servlet{

void destroy();

ServletConfig getServletConfig();

String getServletInfo();

void init(ServletConfig config);

void service(ServletRequest req,

ServletResponese res);

}

interface Servlet

Trang 20

• Được gọi khi Web server nạp servlet.

• Để khởi tạo biến môi trường, các biến toàn cục, các giá trị ban đầu.

• Tạo sẵn các kết nối socket, các kết nối CSDL, nạp các

thư viện cần thiết,v…v…

• Phương thức init() chỉ được gọi một lần khi Web server nạp servlet.

init() method

Trang 21

Ví dụ:

public class ShoppingCartDB extends GenericServlet {

String DBDriver =“sun.jdbc.odbc.JdbcOdbcDriver”;

String strConn =“jdbc:odbc:bookstore”;

Trang 22

• Phương thức này được xem là trung tâm xử lý

của servlet mà ta cài đặt.

• Bên trong phương thức service có hai đối tượng

tham số:

- HttpServletRequest: biểu diễn yêu cầu của client

từ Web browser gửi lên.

- HttpServletResponese: mô tả đáp ứng của

server gửi đến Web browser.

service() method

Trang 23

Ví dụ:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

PrintWriter out = response.getWriter();

out.println("Hello World");

}

service() method

Trang 24

• Khi servlet không còn dùng đến hoặc hết thời

gian quy định lưu trữ trong bộ nhớ của Web

server thì servlet sẽ bị trình chủ giải phóng.

• Trước khi servlet bị hủy thì phương thức

destroy() sẽ được gọi.

• Phương thức destroy() dùng để dọn dẹp tài

nguyên, giải phóng bộ nhớ, đóng kết nối socket

hoặc đóng kết nối đến CSDL,…

Ví dụ: conn.close(); //đóng kết nối CSDL đặt trong

destroy() method

Trang 25

• Phương thức getServletConfig() giúp người sử

dụng Servlet có được đối tượng ServletConfig

chứa các thông tin khởi tạo từ môi trường ngoài

đưa vào Servlet.

• Phương thức getServletInfo() trả về một chuỗi

thông tin mô tả ý nghĩa và mục đích của Servlet,

các thông tin về tác giả, version và copyright.

Trang 26

Các bước thực hiện để tạo một servlet:

- javax.servlet.GenericServlet hoặc

- javax.servlet.http.HttpServlet

lý yêu cầuHTTP GET, và

lý yêu cầu HTTP POST

GET request, chúng ta thường chồng cả hai hàm doGet và

Trang 27

VD: Các bước để viết một Servlet

• Ví dụ:

public void doGet(HttpServletRequest req,

HttpServletResponse resp) throws Exception {

processRequest(req, resp);

}

public void doPost(HttpServletRequest req,

HttpServletResponse resp) throws Exception {

processRequest(req, resp);

}

public processRequest(HttpServletRequest req,

Trang 28

PHẦN 3

CÁC VÍ DỤ

SERVLET

Trang 29

VD1: Servlet sinh ra văn bản Text

package hall;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

/* Very simplistic servlet

* Part of tutorial on servlets and JSP that appears at

* http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/

* 1999 Marty Hall; may be freely used or adapted

*/

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {

Trang 30

public class HelloWWW extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

Trang 31

VD2: Servlet sinh ra HTML

Viết lại VD2 bằng hàm.

public class ServletUtilities {

public static final String DOCTYPE =

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";

public static String headWithTitle(String title) {

return(DOCTYPE + "\n" + "<HTML>\n" +

"<HEAD><TITLE>" + title + "</TITLE></HEAD>\n");

}

}

public class HelloWWW2 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

Trang 32

VD3: Đọc tham số từ thanh địa chỉ

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*;public class ThreeParams extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String title = "Reading Three Request Parameters";

Trang 33

VD3: Đọc tham số từ thanh địa chỉ

public void doPost(HttpServletRequest request,

HttpServletResponse response)throws ServletException, IOException {

doGet(request, response);

}

}

Trang 34

VD4: Liệt kê dữ liệu từ một FORM

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<H1 ALIGN="CENTER">A Sample FORM using POST</H1>

<FORM ACTION="/servlet/hall.ShowParameters“ METHOD="POST">

Item Number:

<INPUT TYPE="TEXT" NAME="itemNum"><BR> Quantity:

<INPUT TYPE="TEXT" NAME="quantity"><BR> Price Each:

<INPUT TYPE="TEXT" NAME="price" VALUE="$"><BR>

<HR>

First Name: <INPUT TYPE="TEXT" NAME="firstName"><BR>

Last Name: <INPUT TYPE="TEXT" NAME="lastName"><BR>

Trang 35

VD4: Liệt kê dữ liệu từ một FORM

<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Visa">Visa<BR>

<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Master Card">Master Card<BR>

<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Amex">American Express<BR>

<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Discover">Discover<BR>

<INPUT TYPE="RADIO" NAME="cardType"

VALUE="Java SmartCard">Java SmartCard<BR>

Credit Card Number:

<INPUT TYPE="PASSWORD" NAME="cardNum"><BR>

Repeat Credit Card Number:

<INPUT TYPE="PASSWORD" NAME="cardNum"><BR><BR>

<CENTER>

Trang 36

VD4: Liệt kê dữ liệu từ một FORM

Trang 37

VD4: Liệt kê dữ liệu từ một FORM

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*;

public class ShowParameters extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{ response.setContentType("text/html");

PrintWriter out = response.getWriter();

String title = "Reading All Request Parameters";

"<TH>Parameter Name<TH>Parameter Value(s)");

Enumeration paramNames = request.getParameterNames();

Trang 38

VD4: Liệt kê dữ liệu từ một FORM

if (paramValues.length == 1) {

String paramValue = paramValues[0];

if (paramValue.length() == 0) out.print("<I>No Value</I>");

}

}

out.println("</TABLE>\n</BODY></HTML>");

}

Trang 39

VD4: Liệt kê dữ liệu từ một FORM

Trang 40

VD5: Đọc Request Header

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*;

public class ShowRequestHeaders extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{ response.setContentType("text/html");

PrintWriter out = response.getWriter();

String title = "Servlet Example: Showing Request Headers";

out.println(ServletUtilities.headWithTitle(title) +

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H1 ALIGN=CENTER>" + title + "</H1>\n" +

"<B>Request Method: </B>" + request.getMethod() + "<BR>\n" +

"<B>Request URI: </B>" + request.getRequestURI() + "<BR>\n" +

Trang 41

doGet(request, response);

Trang 42

VD5: Đọc Request Header

Trang 43

VD5: Đọc Request Header

Trang 44

Xem thêm ví dụ

• Xem thêm các ví dụ ở chapter 1 và chapter 2 thuộc

Part I của ebook “Java for the Web with Servlets,

JSP, and EJB: A Developer's Guide to J2EE

Solutions”, tác giả Budi Kurniawan.

Trang 45

BÀI SỐ 6

Ngày đăng: 03/12/2015, 13:56

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w