Thứ Hai, 30 tháng 12, 2013

PostgreSQL : Giới thiệu psql - giao diện tương tác dòng lệnh với PostgreSQL

psql là một giao diện tương tác dòng lệnh của PostgreSQL (PostgreSQL interactive terminal) cho phép ta gõ các câu truy vấn SQL gởi đến PostgreSQL và nhận về kết quả hiển thị

Truy cập cơ sở dữ liệu (CSDL) có tên openspace_db với username là toan
$ psql d openspace_db -U toan 

Ở đây ngầm định host là local, nếu muốn truy cập PostgreSQL cài ở máy khác thì phải cung cấp thông tin host, chẳng hạn như sau :
$ psql d openspace_db -U toan -h <host name>

Sau khi truy cập ta có thể dùng meta-command \l để hiển thị các cơ sở dữ liệu (database) hiện có trong PostgreSQL
openspace_db=# \l

                                       List of databases
         Name          |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------------------+----------+----------+------------+------------+-----------------------
 openspace_db          | toan     | UTF8     | en_US.utf8 | en_US.utf8 | 

Thoát khỏi hiển thị này bằng cách gõ lệnh \q

Tạo một cơ sở dữ liệu mới mang tên openspace_vn_db, nhớ đừng quyên dấu chấm phẩy (;) ở cuối, vì psql nhận biết kết thúc dòng lệnh bằng dấu này
openspace_db=# create database openspace_vn_db;
CREATE DATABASE

Truy cập đến cơ sở dữ liệu mới tạo này bằng cách gõ lệnh \c như sau
openspace_db=# \c openspace_vn_db 
You are now connected to database "openspace_vn_db" as user "postgres".
openspace_vn_db=# 

Gõ lệnh \d để xem các quan hệ (relation : table, view, index, sequence, foreign talbe) của CSDL này
openspace_vn_db=# \d
No relations found.

Tạo một bảng dữ liệu có tên là mobile
openspace_vn_db=# create table mobile(id int, name varchar);
CREATE TABLE

Gõ lại lệnh \d, ta có
openspace_vn_db=# \d
         List of relations
 Schema |  Name  | Type  |  Owner   
--------+--------+-------+----------
 public | mobile | table | toan
(1 row)

Thêm dữ liệu vào bảng
openspace_vn_db=# insert into mobile values(0, 'Samsung Galaxy S4');
INSERT 0 1
openspace_vn_db=# insert into mobile values(1, 'iPhone 6');
INSERT 0 1

Xem dữ liệu trong bảng
openspace_vn_db=# select * from mobile;
 id |       name        
----+-------------------
  0 | Samsung Galaxy S4
  1 | iPhone 6
(2 rows)

Ta có thể nhập đọc dữ liệu vào (input) từ tập tin với lệnh \i, chẳng hạn tạo tập tin data.sql với nội dung sau :
create table provider(id int, name varchar, country varchar);
insert into provider values(0, 'Samsung', 'Korea');
insert into provider values(1, 'Apple', 'United States');

Rồi gõ lệnh
openspace_vn_db=# \i data.sql
CREATE TABLE
INSERT 0 1
INSERT 0 1
openspace_vn_db=# \d
          List of relations
 Schema |   Name   | Type  |  Owner   
--------+----------+-------+----------
 public | mobile   | table | toan
 public | provider | table | toan
(2 rows)

Ta có thể nhập nội dung vào PostgreSQL từ giao diện tương tác dòng lệnh của hệ điều hành (Ubuntu chẳng hạn). Trước hết ta xoá bảng dữ liệu provider vừa tạo và thoát khỏi psql với lệnh \q như sau
openspace_vn_db=# drop table provider;
DROP TABLE
openspace_vn_db=# \q

Rồi nhập dữ liệu vào từ tập tin như sau
$ psql -d openspace_vn_db -U toan -f data.sql
CREATE TABLE
INSERT 0 1
INSERT 0 1

Ta có thể tìm kiếm các quan hệ wildchar như sau (mo* : Các quan hệ có tên bắt đầu bằng mo)
openspace_vn_db=# \d mo*
         Table "public.mobile"
 Column |       Type        | Modifiers 
--------+-------------------+-----------
 id     | integer           | 
 name   | character varying | 


Thứ Tư, 18 tháng 12, 2013

Ubuntu : Cài đặt Glassfish trong Ubuntu

Tải glassfish về, ở đây tôi cài glassfish 3.1.2.2 tại thư mục gốc của người dùng (home)
$ wget http://download.java.net/glassfish/3.1.2.2/release/glassfish-3.1.2.2-unix.sh

Gọi thực thi tập tin vừa tải về để cài đặt glassfish
$ sh glassfish-3.1.2.2-unix.sh

Đổi tên thư mục vừa tạo thành cho gọn
$ mv ~/glassfish3 ~/glassfishv3.1.2.2

Mở tập tin .profile
$ gedit ~/.profile

rồi thêm định nghĩa biến môi trường cho Glassfish vào cuối tập tin này
# Glassfish
export GLASSFISH_HOME=/home/tcminh/glassfishv3.1.2.2/glassfish/
export PATH="$GLASSFISH_HOME/bin:$PATH"

Sau đó gọi thực thi tập tin để cập nhật biến vừa thêm vào
$ . ~/.profile

Nếu cần thiết, định nghĩa địa chỉ 127.0.0.1 cho localhost; <machine name> thay bằng tên máy của bạn chẳng hạn pc12991. Mở tập tin /etc/hosts
$ sudo gedit /etc/hosts
Thêm/sửa dòng sau
127.0.0.1    localhost <machine name>

Kiểm tra hoạt động glassfish, ở đây không chỉ rõ domain thì glassfish tự hiểu là domain1, khởi động :
$ asadmin start-domain

Dừng glassfish
$ asadmin stop-domain

Kiểm tra số tập tin tối đa cho process cho "người dùng" tên glassfish (dùng cho hoạt động của máy chủ glassfish):
$ sudo su - glassfish
$ ulimit -n

Trong truờng hợp của bạn, nếu không định nghĩa một "người dùng" glassfish thì kiểm tra với tên người dùng là bạn (trong lệnh trên thay glassfish bằng login của bạn khi đăng nhập ubuntu)

Nếu cần thiết, thay đổi giới hạn số tập tin có thể mở cùng lúc cho một người dùng bằng cách thêm thông tin sau trong tập tin /etc/security/limits.conf :
glassfish soft nofile 4096
glassfish hard nofile 8192

rồi khởi động lại Ubuntu. Chú ý, trong trường hợp của bạn nên thay "glassfish" trong hai dòng trên bằng login của bạn.

Kiểm tra một số tham số của Linux. Đôi khi ta cần điều chỉnh tham số về dung lượng bộ nhớ chia sẻ [SHMMAX : Maximum size of shared memory segment (bytes);
SHMMIN : Minimum size of shared memory segment (bytes)] với các dòng lệnh sau :
$ sysctl -e kernel.shmmax
$ sysctl -e kernel.shmall

Nếu cần, gán cứng các tham số này trong tập tin /etc/sysctl.conf bằng cách thêm các dòng sau :
kernel.shmmax=134217728
kernel.shmall=8388608

134217728 tương ứng 128MB; 8388608 tương ứng 8MB

Hoặc có thể thay đổi các giá trị này trong phiên (session) hiện hành bằng cách gõ các dòng lệnh sau :
$ sudo sysctl -w kernel.shmmax=134217728
$ sudo sysctl -w kernel.shmall=8388608

Một số lệnh khác khi dùng glassfish, ở đây không chỉ rõ domain thì glassfish tự hiểu là domain1 :
Triển khai (deploy) ear, <application name> thay bằng tên của ứng dụng cần triển khai
$ asadmin deploy <application name>.ear

Gỡ bỏ (undeploy) một ứng dụng được triển khai khỏi glassfish
$ asadmin undeploy <application name>

Liệt kê các ứng dụng hiện được triển khai trong glassfish
$ asadmin list-applications

Khởi động lại
$ asadmin restart-domain
Lệnh này tương đương với lệnh sau
$ asadmin restart-domain domain1

Thay đổi cấu hình của một ứng dụng triển khai trong glassfish được định nghĩa trong tập tin domain.xml (ở đây glassfish được cài đặt tại thư mục gốc của người dùng)
$ gedit ~/glassfishv3.1.2.2/glassfish/domains/domain1/config/domain.xml

Nếu ứng dụng của bạn xài hệ quản trị cơ sở dữ liệu PostgreSQL chẳng hạn, bạn cần tải driver của PostgreSQL về chẳng hạn cho phiên bản postgresql-9.3 tại đường dẫn sau http://repo1.maven.org/maven2/org/postgresql/postgresql/9.3-1100-jdbc41/postgresql-9.3-1100-jdbc41.jar

Sau đó chép driver này vào thư mục /usr/share/java/ cho dễ quản lý
Vào thư mục sau của glassfish
$ cd ~/glassfishv3.1.2.2/glassfish/domains/domain1/lib/ext

Rồi tạo đường dẫn biểu tượng đến driver vừa chép vào thư mục /usr/share/java/ như sau :
$ ln -s /usr/share/java/postgresql-9.3-1100-jdbc41.jar postgresql.jar


Thứ Ba, 17 tháng 12, 2013

Ubuntu : Cài đặt Java trong Ubuntu

Bài này giới thiệu cách cài đặt thủ công Java (jdk) trong Ubuntu.

Trước hết cần kiểm xem máy của bạn là 32 hay 64 bit để tải gói jdk thích hợp về cài đặt với lệnh sau :
$ uname -a

Sau đó tải gói jdk tương ứng về máy của bạn, ở đây tôi tải jdk-6u37-linux-x64.bin (cho 64 bit) (hay jdk-6u37-linux-i586.bin cho 32 bit) tại đường dẫn sau http://www.oracle.com/technetwork/java/javase/downloads/jdk6u37-downloads-1859587.html

Chép tập tin tải về (trong thư mục Downloads tại Home) vào thư mục /usr/lib/jvm bằng tài khoản root (sudo)
$ sudo cp Downloads/jdk-6u37-linux-x64.bin /usr/lib/jvm/

Vào thư mục /usr/lib/jvm/
$ cd /usr/lib/jvm/

rồi gán quyền thực thi cho tập tin với lệnh chmod như sau
$ sudo chmod u+x jdk-6u37-linux-i586.bin

Sau đó ta có thể gọi thực thi tập tin này
$ sudo ./jdk-6u37-linux-i586.bin

lệnh này sẽ tạo thư mục /usr/lib/jvm/jdk1.6.0_37 chứa jdk cài đặt
Xoá đường dẫn tượng trưng (symbolic link) /usr/lib/jvm/java-6-sun nếu có. Rồi tạo đường dẫn tượng trưng mới đến thư mục vừa cài đặt jdk
$ sudo ln -s /usr/lib/jvm/jdk1.6.0_37 /usr/lib/jvm/java-6-sun 

Mở tập tin .profile; <user name> ở đây là tên thư mục gốc của người dùng
$ gedit /home/<user name>/.profile


Rồi thêm biến JAVA_HOME bằng cách thêm vào cuối tập tin này nội dung sau :
# Java
export JAVA_HOME="/usr/lib/jvm/java-6-sun"
export PATH="$JAVA_HOME/bin:$PATH"


Trong /home/<user name> gọi thực thi tập tin .profile như sau
$ . .profile

Kiểm tra phiên bản java vừa cài đặt bằng cách gõ lệnh sau
$ java -version


Tôi có kết quả như sau
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01, mixed mode)


Trong trường hợp gõ lệnh này mà thấy lỗi, nên kiểm tra biến môi trường JAVA_HOME có được định nghĩa chính xác hay không với lệnh : 
$ export


Một khi cài đặt xong xuôi, xoá tập tin jdk-6u37-linux-i586.bin
$ sudo rm jdk-6u37-linux-x64.bin


Thứ Sáu, 14 tháng 6, 2013

Telnet : Dùng telnet trong windows

- Gõ dòng lệnh này trong command prompt để khởi động telnet phía khách (client)
telnet.exe

- Sau khi telnet khởi động, kích hoạt chế độ echo những kí tự được gõ vào màn hình lệnh
set localecho

- Kích hoạt chế độ chuyển phím Enter thành ký tự xuống dòng và về đầu dòng (CR & LF : carriage return và line feed)
set crlf

- Mở kết nối đến một trang web (ở đây là trang google.com) tới cổng TCP 80
o www.google.com 80

- Chú ý là telnet không thông báo cho biết là bạn đã thực sự kết nối hay chưa. Nhấn Enter để con trỏ chuyển đến dòng tiếp theo hay đầu trang.

- Thử lấy trang mặc định của trang google.com bằng cách nhập các dòng sau. Sau khi nhập dòng thứ hai, nhấn hai lần Enter để cho biết đây là thông điệp gửi đến máy chủ (server)
GET / HTTP/1.1
Host: www.google.com

- Nếu mã trạng thái (status code) là 200, tức máy chủ trả lời thành công và nội dung trả lời được gởi trong phần body. Nếu mã là 302 chẳng hạn, tức máy chủ tìm thấy trang web và chuyển tới (redirect) trang khác để trả lời, chẳng hạn trang http://www.google.vn/

- Nhấn Ctrl+[ để trở về trang lệnh của Telnet

Thứ Ba, 7 tháng 5, 2013

Model 1/2, MVC : Sơ lược về Mô hình 1 (Model 1), Mô hình 2 (Model 2) và mẫu Mô hình - Mặt nhìn - Khối điều khiển (MVC : Model-View-Controller) và các biến thể của nó MVP, PM, MVVM

1. Mô hình 1 và 2

Trong bản tiền phát hành của đặc tả JavaServer Pages, Sun có đề cập đến hai mô hình khi dùng công nghệ JSP gọi là Mô hình 1 (Model 1) và Mô hình 2 (Model 2). Tuy sau này, hai mô hình này không xuất hiện trong bản đặc tả chính thức nhưng hai thuật ngữ này vẫn được tiếp tục sử dụng.

Trong Mô hình 1, JSP được sử dụng để xử lý mọi tác vụ bao gồm việc xử lý truy vấn gửi từ phía khách, thực hiện các logic xử lý, phát sinh trả lời ...Tuy có thể được sử dụng để phát triển ứng dụng web đơn giản và nhỏ, mô hình này không được khuyến khích sử dụng. Vì mặc dù có tách bạch phần trình bày (presentation) và nội dung (content) do mọi truy vấn dữ liệu được thực hiện thông qua các JavaBeans; nhưng nó gây ra việc viết nhiều mã java xử lý truy vấn ở trang jsp và việc lặp lại mã nên phức tạp khi bảo trì và thay đổi.

Trong Mô hình 2, servlet được sử dụng cho phần xử lý truy vấn từ người dùng và JSP cho việc phát sinh trả lời. Servlet nhận truy vấn từ phía khách, thực hiện những tác vụ cần thiết để có được thông tin nhằm khởi tạo các beans cho trang JSP dùng, và thực hiện việc điều phối, tức việc chuyển đến trang JSP trả lời. Mô hình này phân tách phần logic lấy và thao tác xử lý nội dung với phần hiển thị nội dung nên nó thường được gắn với mẫu Mô hình - Mặt nhìn - Khối điều khiển MVC


Thứ Năm, 2 tháng 5, 2013

Java : Ví dụ JSP chứng thực (authentication)

Trong thực hành khi viết một ứng dụng web bằng JSP ta thường sử dụng servlet cho phần xử lý và trang JSP cho phần trình bày (giao diện). Ví dụ dưới đây chỉ mang tính chất giới thiệu JSP, vì tất cả phần trình bày và xử lý đều được viết bằng JSP tuy có phân biệt trang JSP cho trình bày và trang JSP cho xử lý, vì suy cho cùng JSP cũng là servlet và mọi việc ta có thể làm với servlet thì ta đều có thể làm với JSP. Như đã nói, cách viết phần xử lý dùng JSP không nên áp dụng trong thực tiễn khi viết ứng dụng web.

Dưới đây ta sẽ xây dựng một ứng dụng web cho phép chứng thực người dùng. Ứng dụng này chỉ đơn giản cho phép người dùng đăng nhập và đăng xuất. Ngoài ra nó còn có thêm phần quản lý truy nhập tuỳ theo vai trò người dùng.

Ta xây dựng một thư mục dự án như sau :

Thứ Ba, 30 tháng 4, 2013

Java : Giới thiệu JSP (JavaServer Pages)

1. JSP là gì?

JSP là một công nghệ cho phép thực hiện dễ dàng việc viết các trang web động (dĩ nhiên ta cũng có thể viết các trang web tĩnh với JSP). Cụ thể, một trang JSP là một trang HTML (hay XML) trong đó có trộn lẫn các mã Java, tức các thành phần JSP, cho phép thực hiện nội dung động. Các trang JSP có phần mở rộng .jsp. Một trang jsp có thể là một bao gồm nhiều tập tin, mà các tập tin này có thể là một trang jsp hoàn chỉnh hay những đoạn (fragment) của một trang jsp. Những đoạn jsp này có phần mở rộng là .jspf

Như ta đã biết, việc viết nội dung html trả lời trong servlet bằng cách dùng các lệnh out.println() là một việc tốn nhiều công sức, đặc biệt khi nội dung html trả lời càng phức tạp. Việc này còn tệ hơn khi ta muốn bảo trì hay thay đổi nội dung trả lời. JSP đem lại một giải pháp tiện lợi hơn khi cho phép chèn nội dung động vào trang web, nó còn cho phép việc tách bạch phần trình bày và logic xử lý nội dung. Với servlet thì ta chèn mã html để phát sinh trong lớp java còn JSP thì ngược lại, ta chèn mã java trong trang html.

Thứ Tư, 24 tháng 4, 2013

Java : Ví dụ Servlet chứng thực 2 (authentication) cấu hình bằng web.xml

Trong bài này ta dùng lại Servlet chứng thực người dùng của bài trước nhưng chỉ khác ở chỗ là ta sẽ cấu hình để ánh xạ servlet bằng tập tin cấu hình web.xml thay vì dùng dẫn giải (annotation)

Tạo thư mục dự án như sau :
Ta dùng lại lớp AuthenticationServlet của bài trước nhưng loại bỏ dẫn giải @WebServlet("/logon")

Thứ Ba, 23 tháng 4, 2013

Java : Ví dụ Servlet chứng thực (authentication)

Trong bài này ta sẽ tạo Servlet thực hiện việc chứng thực người dùng (authentication) khi đăng nhập (login).

Ta tạo thư mục dự án như sau :
Lớp AuthenticationServlet định nghĩa Servlet chứng thực như sau :

Java Servlet : Giới thiệu

1. Java Servlet là gì?

Với mục đích tương tự như Java Applet, Java Servlet nhằm cung cấp nội dung động đến người dùng; nhưng trái với các applet chạy ở phía khách (trên trình duyệt web chẳng hạn), các servlet là những môđun mã Java chạy trên máy chủ web (server web). Về mặt từ ngữ applet có nghĩa là ứng dụng nhỏ (bắt nguồn từ từ application với hậu tố -et hàm nghĩa là nhỏ), hiểu theo nghĩa tương tự servlet cũng là ứng dụng nhỏ chạy trên máy chủ (ghép của server và applet). Servlet không gắn chặt với một giao thức khách-chủ đặc thù nào cả, nhưng vì hầu như thường được dùng với giao thức HTTP nên từ Servlet thường được hiểu với nghĩa HTTP Servlet.

Một servlet được thực thi động trên máy chủ và cho phép mở rộng thêm chức năng cho máy chủ này như : xử lý/lưu dữ liệu gởi từ mẫu HTML (HTML form), cung cấp dữ liệu động qua việc lấy thông tin thông qua kết nối với cơ sở dữ liệu, thực hiện giao dịch thương mại điện tử ...

Thứ Hai, 22 tháng 4, 2013

Sơ lược về máy chủ Web (Web server)

Một máy chủ web (web server) bao gồm tổng thể nhiều thành phần, dựa vào đó các ứng dụng web (web application) chạy. Ở đây ta giới hạn chỉ nói đến máy chủ web dành cho ứng dụng web dùng Java. Những thành phần của máy chủ web này có thể bao gồm :
- máy chủ HTTP (HTTP server)
- bộ chứa Servlet/JSP (Servlet/JSP container)
- gói hiện dựng JSF (bundled JSF implementation)
- máy chủ EJB (EJB server)
- bộ chứa EJB (EJB container)
- Các dịch vụ Java EE (JNDI Resources, JDBC DataSources, JMS, Web Services JAX-RS hay JAX-WS, JPA, JAAS ...)
- Các dịch vụ khác (SSI, SSL, Security Manager, ...)
- ...

Thứ Năm, 18 tháng 4, 2013

HTTP : Sơ Lược giao thức HTTP (HTTP protocole)

    Giao thức HTTP (Hipertext Transfer Protocol - Giao thức truyền tải siêu văn bản) là giao thức giao tiếp theo kiểu truy vấn - trả lời (request-response) giữa khách-chủ (client-server) được sử dụng phổ biến trên internet. Cũng nên biết là trên internet ngoài HTTP ta còn có rất nhiều giao thức khác như FTP (File Transfer Protocol - Giao thức truyền tập tin), SMTP (Simple Mail Transfer Protocol - Giao thức truyền tải thư tín đơn giản)... World Wide Web được xây dựng dưa trên nền tảng giao thức HTTP và công nghệ HTML (Hipertext Markup Language : Ngôn ngữ đánh dấu siêu văn bản).
    Một HTTP khách (HTTP client), chẳng hạn một trình duyệt web (web browser), dùng HTTP để truy vấn một tài liệu HTML, khi nhận được trả lời từ HTTP chủ (HTTP server), chẳng hạn máy chủ Apache (Apache HTTP server : httpd), nó sẽ định dạng (format) rồi hiển thị tài liệu này cho người dùng. HTTP được sử dụng để truyền tải không chỉ HTML, tuy nhiên HTML là ngôn ngữ giao tiếp (lingua franca) của web và ứng dụng web.