text:
Trang chủ
Ảnh Hot Girl | Hình Gái Xinh
Home
Menu 1
Drop Menu 1
Sub Menu 1
Sub Menu 2
Sub Drop Menu 3
Sub Drop Menu 3.1
Sub Drop Menu 3.2
Drop Menu 2
Sub Menu 1
Sub Menu 2
Sub Menu 3
Menu 2
Menu 3
Lãi Thị Kim Oanh
View »
Lãi Thị Kim Oanh
View »
Nguyễn Thúy Ngọc
View »
Next Page »
Comment
Popular Posts
Lãi Thị Kim Oanh
Nguyễn Như Ý
Gái Đắk Sin
Nguyễn Thúy Ngọc
Lãi Thị Kim Oanh
Giới thiệu
bảo thiên
Xem hồ sơ hoàn chỉnh của tôi
Trang
Trang chủ
Lưu trữ Blog
▼
2014
(4)
▼
tháng sáu
(4)
Lãi Thị Kim Oanh
Lãi Thị Kim Oanh
Nguyễn Thúy Ngọc
Nguyễn Như Ý
Có gi hot?
Lãi Thị Kim Oanh
Nguyễn Như Ý
Gái Đắk Sin
Nguyễn Thúy Ngọc
Lãi Thị Kim Oanh
Nhãn
kim oanh
nhu y
thuy ngoc
Test Footer
Random post
Template information
Support :
Your Link
|
Your Link
|
Your Link
Copyright © 2013.
Ảnh Hot Girl | Hình Gái Xinh
- All Rights Reserved
Template
itviet360
Share by:
Phong Vũ

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Truncated: length

Content-Type: text/html; charset=UTF-8

Cache-Control: private, max-age=0

X-Content-Type-Options: nosniff

X-XSS-Protection: 1; mode=block

Server: GSE


text:
Từ khoá tìm nhiều: Kaew Lorm Petch, Kaew Lorm Petch youtube, Kaew Lorm Petch 2008, dem dinh Menh 2008, phim dem dinh Menh tap cuoi, xem phim Đêm Định Mệnh trọn bộ, xem phim Đêm Định Mệnh tập cuối, phim thai lan dem dinh Menh, phim thái lan Đêm Định Mệnh, xem phim dem dinh Menh phim thai lan, xem phim Đêm Định Mệnh phim thái lan, xem phim dem dinh Menh phim tam ly, xem phim Đêm Định Mệnh phim tâm lý, xem phim dem dinh Menh phim tinh cam, xem phim Đêm Định Mệnh phim tình cảm, Phim Đêm Định Mệnh tập 33, xem phim dem dinh Menh tap 7, xem phim dem dinh Menh tap 20, xem phim dem dinh Menh, Phim Đêm Định Mệnh tập 22,
Bomtan.Org - Xem phim online miễn phí, chất lượng hình ảnh rõ nét, tốc độ tải phim nhanh. Bom Tấn tổng hợp có chọn lọc các phim từ nhiều nguồn trên internet (youtube, picasa,...) để mang đến cho các bạn những bộ phim hành động, phim võ thuật, các thể loại phim tâm lý tình cảm hay nhất.
RSS - Sitemap

markdown:
**Từ khoá tìm nhiều:**Kaew Lorm Petch, Kaew Lorm Petch youtube, Kaew Lorm Petch 2008, dem dinh Menh 2008, phim dem dinh Menh tap cuoi, xem phim Đêm Định Mệnh trọn bộ, xem phim Đêm Định Mệnh tập cuối, phim thai lan dem dinh Menh, phim thái lan Đêm Định Mệnh, xem phim dem dinh Menh phim thai lan, xem phim Đêm Định Mệnh phim thái lan, xem phim dem dinh Menh phim tam ly, xem phim Đêm Định Mệnh phim tâm lý, xem phim dem dinh Menh phim tinh cam, xem phim Đêm Định Mệnh phim tình cảm, Phim Đêm Định Mệnh tập 33, xem phim dem dinh Menh tap 7, xem phim dem dinh Menh tap 20, xem phim dem dinh Menh, Phim Đêm Định Mệnh tập 22,
Bomtan.Org - Xem phim online miễn phí, chất lượng hình ảnh rõ nét, tốc độ tải phim nhanh. Bom Tấn tổng hợp có chọn lọc các phim từ nhiều nguồn trên internet (youtube, picasa,...) để mang đến cho các bạn những bộ
[, phim hành động](http://bomtan.org/the-loai/hanh-dong.html) [, các thể loại](http://bomtan.org/the-loai/vo-thuat.html) **phim võ thuật** [tình cảm hay nhất.](http://bomtan.org/the-loai/tam-ly.html) **phim tâm lý**

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Content-Encoding: gzip

Vary: Accept-Encoding,User-Agent

Connection: close


text:
Quý khách đang tìm mua
sim số đẹp
0978223456 ?
Chúng tôi đã xóa 0978223456 khỏi website của chúng
tôi
khả
năng cao là số sim này đã bán
Quý
khách hãy
nhấn vào đây để chọn sim khách giống với số quý khách đang tìm
Xem Ngũ hành Năm Sinh

markdown:
|
|
|
|
|
|
|
|
Chọn sim số đẹp theo giá
Sim năm sinh
![]()
|
|
|
|
Chọn sim theo mạng
Chọn sim theo ngũ hành
Tin tức
Tải báo giá
|
|
|
|![]()
|
|
CÔNG TY CỔ PHẦN THƯƠNG MẠI ĐẦU TƯ VÀ PHÁT TRIỂN CÔNG NGHỆ STV
STV Inc , JSC
MST: 010.595.1122
|
|![]()
Địa chỉ:
Phòng 803 Nhà CT2A , 609 Trương Định, HN
Hotline:
0937.666.886 - 097335.7777
Q.3 - HCM
Q.Ninh Kiều - Cần Thơ | Giao dịch toàn quốc

Content-Type: text/html

Cache-Control: public


text:
Hàng luôn có sẳn và đủ size từ 35 đến 45
Mình free ship cho các bạn tại 3 địa điểm :
- Hệ thống trường dân lập quốc tế Việt- Úc : 592 đường 3 tháng 2 F.14, Q.10 TP.HCM
- Siêu thị Sài Gòn 3 tháng 2
- Nhà sách Phương Nam - Phú Thọ 3 tháng 2
(Mình bán tại nhà vui lòng liên hệ điện thoại cho mình trước nhé - Thanks)
Địa chỉ liên hệ:
19A Nguyễn Trường Tộ, F.Tân Thành, Q.Tân Phú - TP.HCM
Điện thoại nhà : 08.38124509
Mobile : 01228643209
Yahoo ID : catbaby0611
Chuyển khoản: 6460205173864 tại ngân hàng AGRIBANK - Chủ tài khoản: Nguyễn Thị Thanh Ngân
Một số mẫu giầy Van - Bata:

Cache-Control: public, max-age=360

Content-Type: text/html; charset=utf-8


markdown:
Viem am dao la tinh trang thuong gap o phu nu va nhieu nguoi trong so do rat lo lang khi duoc chan doan la viem am dao vi ho khong biet nhieu ve van de nay. Hieu biet ve benh nay giup nguoi phu nu biet cach doi pho voi cac trieu chung va quan trong hon la biet cach dieu tri nhu the nao.
1. Cac nguyen nhan thuong gap cua viem am dao
Viem am dao do vi khuan la nguyen nhan pho bien nhat chiem toi 50% cac truong hop. Nguyen nhan do thay doi vi khuan cu tru binh thuong trong am dao va lam cho chung phat trien qua muc nhu la Gardnerella vaginalis. Cac yeu to nguy co bao gom thut rua va thut rua thuong xuyen dieu nay co lien quan den hoat dong tinh duc va co the la co ban tinh moi hoac co nhieu ban tinh. Nhung phu nu chua tung quan he tinh duc hiem khi bi viem am dao. Ban se khong bi viem am dao do cho ngoi trong nha ve sinh, giuong ngu hay be boi. Phu nu co thai cung de bi viem am dao hon.
Viem am dao do nam chu yeu la Candida albicans. Nhiem nam men co the lan sang cac phan khac cua co the nhu da, niem mac, van tim, thuc quan va cac vung khac. Benh co the gay ra cac nhiem trung toan than de doa tinh mang o nhung nguoi suc de khang kem nhu phu nu mang thai, nguoi co HIV duong tinh hoac dang dung steroid. Gan 50% phu nu it nhat bi nhiem nam mot lan trong doi benh khong duoc coi la benh lay truyen qua duong tinh duc, tuy nhien khoang 10-15% nam gioi se co trieu chung ngua duong vat sau khi quan he voi ban tinh bi nhiem nam. Nhiem nam la do su phat trien qua muc nam cu tru binh thuong trong co the kiem soat su phat trien cua nam. Neu su can bang tu nhien cua cac sinh vat bi pha vo, nam se phat trien khong kiem soat duoc. Mat kiem soat su phat trien cua nam do mot so yeu to sau:
Su dung khang sinh: khang sinh pha huy vi khuan bao ve trong am dao. Nhung vi khuan nay binh thuong ngan can nam candida phat trien qua muc. Nhiem nam co the xay ra sau khi dung khang sinh de dieu tri cac benh khac.
Dai thao duong: ca dai thao duong va thai nghen khien cho am dao phu hop hon voi su phat trien cua nam. Nhung tinh trang nay lam ha thap du tru glycogen trong cac te bao am dao va dieu nay lam tang luong duong (va pH) cua am dao nen lam tang nguy co nhiem nam.
Thuoc tranh thai: nhung thay doi moi truong am dao xay ra khi am dao xay ra khi muc hormone tang len do uong thuoc tranh thai co chua estrogen, su thay doi nay tao moi truong thuan loi cho nam phat trien va gay ra cac trieu chung.
Nhung thay doi hormone nhu duong phong noan, man kinh hoac co thai.
Su dung steroid.
Mac quan lot qua chat hoac khong phai loai vai bong. Dieu nay co the tang nhiet do, do am va kich ung tai cho.
He mien dich suy giam.
Thut rua ama dao, xit rua ve sinh phu nu loai co huong thom.
Cao xuoc am dao.
Viem am dao do Trichomanas:la benh lay truyen qua duong tinh duc do Trichomonas Vaginalis. Day la benh chu yeu o duong nieu va duong tinh duc. Voi phu nu, am dao la vi tri nhiem trung thuong gap nhat, con voi nam gioi thi nieu dao la vi tri thuong gap nhat.
Cac nguyen nhan khac cua nhiem trung am dao la thuoc diet tinh trung, cac san pham ve sinh phu nu, cac chat tay va lam mem vai. Cung co the mac benh lay truyen qua duong tinh duc khac. Phu nu nhieu tuoi co the bi viem teo am dao (mong thanh am dao do man kinh). Cac loai di vat nhu bang ve sinh hoac di vat khac co the gay kich ung am dao.
2. Cac trieu chung cua nhiem trung am dao
Dich tiet am dao, ngua, rat la cac trieu chung thuong gap cua cac loai viem am dao. Mac du cac trieu chung nhiem trung co the giong nhau nhung khi hu (dich tiet am dao) lai khac nhau ve mau sac va mui.
Doi khi khi hu la hoan toan binh thuong o phu nu do tuoi sinh san. Binh thuong cac tuyen o co tu cung tiet ra chat nhay trong chay xuong tro lan voi vi khuan, cac te bao am dao bong da va chat tiet cua tuyen Bartholin o lo mo am dao. Nhung chat nay (thuoc vao luong chat nhay) lam chuyen mau chat nhay thanh mau trang va se co mau vang khi tiep xuc voi khong khi. Co nhung thoi diem trong chu ky kinh nguyet cac tuyen cua co tu cung tiet ra nhieu chat nhay hon va phu thuoc vao luong estrogen, dieu nay hoan toan binh thuong. Kich thich tinh duc va stress cam xuc co lien quan den luong khi hu binh thuong va khi do chat tiet trong va giong chat nhay.
Neu chat tiet am dao co mau sac bat thuong nhu mau xanh, co mui kho ngui, thay doi ve dam do hoac so luong thi ban co the bi viem am dao.
Viem am dao do vi khuan:gay dich tiet am dao bat thuong co mui kho chiu, nhu mui tanh nhu ca, nhat la sau khi quan he tinh duc. Dich tiet thuong co mau trang hoac xam va co the gay loang. Ban cung co the co cam giac rat khi di tieu tien hoac ngua quanh lo ngoai am dao hoac ca hai. Mot so phu nu khong co trieu chung gi.
Viem am dao do nam: gay khi hu nhu phomat sua dac mau trang xam va rat ngua bo phan sinh duc ngoai. Thuong dau khi di tieu hoac quan he tinh duc. Khong phai luc nao ban cung co hu khi. Nam gioi bi nhiem nam candida sinh duc co the ngua o duong vat. Hau het ban tinh cua phu nu nhiem nam deu khong co bieu hien trieu chung gi.
Viem am dao do trichmonas
Gay khi hu co bot mau vang xanh, ngua va kich ung bo phan sinh duc ngoai, cam giac rat bong khi di tieu (doi khi nham voi nhiem trung duong tiet nieu) kho chiu khi giao hop. Vi nhiem trichmonas la benh lay truyen qua duong tinh duc nen cac trieu chung co the xuat hien trong vong 4-20 ngay sau phoi nhiem. Nam gioi hiem khi co trieu chung va neu co thi co the la dich tiet trang loang o dau duong vat va dau hoac kho chiu khi tieu tien.
Dau khong phai la trieu chung pho bien ngoai tru ngua va nen di kham khi co dau.
Neu ban bi tinh trang goi la dau am dao co the ban bi nong rat, dau nhoi, kich ung o phan sinh duc ngoai ma khong bi nhiem trung hoac ban co the bi mac benh da vung am ho hoac am dao, day la mot tinh trang hoan toan khac va cam giac dau cua ban co the tang va giam tung luc.
Mot so benh vung chau khac co cac trieu chung giong nhu nhiem nam am dao nen ban can phai di kham ngay khi co:
Khi hu kem theo sot, non va dau bung hoac neu co khi hu kem theo chay mau am dao bat thuong khong trong chu ky kinh.
Cac trieu chung khong cai thien trong nhieu ngay, luong khi hu nhieu hoac cac trieu chung ban dau nang len.
Cac ton thuong hoac ban co ca o noi khac nua (bong mau do chua day mu va nhay cam dau co the lan ra dui hoac hau mon).
3. Dieu tri am dao
Chan doan thuong dua vao cac trieu chung va ket qua xet nghiem nuoc tieu, nuoi cay dich am dao. Dieu tri dua vao tac nhan gay benh. Tuy theo tac nhan gay benh ma bac si co the ke don thuoc dat am dao hoac khang sinh duong uong. Dieu tri con tuy thuoc vao loai viem am dao, muc do nang cua nhiem trung, thoi gian nhiem trung, tai phat nhiem trung va ban co thai hay khong.
Tu cham soc.
Viem am dao do vi khuan va trichmonas khong the khoi khi tu dieu tri tai nha ma can phai dung thuoc khang sinh.
Neu ban chua tung bi nhiem nam truoc day, thi dieu quan trong la phai co chan doan chinh xac cua bac si. Sau lan nhiem trung dau tien, neu tai phat lan sau ma ban chac la nhiem nam thi co the tu dieu tri bang cac thuoc chong nam dat am dao.
Vi luon co san cac thuoc dieu tri nen nhieu phu nu tu dieu tri, nhung thuc te 2/3 truong hop la thuc su khong phai nhiem nam khi do se dan den tinh trang nhiem trung khang thuoc rat kho dieu tri.
Mot so cach phu nu hay dung nhung chua duoc chung minh la co hieu qua:
Thut rua bang giam: trong khi nhieu phu nu tu thut rua sau ky kinh hoac sau khi quan he tinh duc nhung thuc su khong nen lam nhu vay vi am dao co kha nang tu lam sach. Thut rua co the loai di vi khuan co loi o thanh am dao nen thuc te tinh trang cua ban co the nang hon.
An sua chua co chua chung acidophilus song. Sua chua tac dong nhu moi truong tot cho vi khuan co loi phat trien. Mac du vay van chua co ket luan chinh thuc tu nghien cuu khoa hoc ve loi ich cua viec an sua chua co bo sung lactobacillis acidphilus trong phong nhiem nam.
Cac loai thuoc ban tu do khac co chua khang sinh histamine hoac do thuoc te tai cho chi lam mo trieu chung ma khong dieu tri duoc benh.
Neu ban duoc chan doan la viem am dao can giu cho vung sinh duc kho va sach se, khong nen tam bang bon tam de ngan ngua nhiem trung sau nay. Khong thut hoac su dung bot hoac thuoc xit ve sinh khi dang dieu tri. Khong nen sinh hoat tinh duc khi dang dieu tri.
4. Theo doi va phong ngua
Bac si theo doi ket qua xet nghiem phien do co tu cung va phien do Pap. Ban nen di kham dinh ky hang nam mac du khong co bat cu trieu chung gi.
Vi can bang hoa hoc cua am dao rat nhay cam, nen cach tot nhat la de am dao tu lam sach thong qua tiet chat nhay. Nuoc am, xa bong loai nhe khong huong trong khi tam la cach tot nhat de lam sach bo phan sinh duc ngoai. Cac loai xa bong, bot, xit co mui thom co the khong can thiet va co the co hai.
Thut rua khong phai la mot hinh thuc tranh thai va thut rua sau quan he tinh duc khong ngan ngua duoc thu thai.
Cach tot nhat de phong ngua viem am dao do vi khuan hien chua biet. Tuy nhien, moi nguoi deu biet rang viem am dao do vi khuan co the lien quan toi viec ban tinh moi hoac co nhieu ban tinh. Phong ngua co ban nhat la su dung bao cao su han che so luong ban tinh, tranh thut rua va su dung cac thuoc theo don de dieu tri viem am dao tham chi ngay ca khi het trieu chung.
Nhiem nam am dao co the de dang phong ngua trong cac truong hop bang cach:
- Giu cho vung am dao kho nhat sau khi tam.
- Lam ve sinh vung sinh duc tu truoc ra sau.
- Mac quan lot loai rong hon va bang loai vai cotton tham nuoc.
- Khong mac quan bo qua chat.
- Phu nu co thai nen di kham bac si ngay khi co cac trieu chung.
- Tranh cac chat kich thich nhu co mui thom, tam thuong xuyen la du de lam sach am dao.
Co the phong ngua nhiem trichomonas. Neu ban da duoc chan doan la nhiem trichomonas thi nen kiem tra ca ban tinh vi ca hai co the mac benh lay truyen qua duong tinh duc khac va cung co the bi tai nhiem trung neu khong dieu tri. Tinh duc an toan bang cach dung bao cao su va kham tu van ve cac benh lay truyen qua duong tinh duc co the giup lam tai phat nhiem trung va tai nhiem trung.
5. Tien luong
Neu duoc chan doan va dieu tri dung tat ca cac the viem am dao thuong dap ung tot voi dieu tri, cac trieu chung se giam va het. Neu cac trieu chung khong het hoac tai lai co the ban bi nhiem trung tai phat va can di kham lai.
Viem am dao do vi khuan co lien quan voi thai ngoai tu cung va cung co the gay cac van de thai nghen nhu de non hoac tre so sinh nhe can. Bac si can theo doi sat tinh trang cua ban neu nhu ban co thai hoac da tung de non truoc day.
Viem am dao do trichomonas co lien quan voi tang nguy co mac cac benh lay truyen HIV va co the khien cho ban sinh con nhe can hoac sinh non.
Ban co the doc ban tieng Viet co dau cua bai viet
*Bạn biết gì về bệnh viêm âm đạo* bang cach nhan chuot vao duong dan tren.
Nhan xet, hay lien he ve tin
** co the gui bang duong dan o duoi. Ban nen gui kem tieu de bai viet Ban biet gi ve benh viem am dao**

Cache-Control: max-age=280, public


text:
v_line
Tài khoản của tôi
(đăng nhập)
Đi:
Calendar
Đảm Bảo Giá Tốt Nhất
Vizisport 12.
Pasareti street 133
809/B Ulloi Road
2 Szuret Street
22 Vaci Street
5 lý do đặt phòng với Agoda
Hơn 450.000 khách sạn trên khắp thế giới
7.000.000+ nhận xét về khách sạn
Có mặt hơn 47.000 thành phố trên toàn thế giới
Bảo đảm giá tốt nhất! Giá phòng khách sạn thay đổi mỗi ngày!
Được hơn 7.000.000 khách hàng tin dùng
Ưu đãi đặc biệt của Agoda
Bao gồm các ưu đãi giờ chót(có thể trong cùng ngày!)Miễn phí một đêm nghỉNâng cấp hạng phòng miễn phí!
Customer Support
0.18 Km.
0.2 Km.
0.21 Km.
0.4 Km.
0.41 Km.
0.44 Km.
0.46 Km.
0.49 Km.
0.5 Km.
0.51 Km.
0.53 Km.
0.55 Km.
0.57 Km.
Về đầu trang
Bản quyền © 2005 – 2014 Agoda Company Pte. Ltd. Giữ toàn quyền.
AGODA ® là thương hiệu được đăng ký của AGIP LLC, sử dụng theo giấy phép của Agoda Company Pte. Ltd. Agoda là một phần của
(NASDAQ:PCLN)
AS-AGWEB-3B06

Cache-Control: private, no-cache, no-store, must-revalidate, proxy-revalidate

Connection: Keep-Alive

Vary: Accept-Encoding


text:
v_line
Đăng nhập
hoặc
Đăng Ký
Đi:
Calendar
Đảm Bảo Giá Tốt Nhất
Munga 4
Narva mnt 7C
Manniku Street 89
Narva Mnt 7-4
5 lý do đặt phòng với Agoda
Hơn 450.000 khách sạn trên khắp thế giới
7.000.000+ nhận xét về khách sạn
Có mặt hơn 47.000 thành phố trên toàn thế giới
Bảo đảm giá tốt nhất! Giá phòng khách sạn thay đổi mỗi ngày!
Được hơn 7.000.000 khách hàng tin dùng
Ưu đãi đặc biệt của Agoda
Bao gồm các ưu đãi giờ chót(có thể trong cùng ngày!)Miễn phí một đêm nghỉNâng cấp hạng phòng miễn phí!
Customer Support
0.02 Km.
0.04 Km.
0.05 Km.
0.07 Km.
0.09 Km.
0.1 Km.
0.11 Km.
0.14 Km.
Về đầu trang
Bản quyền © 2005 – 2014 Agoda Company Pte. Ltd. Giữ toàn quyền.
AGODA ® là thương hiệu được đăng ký của AGIP LLC, sử dụng theo giấy phép của Agoda Company Pte. Ltd. Agoda là một phần của
(NASDAQ:PCLN)
AS-AGWEB-3C06


text:
v_line
Tài khoản của tôi
(đăng nhập)
3/16 Sawatdirak Rd., Patong, Phuket, Thái Lan
(Xem bản đồ)
Đặt phòng bây giờ!
Đăng ký bây giờ
và nhận đặt phòng trong giây lát!
ĐẶT PHÒNG TRƯỚC
THANH TOÁN SAU
Hiện đang có hàng ngàn phòng khách sạn trên toàn thế giới.
Đặt thông minh. Đặt với Agoda
Kiểm tra Giá & Phòng trống
Đảm Bảo Giá Tốt Nhất
Đi:
Calendar
Rất tiếc, không còn phòng trống ở Rayaburi Hotel Patong cho những ngày mà bạn đã chọn.
Các khách hàng đã xem khách sạn này thường đặt
Xin nhập ngày tháng để xem giá phòng tốt nhất của chúng tôi
Hình ảnh của Rayaburi Hotel Patong
đưa đón khách sạn/sân bay
dịch vụ trông trẻ
quầy nước
người vận chuyển hành lý
thang máy
dịch vụ giặt là
nhà hàng
phục vụ ăn tại phòng
dịch vụ du lịch
bồn tắm nóng
mát xa
tắm hơi
các phòng đều có wifi miễn phí
Wi-Fi ở khu vực công cộng
Đặt phòng bây giờ!
Nhanh lên – Ưu đãi có hạn!

Mô tả Khách sạn

Chính sách Khách sạn
Khách trên 9 tuổi được coi là người lớn.
Giường phụ tùy thuộc vào loại phòng bạn đăng ký, xin vui lòng kiểm tra thông tin phòng để biết thêm chi tiết.

Thông tin hữu ích

Thông báo quan trọng
7,9
từ tổng 2687 nhận xét
Đặt phòng bây giờ!
Nhanh lên – Ưu đãi có hạn!
The Belle Resort
Rất Tốt
7,6
từ tổng 1729 nhận xét
Khu vực khách sạn: Patong
Amata Resort
Rất Tốt
7,7
từ tổng 2662 nhận xét
Palmyra Patong Resort
Tuyệt vời 8,1
từ tổng 4593 nhận xét
Được xây dựng vào năm 2003, Palmyra Patong Resort là điểm du lịch bổ sung cho Phuket và là sự lựa...
Baan Laimai Beach Resort
từ tổng 4266 nhận xét
Tìm khách sạn
Calendar
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Customer Support
Bản quyền © 2005 – 2014 Agoda Company Pte. Ltd. Giữ toàn quyền.
AGODA ® là thương hiệu được đăng ký của AGIP LLC, sử dụng theo giấy phép của Agoda Company Pte. Ltd. Agoda là một phần của
(NASDAQ:PCLN)
AS-AGWEB-3A04


text:
Giới thiệu
Kiến trúc phần mềm REST dựa trên việc truyển tải các đặc trưng của tài nguyên. Các web service RESTful đưa ra một số ưu điểm: Chúng đơn giản, nhẹ và nhanh. Một web service RESTful hiển thị một tập hợp các tài nguyên được nhận biết qua các URI. Các tài nguyên đáp ứng với các phương thức HTTP GET, POST, PUT và DELETE. Các tài nguyên có thể được truy cập theo các định dạng khác nhau, chẳng hạn như HTML, văn bản thuần, XML, PDF, JPEG hay JSON. API Java dùng cho các web service RESTful (JAX-RS - Java API for RESTful web services) được định nghĩa theo chuẩn JSR 311. Jersey là công cụ tham khảo cho JAX-RS để đơn giản hóa việc phát triển các web service RESTful bằng Java. (RESTful web services: là một phương pháp mới để tạo các web service đơn giản hơn so với các phương pháp tạo web service truyền thống).
Trong bài này, hãy sử dụng thư viện Apache HttpClient để tạo ra một trình client JAX-RS trên Android—nền tảng điện thoại di động thông minh phổ biến hiện nay. Bạn có thể tải về các mã ví dụ mẫu được sử dụng trong bài này.
Thiết lập môi trường
Trước khi tạo một trình client cho một web service JAX-RS, bạn cần phải thiết lập môi trường phát triển. Xem phần Tài nguyên để biết các liên kết.
- Cài đặt Eclipse.
- Cài đặt thêm plug-in Android Development Tools (ADT) cho Eclipse, để cung cấp các phần mở rộng để phát triển các ứng dụng Android trong Eclipse.
- Cài đặt Platform SDK cho Android 2.2. SDK của Android cung cấp các công cụ để phát triển các ứng dụng Android.
- Tạo một Android Virtual Device (AVD - Máy ảo Android), là một bộ mô phỏng các thiết bị thật chạy Android, trong Eclipse.
- Tải về tệp lưu trữ Jersey, jersey-archive-1.4.zip, có chứa các tệp nén
Java (JAR) của Jersey và các phụ thuộc cơ bản. Tải tệp JAR bó của
Jersey là jersey-bundle-1.4.jar.
Jersey được xây dựng bằng cách sử dụng JDK 6.0, vì thế bạn cũng cần cài đặt JDK 6.0.
- Cài đặt một máy chủ web như Tomcat hay một máy chủ ứng dụng như máy
chủ WebSphere® hoặc máy chủ WebLogic. Thêm các tệp JAR Jersey
trong Liệt kê 1 vào
CLASSPATHcủa môi trường thời gian chạy trong máy chủ ứng dụng/máy chủ web.
Liệt kê 1. Các tệp JAR Jersey
C:\Jersey\jersey-bundle-1.4.jar;C:\Jersey\jersey-archive-1.4\lib\asm-3.1.jar; C:\Jersey\jersey-archive-1.4\lib\jsr311-api-1.1.1.jar
Tạo một dự án Eclipse
Trong phần này, bạn sẽ tạo một dự án web và thêm khía cạnh JAX-RS vào dự án đó. Sử dụng các bước sau để tạo ra một dự án Eclipse.
- Chọn File > New và trong cửa sổ New, chọn Web > Dynamic Web Project. Nhấn Next.
- Đặt tên cho Project (chẳng hạn là AndroidJAX-RS) và nhấn New
Runtime, để cấu hình một môi trường runtime đích mới cho
máy chủ WebSphere, máy chủ Tomcat hoặc máy chủ WebLogic. Hình 1 hiển thị cửa sổ dự
án Web động hoàn chỉnh.
Hình 1. Cấu hình một môi trường runtime mới
- Trong cửa sổ New Server Runtime Environment, chọn một máy chủ, chẳng
hạn như máy chủ Tomcat, máy chủ WebSphere hoặc máy chủ WebLogic. Nhấn
Next, như trong Hình 2.
Hình 2. Chọn một máy chủ ứng dụng hoặc máy chủ web
- Trong cửa sổ New IBM WebSphere v6.0 Runtime, cấu hình một JRE và IBM WebSphere Installation Directory. Nhấn Next trong hộp thoại Dynamic Web Project. Chọn các giá trị thiết lập Java mặc định cho thư mục Source và thư mục Output và nhấn Next.
- Chỉ rõ gốc Bối cảnh là
AndroidJAX-RS, chọn Content Directory mặc định và nhấn Finish.
Một Dự án Web động được tạo ra và được thêm vào Project Explorer. Nhấn chuột phải vào nút project và chọn Properties.
- Chọn Project Facets, rồi chọn project facet là
JAX-RS (REST Web Services) 1.1. Nhấn vào
Further configuration required, như trong Hình 3.
Hình 3. Cấu hình Project Facet JAX-RS
- Trong cửa sổ JAX-RS Capabilities, quy định một tên Servlet (JAX-RS Servlet) và cấu hình một thư viện JAX-RS Implementation. Chọn Type as User Library và nhấn Manage.
- Trong cửa sổ User Libraries, nhấn New. Trong hộp
thoại New User Library, chỉ rõ một tên User library và nhấn
OK.
Một thư viện người dùng được thêm vào. Nhấn Add JARs để thêm các tệp JAR Jersey vào thư viện của người dùng. Như trong Hình 4, hãy thêm các tệp JAR Jersey sau đây:
- jersey-bundle-1.4.jar
- C:\Jersey\jersey-archive-1.4\lib\asm-3.1.jar
- C:\Jersey\jersey-archive-1.4\lib\jsr311-api-1.1.1.jar
Hình 4. Thêm các tệp JAR Jersey
- Trong cửa sổ JAX-RS Capabilities, chỉ rõ tên lớp servlet JAX-RS là
com.sun.jersey.spi.container.servlet.ServletContainer, như trong Hình 5. Nhấn OK.
Hình 5. Chỉ rõ lớp servlet JAX-RS
- Trong cửa sổ Project Facets, nhấn Apply như trong
Hình 6, rồi nhấn
OK.
Hình 6. Đồng ý các thiết lập JAX-RS Project Facet
Môi trường runtime đích được cấu hình với khía cạnh của dự án JAX-RS. Nhấn OK trong hộp thoại Properties.
Các thư viện Người dùng JAX-RS được bổ sung vào dự án và ánh xạ servlet
JAX-RS và ánh xạ servlet được cấu hình trong tệp web.xml. Bạn cần phải
thêm các phần tử
init-param cho các tham số init (khởi tạo)
com.sun.jersey.config.property.resourceConfigClass và
com.sun.jersey.config.property.packages. Liệt kê 2 hiển thị tệp
web.xml.
Liệt kê 2. Tệp web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/ xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <servlet> <description>JAX-RS Tools Generated - Do not modify</description> <servlet-name>JAX-RS Servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>jaxrs</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JAX-RS Servlet</servlet-name> <url-pattern>/jaxrs/*</url-pattern> </servlet-mapping> </web-app>
Tạo và chạy một lớp tài nguyên
Bước tiếp theo là tạo một tài nguyên web service RESTful bằng cách sử dụng
một lớp tài nguyên gốc. Một lớp tài nguyên gốc là một POJO có chú giải với
dấu chú giải
@PATH. Nó bao gồm ít nhất là một phương thức có
chú giải với dấu chú giải
@PATH hoặc
@GET,
@PUT,
@POST hoặc
@DELETE.
- Chọn File > New > Other. Trong hộp thoại New, chọn Java > Class và nhấn Finish.
- Trong cửa sổ New Java Class, như trong Hình 7, chỉ rõ:
- Thư mục Source:
AndroidJAX-RS/src
- Gói:
jaxrs
- Tên lớp:
HelloWorldResource
Nhấn Finish.
Hình 7. Tạo lớp tài nguyên
- Thư mục Source:
Hãy chú giải lớp Java bằng dấu chú giải
@PATH. Mã trong Liệt kê 3 chỉ rõ đường dẫn
URI trên đó lớp Java được lưu trữ trên máy chủ là
/helloworld.
Liệt kê 3. Chú giải lớp tài nguyên bằng @Path
@Path("/helloworld") public class HelloWorldResource { ... }
Để thêm các phương thức tài nguyên để sản xuất ba kiểu MIME khác nhau, hãy
thêm các phương thức
getClichedMessage(),
getXMLMessage() và
getHTMLMessage(). Hãy chú
giải mỗi phương thức trên bằng
@GET, để cho biết rằng các
phương thức này sẽ xử lý các yêu cầu HTTP GET. Hãy chỉ rõ
String làm kiểu trả về cho mỗi một trong các phương thức. Hãy
chú giải mỗi phương thức bằng
@PRODUCES và chỉ rõ một kiểu
MIME khác nhau cho mỗi phương thức.
Bây giờ bạn muốn cung cấp phương thức "Hello JAX-RS" bằng cách sử dụng các
kiểu MIME là
text/plain,
text/xml và
text/html. Phương thức
getXMLMessage được chú
giải bằng
@Produces (
"text/xml") tạo ra một
thông báo XML. Chỉ gỡ bỏ dấu chú thích cho một trong các phương thức đã
chú giải bằng
@GET. Nếu không chỉ rõ thành phần đường dẫn nào
khác để phân biệt, thì yêu cầu
@GET được chuyển đến phương
thức có chú giải bằng
@GET. Nếu có nhiều phương thức cùng
khớp được với một URI yêu cầu, thì sử dụng thuật toán lựa chọn JAX-RS để
chọn phương thức tài nguyên. Ví dụ, bạn có thể quy định nhiều phương thức
có dấu chú giải
@GET bằng cách sử dụng một id
path (đường dẫn) khác nhau cho các phương thức có chú giải
@GET. Liệt kê 4 cho thấy lớp tài nguyên gốc.
Liệt kê 4. Lớp tài nguyên gốc HelloWorldResource.java
package jaxrs; import javax.ws.rs.GET; import javax.ws.rs.Produces; import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; // The Java class will be hosted at the URI path //"/helloworld" @Path("/helloworld") public class HelloWorldResource { // The Java method will process HTTP GET requests @GET // The Java method will produce content identified by the MIME Media // type "text/plain" @Produces("text/plain") public String getClichedMessage() { // Return some cliched textual content return "Hello Android"; } // @GET // @Produces("text/xml") // public String getXMLMessage() { // return "<?xml version=\"1.0\"?>" + "<hello> Hello Android" + "</hello>"; // } // @GET //@Produces("text/html") //public String getHTMLMessage() { //return " " + "<title>" + "Hello Android" + "</title>" // + "
" + "Hello Android" + "
" + " "; // } }
Chạy lớp tài nguyên để tạo ra các kiểu đầu ra khác nhau. Đánh dấu chú thích
các phương thức không cần thử nghiệm và giữ lại một phương thức đã bỏ dấu
chú thích cho mỗi lần chạy thử nghiệm. Đầu tiên, hãy kiểm tra kiểu MIME
text/xml là kết quả đầu ra. Hãy khởi động máy chủ ứng
dụng/máy chủ web nếu nó chưa được khởi động. Nhấn chuột phải vào lớp tài
nguyên và chọn Run As > Run on Server
(Chạy trên máy chủ), như trong Hình 8.
Hình 8. Chạy lớp tài nguyên
Trên máy chủ, tham số init
com.sun.jersey.config.property.resourceConfigClass được khởi
tạo bằng
com.sun.jersey.api.core.PackagesResourceConfig và
tham số init
com.sun.jersey.config.property.packages được
khởi tạo bằng
jaxrs, như đã quy định trong tệp web.xml. Lớp
tài nguyên gốc
jaxrs.HelloWorldResource được tìm thấy. Phiên
bản 1.4 của ứng dụng Jersey được khởi tạo và mô đun AndroidJAX-RS triển
khai trên máy chủ.
Tạo một dự án trình máy khách Android
Trong phần này, bạn sẽ tạo một dự án Android để tạo ra trình máy khách JAX-RS cho Android trong dự án đó.
- Trong IDE Eclipse, chọn File > New. Trong hộp thoại New, chọn Android > Android Project, rồi nhấn Next.
- Điền vào các trường trong cửa sổ New Project Android, như trong Hình 9.
- Tên dự án:
AndroidJAXRSClient
- Build đích: Android Platform 2.2 API 8
- Các thuộc tính: Tên ứng dụng là
AndroidJAXRSClientvà tên gói là
androidjaxrs
- Chọn Create Activity (Tạo hoạt động) và chỉ rõ lớp Activity là
AndroidJAXRSClient.
Một hoạt động đại diện cho một sự tương tác của người dùng và lớp mở rộng lớp Activity tạo ra một cửa sổ cho một giao diện người dùng (UI).
- Phiên bản SDK tối thiểu:
8
- Nhấn Next
Hình 9. Tạo lớp trình máy khách JAX-RS
- Tên dự án:
Các tệp trong dự án Android là:
- Một lớp hoạt động (
AndroidJAXRSClient), để mở rộng lớp
Activity.
- Tệp res/layout/main.xml để quy định cách bố trí của ứng dụng Android.
- Tệp AndroidManifest.xml, để chứa thông tin cấu hình của ứng dụng như là tên gói, các thành phần ứng dụng, các quy trình, các quyền hạn và mức API tối thiểu cho hệ thống Android.
Trong tệp res/layout/main.xml file, hãy quy định cách bố trí của các thành
phần giao diện người dùng Android. Hãy tạo một
LinearLayout
với
android:orientation="vertical". Bạn sẽ tạo ra một giao
diện người dùng để hiển thị các đáp ứng từ các web service dưới dạng một
thông báo văn bản trong đó. Thêm một phần tử
TextView có id
là
jaxrs để hiển thị đáp ứng web service JAX-WS cho một cuộc
gọi phương thức đến một trong những phương thức
get. Việc
thực hiện phương thức sẽ lấy một thông báo Hello làm một phản hồi dưới
dạng hoặc XML, HTML hoặc văn bản. Liệt kê 5 hiển thị tệp main.xml:
Liệt kê 5. Tệp main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/jaxrs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
Để truy cập web service JAX-RS từ một thiết bị Android, hãy bật quyền hạn
android.permission.INTERNET trong tệp AndroidManifest.xml
lên, để cho phép các ứng dụng mở các socket mạng. Thêm phần tử
uses-permission vào Liệt kê 6.
Liệt kê 6. Thiết lập quyền hạn INTERNET
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Chỉ rõ phiên bản Android tối thiểu với phần tử
uses-sdk. Hoạt
động
AndroidJAXRSClient, là
intent-filter và
action được quy định cụ thể với phần tử
activity
và các phần tử con. Liệt kê 7 hiển thị tệp AndroidManifest.xml.
Liệt kê 7. Tệp AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.jaxrs" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AndroidJAXRSClient" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest>
Android SDK gồm có thư viện Apache HttpClient. Hãy nhập khẩu các lớp trong
Liệt kê 8 vào
AndroidJAXRSClient.
Liệt kê 8. Thư viện Apache HttpClient
org.apache.http.HttpEntity; org.apache.http.HttpResponse; org.apache.http.client.ClientProtocolException; org.apache.http.client.HttpClient; org.apache.http.client.methods.HttpGet; org.apache.http.impl.client.DefaultHttpClient;
Lớp
AndroidJAXRSClient mở rộng lớp
Activity.
Phương thức
onCreate(Bundle
savedInstanceState) được
gọi khi hoạt động này lần đầu tiên được gọi. Định nghĩa giao diện người
dùng bằng cách sử dụng phương thức
setContentView và tài
nguyên bố cục, như trong Liệt kê 9.
Liệt kê 9. Định nghĩa giao diện người dùng
setContentView(R.layout.main);
Liệt kê 10 cho thấy cách
tạo ra một đối tượng
TextView của tiện ích (widget) Android,
bằng cách sử dụng phương thức
findViewById trên phần tử
TextView có id là
jaxrs đã được định nghĩa trong
tệp main.xml.
Liệt kê 10. Tạo một widget Android
TextView jaxrs = (TextView) findViewById(R.id.jaxrs);
Cách thực hiện mặc định của
HttpClient là
DefaultHttpClient. Hãy tạo một đối tượng
DefaultHttpClient, như Liệt kê 11.
Liệt kê 11. Tạo một đối tượng HttpClient
HttpClient httpclient = new DefaultHttpClient();
Tạo một đối tượng
HttpGet để lấy ra thông tin từ máy chủ, như
trong Liệt kê 12. Hãy chỉ
rõ URL đến tài nguyên đã lưu trữ trên máy chủ theo đường dẫn URI
/helloworld. Hãy chỉ rõ địa chỉ IP cho máy chủ vật lý thay vì
localhost. Trình máy khách chạy trên thiết bị Android và localhost cho
thiết bị Android không phải là máy chủ vật lý để web service JAX-RS chạy
trên đó (trừ khi các web service JAX-RS cũng được lưu trữ trên thiết bị
Android, điều này không đúng trong ví dụ này).
Liệt kê 12. Tạo một đối tượng HttpGet
HttpGet request = new HttpGet("http://192.168.1.68:7001/AndroidJAX-RS/jaxrs/helloworld");
Hãy chỉ rõ các kiểu phương tiện truyền thông có thể chấp nhận được bằng
cách sử dụng header
Accept. Trong header
Accept
này, chỉ thiết lập một trong các kiểu phương tiện truyền thông, tương ứng
với kiểu phương tiện truyền thông được tạo ra trong web service JAX-RS.
Trong lần chạy đầu tiên, hãy thiết lập header
Accept là
text/xml để cung cấp đáp ứng
text/xml, như trong
Liệt kê 13.
Liệt kê 13. Thiết lập header Accept
request.addHeader("Accept", "text/xml"); //request.addHeader("Accept", "text/html"); //request.addHeader("Accept", "text/plain");
Hãy kiểm tra kết quả đầu ra của mỗi kiểu đáp ứng (văn bản thuần, html và
XML). Kiểu đáp ứng được chấp nhận phải khớp với kiểu MIME được tạo ra
trong lớp tài nguyên. Kiểu MIME được các lớp tài nguyên tạo ra phải khớp
với một kiểu MIME được chấp nhận. Nếu kiểu MIME được tạo ra và kiểu MIME
được chấp nhận không khớp nhau, thì sẽ tạo ra một lỗi ngoại lệ
com.sun.jersey.api.client.UniformInterfaceException. Ví dụ,
thiết lập kiểu MIME được chấp nhận là
text/xml còn kiểu MIME
được tạo ra là
application/xml. Lỗi ngoại lệ
UniformInterfaceException được tạo ra. Như trong Liệt kê 14, hãy gọi phương
thức
execute() của
HttpClient, có phương thức
HttpGet làm một đối số, để lấy ra đối tượng
HttpResponse.
Liệt kê 14. Lấy đối tượng HttpResponse
HttpResponse response = httpclient.execute(request);
Từ đối tượng
HttpResponse sẽ thu được
HttpEntity
bằng cách sử dụng phương thức
getEntity (Liệt kê 15).
Liệt kê 15. Lấy HttpEntity
HttpEntity entity = response.getEntity();
Lấy nội dung là một
InputStream từ
HttpGet bằng
cách sử dụng phương thức
getContent() (Liệt kê 16).
Liệt kê 16. Tạo một
InputStream từ
HttpEntity
InputStream instream = entity.getContent();
Tạo một
StringBuilder cho thông báo được web service JAX-RS
trả về (Liệt kê 17).
Liệt kê 17. Tạo một StringBuilder
StringBuilder sb = new StringBuilder();
Tạo một
BufferedReader từ
InputStream (Liệt kê 18).
Liệt kê 18. Tạo một BufferedReader
BufferedReader r = new BufferedReader(new InputStreamReader(instream));
Đọc từng dòng từ
BufferedReader và thêm nó vào
StringBuilder (Liệt kê 19).
Liệt kê 19. Đọc BufferedReader
for (String line = r.readLine(); line != null; line = r.readLine()) { sb.append(line); }
Nhận thông báo
String từ
StringBuilder và đóng
InputStream (Liệt kê 20).
Liệt kê 20. Nhận thông báo StringBuilder
String jaxrsmessage = sb.toString(); instream.close();
Thiết lập thông báo
String trên thành phần giao diện người
dùng
TextView (Liệt kê 21).
Liệt kê 21. Thiết lập thông báo StringBuilder
jaxrs.setText(jaxrsmessage);
Liệt kê 22 cho thấy lớp
AndroidJAXRSClient.
Liệt kê 22. AndroidJAXRSClient.java
package android.jaxrs; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class AndroidJAXRSClient extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView jaxrs = (TextView) findViewById(R.id.jaxrs); try { HttpClient httpclient = new DefaultHttpClient(); HttpGet request = new HttpGet( "http://192.168.1.68:7001/AndroidJAX-RS/jaxrs/helloworld"); //request.addHeader("Accept", "text/html"); // request.addHeader("Accept", "text/xml"); request.addHeader("Accept", "text/plain"); HttpResponse response = httpclient.execute(request); HttpEntity entity = response.getEntity(); InputStream instream = entity.getContent(); String jaxrsmessage = read(instream); jaxrs.setText(jaxrsmessage); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static String read(InputStream instream) { StringBuilder sb = null; try { sb = new StringBuilder(); BufferedReader r = new BufferedReader(new InputStreamReader( instream)); for (String line = r.readLine(); line != null; line = r.readLine()) { sb.append(line); } instream.close(); } catch (IOException e) { } return sb.toString(); } }
Hình 10 hiển thị cấu trúc thư mục của trình máy khách Android.
Hình 10. Cấu trúc thư mục của ứng dụng Android
Chạy trình máy khách Android
Bây giờ bạn đã sẵn sàng để chạy trình máy khách Android để gọi web service JAX-RS và cung cấp thông báo XML. Nhấn phím chuột phải vào dự án AndroidJAXRSClient và chọn Run As > Android Application, như trong Hình 11.
Hình 11. Chạy trình máy khách JAX-RS Android
Thiết bị ảo (AVD) Android khởi động và trình máy khách JAX-RS sẽ được cài đặt trên thiết bị Android, như trong Hình 12.
Hình 12. Trình máy khách JAX-RS của Android đã cài đặt trên thiết bị Android
Hoạt động
AndroidJAXRSClient khởi động và cung cấp thông báo
XML do tài nguyên web service JAX-RS tạo ra cho thiết bị Android, như
trong Hình 13.
Hình 13. Cung cấp thông báo XML cho thiết bị Android
Tương tự như vậy, thông báo HTML là kết quả đầu ra nếu gỡ bỏ dấu chú thích
trong lớp tài nguyên cho phương thức tạo ra kiểu phương tiện truyền thông
text/html và thiết lập đầu trang
Accept để nhận
được kiểu phương tiện truyền thông tương tự. Ví dụ, trong lớp tài nguyên,
hãy gỡ bỏ dấu ghi chú cho phương thức trong Liệt kê 23.
Liệt kê 23. Tạo ra HTML trong lớp tài nguyên
@GET @Produces("text/html") public String getHTMLMessage() { return " " + "<title>" + "Hello Android" + "</title>" + "
" + "Hello Android" + "
" + " "; }
Trong lớp của trình máy khách, hãy gỡ bỏ dấu chú thích trước việc thực hiện
addHeader trong Liệt kê 24.
Liệt kê 24. Thiết lập kiểu phương tiện truyền thông cho
request.addHeader("Accept", "text/html");
Chạy lại ứng dụng
AndroidJAXRSClient để nhận được phản hồi
HTML, như trong Hình 14.
Hình 14. Kết quả HTML cho thiết bị Android
Để nhận được phản hồi dạng văn bản, hãy gỡ bỏ dấu chú thích trước phương thức trong lớp tài nguyên trong Liệt kê 25.
Liệt kê 25. Tạo ra kiểu phương tiện truyền thông văn bản trong lớp tài nguyên
@GET @Produces("text/plain") public String getClichedMessage() { return "Hello Android"; }
Trong lớp của trình máy khách, hãy bỏ dấu chú thích thiết lập kiểu phương
tiện truyền thông của header
Accept sau đây trong Liệt kê 26.
Liệt kê 26. Thiết lập header Accept
request.addHeader("Accept", "text/plain");
Chạy lại ứng dụng
AndroidJAXRSClient để nhận được kết quả
thông báo dạng văn bản, như trong Hình 15.
Hình 15. Cung cấp thông báo dạng văn bản cho thiết bị Android
Tóm tắt
Trong bài này, bạn đã học cách tạo ra một web service JAX-RS và gọi web service từ một trình máy khách Android. Bạn đã gửi kết quả XML, HTML và văn bản tới thiết bị Android.
Tải về
Tài nguyên
Học tập
- Android: Khám phá các công cụ và tài liệu hướng dẫn để tạo ra các ứng dụng Android.
- IBM JAX-RS: Hướng dẫn của Nhà phát triển: Tìm hiểu thêm về cài đặt một ứng dụng JAX-RS.
- Thuật toán lựa chọn JAX-RS: Tìm hiểu thêm về những khái niệm cơ sở của JAX-RS.
- Phát triển một trình máy khách Spring dùng cho Android cho một web service JAX-RS (Deepak Vohra, developerWorks, 08.2011): Tìm hiểu cách truy cập một web service RESTful với trình máy khách REST Android của Spring.
- Nội dung Android trên developerWorks: Khám phá các bài viết, các trình diễn và các hướng dẫn về Android.
- Thêm nhiều bài viết nữa của tác giả này (Deepak Vohra, developerWorks, từ 04.2005 đến nay): Đọc các bài viết về Android, Ajax, PHP, XML, các web service, Ruby on Rails, EJB và các công nghệ khác.
- SOA và các web service: Nhận các bài viết, các hướng dẫn, các tiêu chuẩn và tài nguyên kỹ thuật dùng cho các web service và SOA trên developerWorks.
- Vùng XML trên developerWorks: Tìm tài nguyên mà bạn cần để nâng cao các kỹ năng của mình trong lĩnh vực XML, bao gồm các DTD, các lược đồ và XSLT. Xem thư viện kỹ thuật XML để biết một loạt các bài viết kỹ thuật và các lời khuyên, các hướng dẫn, các tiêu chuẩn và các sách Đỏ (Redbooks) của IBM.
- Chứng chỉ XML của IBM: Tìm hiểu làm thế nào để bạn có thể trở thành một nhà phát triển có chứng chỉ của IBM về XML và các công nghệ liên quan.
- Các sự kiện kỹ thuật và webcasts trên developerWorks: Theo sát công nghệ trong các phiên này.
- developerWorks trên Twitter: Tham gia ngày hôm nay để theo dõi các mẩu tin tweet của trên developerWorks.
- developerWorks podcasts: Nghe các cuộc phỏng vấn và các cuộc thảo luận thú vị dành cho các nhà phát triển phần mềm.
- Các trình diễn theo yêu cầu trên developerWorks: Xem các bản trình diễn trải rộng từ cài đặt và thiết lập sản phẩm cho những người mới bắt đầu đến các chức năng nâng cao cho các nhà phát triển có kinh nghiệm.
Lấy sản phẩm và công nghệ
- Android SDK: Tải về Android SDK và bắt đầu.
- Các bản tải Eclipse: Tải về Eclipse cho Java EE.
- Các phiên bản đánh giá sản phẩm của IBM: Tải về hoặc khám phá các bản dùng thử trực tuyến trong IBM SOA Sandbox và nhận các công cụ phát triển ứng dụng thực hành của bạn và các sản phẩm phần mềm trung gian từ DB2®, Lotus®, Rational®, Tivoli® và WebSphere®.
Thảo luận
- Diễn đàn thảo luận vùng XML: Tham gia vào bất kỳ một số cuộc thảo luận liên quan đến XML nào.
- Cộng đồng developerWorks: Kết nối với những người dùng developerWorks khác trong khi khám phá các blog, các diễn đàn, các nhóm và các wiki theo hướng nhà phát triển.
Bình luận
-
Vùng dữ liệu trên developerWorks
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
-
Vùng mã nguồn mở trên developerWorks
Xem các bài viết về HTML, CSS, JavaScript,...
-
Điện toán đám mây
Tìm hiểu về điện toán đám mây

markdown:
## Giới thiệu
Kiến trúc phần mềm REST dựa trên việc truyển tải các đặc trưng của tài nguyên. Các web service RESTful đưa ra một số ưu điểm: Chúng đơn giản, nhẹ và nhanh. Một web service RESTful hiển thị một tập hợp các tài nguyên được nhận biết qua các URI. Các tài nguyên đáp ứng với các phương thức HTTP GET, POST, PUT và DELETE. Các tài nguyên có thể được truy cập theo các định dạng khác nhau, chẳng hạn như HTML, văn bản thuần, XML, PDF, JPEG hay JSON. API Java dùng cho các web service RESTful (JAX-RS - Java API for RESTful web services) được định nghĩa theo chuẩn JSR 311. Jersey là công cụ tham khảo cho JAX-RS để đơn giản hóa việc phát triển các web service RESTful bằng Java. (RESTful web services: là một phương pháp mới để tạo các web service đơn giản hơn so với các phương pháp tạo web service truyền thống).
Trong bài này, hãy sử dụng thư viện Apache HttpClient để tạo ra một trình
client JAX-RS trên Android—nền tảng điện thoại di động
thông minh phổ biến hiện nay. Bạn có thể
[tải về](#download)
các mã ví dụ mẫu được sử dụng trong bài này.
## Thiết lập môi trường
Trước khi tạo một trình client cho một web service JAX-RS, bạn cần phải
thiết lập môi trường phát triển. Xem phần
[Tài
nguyên](#resources) để biết các liên kết.
- Cài đặt Eclipse.
- Cài đặt thêm plug-in Android Development Tools (ADT) cho Eclipse, để cung cấp các phần mở rộng để phát triển các ứng dụng Android trong Eclipse.
- Cài đặt Platform SDK cho Android 2.2. SDK của Android cung cấp các công cụ để phát triển các ứng dụng Android.
- Tạo một Android Virtual Device (AVD - Máy ảo Android), là một bộ mô phỏng các thiết bị thật chạy Android, trong Eclipse.
- Tải về tệp lưu trữ Jersey, jersey-archive-1.4.zip, có chứa các tệp nén
Java (JAR) của Jersey và các phụ thuộc cơ bản. Tải tệp JAR bó của
Jersey là jersey-bundle-1.4.jar.
Jersey được xây dựng bằng cách sử dụng JDK 6.0, vì thế bạn cũng cần cài đặt JDK 6.0.
- Cài đặt một máy chủ web như Tomcat hay một máy chủ ứng dụng như máy
chủ WebSphere® hoặc máy chủ WebLogic. Thêm các tệp JAR Jersey
trong
[Liệt kê 1](#listing1)vào
CLASSPATHcủa môi trường thời gian chạy trong máy chủ ứng dụng/máy chủ web.
##### Liệt kê 1. Các tệp JAR Jersey
C:\Jersey\jersey-bundle-1.4.jar;C:\Jersey\jersey-archive-1.4\lib\asm-3.1.jar; C:\Jersey\jersey-archive-1.4\lib\jsr311-api-1.1.1.jar
## Tạo một dự án Eclipse
Trong phần này, bạn sẽ tạo một dự án web và thêm khía cạnh JAX-RS vào dự án đó. Sử dụng các bước sau để tạo ra một dự án Eclipse.
- Chọn
**File**> **New**và trong cửa sổ New, chọn **Web**> **Dynamic Web Project**. Nhấn **Next**.
- Đặt tên cho Project (chẳng hạn là AndroidJAX-RS) và nhấn
**New Runtime**, để cấu hình một môi trường runtime đích mới cho máy chủ WebSphere, máy chủ Tomcat hoặc máy chủ WebLogic. [Hình 1](#fig1)hiển thị cửa sổ dự án Web động hoàn chỉnh.
##### Hình 1. Cấu hình một môi trường runtime mới
- Trong cửa sổ New Server Runtime Environment, chọn một máy chủ, chẳng
hạn như máy chủ Tomcat, máy chủ WebSphere hoặc máy chủ WebLogic. Nhấn
**Next**, như trong [Hình 2](#fig2).
##### Hình 2. Chọn một máy chủ ứng dụng hoặc máy chủ web
- Trong cửa sổ New IBM WebSphere v6.0 Runtime, cấu hình một JRE và IBM
WebSphere Installation Directory. Nhấn
**Next**trong hộp thoại Dynamic Web Project. Chọn các giá trị thiết lập Java mặc định cho thư mục Source và thư mục Output và nhấn **Next**.
- Chỉ rõ gốc Bối cảnh là
AndroidJAX-RS, chọn Content Directory mặc định và nhấn
**Finish**.
Một Dự án Web động được tạo ra và được thêm vào Project Explorer. Nhấn chuột phải vào nút project và chọn
**Properties**.
- Chọn
**Project Facets**, rồi chọn project facet là **JAX-RS (REST Web Services) 1.1**. Nhấn vào **Further configuration required**, như trong [Hình 3](#fig3).
##### Hình 3. Cấu hình Project Facet JAX-RS
- Trong cửa sổ JAX-RS Capabilities, quy định một tên Servlet (JAX-RS
Servlet) và cấu hình một thư viện JAX-RS Implementation. Chọn
**Type as User Library**và nhấn **Manage**.
- Trong cửa sổ User Libraries, nhấn
**New**. Trong hộp thoại New User Library, chỉ rõ một tên User library và nhấn **OK**.
Một thư viện người dùng được thêm vào. Nhấn
**Add JARs**để thêm các tệp JAR Jersey vào thư viện của người dùng. Như trong [Hình 4](#fig4), hãy thêm các tệp JAR Jersey sau đây:
- jersey-bundle-1.4.jar
- C:\Jersey\jersey-archive-1.4\lib\asm-3.1.jar
- C:\Jersey\jersey-archive-1.4\lib\jsr311-api-1.1.1.jar
**OK**.
##### Hình 4. Thêm các tệp JAR Jersey
- Trong cửa sổ JAX-RS Capabilities, chỉ rõ tên lớp servlet JAX-RS là
com.sun.jersey.spi.container.servlet.ServletContainer, như trong
[Hình 5](#fig5). Nhấn **OK**.
##### Hình 5. Chỉ rõ lớp servlet JAX-RS
- Trong cửa sổ Project Facets, nhấn
**Apply**như trong [Hình 6](#fig6), rồi nhấn **OK**.
##### Hình 6. Đồng ý các thiết lập JAX-RS Project Facet
Môi trường runtime đích được cấu hình với khía cạnh của dự án JAX-RS. Nhấn
**OK** trong hộp thoại Properties.
Các thư viện Người dùng JAX-RS được bổ sung vào dự án và ánh xạ servlet
JAX-RS và ánh xạ servlet được cấu hình trong tệp web.xml. Bạn cần phải
thêm các phần tử
init-param cho các tham số init (khởi tạo)
com.sun.jersey.config.property.resourceConfigClass và
com.sun.jersey.config.property.packages.
[Liệt kê 2](#listing2) hiển thị tệp
web.xml.
##### Liệt kê 2. Tệp web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/ xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <servlet> <description>JAX-RS Tools Generated - Do not modify</description> <servlet-name>JAX-RS Servlet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>jaxrs</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JAX-RS Servlet</servlet-name> <url-pattern>/jaxrs/*</url-pattern> </servlet-mapping> </web-app>
## Tạo và chạy một lớp tài nguyên
Bước tiếp theo là tạo một tài nguyên web service RESTful bằng cách sử dụng
một lớp tài nguyên gốc. Một lớp tài nguyên gốc là một POJO có chú giải với
dấu chú giải
@PATH. Nó bao gồm ít nhất là một phương thức có
chú giải với dấu chú giải
@PATH hoặc
@GET,
@PUT,
@POST hoặc
@DELETE.
- Chọn
**File**> **New**> **Other**. Trong hộp thoại New, chọn **Java**> **Class**và nhấn **Finish**.
- Trong cửa sổ New Java Class, như trong
[Hình 7](#fig7), chỉ rõ:
- Thư mục Source:
AndroidJAX-RS/src
- Gói:
jaxrs
- Tên lớp:
HelloWorldResource
Nhấn
**Finish**.
##### Hình 7. Tạo lớp tài nguyên
- Thư mục Source:
Hãy chú giải lớp Java bằng dấu chú giải
@PATH. Mã trong
[Liệt kê 3](#listing3) chỉ rõ đường dẫn
URI trên đó lớp Java được lưu trữ trên máy chủ là
/helloworld.
##### Liệt kê 3. Chú giải lớp tài nguyên bằng @Path
@Path("/helloworld") public class HelloWorldResource { ... }
Để thêm các phương thức tài nguyên để sản xuất ba kiểu MIME khác nhau, hãy
thêm các phương thức
getClichedMessage(),
getXMLMessage() và
getHTMLMessage(). Hãy chú
giải mỗi phương thức trên bằng
@GET, để cho biết rằng các
phương thức này sẽ xử lý các yêu cầu HTTP GET. Hãy chỉ rõ
String làm kiểu trả về cho mỗi một trong các phương thức. Hãy
chú giải mỗi phương thức bằng
@PRODUCES và chỉ rõ một kiểu
MIME khác nhau cho mỗi phương thức.
Bây giờ bạn muốn cung cấp phương thức "Hello JAX-RS" bằng cách sử dụng các
kiểu MIME là
text/plain,
text/xml và
text/html. Phương thức
getXMLMessage được chú
giải bằng
@Produces (
"text/xml") tạo ra một
thông báo XML. Chỉ gỡ bỏ dấu chú thích cho một trong các phương thức đã
chú giải bằng
@GET. Nếu không chỉ rõ thành phần đường dẫn nào
khác để phân biệt, thì yêu cầu
@GET được chuyển đến phương
thức có chú giải bằng
@GET. Nếu có nhiều phương thức cùng
khớp được với một URI yêu cầu, thì sử dụng thuật toán lựa chọn JAX-RS để
chọn phương thức tài nguyên. Ví dụ, bạn có thể quy định nhiều phương thức
có dấu chú giải
@GET bằng cách sử dụng một id
path (đường dẫn) khác nhau cho các phương thức có chú giải
@GET.
[Liệt kê 4](#listing4) cho thấy lớp tài nguyên gốc.
##### Liệt kê 4. Lớp tài nguyên gốc HelloWorldResource.java
package jaxrs; import javax.ws.rs.GET; import javax.ws.rs.Produces; import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; // The Java class will be hosted at the URI path //"/helloworld" @Path("/helloworld") public class HelloWorldResource { // The Java method will process HTTP GET requests @GET // The Java method will produce content identified by the MIME Media // type "text/plain" @Produces("text/plain") public String getClichedMessage() { // Return some cliched textual content return "Hello Android"; } // @GET // @Produces("text/xml") // public String getXMLMessage() { // return "<?xml version=\"1.0\"?>" + "<hello> Hello Android" + "</hello>"; // } // @GET //@Produces("text/html") //public String getHTMLMessage() { //return " " + "<title>" + "Hello Android" + "</title>" // + "
" + "Hello Android" + "
" + " "; // } }
Chạy lớp tài nguyên để tạo ra các kiểu đầu ra khác nhau. Đánh dấu chú thích
các phương thức không cần thử nghiệm và giữ lại một phương thức đã bỏ dấu
chú thích cho mỗi lần chạy thử nghiệm. Đầu tiên, hãy kiểm tra kiểu MIME
text/xml là kết quả đầu ra. Hãy khởi động máy chủ ứng
dụng/máy chủ web nếu nó chưa được khởi động. Nhấn chuột phải vào lớp tài
nguyên và chọn
**Run As** > **Run on Server**
(Chạy trên máy chủ), như trong [Hình 8](#fig8).
##### Hình 8. Chạy lớp tài nguyên
![ Ảnh chụp màn hình về một trình đơn bật lên cho ứng dụng JAX-RS với việc chọn Run As>Run on Server](Figure8.jpg)
Trên máy chủ, tham số init
com.sun.jersey.config.property.resourceConfigClass được khởi
tạo bằng
com.sun.jersey.api.core.PackagesResourceConfig và
tham số init
com.sun.jersey.config.property.packages được
khởi tạo bằng
jaxrs, như đã quy định trong tệp web.xml. Lớp
tài nguyên gốc
jaxrs.HelloWorldResource được tìm thấy. Phiên
bản 1.4 của ứng dụng Jersey được khởi tạo và mô đun AndroidJAX-RS triển
khai trên máy chủ.
## Tạo một dự án trình máy khách Android
Trong phần này, bạn sẽ tạo một dự án Android để tạo ra trình máy khách JAX-RS cho Android trong dự án đó.
- Trong IDE Eclipse, chọn
**File**> **New**. Trong hộp thoại New, chọn **Android**> **Android Project**, rồi nhấn **Next**.
- Điền vào các trường trong cửa sổ New Project Android, như trong
[Hình 9](#fig9).
- Tên dự án:
AndroidJAXRSClient
- Build đích:
**Android Platform 2.2 API 8**
- Các thuộc tính: Tên ứng dụng là
AndroidJAXRSClientvà tên gói là
androidjaxrs
- Chọn Create Activity (Tạo hoạt động) và chỉ rõ lớp Activity là
AndroidJAXRSClient.
Một hoạt động đại diện cho một sự tương tác của người dùng và lớp mở rộng lớp Activity tạo ra một cửa sổ cho một giao diện người dùng (UI).
- Phiên bản SDK tối thiểu:
8
- Nhấn
**Next**
##### Hình 9. Tạo lớp trình máy khách JAX-RS
- Tên dự án:
Các tệp trong dự án Android là:
- Một lớp hoạt động (
AndroidJAXRSClient), để mở rộng lớp
Activity.
- Tệp res/layout/main.xml để quy định cách bố trí của ứng dụng Android.
- Tệp AndroidManifest.xml, để chứa thông tin cấu hình của ứng dụng như là tên gói, các thành phần ứng dụng, các quy trình, các quyền hạn và mức API tối thiểu cho hệ thống Android.
Trong tệp res/layout/main.xml file, hãy quy định cách bố trí của các thành
phần giao diện người dùng Android. Hãy tạo một
LinearLayout
với
android:orientation="vertical". Bạn sẽ tạo ra một giao
diện người dùng để hiển thị các đáp ứng từ các web service dưới dạng một
thông báo văn bản trong đó. Thêm một phần tử
TextView có id
là
jaxrs để hiển thị đáp ứng web service JAX-WS cho một cuộc
gọi phương thức đến một trong những phương thức
get. Việc
thực hiện phương thức sẽ lấy một thông báo Hello làm một phản hồi dưới
dạng hoặc XML, HTML hoặc văn bản.
[Liệt kê 5](#listing5) hiển thị tệp main.xml:
##### Liệt kê 5. Tệp main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/jaxrs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
Để truy cập web service JAX-RS từ một thiết bị Android, hãy bật quyền hạn
android.permission.INTERNET trong tệp AndroidManifest.xml
lên, để cho phép các ứng dụng mở các socket mạng. Thêm phần tử
uses-permission vào
[Liệt kê 6](#listing6).
##### Liệt kê 6. Thiết lập quyền hạn INTERNET
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Chỉ rõ phiên bản Android tối thiểu với phần tử
uses-sdk. Hoạt
động
AndroidJAXRSClient, là
intent-filter và
action được quy định cụ thể với phần tử
activity
và các phần tử con.
[Liệt kê 7](#listing7) hiển thị tệp AndroidManifest.xml.
##### Liệt kê 7. Tệp AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.jaxrs" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".AndroidJAXRSClient" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest>
Android SDK gồm có thư viện Apache HttpClient. Hãy nhập khẩu các lớp trong
[Liệt kê 8](#listing8) vào
AndroidJAXRSClient.
##### Liệt kê 8. Thư viện Apache HttpClient
org.apache.http.HttpEntity; org.apache.http.HttpResponse; org.apache.http.client.ClientProtocolException; org.apache.http.client.HttpClient; org.apache.http.client.methods.HttpGet; org.apache.http.impl.client.DefaultHttpClient;
Lớp
AndroidJAXRSClient mở rộng lớp
Activity.
Phương thức
onCreate(Bundle
savedInstanceState) được
gọi khi hoạt động này lần đầu tiên được gọi. Định nghĩa giao diện người
dùng bằng cách sử dụng phương thức
setContentView và tài
nguyên bố cục, như trong
[Liệt kê 9](#listing9).
##### Liệt kê 9. Định nghĩa giao diện người dùng
setContentView(R.layout.main);
[Liệt kê 10](#listing10) cho thấy cách
tạo ra một đối tượng
TextView của tiện ích (widget) Android,
bằng cách sử dụng phương thức
findViewById trên phần tử
TextView có id là
jaxrs đã được định nghĩa trong
tệp main.xml.
##### Liệt kê 10. Tạo một widget Android
TextView jaxrs = (TextView) findViewById(R.id.jaxrs);
Cách thực hiện mặc định của
HttpClient là
DefaultHttpClient. Hãy tạo một đối tượng
DefaultHttpClient, như
[Liệt kê 11](#listing11).
##### Liệt kê 11. Tạo một đối tượng HttpClient
HttpClient httpclient = new DefaultHttpClient();
Tạo một đối tượng
HttpGet để lấy ra thông tin từ máy chủ, như
trong
[Liệt kê 12](#listing12). Hãy chỉ
rõ URL đến tài nguyên đã lưu trữ trên máy chủ theo đường dẫn URI
/helloworld. Hãy chỉ rõ địa chỉ IP cho máy chủ vật lý thay vì
localhost. Trình máy khách chạy trên thiết bị Android và localhost cho
thiết bị Android không phải là máy chủ vật lý để web service JAX-RS chạy
trên đó (trừ khi các web service JAX-RS cũng được lưu trữ trên thiết bị
Android, điều này không đúng trong ví dụ này).
##### Liệt kê 12. Tạo một đối tượng HttpGet
HttpGet request = new HttpGet("http://192.168.1.68:7001/AndroidJAX-RS/jaxrs/helloworld");
Hãy chỉ rõ các kiểu phương tiện truyền thông có thể chấp nhận được bằng
cách sử dụng header
Accept. Trong header
Accept
này, chỉ thiết lập một trong các kiểu phương tiện truyền thông, tương ứng
với kiểu phương tiện truyền thông được tạo ra trong web service JAX-RS.
Trong lần chạy đầu tiên, hãy thiết lập header
Accept là
text/xml để cung cấp đáp ứng
text/xml, như trong
[Liệt kê 13](#listing13).
##### Liệt kê 13. Thiết lập header Accept
request.addHeader("Accept", "text/xml"); //request.addHeader("Accept", "text/html"); //request.addHeader("Accept", "text/plain");
Hãy kiểm tra kết quả đầu ra của mỗi kiểu đáp ứng (văn bản thuần, html và
XML). Kiểu đáp ứng được chấp nhận phải khớp với kiểu MIME được tạo ra
trong lớp tài nguyên. Kiểu MIME được các lớp tài nguyên tạo ra phải khớp
với một kiểu MIME được chấp nhận. Nếu kiểu MIME được tạo ra và kiểu MIME
được chấp nhận
*không* khớp nhau, thì sẽ tạo ra một lỗi ngoại lệ
com.sun.jersey.api.client.UniformInterfaceException. Ví dụ,
thiết lập kiểu MIME được chấp nhận là
text/xml còn kiểu MIME
được tạo ra là
application/xml. Lỗi ngoại lệ
UniformInterfaceException được tạo ra. Như trong
[Liệt kê 14](#listing14), hãy gọi phương
thức
execute() của
HttpClient, có phương thức
HttpGet làm một đối số, để lấy ra đối tượng
HttpResponse.
##### Liệt kê 14. Lấy đối tượng HttpResponse
HttpResponse response = httpclient.execute(request);
Từ đối tượng
HttpResponse sẽ thu được
HttpEntity
bằng cách sử dụng phương thức
getEntity (
[Liệt kê 15](#listing15)).
##### Liệt kê 15. Lấy HttpEntity
HttpEntity entity = response.getEntity();
Lấy nội dung là một
InputStream từ
HttpGet bằng
cách sử dụng phương thức
getContent() (
[Liệt kê 16](#listing16)).
##### Liệt kê 16. Tạo một
InputStream từ
HttpEntity
InputStream instream = entity.getContent();
Tạo một
StringBuilder cho thông báo được web service JAX-RS
trả về (
[Liệt kê 17](#listing17)).
##### Liệt kê 17. Tạo một StringBuilder
StringBuilder sb = new StringBuilder();
Tạo một
BufferedReader từ
InputStream (
[Liệt kê 18](#listing18)).
##### Liệt kê 18. Tạo một BufferedReader
BufferedReader r = new BufferedReader(new InputStreamReader(instream));
Đọc từng dòng từ
BufferedReader và thêm nó vào
StringBuilder (
[Liệt kê 19](#listing19)).
##### Liệt kê 19. Đọc BufferedReader
for (String line = r.readLine(); line != null; line = r.readLine()) { sb.append(line); }
Nhận thông báo
String từ
StringBuilder và đóng
InputStream (
[Liệt kê 20](#listing20)).
##### Liệt kê 20. Nhận thông báo StringBuilder
String jaxrsmessage = sb.toString(); instream.close();
Thiết lập thông báo
String trên thành phần giao diện người
dùng
TextView (
[Liệt kê 21](#listing21)).
##### Liệt kê 21. Thiết lập thông báo StringBuilder
jaxrs.setText(jaxrsmessage);
[Liệt kê 22](#listing22) cho thấy lớp
AndroidJAXRSClient.
##### Liệt kê 22. AndroidJAXRSClient.java
package android.jaxrs; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class AndroidJAXRSClient extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView jaxrs = (TextView) findViewById(R.id.jaxrs); try { HttpClient httpclient = new DefaultHttpClient(); HttpGet request = new HttpGet( "http://192.168.1.68:7001/AndroidJAX-RS/jaxrs/helloworld"); //request.addHeader("Accept", "text/html"); // request.addHeader("Accept", "text/xml"); request.addHeader("Accept", "text/plain"); HttpResponse response = httpclient.execute(request); HttpEntity entity = response.getEntity(); InputStream instream = entity.getContent(); String jaxrsmessage = read(instream); jaxrs.setText(jaxrsmessage); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static String read(InputStream instream) { StringBuilder sb = null; try { sb = new StringBuilder(); BufferedReader r = new BufferedReader(new InputStreamReader( instream)); for (String line = r.readLine(); line != null; line = r.readLine()) { sb.append(line); } instream.close(); } catch (IOException e) { } return sb.toString(); } }
[Hình 10](#fig10) hiển thị cấu trúc
thư mục của trình máy khách
Android.
##### Hình 10. Cấu trúc thư mục của ứng dụng Android
![ Ảnh chụp màn hình về cấu trúc thư mục của ứng dụng Trình máy khách Android](Figure10_lg.jpg)
## Chạy trình máy khách Android
Bây giờ bạn đã sẵn sàng để chạy trình máy khách Android để gọi web service
JAX-RS và cung cấp thông báo XML. Nhấn phím chuột phải vào dự án
**AndroidJAXRSClient** và chọn **Run As**
> **Android Application**, như trong [Hình 11](#fig11).
##### Hình 11. Chạy trình máy khách JAX-RS Android
![ Ảnh chụp màn hình về Nhấn phím chuột phải lên Android Application và chọn Run As>Android Application](Figure11.jpg)
Thiết bị ảo (AVD) Android khởi động và trình máy khách JAX-RS sẽ được cài
đặt trên thiết bị Android, như trong
[Hình 12](#fig12).
##### Hình 12. Trình máy khách JAX-RS của Android đã cài đặt trên thiết bị Android
![ Ảnh chụp màn hình về cài đặt Android JAX-WS Client trên Android](Figure12.jpg)
Hoạt động
AndroidJAXRSClient khởi động và cung cấp thông báo
XML do tài nguyên web service JAX-RS tạo ra cho thiết bị Android, như
trong
[Hình 13](#fig13).
##### Hình 13. Cung cấp thông báo XML cho thiết bị Android
![ Ảnh chụp màn hình về cung cấp một thông báo XML tới một thiết bị Android](Figure13.jpg)
Tương tự như vậy, thông báo HTML là kết quả đầu ra nếu gỡ bỏ dấu chú thích
trong lớp tài nguyên cho phương thức tạo ra kiểu phương tiện truyền thông
text/html và thiết lập đầu trang
Accept để nhận
được kiểu phương tiện truyền thông tương tự. Ví dụ, trong lớp tài nguyên,
hãy gỡ bỏ dấu ghi chú cho phương thức trong
[Liệt kê 23](#listing23).
##### Liệt kê 23. Tạo ra HTML trong lớp tài nguyên
@GET @Produces("text/html") public String getHTMLMessage() { return " " + "<title>" + "Hello Android" + "</title>" + "
" + "Hello Android" + "
" + " "; }
Trong lớp của trình máy khách, hãy gỡ bỏ dấu chú thích trước việc thực hiện
addHeader trong
[Liệt kê 24](#listing24).
##### Liệt kê 24. Thiết lập kiểu phương tiện truyền thông cho
request.addHeader("Accept", "text/html");
Chạy lại ứng dụng
AndroidJAXRSClient để nhận được phản hồi
HTML, như trong
[Hình 14](#fig14).
##### Hình 14. Kết quả HTML cho thiết bị Android
![ Ảnh chụp màn hình về cung cấp một Thông báo HTML tới một thiết bị Android](Figure14.jpg)
Để nhận được phản hồi dạng văn bản, hãy gỡ bỏ dấu chú thích trước phương
thức trong lớp tài nguyên trong
[Liệt kê 25](#listing25).
##### Liệt kê 25. Tạo ra kiểu phương tiện truyền thông văn bản trong lớp tài nguyên
@GET @Produces("text/plain") public String getClichedMessage() { return "Hello Android"; }
Trong lớp của trình máy khách, hãy bỏ dấu chú thích thiết lập kiểu phương
tiện truyền thông của header
Accept sau đây trong
[Liệt kê 26](#listing26).
##### Liệt kê 26. Thiết lập header Accept
request.addHeader("Accept", "text/plain");
Chạy lại ứng dụng
AndroidJAXRSClient để nhận được kết quả
thông báo dạng văn bản, như trong
[Hình 15](#fig15).
##### Hình 15. Cung cấp thông báo dạng văn bản cho thiết bị Android
![ Ảnh chụp màn hình về cung cấp một thông báo văn bản tới một thiết bị Android](Figure15.jpg)
## Tóm tắt
Trong bài này, bạn đã học cách tạo ra một web service JAX-RS và gọi web service từ một trình máy khách Android. Bạn đã gửi kết quả XML, HTML và văn bản tới thiết bị Android.
## Tải về
|Mô tả||Tên||Kích thước|
|Sample code scripts from the article|
## Tài nguyên
### Học tập
[Android](http://developer.android.com/index.html): Khám phá các công cụ và tài liệu hướng dẫn để tạo ra các ứng dụng Android. [IBM JAX-RS: Hướng dẫn của Nhà phát triển](https://svn.apache.org/repos/asf/incubator/wink/contrib/ibm-jaxrs/resources/docs/site/en/appdeveloperguide/webcontainers/install-websphere.html): Tìm hiểu thêm về cài đặt một ứng dụng JAX-RS. [Thuật toán lựa chọn JAX-RS](http://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-Overviewoftheselectionalgor): Tìm hiểu thêm về những khái niệm cơ sở của JAX-RS. [Phát triển một trình máy khách Spring dùng cho Android cho một web service JAX-RS](http://www.ibm.com/developerworks/library/x-springandroid/index.html?S_TACT=105AGY75)(Deepak Vohra, developerWorks, 08.2011): Tìm hiểu cách truy cập một web service RESTful với trình máy khách REST Android của Spring. [Nội dung Android trên developerWorks](http://www.ibm.com/developerworks/views/global/libraryview.jsp?site_id=1&contentarea_by=global&sort_by=Date&sort_order=2&start=1&end=19&type_by=All%20Types&show_abstract=true&search_by=Android): Khám phá các bài viết, các trình diễn và các hướng dẫn về Android. [Thêm nhiều bài viết nữa của tác giả này](http://www.ibm.com/developerworks/views/global/libraryview.jsp?site_id=1&contentarea_by=global&sort_by=Date&sort_order=2&start=1&end=39&topic_by=-1&product_by=-1&type_by=All%20Types&show_abstract=true&search_by=Deepak+Vohra)(Deepak Vohra, developerWorks, từ 04.2005 đến nay): Đọc các bài viết về Android, Ajax, PHP, XML, các web service, Ruby on Rails, EJB và các công nghệ khác. [SOA và các web service](http://www.ibm.com/developerworks/webservices/?S_TACT=105AGY75): Nhận các bài viết, các hướng dẫn, các tiêu chuẩn và tài nguyên kỹ thuật dùng cho các web service và SOA trên developerWorks. [Vùng XML trên developerWorks](https://www.ibm.com/developerworks/xml/?S_TACT=105AGY75): Tìm tài nguyên mà bạn cần để nâng cao các kỹ năng của mình trong lĩnh vực XML, bao gồm các DTD, các lược đồ và XSLT. Xem [thư viện kỹ thuật XML](http://www.ibm.com/developerworks/views/xml/libraryview.jsp?S_TACT=105AGY75)để biết một loạt các bài viết kỹ thuật và các lời khuyên, các hướng dẫn, các tiêu chuẩn và các sách Đỏ (Redbooks) của IBM. [Chứng chỉ XML của IBM](http://www-03.ibm.com/certify/certs/01001503.shtml): Tìm hiểu làm thế nào để bạn có thể trở thành một nhà phát triển có chứng chỉ của IBM về XML và các công nghệ liên quan. [Các sự kiện kỹ thuật và webcasts trên developerWorks](http://www.ibm.com/developerworks/briefings/?S_TACT=105AGY75): Theo sát công nghệ trong các phiên này. [developerWorks trên Twitter](http://twitter.com/#!/developerworks/): Tham gia ngày hôm nay để theo dõi các mẩu tin tweet của trên developerWorks. [developerWorks podcasts](https://www.ibm.com/developerworks/mydeveloperworks/groups/service/html/communityview?communityUuid=70786d1c-a2d4-4de8-a807-fccfa600bc77): Nghe các cuộc phỏng vấn và các cuộc thảo luận thú vị dành cho các nhà phát triển phần mềm. [Các trình diễn theo yêu cầu trên developerWorks](http://www.ibm.com/developerworks/demos/?S_TACT=105AGY75): Xem các bản trình diễn trải rộng từ cài đặt và thiết lập sản phẩm cho những người mới bắt đầu đến các chức năng nâng cao cho các nhà phát triển có kinh nghiệm.
### Lấy sản phẩm và công nghệ
[Android SDK](http://developer.android.com/sdk/index.html): Tải về Android SDK và bắt đầu. [Các bản tải Eclipse](http://www.eclipse.org/downloads/): Tải về Eclipse cho Java EE. [Các phiên bản đánh giá sản phẩm của IBM](http://www.ibm.com/developerworks/downloads/?S_TACT=105AGY75): Tải về hoặc [khám phá các bản dùng thử trực tuyến trong IBM SOA Sandbox](http://www.ibm.com/developerworks/downloads/soasandbox/?S_TACT=105AGY75)và nhận các công cụ phát triển ứng dụng thực hành của bạn và các sản phẩm phần mềm trung gian từ DB2®, Lotus®, Rational®, Tivoli® và WebSphere®.
### Thảo luận
[Diễn đàn thảo luận vùng XML](http://www.ibm.com/developerworks/forums/dw_xforums.jspa?S_TACT=105AGY75): Tham gia vào bất kỳ một số cuộc thảo luận liên quan đến XML nào. [Cộng đồng developerWorks](https://www.ibm.com/developerworks/community?S_TACT=105AGY75): Kết nối với những người dùng developerWorks khác trong khi khám phá các blog, các diễn đàn, các nhóm và các wiki theo hướng nhà phát triển.
## Bình luận
[Vùng dữ liệu trên developerWorks](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp)
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
[Vùng mã nguồn mở trên developerWorks](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp)
Xem các bài viết về HTML, CSS, JavaScript,...
[Điện toán đám mây](http://www.ibm.com/developerworks/vn/views/cloud/libraryview.jsp)
Tìm hiểu về điện toán đám mây

Content-Language: en-US

Kp-eeAlive: timeout=10, max=88


text:
HỌP MẶT NGƯỜI LAO ĐỘNG QUÍ II/2014
Ngày 28/6/2014, Công đoàn cơ sở trường Trung cấp Du lịch & Khách sạn Saigontourist (STHC) tổ chức “Họp mặt người lao động quí II năm 2014”. Mở đầu chương…
Xem chi tiết
BẾ GIẢNG CÁC LỚP: BẾP VIỆT NAM CĂN BẢN – BẾP Á NÂNG CAO
1. BẾP VIỆT NAM CĂN BẢN – CAA066: (5 tháng) – Khai giảng: Ngày 05/11/2013 – Chương trình học: + Lý thuyết: Lý thuyết về dinh dưỡng, thực phẩm, nội…
Xem chi tiết
KÝ KẾT HỢP TÁC STHC – BBI LUXEMBOURG
Ngày 11/6/2014, trường Trung cấp Du lịch Khách sạn Saigontourist (STHC) tổ chức Lễ ký kết thỏa thuận hợp tác giữa trường Brusels Business Institute (BBI) – Luxembourg và trường…
Xem chi tiết
Saigontourist tham gia hội diễn văn nghệ CNVC-LĐ TPHCM năm 2014
Thực hiện kế hoạch số 11/KH- LĐLĐ của Liên đoàn Lao động Thành phố, kỷ niệm 39 năm Ngày giải phóng hoàn toàn miền Nam thống nhất đất nước; 128…
Xem chi tiết
NGÀY HỘI THIẾU NHI STHC 2014
Ngày 31/5/2014, Công đoàn trường Trung cấp Du lịch & Khách sạn Saigontourist (STHC) đã tổ chức “Ngày hội thiếu nhi STHC 2014”. Đây là lần đầu tiên nhà trường…
Xem chi tiết
HỘI THI TAY NGHỀ QUỐC GIA NĂM 2014
Hội thi Tay nghề Quốc gia năm 2014 diễn ra từ ngày 18/5 đến 22/5/2014, Hội thi đã thu hút 483 thí sinh dự thi 22 nghề. Những thí sinh xuất…
Xem chi tiết
Tour thực tập Tây Nguyên – Quảng Bình năm 2014 từ 13/5 đến 22/5/201
Từ ngày 13/5 đến 22/5/2014, trường Trung cấp Du lịch & Khách sạn Saigontourist đã tổ chức tour thực tập cho các lớp TG18, TG19, TG1012 gồm 169 sinh viên…
Xem chi tiết
LỄ BẾ GIẢNG LỚP RPA103 – HSA005 – CBA004
LỚP PHA CHẾ RƯỢU RPA103 (3 tháng) Khai giảng: Ngày 04/12/2013 Lý thuyết: kiến thức căn bản về các loại thức uống thông dụng gồm 2 nhóm: thức uống có…
Xem chi tiết
Lễ ký kế hợp tác STHC – IAE và STHC – DONGTHAPTOURIST
Ngày 15/5/2014, trường Trung cấp Du lịch & Khách sạn Saigontourist (STHC) đã tổ chức lễ ký kết hợp tác với Công ty TNHH Tổ chức Giáo dục Hoa Kỳ…
Xem chi tiết
LỄ KHAI GIẢNG HỆ TRUNG CẤP CHÍNH QUI NGÀY 24/05/2014
Ngày 14/5/2014, trường Trung cấp Du lịch & Khách sạn Saigontourist tổ chức Lễ khai giảng năm học mới cho toàn thể các tân sinh viên hệ trung cấp chính…
Xem chi tiết

markdown:
[HỌP MẶT NGƯỜI LAO ĐỘNG QUÍ II/2014](http://www.sthc.edu.vn/tin-tuc/hop-mat-nguoi-lao-dong-qui-ii2014.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/hop-mat-nguoi-lao-dong-qui-ii2014.html#respond)
Ngày 28/6/2014, Công đoàn cơ sở trường Trung cấp Du lịch & Khách sạn Saigontourist (STHC) tổ chức “Họp mặt người lao động quí II năm 2014”. Mở đầu chương…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/hop-mat-nguoi-lao-dong-qui-ii2014.html)
[BẾ GIẢNG CÁC LỚP: BẾP VIỆT NAM CĂN BẢN – BẾP Á NÂNG CAO](http://www.sthc.edu.vn/tin-tuc/be-giang-cac-lop-bep-viet-nam-can-ban-bep-a-nang-cao.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/be-giang-cac-lop-bep-viet-nam-can-ban-bep-a-nang-cao.html#respond)
1. BẾP VIỆT NAM CĂN BẢN – CAA066: (5 tháng) – Khai giảng: Ngày 05/11/2013 – Chương trình học: + Lý thuyết: Lý thuyết về dinh dưỡng, thực phẩm, nội…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/be-giang-cac-lop-bep-viet-nam-can-ban-bep-a-nang-cao.html)
[KÝ KẾT HỢP TÁC STHC – BBI LUXEMBOURG](http://www.sthc.edu.vn/tin-tuc/ky-ket-hop-tac-sthc-bbi-luxembourg.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/ky-ket-hop-tac-sthc-bbi-luxembourg.html#respond)
Ngày 11/6/2014, trường Trung cấp Du lịch Khách sạn Saigontourist (STHC) tổ chức Lễ ký kết thỏa thuận hợp tác giữa trường Brusels Business Institute (BBI) – Luxembourg và trường…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/ky-ket-hop-tac-sthc-bbi-luxembourg.html)
[Saigontourist tham gia hội diễn văn nghệ CNVC-LĐ TPHCM năm 2014](http://www.sthc.edu.vn/tin-tuc/saigontourist-tham-gia-hoi-dien-van-nghe-cnvc-ld-tphcm-nam-2014.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/saigontourist-tham-gia-hoi-dien-van-nghe-cnvc-ld-tphcm-nam-2014.html#respond)
Thực hiện kế hoạch số 11/KH- LĐLĐ của Liên đoàn Lao động Thành phố, kỷ niệm 39 năm Ngày giải phóng hoàn toàn miền Nam thống nhất đất nước; 128…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/saigontourist-tham-gia-hoi-dien-van-nghe-cnvc-ld-tphcm-nam-2014.html)
[NGÀY HỘI THIẾU NHI STHC 2014](http://www.sthc.edu.vn/tin-tuc/ngay-hoi-thieu-nhi-sthc-2014.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/ngay-hoi-thieu-nhi-sthc-2014.html#respond)
Ngày 31/5/2014, Công đoàn trường Trung cấp Du lịch & Khách sạn Saigontourist (STHC) đã tổ chức “Ngày hội thiếu nhi STHC 2014”. Đây là lần đầu tiên nhà trường…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/ngay-hoi-thieu-nhi-sthc-2014.html)
[HỘI THI TAY NGHỀ QUỐC GIA NĂM 2014](http://www.sthc.edu.vn/tin-tuc/hoi-thi-tay-nghe-quoc-gia-nam-2014.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/hoi-thi-tay-nghe-quoc-gia-nam-2014.html#respond)
Hội thi Tay nghề Quốc gia năm 2014 diễn ra từ ngày 18/5 đến 22/5/2014, Hội thi đã thu hút 483 thí sinh dự thi 22 nghề. Những thí sinh xuất…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/hoi-thi-tay-nghe-quoc-gia-nam-2014.html)
[Tour thực tập Tây Nguyên – Quảng Bình năm 2014 từ 13/5 đến 22/5/201](http://www.sthc.edu.vn/tin-tuc/tour-thuc-tap-tay-nguyen-quang-binh-nam-2014-tu-135-den-225201.html) [2 Comments](http://www.sthc.edu.vn/tin-tuc/tour-thuc-tap-tay-nguyen-quang-binh-nam-2014-tu-135-den-225201.html#comments)
Từ ngày 13/5 đến 22/5/2014, trường Trung cấp Du lịch & Khách sạn Saigontourist đã tổ chức tour thực tập cho các lớp TG18, TG19, TG1012 gồm 169 sinh viên…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/tour-thuc-tap-tay-nguyen-quang-binh-nam-2014-tu-135-den-225201.html)
[LỄ BẾ GIẢNG LỚP RPA103 – HSA005 – CBA004](http://www.sthc.edu.vn/tin-tuc/le-be-giang-lop-rpa103-hsa005-cba004.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/le-be-giang-lop-rpa103-hsa005-cba004.html#respond)
LỚP PHA CHẾ RƯỢU RPA103 (3 tháng) Khai giảng: Ngày 04/12/2013 Lý thuyết: kiến thức căn bản về các loại thức uống thông dụng gồm 2 nhóm: thức uống có…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/le-be-giang-lop-rpa103-hsa005-cba004.html)
[Lễ ký kế hợp tác STHC – IAE và STHC – DONGTHAPTOURIST](http://www.sthc.edu.vn/tin-tuc/le-ky-ke-hop-tac-sthc-iae-va-sthc-dongthaptourist.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/le-ky-ke-hop-tac-sthc-iae-va-sthc-dongthaptourist.html#respond)
Ngày 15/5/2014, trường Trung cấp Du lịch & Khách sạn Saigontourist (STHC) đã tổ chức lễ ký kết hợp tác với Công ty TNHH Tổ chức Giáo dục Hoa Kỳ…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/le-ky-ke-hop-tac-sthc-iae-va-sthc-dongthaptourist.html)
[LỄ KHAI GIẢNG HỆ TRUNG CẤP CHÍNH QUI NGÀY 24/05/2014](http://www.sthc.edu.vn/tin-tuc/le-khai-giang-he-trung-cap-chinh-qui-ngay-24052014.html) [Leave a Comment](http://www.sthc.edu.vn/tin-tuc/le-khai-giang-he-trung-cap-chinh-qui-ngay-24052014.html#respond)
Ngày 14/5/2014, trường Trung cấp Du lịch & Khách sạn Saigontourist tổ chức Lễ khai giảng năm học mới cho toàn thể các tân sinh viên hệ trung cấp chính…
[Xem chi tiết](http://www.sthc.edu.vn/tin-tuc/le-khai-giang-he-trung-cap-chinh-qui-ngay-24052014.html)


markdown:
**1**lượt cảm ơn)
Cho em hỏi ngành Công nghệ Kỹ thuật Hoá học củaTrường ĐH Quy Nhơn và ngành Công nghệ thông tin (khối D1) của Trường ĐH Phạm Văn Đồng tỷ lệ "chọi” năm 2011 là bao nhiêu?
Hiện 2 trường này chưa công bố tỷ lệ “chọi”. Theo ban tư vấn em hãy tập trung vào ôn tập và không nên quan tâm nhiều tới tỷ lệ “chọi” vì nếu trường công bố tỷ lệ chọi bây giờ con số “ảo” rất nhiều. Chính xác về tỷ lệ “chọi” đến ngày làm thủ tục dự thi nhà trường mới khẳng định được.
Cẩm nang nghiệp vụ dành cho Hiệu trưởng và kế toán trường học - Luật giáo dục và những quy định mới nhất dành cho hiệu trưởng và kế toán trường học 2010 - 2011
Những quy luật của thị trường cổ phiếu
Những quy luật của thị trường cổ phiếu
Cẩm nang nghiệp vụ dành cho giám đốc, kế toán trưởng doanh nghiệp - những quy định mới về kế toán, kiểm toán, thanh tra kiểm tra, quản lý tài chính, thuế, hoá đơn, chi phí hợp lý, hợp lệ, cổ phần hoá 10870026
|
|![]()

Server: Apache

Set-Cookie: u_nologin_id=1237177331; expires=Sat, 18-Oct-2014 12:00:18 GMT; path=/; httponly


text:
hangbao( Hằng Bảo) chuyên mua bán âm thanh HI-END hàng second-hand. Bảo đảm uy tín chất lượng, hàng còn mơí zin 100%,có sao để vậy, không tân trang, không tút sưả. Qúi khách hãy an tâm về cửa hàng hangbao. Cửa hàng hangbao đã kinh doanh gần 30 năm, nên luôn lâý chữ tín làm hàng đâù. Qúi khách hàng có thắc mắc về âm thanh hãy ghé hangbao. hangbao rất mong được cùng quí khách nghe nhạc, thẩm âm và bình luận
hangbao mong được quí khách gọi điện trực tiếp hoặc ghé cưả hàng, đừng nhắn tin bằng điện thọai vì hangbao không có thời gian trả lời tin nhăn đt. Mong quí khách thông cảm cho hangbao. Qúi khách có ghé hangbao xin gọi điện vì lỡ hangbao có ra ngoài thì kip chạy về để tiêp quí khách
hangbao có bán dĩa CD F1 bảo đảm âm thanh tốt chuẩn, chuyên cung cấp dĩa cho giới AUDIO chơi. Nhạc jazz, Bluse, Country, trữ tình, nhạc trước 1975
WEB: http://hangbaoaudiohiend.jimdo.com
- Loa Tannoy Memory RW. Loa còn rất đẹp, mới, zin nguyên bản.Viền loa còn zin. Thùng loa còn nguyên bản, không tân trang không tút sửa, màu thùng còn zin nguyên. Bass 40cm, treble đồng trục.
- Loa Tandberg TL-5010. Loa còn rất đẹp, zin, thùng gỗ lạng, bass 30cm. Made in Norway
- LOA AR 94
- Ampli Marantz PM-14SA( Super audio). Máy còn rất đẹp, mới long lanh, zin nguyên bản, có remote theo máy.
- Power McIntosh MC-2105. Máy còn rất đẹp,mới, zin.
- Ampli Accuphase E-408. Máy còn đẹp cực kỳ, mới long lanh, zin nguyên bản, còn remote cataloge.
Integrated Amplifiers Denon PMA-700AE
Integrated Amplifiers Marantz PM 7200
Montarbo MB-6229S
Montarbo MB-6239F
Viettronics VA-308F
Beta Three UA2500
Beta Three UA2000
Beta Three 3A8
Makamichi TA 20
Carver 6250
Omaton PA-7000
Main Svtdio Due PK1500
Amply Luxman L309V
Pioneer D2011
Pioneer D1011
Denon AVC 1880
Yamaha AX-630
Equalizer Marantz EQ-580
Pioneer SA-6700
Pioneer SA-6600ii
Pioneer SA-6750
Amply Luxman L309
Amply Fisher 250T
Ampli Jarguar Suhyoung-3600S (16 Sò)
Boston PA 7000II
Boston PA 8000II

markdown:
|Siêu VIP còn trống
|
Liên hệ Q.Cáo
0909.464.775
|Siêu VIP còn trống
|
Liên hệ Q.Cáo
0909.464.775
|Siêu VIP còn trống
|
Liên hệ Q.Cáo
0909.464.775
|Siêu VIP còn trống
|
Liên hệ Q.Cáo
0909.464.775
|Siêu VIP còn trống
|
Liên hệ Q.Cáo
0909.464.775
|Siêu VIP còn trống
|
Liên hệ Q.Cáo
0909.464.775
|Siêu VIP còn trống
|
Liên hệ Q.Cáo
0909.464.775
|Siêu VIP còn trống
|
Liên hệ Q.Cáo
0909.464.775
|
|
Tin rao vặt này đã hết hạn!
Bạn hãy vào mục
|
|
|
|
|
|
|Đăng bởi :||
|![]()
|Thông tin chung||
|
|Hãng sản xuất|
|Thông tin chi tiết||
|*hangbao( Hằng Bảo) chuyên mua bán âm thanh HI-END hàng second-hand. Bảo đảm uy tín chất lượng, hàng còn mơí zin 100%,có sao để vậy, không tân trang, không tút sưả. Qúi khách hãy an tâm về cửa hàng hangbao. Cửa hàng hangbao đã kinh doanh gần 30 năm, nên luôn lâý chữ tín làm hàng đâù. Qúi khách hàng có thắc mắc về âm thanh hãy ghé hangbao. hangbao rất mong được cùng quí khách nghe nhạc, thẩm âm và bình luận hangbao mong được quí khách gọi điện trực tiếp hoặc ghé cưả hàng, đừng nhắn tin bằng điện thọai vì hangbao không có thời gian trả lời tin nhăn đt. Mong quí khách thông cảm cho hangbao. Qúi khách có ghé hangbao xin gọi điện vì lỡ hangbao có ra ngoài thì kip chạy về để tiêp quí khách * *WEB: http://hangbaoaudiohiend.jimdo.com*
**- Loa Tannoy Memory RW. Loa còn rất đẹp, mới, zin nguyên bản.Viền loa còn zin. Thùng loa còn nguyên bản, không tân trang không tút sửa, màu thùng còn zin nguyên. Bass 40cm, treble đồng trục.**
**- Loa Tandberg TL-5010. Loa còn rất đẹp, zin, thùng gỗ lạng, bass 30cm. Made in Norway**
*- LOA AR 94*
**- Ampli Marantz PM-14SA( Super audio). Máy còn rất đẹp, mới long lanh, zin nguyên bản, có remote theo máy. **
*- Power McIntosh MC-2105. Máy còn rất đẹp,mới, zin.*
**- Ampli Accuphase E-408. Máy còn đẹp cực kỳ, mới long lanh, zin nguyên bản, còn remote cataloge.**
Integrated Amplifiers Denon PMA-700AE
Integrated Amplifiers Marantz PM 7200
Montarbo MB-6229S
Montarbo MB-6239F
Viettronics VA-308F
Beta Three UA2500
Beta Three UA2000
Beta Three 3A8
Makamichi TA 20
Carver 6250
Omaton PA-7000
Main Svtdio Due PK1500
Amply Luxman L309V
Pioneer D2011
Pioneer D1011
Denon AVC 1880
Yamaha AX-630
Equalizer Marantz EQ-580
Pioneer SA-6700
Pioneer SA-6600ii
Pioneer SA-6750
Amply Luxman L309
Amply Fisher 250T
Ampli Jarguar Suhyoung-3600S (16 Sò)
Boston PA 7000II
Boston PA 8000II

Set-Cookie: history_raovat=1117203%7C0; path=/