Lập trình web - Chương 5: Lập trình web – CGI
Các đặc điểm của ứng dụng web:
– Không phải là một ứng dụng độc lập, là ứng
dụng chạy trên nền web-server.
– Người lập trình có thể thực hiện các thao tác
trên ứng dụng web như với một ứng dụng
độc lập.
– Có thể lấy thông tin từ user.
112 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 1159 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình web - Chương 5: Lập trình web – CGI, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình mạng – Chương 5 1
CHƯƠNG 5:
LẬP TRÌNH WEB – CGI
5.1 Giới thiệu về lập trình web
5.2 HTMLs và FORMs
5.3 Lập trình web ở Client
5.4 DHTML
5.5 Phương pháp lập trình web với CGI
Lập trình mạng – Chương 5 2
5.1 Giới thiệu về lập trình web
• Hệ thống WWW tĩnh:
– Tập hợp các trang HTML
– Không tương tác được với user
– Khó khăn trong việc cập nhật thông tin
thường xuyên.
• Ứng dụng web:
– Có thể tương tác với user.
– Có thể tương tác với các ứng dụng khác.
Lập trình mạng – Chương 5 3
5.1 Giới thiệu về lập trình web
• Các đặc điểm của ứng dụng web:
– Không phải là một ứng dụng độc lập, là ứng
dụng chạy trên nền web-server.
– Người lập trình có thể thực hiện các thao tác
trên ứng dụng web như với một ứng dụng
độc lập.
– Có thể lấy thông tin từ user.
Lập trình mạng – Chương 5 4
5.2 HTMLs và FORMs
• HTML(HyperText Markup Language):
– Là ngôn ngữ dùng để biểu diễn trang web
thông qua các tags.
– Thông qua các tags có thể định dạng cách
hiển thị trang web.
– Một trang HTML có thể chèn các hình ảnh,
âm thanh trong nó, có thể liên kết đến các
trang HTML khác.
Lập trình mạng – Chương 5 5
5.2 HTMLs và FORMs
• Các tags HTML cơ bản:
– Khung của một file HTML:
Tiêu đề của trang web
Lập trình mạng – Chương 5 6
5.2 HTMLs và FORMs
• Các tags HTML cơ bản:
– Tiêu đề:
• (n: 1=>6)
– Phân đoạn:
•
– Kiểu chữ:
• In đậm:
• In nghiêng:
• Gạch dưới:
Lập trình mạng – Chương 5 7
5.2 HTMLs và FORMs
• Các tags HTML cơ bản:
– Danh sách:
• Đánh thứ tự: []+
• Không đánh thứ tự: []+
– Bảng:
[ [ ]+ ]+
Trộn các ô:
Lập trình mạng – Chương 5 8
5.2 HTMLs và FORMs
• Các tags HTML cơ bản:
– Chèn hình ảnh:
•
– Tạo điểm đánh dấu (bookmark):
– Liên kết đến bookmark:
•
– Liên kết đến một trang web khác:
•
– Liên kết đến địa chỉ e-mail:
•
Lập trình mạng – Chương 5 9
5.2 HTMLs và FORMs
• Các tags HTML cơ bản:
– Giữ định dạng đoạn khi soạn thảo:
•
– Các ký tự đặc biệt:
• Khoảng trắng:
• © : ©
• ® : ®
• < : <
• > : >
• & : &
Lập trình mạng – Chương 5 10
5.2 HTMLs và FORMs
• Các tags HTML cơ bản:
– Số mũ:
• Superscript:
• Subscript:
– Định dạng font chữ:
•
– Đường ngăn cách:
•
– Xuống dòng trong một đoạn:
•
Lập trình mạng – Chương 5 11
5.2 HTMLs và FORMs
• Tạo các frame:
– Khái niệm frame trong HTML cho phép hiển thị nhiều
trang HTML đồng thời.
– Minh họa:
Lập trình mạng – Chương 5 12
5.2 HTMLs và FORMs
• Cú pháp tạo frame:
[]+
[
Your browser doesn't support them.
]
Lập trình mạng – Chương 5 13
5.2 HTMLs và FORMs
• FORMs
– Là các thành phần của HTML cho phép user
có thể nhập thông tin vào.
– Tương tự như giao diện của một ứng dụng
bao gồm: textbox, listbox, checkbox,
– Dữ liệu được do user nhập được truyền giữa
web-client và web-server thông qua FORMs
– Dùng các tags để thiết kế.
Lập trình mạng – Chương 5 14
5.2 HTMLs và FORMs
• FORMs
– Cấu trúc cơ bản của một form:
[]+
– Các loại (type) INPUT:
• TEXT: là textbox dùng để nhập dữ liệu.
– Cú pháp:
<INPUT [TYPE=TEXT] NAME="text-id" [SIZE=nn]
[MAXLENGTH=nn] [VALUE="default text"]>
Lập trình mạng – Chương 5 15
5.2 HTMLs và FORMs
• FORMs(tt)
– Các loại (type) INPUT:
• SUBMIT: truyền dữ liệu form đến ứng dụng web
– Cú pháp: <INPUT TYPE=SUBMIT [NAME="button-id"]
[VALUE="text"]>
• RESET:đưa nội dung của form trở về giá trị ban đầu
– Cú pháp:
• BUTTON: nút nhấn bất kỳ
– Cú pháp: <INPUT TYPE=BUTTON [NAME="button-id"]
[VALUE="text"]>
Lập trình mạng – Chương 5 16
5.2 HTMLs và FORMs
• FORMs(tt)
– Các loại (type) INPUT:
• RATIO: chọn lựa một trong nhiều
– Cú pháp: <INPUT TYPE=RADIO NAME="radio-set-id"
VALUE="choice-id" [checked]>
Option 1
Option 2
Option 3
Lập trình mạng – Chương 5 17
5.2 HTMLs và FORMs
• FORMs(tt)
– Các loại (type) INPUT:
• CHECKBOX: lựa chọn một hoặc nhiều
– Cú pháp: <INPUT TYPE=CHECKBOX NAME="id"
VALUE="choice-id" [CHECKED]>
– Ví dụ:
Check 1
<input type="checkbox" name="C1" value="ON"
checked>Check 2
Lập trình mạng – Chương 5 18
5.2 HTMLs và FORMs
• FORMs(tt)
– Các loại (type) INPUT:
• HIDDEN: dữ liệu không hiển thị
– Cú pháp: <INPUT TYPE=HIDDEN NAME="id"
VALUE="data">
– Nhập vùng văn bản: TEXTAREA
• <TEXTAREA NAME="id" [COLS=nn]
[ROWS=nn]>default text
Lập trình mạng – Chương 5 19
5.2 HTMLs và FORMs
• FORMs(tt)
– Lựa chọn listbox: SELECT
•
[text ]+
Mạng máy tính
Lập trình mạng
Lập trình mạng – Chương 5 20
5.3 Lập trình web ở Client
• Các trang HTML web có thể được lập
trình để thực hiện các thao tác thực thi
trên web client.
• Các phương pháp phổ biến để lập trình
hiện nay:
– Script (Javascript, Vbscript)
– Java Applet
– ActiveX Control
Lập trình mạng – Chương 5 21
5.3 Lập trình web ở Client
• Javascript ở client:
– Ngôn ngữ kịch bản chạy trên web client. Có
thể làm việc khác nhau trên các loại web
browser khác nhau.
– Code được chèn xen kẽ với các tags HTML
– Các đoạn mã Javasript được chạy dựa vào
các sự kiện của các phần tử HTML
– Cú pháp các câu lệnh giống ngôn ngữ Java
– Không tương tác được với server
Lập trình mạng – Chương 5 22
5.3 Lập trình web ở Client
• Cú pháp cho một đoạn code Javascript:
//các khai báo biến
[var variable;]*
//các lệnh gọi hàm và các hàm
function function-name([agrv]*){
//các câu lệnh khai báo và thực thi
[return [value];]
}
• Sử dụng file Javascript (*.js) đã có:
Lập trình mạng – Chương 5 23
5.3 Lập trình web ở Client
• Các đối tượng được xây dựng sẵn trong
JavaScript:
– window: chứa các thuộc tính liên quan đến
cửa sổ hiện thời
– document: chứa các thuộc tính trong trang
web
– location: các thuộc tính về địa chỉ trang web
– history: các thuộc tính về vị trí mà web
browser đã đến
Lập trình mạng – Chương 5 24
5.3 Lập trình web ở Client
• Mỗi phần tử trong trang HTML đều có thể
coi là một đối tượng, có thể khai báo sự
kiện để gọi hàm Javascript.
– Cú pháp:
<tags-name [properties]*
[event-name=“procedure call” ]*>
– Các sự kiện có thể dùng:
• onClick: click chuột vào đối tượng.
• onFocus: focus vào đối tượng trong form.
Lập trình mạng – Chương 5 25
5.3 Lập trình web ở Client
• Javascript
– Các sự kiện có thể dùng(tt):
• onMouseOver: di chuyển chuột vào trên đối tượng.
• onMouseOut: di chuyển chuột ra khỏi đối tượng.
• onChange: thay đổi giá trị của các đối tượng chứa
văn bản.
• onBlur: chuyển focus khỏi đối tượng trong form.
• onSelect: chọn phần tử trong listbox.
• onLoad: xảy ra khi một document được load.
Lập trình mạng – Chương 5 26
5.3 Lập trình web ở Client
• Javascript
– Có thể dùng để thiết lập/kiểm tra các dữ liệu nhập trên
form ở phía web client.
– Truy xuất các phần tử trong form thông qua Javascript
Các cú pháp bên dưới dùng
form = window.document.form-name
– checkbox
form.check-name.checked = {true|false}
Trường hợp dùng nhiều checkbox cùng tên(nhóm)
var check_len = form.check-name.length;
for (i = 0; i < len; i++){
form.check-name[i].checked={true|false};
}
Lập trình mạng – Chương 5 27
5.3 Lập trình web ở Client
• Javascript
– Option button
form.option_name[index].checked = {true|false}
– Select
form.select_name.options[index].selected = {true|false}
Chỉ số hiện thời đang được chọn:
form.select_name.selectedIndex
– Text
form.text_name.value
Lập trình mạng – Chương 5 28
5.3 Lập trình web ở Client
• Kiểm tra phần tử SELECT
var select_value;
function dropDownMenu() {
var myindex=document.forms[0].menu.selectedIndex;
if (myindex==0) {
alert("\nYou must make a selection from the drop-down menu.");
document.forms[0].menu.focus();
}
else {
select_value =document.forms[0].menu.options[myindex].value;
return true;
}
}
Lập trình mạng – Chương 5 29
5.3 Lập trình web ở Client
function isEmail() {
if (document.forms[0].elements[1].value == '') {
alert ("\n The E-Mail field is blank. \n\n “+
“Please enter your E-Mail address.")
document.forms[0].elements[1].focus();
return false;
}
if (document.forms[0].elements[1].value.indexOf ('@',0) == -1
||
document.forms[0].elements[1].value.indexOf ('.',0) == -1) {
alert ("\n The E-Mail field requires a \"@\" and a \".\""+
"be used. \n\nPlease re-enter your E-Mail address.")
document.forms[0].elements[1].select();
document.forms[0].elements[1].focus();
return false;
}
return true;
}
Lập trình mạng – Chương 5 30
5.3 Lập trình web ở Client
• Java Applet:
– Là một ứng dụng được viết bằng Java, nhúng trong
trang HTML.
– Khi trang HTML có chứa tag applet được gọi, class
applet được tải về máy client và thực thi trên máy
client.
– Một ứng dụng applet phải thừa kế class
java.applet.Applet
– Có thể thực hiện các thao tác như một chương trình
Java, tuy nhiên bị hạn chế một số chức năng vì tính
bảo mật cho máy client.
Lập trình mạng – Chương 5 31
5.3 Lập trình web ở Client
//file SampleApplet.java
import java.applet.*; import java.awt.*;
public class SampleApplet extends Applet {
String text = "error"; int x = 0; int y = 20;
public void init() {
text = getParameter("text");
try { x = Integer.parseInt(getParameter("x"));
y = Integer.parseInt(getParameter("y"));
}catch(NumberFormatException ex){ }
}
public void paint(Graphics g) {
g.setFont(new Font("TimesRoman",Font.BOLD+
Font.ITALIC,36));
g.drawString(text,x,y);
}
}
Lập trình mạng – Chương 5 32
5.3 Lập trình web ở Client
sample.html
Using the Applet Tag
An Applet that Displays Text at a Designated Location
Text displayed by browsers that are not Java-enabled.
Lập trình mạng – Chương 5 33
5.3 Lập trình web ở Client
• Hoạt động của một Applet
– Được web browser tải mã(byte code) về máy client.
– Method init() sẽ được gọi để khởi động các thông số.
– Method start() được gọi để thực thi.
– Method stop() được gọi khi người dùng thoát khỏi
applet
– Method destroy() được thực thi khi applet kết thúc.
• ActiveX Control: tương tự như Java Applet,
được viết bởi các công nghệ của Mircosoft.
Lập trình mạng – Chương 5 34
5.4 DHTML
• DHTML (Dynamic HTML) là trang HTML
có chứa các đoạn mã JavaScript tạo các
hiệu ứng, thay đổi các phần tử trong trang
HTML.
• DHTML kết hợp giữa HTML, Javascript và
Cascading Style Sheets(CSS).
• CSS là sự kết hợp giữa các tags HTML và
style. Style có thể chứa nhiều thuộc tính.
Lập trình mạng – Chương 5 35
5.4 DHTML
• Mọi tags HTML đều có style. Javascript có
thể dựa trên các biến cố để thay đổi các
thuộc tính của style.
• Mỗi phần tử trong trang HTML đều có thể
được gán ID (khác với name) và có các
thuộc tính style.
• Có thể dùng tag
• Mỗi web browser có thể thực thi một số
lệnh khác nhau.
Lập trình mạng – Chương 5 36
5.4 DHTML
• Phát hiện loại web browser:
– Dùng các thuộc tính appName và appVersion của đối
tượng navigator
var browser_name= navigator.appName;
var browser_version = navigator.appName;
alert(“You use browser “+browser_name+” version “+
browser_version);
– Phân biệt hai loại chính:
if(document.all){ //IE
the_div=eval(“window.document.all.”+div_name+”.style”);
}else if(document.layers){//Netscape
the_div=eval(“window.document.all.”+div_name);
}
Lập trình mạng – Chương 5 37
5.4 DHTML
Javascipt example about timer
<!--
var second_counter=0, counter=0;
function my_timer(){
D = new Date();
seconds= D.getSeconds();
if(seconds!=second_counter) counter++;
second_counter=seconds;
if(counter>=1000) counter=0;
document.images[0].src= get_images(counter/100);
document.images[1].src= get_images((counter%100)/10);
document.images[2].src= get_images(counter%10);
SecondText.innerText=counter;
setTimeout('my_timer()',1000);
}
Lập trình mạng – Chương 5 38
5.4 DHTML
function get_images(number){
var newNum= Math.floor(number);
return "../images/"+newNum+".jpg";
}
-->
Timer :
000
seconds
Lập trình mạng – Chương 5 39
5.5 Lập trình web với CGI
• Trang HTML chỉ chứa các nội dung cố
định hoặc có thể thao tác thay đổi qua
DHTML ở client
• Nhu cầu sử dụng các trang web như một
ứng dụng (giao tiếp với user, tìm kiếm, nội
dung thay đổi, tương tác các ứng dụng,
với database)=> ứng dụng web
• CGI (Common Gateway Interface) là một
chuẩn (standard) để viết ứng dụng web
Lập trình mạng – Chương 5 40
5.5 Lập trình web với CGI
• Một ứng dụng web theo chuẩn CGI có các
đặc điểm:
– Là ứng dụng chạy trên nền web server.
– Nhận thông tin từ web browser và xuất thông
tin để web browser hiển thị thông qua web
server.
– Ứng dụng có thể được viết với bất cứ ngôn
ngữ lập trình có standard input và standard
output. (C/C++, Perl, Shell script, Dos shell)
Lập trình mạng – Chương 5 41
5.5 Lập trình web với CGI
• Cách thức hoạt động của ứng dụng web CGI:
– Web server nhận request ứng dụng CGI từ browser.
– Web server gọi ứng dụng CGI, truyền các thông số
bằng các biến môi trường(thông qua standard input).
– Ứng dụng web CGI xử lý, giao tiếp với các ứng dụng
khác (database, mail), xuất kết quả dạng HTML
qua standard output đến web server.
– Web server nhận kết quả và trả về cho browser.
Lập trình mạng – Chương 5 42
5.5 Lập trình web với CGI
• Hình vẽ minh họa hoạt động CGI
Lập trình mạng – Chương 5 43
5.5 Lập trình web với CGI
• Ví dụ (Perl):
1 #!/usr/bin/perl
2 # A very common echo script on just about every server
3 $| = 1;
4 print "Content-type: text/plain\n\n";
5 print "CGI/1.0 test script report\n\n";
6 if ($ENV{'REQUEST_METHOD'} eq "POST") {
7 $form = ;
8 print "$form \n";
9 } else {
10 print "argc is $#ARGV \nargv is ";
11 while (@ARGV) {
12 $ARGV=shift;
13 print "$ARGV ";
14 }
15 }
Lập trình mạng – Chương 5 44
5.5 Lập trình web với CGI
• Ví dụ (Perl):
16 print "\n";
17 #
18 print "SERVER_SOFTWARE = $ENV{'SERVER_SOFTWARE'}\n";
19 print "SERVER_NAME = $ENV{'SERVER_NAME'}\n";
20 print "GATEWAY_INTERFACE = $ENV{'GATEWAY_INTERFACE'}\n";
21 print "SERVER_PROTOCOL = $ENV{'SERVER_PROTOCOL'}\n";
22 print "SERVER_PORT = $ENV{'SERVER_PORT'}\n";
23 print "SERVER_ROOT = $ENV{'SERVER_ROOT'}\n";
24 print "REQUEST_METHOD = $ENV{'REQUEST_METHOD'}\n";
25 print "HTTP_AccEPT = $ENV{'HTTP_AccEPT'}\n";
26 print "PATH_INFO = $ENV{'PATH_INFO'}\n";
27 print "PATH = $ENV{'PATH'}\n";
28 print "PATH_TRANSLATED = $ENV{'PATH_TRANSLATED'}\n";
29 print "SCRIPT_NAME = $ENV{'SCRIPT_NAME'}\n";
Lập trình mạng – Chương 5 45
5.5 Lập trình web với CGI
• Ví dụ (Perl):
30 print "QUERY_STRING = $ENV{'QUERY_STRING'}\n";
31 print "QUERY_STRING_UNESCAPED =
$ENV{'QUERY_STRING_UNESCAPED'}\n";
32 print "REMOTE_HOST = $ENV{'REMOTE_HOST'}\n";
33 print "REMOTE_IDENT = $ENV{'REMOTE_IDENT'}\n";
34 print "REMOTE_ADDR = $ENV{'REMOTE_ADDR'}\n";
35 print "REMOTE_USER = $ENV{'REMOTE_USER'}\n";
36 print "AUTH_TYPE = $ENV{'AUTH_TYPE'}\n";
37 print "CONTENT_TYPE = $ENV{'CONTENT_TYPE'}\n";
38 print "CONTENT_LENGTH = $ENV{'CONTENT_LENGTH'}\n";
39 print "DOCUMENT_ROOT = $ENV{'DOCUMENT_ROOT'}\n";
40 print "DOCUMENT_URI = $ENV{'DOCUMENT_URI'}\n";
41 print "DOCUMENT_NAME = $ENV{'DOCUMENT_NAME'}\n";
42 print "DATE_LOCAL = $ENV{'DATE_LOCAL'}\n";
43 print "DATE_GMT = $ENV{'DATE_GMT'}\n";
44 print "LAST_MODIFIED = $ENV{'LAST_MODIFIED'}\n";
Lập trình mạng – Chương 5 46
Lập trình mạng – Chương 6 47
CHƯƠNG 6:
LẬP TRÌNH WEB VỚI CÁC
CÔNG NGHỆ PHỔ BIẾN
6.1 Giới thiệu Servlet/JSP
6.2 Lập trình web với Servlet
6.3 Lập trình web với JSP
6.4 Giới thiệu ASP
6.5 Lập trình web với ASP
Lập trình mạng – Chương 6 48
6.1 Giới thiệu Servlet/JSP
• Servlet là một ứng dụng (class) Java chạy
trên nền web server.
• Cơ chế hoạt động theo mô hình CGI mở
rộng.
• Chương trình phải được dịch ra ở dạng
byte-code(.class), khai báo với web
server. Web server phải hỗ trợ Java.
• Phải extends class HttpServlet. Không có
method main.
Lập trình mạng – Chương 6 49
6.1 Giới thiệu Servlet/JSP
• Cần có package servlet.jar để biên dịch
(
• Các server hiện hỗ trợ Servlet:
– Apache Tomcat (
– Sun’s Java Web Server, free, hiện không cho
download (
– New Atlanta’s ServletExec, tích hợp ServletEngine
vào các web server(
–
–
• Tham khảo các tài liệu về Servlet:
Lập trình mạng – Chương 6 50
6.1 Giới thiệu Servlet/JSP
• Cấu trúc đơn giản của một Servlet:
import java.io.*;
import java.servlet.*;
import java.servlet.http.*;
public class Sample extends HttpServlet{
public doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
//dùng đối tượng “request” để đọc dữ liệu từ client
//dùng đối tượng “response” để xuất dữ liệu cho client
PrintWriter out = response.getWriter();
//dùng đối tượng out để ghi (method print) dữ liệu cho client
}
}
Lập trình mạng – Chương 6 51
6.1 Giới thiệu Servlet/JSP
• Biên dịch như một class Java.
• File *.class dịch được phải đặt vào đúng thư
mục quy định sẵn của web server.
– Tomcat: $/webpages/WEB-INF/classes
– JWS: $/servlets
• Cấu hình cho web server đối với mỗi servlet:
– Tomcat: hiệu chỉnh file web.xml trong thư mục
$/webpages/WEB-INF theo DTD
– JWS: Cấu hình bằng web-based tool được cung cấp.
Lập trình mạng – Chương 6 52
6.1 Giới thiệu Servlet/JSP
• Cơ chế hoạt động của một servlet:
– Web server nhận yêu cầu triệu gọi servlet từ
client.
• Nếu servlet chạy lần đầu, web server load file
servlet tương ứng, khởi tạo các thông số bằng qua
method init()
• Nếu servlet đã được khởi tạo, tạo một thread để
xử lý yêu cầu.
– Gọi methods doXxx() để xử lý các request
tương ứng theo giao thức HTTP.
• doGet(..) cho HTTP GET, doPost cho HTTP POST
Lập trình mạng – Chương 6 53
6.2 Lập trình web với Servlet
• Lấy dữ liệu từ web client gởi đến bằng servlet:
– Dùng đối tượng của class HttpServletRequest
– Các methods để lấy thông số:
• getParameter(“para-name”)
• getParameterValues(“para-name”)
String username= request.getParameter(“username”);
String[] choice =
request.getParameterValues(“comments”);
– Dùng đối tượng của class HttpServletRequest để lấy
các thông tin HTTP header
Lập trình mạng – Chương 6 54
6.2 Lập trình web với Servlet
• Ví dụ lấy tất cả các thông số từ client
Enumeration parameter_names =
request.getParameterNames();
while(parameter_names.hasMoreElements()){
String para = parameter_names.nextElement();
out.print(para + “ = ”);
String[] paraValues = getParameterValues(para);
if(paraValues.lenght()==1){
out.println(paraValues[0]);
}else{
for(int i = 0, i< paraValues.lenght(),i++){
out.print(paraValues[i]+ “-”);
}
}
}
Lập trình mạng – Chương 6 55
6.2 Lập trình web với Servlet
• Lấy các thông số HTTP request header: class
HttpServletRequest cung cấp các method để lấy
các thông số request header.
– String getHeader(header-name): lấy nội dung của
header-name
– Enumeration getHeaderNames(): lấy tất cả các
header-name.
– Một số method điển hình:
• Cookie[] getCookies(): dãy Cookie từ client
• int getContentLength(): trả giá trị Content-Length
• int getContentType(): trả giá trị Content-Type
• int getRemoteUser(): giá trị username nếu có authenticate
Lập trình mạng – Chương 6 56
6.2 Lập trình web với Servlet
• Lấy các thông số HTTP request header:
– Lấy các giá trị của biến môi trường CGI:
• QUERY_STRING: getQueryString()
• REMOTE_ADDR: getRemoteAddr()
• REMOTE_HOST: getRemoteHost()
• REQUEST_METHOD: getMethod()
• PATH_INFO: getPathInfo()
• SCRIPT_NAME: getServletPath()
• SERVER_NAME: getServerName()
• SERVER_PORT: getServerPort()
• HTTP_XXX_YYY: getHeader(“Xxx-Yyy”)
•
Lập trình mạng – Chương 6 57
6.2 Lập trình web với Servlet
• Gởi dữ liệu cho web client: dùng đối tượng của
class HttpServletResponse:
– Tạo đối tượng PrintWriter để ghi dữ liệu gởi
• PrintWriter out = response.getWriter();
– Xử lý các mã HTTP trả về với các method của class
HttpServletResponse:
• void setStatus(int statusCode): gởi các mã response
• void sendError(int errorCode,String msg): gởi mã lỗi theo
giao thức HTTP và message
• void sendRedirect(String URL): chuyển đến một trang URL
khác
• Các mã có thể theo giao thức HTTP hoặc dùng các hằng số
trong class HttpServletResponse.
Lập trình mạng – Chương 6 58
6.2 Lập trình web với Servlet
• Xử lý Cookie với web browser:
– Chức năng Cookie
• Kết hợp với web browser để lưu các thông số cần
thiết.
• Thông tin có thể dùng để thiết lập phiên làm
việc(session) trong các ứng dụng thương mại điện
tử(e-commerce).
• Lưu trữ username, password
• Thông tin để customize web site cho user hay
dùng cho cơ chế personalization
•
Lập trình mạng – Chương 6 59
6.2 Lập trình web với Servlet
• Ghi thông tin Cookie lên máy client:
– Thông tin được truyền đi trong field Set-
Cookie HTTP header
– Dùng method addCookie(Cookie cookie) của
class HttpServletResponse.
– Các thuộc tính quan trọng trong class Cookie:
• Cookie name: setName(String name) – getName()
• Cookie value: setValue(String value) – getValue()
• Max Age: setMaxAge(int seconds) – getMaxAge()
Lập trình mạng – Chương 6 60
6.2 Lập trình web với Servlet
• Ví dụ:
String user=“”,pass=“”;
Cookie[] cookies = request.getCookies();
if(cookies.length==0){
user = request.getParameter(“username”);
pass = request.getParameter(“password”);
Cookie name_cookie = new Cookie(“username”,user);
response.addCookie(name_cookie);
Cookie pass_cookie = new Cookie(“password”,pass);
response.addCookie(pass_cookie);
}else{
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
if(cookie.getName().equals(“username”)) user=cookie.getValue();
if(cookie.getName().equals(“password”)) pass=cookie.getValue();
}
}
Lập trình mạng – Chương 6 61
6.2 Lập trình web với Servlet
• Lưu thông tin về phiên làm việc của user: class
HttpSession.
– Có thể dùng để lưu bất kỳ đối tượng nào.
– Đối tượng của class HttpSession được trả về từ
method getSession() của class HttpServletRequest.
– Các method thường sử dụng:
• Object getValue(String name) [2.2: getAttribute]
• void putValue(String name,Object object) [2.2: putAttribute]
• void removeValue(String name) [2.2: removeAttribute]
• String[] getValueNames() [Enumeration getAttributeNames()]
• String getId()
• void setMaxInactiveInterval(int seconds)
Lập trình mạng – Chương 6 62
6.2 Lập trình web với Servlet
• Ví dụ lưu ShoppingCart vào session
HttpSession session = request.getSession(true);
ShoppingCart cart =
(ShoppingCart)session.getValue(“ShoppingCart”);
if(cart==null){
cart = new ShoppingCart();
session.putValue(“ShoppingCart”,cart);
}
//process(cart)
Lập trình mạng – Chương 6 63
6.2 Lập trình web với Servlet
• Xử lý kết nối database
– Dùng JDBC (Java DataBase Connectivity) để
kết nối và thao tác với database.
– Quy trình xử lý:
• Tạo JDBC driver và URL database
• Thiết lập connection đến URL database
• Tạo đối tượng statement
• Thực thi các câu lệnh SQL
• Xử lý kết quả thực thi
• Đóng kết nối đến database.
Lập trình mạng – Chương 6 64
6.2 Lập trình web với Servlet
• Kết nối đến database thông qua OBDC trên Windows:
– Tạo DataSourceName trong ODBC
Connection con = null; Statement stmt = null; ResultSet rs = null;
String driver = “sun.jdbc.odbc.JdbcOdbcDriver”;
String databaseURL = “jdbc:odbc:DataSourceName”;
try{
Class.forName(driver);
con = DriverManager.getConnection(databaseURL);
stmt = con.createStatement()
rs = stmt.executeQuery(“SELECT * FROM Products”);
while(rs.next()){
out.println(rs.getString[1]+”-” getInt(“quantity”));//
}
con.close();
}cacth(SQLException se){ con.close(); }
Lập trình mạng – Chương 6 65
6.2 Lập trình web với Servlet
• Có thể kết nối database server bất kỳ có
driver hỗ trợ.
– Kết nối đến Oracle Database Server:
driver=“oracle.jdbc.driver.OracleDriver”
databaseURL =“jdbc:oracle:thin@localhost:1521:”+dbName
con = DriverManager.getConnection(databaseURL,user,password)
– Kết nối đến Sysbase:
driver=“com.sysbase.jdbc.SysDriver”
databaseURL =
“jdbc:sysbase:Tds:localhost:1521?SERVICENAME=“+dbName
con = DriverManager.getConnection(databaseURL,user,password)
Lập trình mạng – Chương 6 66
6.2 Lập trình web với Servlet
• Dùng Prepared Statements trong các câu lệnh
thay đổi dữ liệu:
String preSQLString =
“UPDATE students SET score = ? WHERE ID=?”;
PreparedStatement pre_stmt=
connection.prepareStatement(preSQLString);
float[] scores = getScores();
String[] studentIDs = getStudentIDs();
for(int i=0;i< studentIDs.length;i++){
pre_stmt.setFloat(1,scores[i]);
pre_stmt.setString(2, studentIDs[i]);
pre_stmt.execute();
}
Lập trình mạng – Chương 6 67
6.2 Lập trình web với Servlet
• Dùng cơ chế Connection Pooling
– Tạo một dãy các Connection sẵn sàng.
– Dùng cơ chế thread và đồng bộ để chia xẻ các Connection.
public synchronized Connection getConnection() throws
SQLException{
if(!availableConnections.isEmpty()){
Connection con = availableConnections.lastElement();
availableConnections.removeElementAt(
availableConnections.size()-1);
busyConnections.addElement(con);
return con;
}else{
//
}
}
Lập trình mạng – Chương 6 68
6.3 Lập trình web với JSP
• JSP (Java Server Pages) là một trang
HTML xen các đoạn mã Java.
• Trang JSP sẽ được web server biên dịch
theo thành bytecode, cơ chế hoạt động
tương tự như Servlet.
• Được tạo sẵn các đối tượng của các class
HttpServletRequest và
HttpServletResponse để xử lý giao tiếp
với web client.
Lập trình mạng – Chương 6 69
6.3 Lập trình web với JSP
• Các đoạn mã Java trong trang JSP được đặt
trong tag:
– Giá trị biểu thức:
– Khai báo các biếm
– Java code
– Chú thích
• Các khai báo chỉ thị (derective):
–
–
–
–
Lập trình mạng – Chương 6 70
6.3 Lập trình web với JSP
Ví dụ trang JSP
Request Information
JSP Request Method: request.getMethod()
Request URI: request.getRequestURI()
Request Protocol: request.getProtocol()
Servlet path: request.getServletPath()
Path info: request.getPathInfo()
Path translated:
Lập trình mạng – Chương 6 71
6.3 Lập trình web với JSP
Check admin account
<%
out.println(con.getHeader());
check.processRequest(request);
if(check.check()==true){
out.println("Hello administrator "+check.getName()+"");
}
else{ %>
Invalid password.Please try again
<%}
out.println(con.getFooter());
%>
Lập trình mạng – Chương 6 72
6.3 Lập trình web với JSP
• Các đối tượng được xây dựng sẵn trong
một trang JSP:
– request: đối tượng class HttpServletRequest
– response: đối tượng class HttpServletResponse
– out: đối tượng class PrintWriter
– session: đối tượng class HttpSession tạo ra từ
method getSession() của đối tượng request
– application: đối tượng class ServletContext
– config: đối tượng class ServletConfig
Lập trình mạng – Chương 6 73
6.4 Giới thiệu ASP
• ASP là một trang HTML có chứa các mã
script (VBScript hay JavaScript). Các
script này có thể:
– Lấy thông tin từ user.
– Sinh nội dung động.
– Thao tác với database.
–
• Trang ASP được chạy trên web-server hỗ
trợ (server-side)
Lập trình mạng – Chương 6 74
6.4 Giới thiệu ASP
• Các công cụ:
– Soạn thảo :
• Có thể dùng trình soạn thảo văn bản text bất kỳ.
• Các công cụ trực quan : Ms. Visual InterDev, Ms.
FrontPage, Macromedia Dreamweaver
– Web server:
• Win9x : Personal Web Server
• Win NT/2000 : Internet Information Services.
• Chili!Soft : (UNIX support)
• HalcyonSoft :
Lập trình mạng – Chương 6 75
6.4 Giới thiệu ASP
• Thêm script xử lý vào trang ASP:
– Đặt mã trong cặp dấu :
• Ví dụ :
– Dùng tag SCRIPT :
• .
• Ví dụ :
REM Hello World
Lập trình mạng – Chương 6 76
6.5 Lập trình web với ASP
• Đối tượng xử lý request sẵn có của
ASP: Request.
– Lấy thông tin người dùng nhập từ Form:
• Request.Form(“field_name”)
• Request.Form(index)
– Một số field đặc biệt : checkbox, ratio,
các field cùng tên
Lập trình mạng – Chương 6 77
6.5 Lập trình web với ASP
• Đối tượng xử lý response sẵn có
của ASP: Response
–Các phương thức chính:
• Reponse.Write(“String”)
• Reponse.Redirect(“URL”)
Lập trình mạng – Chương 6 78
6.5 Lập trình web với ASP
• Đối tượng Application:
– Quản lý thông tin về ứng dụng. Có thể dùng
để lưu trữ dữ liệu, đối tượng.
• Đối tượng Session:
– Quản lý thông tin về phiên làm việc(session),
có thể lưu dữ liệu, đối tượng của một session
• Đố tượng Server:
– Đặt các thuộc tính, tạo đối tượng mới
Lập trình mạng – Chương 6 79
6.5 Lập trình web với ASP
• Thao tác database: có thể dùng ADO để thao
tác.
• Ví dụ về đọc dữ liệu từ database
Dim objRecordset
Set objRecordset =
Server.CreateObject(“ADODB.Recordset”)
objRecordset.Open “table-name”, “DSN=dsn”
Do While NOT objRecordset.EOF
Response.Write objRecordset(“field-name”)
objRecordset.MoveNext
Loop
Lập trình mạng – Chương 6 80
6.5 Lập trình web với ASP
• Đọc dữ liệu bằng câu lệnh SQL:
strSQL = “Select * FROM table WHERE .”
objRecordset.Open strSQL, “DSN=dsn”
• Dùng in dữ liệu theo dạng bảng, danh
sách, listbox
• Có thể dùng cách này để hiện thực việc
tìm kiếm.
Lập trình mạng – Chương 6 81
6.5 Lập trình web với ASP
• Thêm mới record:
Set obj-Recordset-name =
Server.CreateObject(“ADODB.Recordset”)
objRecordset-name.Open “table-name”, “DSN=dsn”, _
adOpenDynamic, adLockOptimistic
obj-Recordset-name.AddNew
obj-Recordset-name.Fields(“field-name”) =
obj-Recordset-name.Update
‘.
obj-Recordset-name.Close
Lập trình mạng – Chương 6 82
6.5 Lập trình web với ASP
• Cập nhật thông tin trong record:
strSQLUpdate = “UPDATE table SET field1=,
field2= WHERE ”
objRecordset. Excute strSQLUpdate
Lập trình mạng – Chương 7 83
CHƯƠNG 7:
ỨNG DỤNG XML
TRONG LẬP TRÌNH MẠNG
7.1 Giới thiệu ngôn ngữ XML
7.2 XML trong các ứng dụng mạng
7.3 Một số ví dụ.
Lập trình mạng – Chương 7 84
7.1 Giới thiệu ngôn ngữ XML
• XML (Extensible Markup Language) là tập con
của SGML (Standard Generalized Markup
Language), được đơn giản hóa để hướng tới
web.
• Các đặc điểm:
– Meaningful Searches
– XML/EDI (XML for Electronic Data Interchange)
– Enterprise Application Integration
– Data accessibility/ Application simplification
Lập trình mạng – Chương 7 85
7.1 Giới thiệu ngôn ngữ XML
• So sánh HTML và XML:
– Đều là tập con của SGML
– HTML định dạng các tag để hiển thị, XML
định dạng các tag thể hiện ngữ nghĩa dữ liệu.
– XML hướng đến việc xử lý dữ liệu ở client.
– XML có thể làm dữ liệu trao đổi giữa các ứng
dụng trên Internet.
– XML có thể dùng để lưu trữ dữ liệu như một
database.
Lập trình mạng – Chương 7 86
7.1 Giới thiệu ngôn ngữ XML
• Cấu trúc file XML:
– Được định nghĩa dựa vào các tags theo cấu
trúc phân cấp.
– Các tag do người sử dụng đặt
– Tags và cấu trúc XML được định nghĩa theo
DTD (Document Type Definition) hoặc XML
Schema
Lập trình mạng – Chương 7 87
7.1 Giới thiệu ngôn ngữ XML
• Ví dụ file XML đơn giản:
URAMOTO Naohiko
uramoto@jp.ibm.com
TAMURA Kent
Lập trình mạng – Chương 7 88
7.1 Giới thiệu ngôn ngữ XML
• DTD:
<!ATTLIST link
manager IDREF #IMPLIED
subordinates IDREFS #IMPLIED>
Lập trình mạng – Chương 7 89
7.1 Giới thiệu ngôn ngữ XML
• Truy xuất các phần tử trong file XML:
– Có thể sử dụng bất cứ ngôn ngữ lập trình trên
các platform khác nhau.
– Các cách truy xuất đã được
W3C(www.w3c.org) định nghĩa
• Document Object Model(DOM)
• XPointer
• XML StyleSheet Language(XSL)
• XML Query Language(XQL)
•
Lập trình mạng – Chương 7 90
7.2 XML trong các ứng dụng mạng
• Định nghĩa các format dữ liệu để trao đổi:
– Cấu trúc file XML với DTD hay XML Schema
quy định về protocol giao tiếp.
– Dữ liệu được biểu diễn theo các tag.
– Là môi trường để các hệ thống không đồng
nhất có thể giao tiếp với nhau.
– Hệ thống cho phép mở rộng nhiều đối tượng
tham gia, mở rộng giao dịch mà không ảnh
hưởng đến các giao dịch cũ.
– Có thể truyền qua giao thức HTTP
Lập trình mạng – Chương 7 91
7.2 XML trong các ứng dụng mạng
• Ví dụ mô hình giao dịch ngân hàng:
Bank A Bank B
Bank C
XML
Lập trình mạng – Chương 7 92
7.2 XML trong các ứng dụng mạng
• Các công nghệ dựa trên XML được sử
dụng hiện nay:
– Simple Object Access Protocol(SOAP)
• Các dữ liệu XML được truyền qua giao thức HTTP
như một đối tượng.
– Web services
• Chuẩn XML được hỗ trợ để truyền giữa các ứng
dụng web để trao đổi dữ liệu.
– Microsoft .NET Framework
Lập trình mạng – Chương 7 93
7.3 Một số ví dụ
1. import org.apache.xerces.parsers.DOMParser;
2. import org.apache.xml.serialize.*;import org.w3c.dom.*;
3. import org.xml.sax.*;
4. private Document document;
5. private Node root;
6. private DOMParser parser = new DOMParser();
7. try
8. {
9. //pre-parse
10. ByteArrayInputStream input = new ByteArrayInputStream(inBuffer);
11. parser.setFeature(""+
12. "features/dom/include-ignorable-whitespace",false);
13. parser.parse(new InputSource(input));
14. document=parser.getDocument();
15. //Set DOCTYPE for input document
16. OutputFormat format=new OutputFormat();
17. format.setDoctype(null,"requestInformation.dtd");
Lập trình mạng – Chương 7 94
18. ByteArrayOutputStream output = new ByteArrayOutputStream();
19. XMLSerializer serial =new XMLSerializer(output,format);
20. serial.serialize(document);
21. inBuffer = output.toByteArray();
22. //real-parse
23. input = new ByteArrayInputStream(inBuffer);
24. parser.reset();
25. parser.parse(new InputSource(input));
26. document=parser.getDocument();
27. root = this.document.getDocumentElement();
28.
29. //Get information
30. Node cardNumberNode = root.getFirstChild();
31. cardNumber = cardNumberNode.getFirstChild().getNodeValue();
32. cardNumber = this.cardNumber.trim();
33. }catch (Exception e){}
Lập trình mạng – Chương 8 95
CHƯƠNG 8:
BẢO MẬT DỮ LIỆU
TRUYỀN TRÊN MẠNG
8.1 Các vấn đề về bảo mật dữ liệu
8.2 Các phương pháp mã hóa dữ liệu
8.3 Ví dụ mã hóa trong Java.
Lập trình mạng – Chương 8 96
8.1 Các vấn đề về bảo mật dữ liệu
• Secrecy: Thông tin truyền đi chỉ được
phần tử gởi và nhận đọc mà thôi.
• Authentication: Xác định đúng đối tác
trước khi thực hiện một giao dịch trên
mạng.
• Non-repudiation: Chứng minh được chính
đối tác đã gởi thông tin.
• Integrity control: Thông tin truyền đảm bảo
không bị thêm bớt trong quá trình truyền
Lập trình mạng – Chương 8 97
8.1 Các vấn đề về bảo mật dữ liệu
• Các nguy cơ tính bảo mật bị đe dọa:
– Thông tin bị đánh cắp:
• NIC card có thể lấy các thông tin không phải của
máy mình
A
B
C
src:B dest:A payload
Lập trình mạng – Chương 8 98
8.1 Các vấn đề về bảo mật dữ liệu
• Các nguy cơ tính bảo mật bị đe dọa(tt):
– Thông tin giả mạo
• Chương trình giả mạo phần tử gởi để gởi cho
phần tử nhận ( C giả mạo B gởi cho A)
A
B
C
src:B dest:A payload
Lập trình mạng – Chương 8 99
8.1 Các vấn đề về bảo mật dữ liệu
• Nguy cơ tấn công DOS (Denial of service)
– Tấn công bằng cách gởi nhiều message để
làm tê liệt hệ thống
A
B
C
SYN
SYN SYN SYN
SYN
SYN
SYN
Lập trình mạng – Chương 8 100
8.2 Các phương pháp mã hóa dữ liệu
• Bảo mật bằng cách mã hóa (cryptography)
dữ liệu trước khi truyền.
• Các phương pháp mã hóa:
– Mã hóa đối xứng, giải thuật bí mật (private
key)
– Giải thuật khóa công khai (public key)
Lập trình mạng – Chương 8 101
8.2 Các phương pháp mã hóa
Lập trình mạng – Chương 8 102
8.2 Các phương pháp mã hóa
• Các vấn đề cần quan tâm trong hiện thực
mã hoá:
• Giải thuật mã hóa (cryptography algorithm)
• Giao thức mã hóa (cryptography protocol)
• Quản lý khóa (key management)
Lập trình mạng – Chương 8 103
8.2 Các phương pháp mã hóa
• Các giải thuật mã hóa đơn giản:
– Thay thế một ký tự bằng một ký tự hay nhóm
ký tự khác:
• Ví dụ:
– Hoán vị thứ tự các ký tự theo một quy tắc
plaintext: abcdefghijklmnopqrstuvwxyz
ciphertext: mnbvcxzasdfghjklpoiuytrewq
Plaintext: bob. i love you. alice
ciphertext: nkn. s gktc wky. mgsbc
Lập trình mạng – Chương 8 104
8.2 Các phương pháp mã hóa
• Phương pháp mã hóa khoá bí mật:
– Giải thuật DES: Data Encryption
Standard
• US encryption standard [NIST 1993]
• 56-bit symmetric key, 64 bit plaintext input
Lập trình mạng – Chương 8 105
8.2 Các phương pháp mã hóa
• Phương pháp mã hóa khóa công khai (public
key):
Lập trình mạng – Chương 8 106
8.2 Các phương pháp mã hóa
• Giải thuật RSA (Rivest, Shamir, Adelson)
cho giải thuật mã hóa khóa công khai
– Chọn hai số nguyên tố p,q liền nhau
– Tính n = p.q, z = (p-1)(q-1)
– Chọn e<n là không có thừa số chung với z
– Chọn d sao cho ed mod z = 1
– Khóa công khai là (n,e). Khoá bí mật là (n,d).
Lập trình mạng – Chương 8 107
8.2 Các phương pháp mã hóa
• Giải thuật RSA(tt)
• Với mẫu bit m muốn gởi, tính c = me mod n
và gởi c
• Bên nhận nhận được mẫu bit c, tính ra
m = cd mod n
m = (m mod n) e mod n d
Lập trình mạng – Chương 8 108
4
Ñoái
Taùc
1
Ñoái
Taùc
2
ÑT1 gôûi public-key cho ÑT2
ÑT2 gôûi public-key cho ÑT1
ÑT1 gôûi döõ lieäu maõ hoùa cho ÑT2
vaø döõ lieäu kieåm tra tính toaøn veïn
ÑT2 gôûi döõ lieäu maõ hoaù cho ÑT1
vaø döõ lieäu kieåm tra tính toaøn veïn
1
2
3
5
6
8
7
Ví dụ giao thức mã hoá public key
Lập trình mạng – Chương 8 109
8.3 Ví dụ mã hóa trong Java.
1. import java.security.*; import java.security.spec.*; import java.security.interfaces.*;
2. import javax.crypto.*; import javax.crypto.spec.*;
3. import javax.crypto.interfaces.*; import com.sun.crypto.provider.SunJCE;
4. //
5. SunJCE jce = new SunJCE();
6. Security.addProvider(jce);
7. System.out.println("BANK SERVER receives Client's public key");
8. byte[] clientPubKeyEnc = SocketUtil.receive(in);
9. KeyFactory serverKeyFac = KeyFactory.getInstance("DH");
10. X509EncodedKeySpec x509KeySpec =
11. new X509EncodedKeySpec(clientPubKeyEnc);
12. PublicKey clientPubKey = serverKeyFac.generatePublic(x509KeySpec);
13. DHParameterSpec dhParamSpec =
((DHPublicKey)clientPubKey).getParams();
14. System.out.println("SERVER: Generate DH keypair with Client ...");
15. KeyPairGenerator serverKeyPairGen =
KeyPairGenerator.getInstance("DH");
16. serverKeyPairGen.initialize(dhParamSpec);
17. KeyPair serverKeyPair = serverKeyPairGen.generateKeyPair();
Lập trình mạng – Chương 8 110
8.3 Ví dụ mã hóa trong Java.
18. System.out.println("BANK SERVER: Initialize KeyAgreement with Client...");
19. KeyAgreement serverKeyAgree = KeyAgreement.getInstance("DH");
20. serverKeyAgree.init(serverKeyPair.getPrivate());
21. byte[] serverPubKeyEnc = serverKeyPair.getPublic().getEncoded();
22. SocketUtil.send(out,serverPubKeyEnc);
23.
24. serverKeyAgree.doPhase(clientPubKey, true);
25. byte[] serverSharedSecret = serverKeyAgree.generateSecret();
26. System.out.println("BANK SERVER's Secret-Key with WebSiteClient : "+
27. CipherUtil.toHexString(serverSharedSecret));
28.
29. serverKeyAgree.doPhase(clientPubKey, true);
30. SecretKey serverDesKey = serverKeyAgree.generateSecret("DES");
31. Cipher serverCipher =
Cipher.getInstance("DES/ECB/PKCS5Padding");
32. Mac serverMac = Mac.getInstance("HmacSHA1");
33. serverMac.init(serverDesKey);
Lập trình mạng – Chương 8 111
8.3 Ví dụ mã hóa trong Java.
34. //Bank Server receives encrypted-data and Mac-code from Client
35. byte[] cipherTextBefore = SocketUtil.receive(in);
36. byte[] textMacBefore = SocketUtil.receive(in);
37.
38. //Bank Server decrypts encrypted-data and
39. //computes received-data's Mac-code
40. serverCipher.init(Cipher.DECRYPT_MODE, serverDesKey);
41. byte[] recoveredText = serverCipher.doFinal(cipherTextBefore);
42. byte[] textMacBeforePre = serverMac.doFinal(recoveredText);
43. //Bank Server process data
44. BankProcess bankPro;
45. if(java.util.Arrays.equals(textMacBefore, textMacBeforePre))
46. {
47. System.out.println("Data received from WebSiteClient is valid");
48. bankPro = new BankProcess(recoveredText,false);//no have error
49. }
Lập trình mạng – Chương 8 112
8.3 Ví dụ mã hóa trong Java.
50. else{
51. System.out.println("Data received is NOT valid");
52. }
53. byte[] result = bankPro.getResult();
54.
55. //Server encrypts result and computes its Mac-code
56. serverCipher.init(Cipher.ENCRYPT_MODE, serverDesKey);
57. byte[] cipherTextAfter = serverCipher.doFinal(result);
58. byte[] textMacAfter = serverMac.doFinal(result);
59.
60. //Server sends encrypted-result and Mac-code to client
61. SocketUtil.send(out,cipherTextAfter);
62. SocketUtil.send(out,textMacAfter);
63. //
Dùng các packages JCE1.2.1 của Java
Các file đính kèm theo tài liệu này:
- ch05_08_5015.pdf