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 7 GV võ tấn dũng

60 234 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 60
Dung lượng 766 KB

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

Nội dung

Ta có thể theodõi các phiên làm việc session tracking của một web client bằng các cách sau: y Lưu dữ liệu trong các biến ẩn của form hidden fields.. y Lưu dữ liệu trong bảng băm hash tab

Trang 3

protocol) Khi một lời yêu cầu (request) được tạo ra từ

client thì một kết nối (connection) được mở ra, đáp ứng

(response) gửi từ server xuống client Sau đó, kết nối

được đóng lại ngay

tiếp các request/response liên tiếp thì hậu quả là Web

Server không nhớ được các bước request/response

trước đó

xong thì chuyển sang trang tính tiền Lúc này Web

Server không nhớ trước đó ta đã chọn mặt hàng nào

Trang 4

có kết nối duy trì thường xuyên giữa trình khách (web

browser) và trình chủ (web server)

liệu, trình duyệt mở kết nối, lấy về trang dữ liệu và sau

đó đóng kết nối ngay lập tức Vì vậy Web Server sẽ

không biết được trước đó trình duyệt đã có những trạng

thái nào

trình khách và trình chủ trong quá trình liên lạc Một

loạt các request từ một client sẽ được liên kết với một

session

Trang 5

xảy ra trước đó của một client bất kỳ? Ta có thể theo

dõi các phiên làm việc (session tracking) của một web

client bằng các cách sau:

y Lưu dữ liệu trong các biến ẩn của form (hidden fields).

y Lưu dữ liệu trong đối tượng session.

y Lưu dữ liệu trong bảng băm (hash table)

y Lưu dữ liệu toàn cục của ứng dụng web trong đối tượng

application.

Trang 7

submit một form, form sẽ chứa một số biến ẩn chứa

thông tin trạng thái hoặc liên quan đến người dùng

đang tương tác với ứng dụng

luôn phải truyền các biến ẩn liên tục giữa các trang có

liên hệ với nhau

ví dụ này là giữ lại thông tin username để các trang

khác truy cập

Trang 8

<H1>Login</H1> Please log in

<FORM action="Login.jsp" method="POST">

<table> <TR> <TD> User Name: </TD>

<TD><INPUT type="TEXT“ name="username"></TD>

Trang 10

<FORM ACTION="BookServlet" METHOD="POST">

<% Luu username vao bien form an %>

<INPUT type="HIDDEN" NAME="username" VALUE="<%=userName%>">

<P>Please enter your favorite book:

<SELECT name ="book">

<option value="C" SELECTED>C/C++</OPTION>

Trang 12

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

public class BookServlet extends GenericServlet

{ public void service(ServletRequest request, ServletResponse response)

Trang 13

y Ví dụ trên cho ta thấy, thông tin hay giá trị của username được nhập vào từ

trang Login.html truyền cho trang Login.jsp Trang Login.jsp lưu giá trị này

trong biến ẩn của form và chuyển tiếp cho Servlet Quá trình cứ thế tiếp diễn

cho đến khi nào bạn thôi không còn muốn sử dụng thông tin của username

nữa.

Trang 15

được sử dụng nhiều trong các ứng dụng Web thương

mại nhất là các site e-commerce đó là tính không bảo

mật của giá trị và tên biến

có thể đánh lừa BookServlet bằng cách dùng trình

duyệt xem code HTML mà BookServlet gửi xuống và

dễ dàng nhận thấy có biến ẩn username Sau đó người

dùng có thể truyền trực tiếp giá trị cho username ngay

trên đường dẫn:

y http://localhost:8080/BookServlet?username=abc&book=Java

Trang 16

Form, ta dùng cơ chế bảng băm (Hash Table).

bạn sinh ra một khóa ngẫu nhiên tương ứng với

username Khóa này được đặt trong biến ẩn của Form

đồng thời lưu giá trị thực tế của biến username và khóa

trong đối tượng bảng băm trên server

trang JSP hay Servlet của ta không chuyển giá trị của

username mà chuyển giá trị của khóa tương ứng với nó

Có giá trị khóa, thực hiện dò trong bảng băm ta sẽ tìm

ra được giá trị của biến username

Trang 17

y Đối tượng bảng băm dùng sinh khóa và lưu dữ liệu cho biến được cài đặt thành lớp UserDataTable như sau:

/* UserDataTable.java */ package storage; import java.util.*;

public class UserDataTable {

protected static Hashtable userData=new Hashtable();

protected static Random keyGenerator = new Random();

public static String createUserData()

{ String userKey=""+keyGenerator.nextLong();

userData.put(userKey, new Hashtable());

return userKey;

}

public static Hashtable getUserData(String userKey)

{ if(userKey==null) return null;

Trang 18

y Trang Login2.jsp sau đây thay vì lưu nội dung username vào biến ẩn của Form, chúng ta gọi

UserDataTable sinh khóa và lưu khóa vào biến Form ẩn.

<% Login2.jsp %> <%@ page language="java" import="java.util.*;" %>

<FORM action="BookServlet2" method="POST">

<INPUT type="HIDDEN" name="userkey" value="<%=userKey%>">

<P>Please enter your favorite Book:

<SELECT name="book"> <OPTION value="C" SELECTED>C/C++</OPTION>

<OPTION VALUE="Java">Java</OPTION> <OPTION VALUE="Linux">Linux</OPTION>

Trang 19

y Dưới đây là mã nguồn của BookServlet2.jsp thay thế cho BookServlet BookServlet nhận giá trị

khóa, tìm dữ liệu tương ứng của khóa trong bảng băm và in ra kết xuất.

Trang 22

thuộc lớp HttpSession HttpSession dựa vào khái niệm

cookie quy định giữa trình khách và trình chủ Cookie

là một mẩu thông tin được gởi về trình duyệt phía máy

khách khi có yêu cầu trang từ server Mỗi khi trình

duyệt phát sinh yêu cầu gửi lên server, nó lại chuyển

mẩu cookie trở lại trình chủ Dựa vào cookie, trình

khách và trình chủ sẽ có được những thông tin trạng

thái thông báo cho nhau

Trang 23

Nếu muốn chủ động làm cho session hết hiệu lực thì ta

gọi phương thức: session.invalidate()

Trang 24

y Chú ý: Giá trị mà ta muốn lưu hay lấy về phải là

một đối tượng (Object) Đối với các giá trị có kiểu

int, float, boolean,… thì ta phải chuyển sang kiểu

lớp tương ứng như Integer, Float, Boolean,…

Trang 27

trong Servlet thì session không có sẵn Ta phải lấy

session thông qua đối tượng request

hoàn toàn có thể truy xuất được từ servlet

được đối tượng HttpRequest để truy xuất biến session

Trang 30

tạo ra đối tượng session, trình chủ gửi một định danh

ID của session cho trình duyệt

một mẩu tin cookies

nào từ server, trình duyệt sẽ gửi ngược định danh ID

này về trình chủ

Trang 31

bỏ khi bạn đóng cửa sổ trình duyệt.

cứng cho lần sử dụng kế tiếp

gian tương tác ngắn nên không nhất thiết lúc nào cũng

phải lưu thông tin cookies xuống đĩa cứng trừ khi bạn

muốn cấu hình cơ chế lưu cookies này

duyệt vẫn gửi yêu cầu gọi nó thì trình chủ sẽ phát sinh

ngoại lệ IllegalStateException

Trang 33

trên trang web của bạn Người dùng chọn một số mục

hàng rồi sau đó lại không muốn mua

trang web thì người dùng lại chọn giải pháp thoát ra và

đăng nhập trở lại Khi đó toàn bộ thông tin mua hàng

cùng với các thông tin trước đó phải bị xóa sạch

code xóa nội dung trong session hoặc tạo một session

mới

Trang 34

chúng ta đều dùng phương thức getSession().

được tạo ra nếu nó chưa có trước đó Ngược lại với đối số là

false, khi không tìm thấy đối tượng session thì phương thức

getSession() sẽ trả về giá trị null.

Trang 35

hai trường hợp: ta chủ động gọi phương thức

invalidate() của nó hoặc Webserver hủy session do thời

gian hiệu lực hết hạn (session timeout)

một vài thao tác xóa biến, dọn dẹp các đối tượng trước

khi session bị hủy

nối đến cơ sở dữ liệu Hãy thực hiện hủy kết nối này

trước khi xóa session vì nó làm cho ứng dụng của ta

tăng tốc xử lý đối với các người dùng còn lại

Trang 36

(callback) để thông báo cho một đối tượng nào đó trạng

thái đối tượng được ràng buộc vào session hoặc khi

session bị hủy

session.setAttribute(“somename”,someObject), đối

tượng some Object được thông báo rằng nó được ràng

buộc vào session Khi session hết hạn, someObject

cũng sẽ được thông báo về sự kết thúc của session để

đối tượng có thể tự thực hiện các thao tác hủy của

mình

Trang 37

diện HttpSessionBindingListener Giao diện này có 2

phương thức cơ bản là:

vào session còn valueUnBound sẽ được gọi khi đối

tượng bị loại bỏ khỏi session

nghe các trạng thái ràng buộc đối tượng vào session

bằng cách tăng hoặc giảm biến đếm cho biết số lần đối

tượng được đưa vào hoặc lấy ra khỏi session

Trang 45

HTTP cookies Cookies lưu trữ giá trị nhận dạng

session ID cho mỗi yêu cầu phát sinh và trao đổi giữa

trình duyệt với Web server

cấu hình không cho trình duyệt sử dụng cơ chế cookies

tham số đến tất cả các trang JSP và Servlet trong ứng

dụng

cookies và chuyển đi trong mỗi lời yêu cầu, ta thực

hiện việc này một cách tường minh với session ID

được đặt trên URL

Trang 46

cho phép chèn session ID vào đường dẫn URL trong

các lời gọi trang và Servlet:

y public String encodeURL(String url)

y public String encodeRedirectURL(String url)

về đường dẫn tham chiếu URL chứa session ID

một form, xử lý và nhận dữ liệu do form submit, đặt

các giá trị nhận được từ form vào biến session

Trang 52

liệu tương ứng và tách biệt đối với người dùng Mặc dù

vậy sẽ có lúc ta cần lưu những biến toàn cục để mọi

trang JSP hay Servlet thuộc về các session khác nhau

đều có thể nhìn thấy được giá trị của biến

biến có thể nhìn thấy toàn cục

Trang 53

lưu trữ và loại bỏ biến hoàn toàn tương tự các phương

thức mà session cung cấp

Trang 54

đếm số người dùng truy cập trang web bằng biến

GlobalCounter lưu trong đối tượng application như

sau:

Trang 55

giao diện ServletContext Trong servlet ta có thể lấy

giao tiếp này để dùng cho mục đích lưu biến vào đối

tượng application Biến application trong servlet có

được bằng cách sử dụng lệnh sau:

tham chiếu của đối tượng application như sau:

Trang 56

application khác nhau ra sao, ta có thể kiểm tra bằng

trang TestVariable.jsp như sau:

Trang 58

duyệt khác nhau Kết quả giá trị biến appCount tăng

liên tục trong khi biến sesCounter chỉ tăng cục bộ trong

từng cửa sổ trình duyệt

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

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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

w