Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server

Lập trình web với CGI

z Trang HTML chỉ chứa các nội dung cố định hoặc có

thể thao tác thay đổi qua DHTML ở client.

z Nhu cầu sử dụng các trang web như một ứng dụng

(giao tiếp với user, tìm kiếm, nội dung thay đổi,

tương tác các ứng dụng, với database )=> ứng

dụng web.

z CGI (Common Gateway Interface) là một chuẩn

(standard) để viết ứng dụng web

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 1

Trang 1

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 2

Trang 2

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 3

Trang 3

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 4

Trang 4

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 5

Trang 5

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 6

Trang 6

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 7

Trang 7

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 8

Trang 8

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 9

Trang 9

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 42 trang xuanhieu 4180
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server

Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server
Unavailable
Huỷ
(Destroyed)
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 15
Lập trình với Servlet API (t.t)
z Java Servlet API gồm:
– javax.servlet.*
z Chứa các class và interface độc lập với HTTP
– javax.servlet.http.*
z Chứa các class cụ thể cho HTTP
z Tất cả sevlet đều phải hiện thực giao diện
javax.servlet.Servlet.
z Tuy nhiên do chúng ta dùng giao thức HTTP nên
javax.servlet.http.HttpServlet là lớp hiện thực giao diện
Servlet, nên
z Vì vậy ta thường phải kế thừa từ lớp này và override các
method doGet()/doPost().
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 16
Lập trình với Servlet API (t.t)
javax.servlet.ServletRequest
javax.servlet.http.HttpServletRequest
javax.servlet.ServletInputStream
Requests
javax.servlet.ServletExceptionServlet Exception
javax.servlet.ServletConfigCấu hình sevlet
javax.servlet.Servlet
javax.servlet.SingleThreadModel
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
Hiện thực servlet
Class/InterfaceMục đích
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 17
Lập trình với Servlet API (t.t)
Javax.servlet.http.Cookie
Java.servlet.http.HttpUtils
Khác
Javax.servlet.RequestDispatcherServlet collaboration
Javax.servlet.ServletContextServlet context
Javax.servlet.http.HttpSession
Java.servlet.http.HttpSessionBindingListener
Session tracking
javax.servlet.ServletResponse
javax.servlet.http.HttpServletResponse
javax.servlet.ServletOutput
Responses
Class/InterfaceMục đích
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 18
Cơ chế hoạt động của servlet
z Web server nhận yêu cầu triệu gọi servlet từ client.
z Nếu servlet chạy lần đầu, web server load file 
servlet tương ứng, khởi tạo các thông số bằng
qua method init()
z Nếu servlet đã được khởi tạo, tạo một thread 
để xử lý yêu cầu.
z Gọi methods doXxx() để xử lý các request tương ứng
theo giao thức HTTP:
– doGet cho HTTP GET, doPost cho HTTP POST
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 19
Cấu trúc đơn giản của một Servlet
import java.io.*;
import java.servlet.*;
import java.servlet.http.*;
public class Sample extends HttpServlet{
public doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
//dùng đối tượng “request” để đọc dữ liệu từ client
//dùng đối tượng “response” để xuất dữ liệu cho client
PrintWriter out = response.getWriter();
//dùng đối tượng out để ghi (method print) dữ liệu cho client
}
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 20
Một Servlet đơn giản
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 21
Lập trình Web với Servlet
z API cho HttpServletRequest
1. Object getAttribute(String name)
2. void setAttribute(String name, Object att )
3. Enumeration getAttributeNames()
4. int getContentLength()
5. String getParameter(String name)
6. Enumeration getParameterNames()
7. Enumeration getParameterValues()
8. String getRemoteHost()
9. RequestDispatcher getRequestDispatcher( String path )
10. boolean isSecure()
11. ServletInputStream getServletInputStream()
12. int getContentLength()
13. 
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 22
Lập trình Web với Servlet
z Lấy dữ liệu từ web client gởi đến bằng servlet
– Dùng đối tượng của class HttpServletRequest
– Các methods để lấy thông số:
z getParameter(“para-name”)
z getParameterValues(“para-name”)
String username= 
request.getParameter(“username”);
String[] choice = 
request.getParameterValues(“comments”);
– Dùng đối tượng của class HttpServletRequest để lấy các
thông tin HTTP header 
– Ví dụ: Request Parameter 
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 23
Lập trình Web với Servlet
z Lấy các thông số HTTP request header
– class HttpServletRequest cung cấp các method để lấy các thông số
request header.
– String getHeader(header-name): lấy nội dung của header-name
– Enumeration getHeaderNames(): lấy tất cả các header-name.
– Một số method điển hình:
z Cookie[] getCookies(): dãy Cookie từ client
z int getContentLength(): trả giá trị Content-Length
z int getContentType(): trả giá trị Content-Type
z int getRemoteUser(): giá trị username nếu có authenticate
– Ví dụ: Request Header 
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 24
Lập trình Web với Servlet
z Lấy các thông số HTTP request header (t.t)
– Lấy các giá trị của biến môi trường CGI:
z QUERY_STRING: getQueryString()
z REMOTE_ADDR: getRemoteAddr()
z REMOTE_HOST: getRemoteHost()
z REQUEST_METHOD: getMethod()
z PATH_INFO: getPathInfo()
z SCRIPT_NAME: getServletPath()
z SERVER_NAME: getServerName()
z SERVER_PORT: getServerPort()
z HTTP_XXX_YYY: getHeader(“Xxx-Yyy”)
z 
- Ví dụ : Request Info
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 25
Lập trình Web với Servlet
z API cho HttpServletResponse
1. String getCharaterEncoding()
2. ServletOutputStream getOutputStream()
3. PrintWriter getWriter()
4. setContentLength( int len )
5. setContentType( String type )
6. setBufferSize( int len )
7. int getBufferSize()
8. flushBuffer()
9. 
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 26
Lập trình Web với Servlet
z Gởi dữ liệu cho web client
– Dùng đối tượng của class HttpServletResponse.
– Tạo đối tượng PrintWriter để ghi dữ liệu gởi
z PrintWriter out = response.getWriter();
– Xử lý các mã HTTP trả về với các method của class 
HttpServletResponse:
z void setStatus(int statusCode): gởi các mã response
z void sendError(int errorCode,String msg): gởi mã lỗi theo giao thức
HTTP và message
z void sendRedirect(String URL): chuyển đến một trang URL khác
z Các mã có thể theo giao thức HTTP hoặc dùng các hằng số trong class 
HttpServletResponse.
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 27
Lập trình Web với Servlet
z Xử lý Cookie với web browser
– Chức năng Cookie
z Kết hợp với web browser để lưu các thông số cần thiết.
z Thông tin có thể dùng để thiết lập phiên làm việc (session) trong
các ứng dụng thương mại điện tử(e-commerce).
z Lưu trữ username, password
z Thông tin để customize web site cho user hay dùng cho cơ chế
personalization
z 
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 28
Lập trình Web với Servlet
z Ghi thông tin Cookie lên máy client
– Thông tin được truyền đi trong field Set-Cookie HTTP 
header
– Dùng method addCookie(Cookie cookie) của class 
HttpServletResponse.
– Các thuộc tính quan trọng trong class Cookie:
z Cookie name: setName(String name) – getName()
z Cookie value: setValue(String value) – getValue() 
z Max Age: setMaxAge(int seconds) – getMaxAge()
– Ví dụ: Cookies
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 29
Lập trình Web với Servlet
z Ví dụ
String user=“”,pass=“”;
Cookie[] cookies = request.getCookies();
if(cookies.length==0){
user = request.getParameter(“username”);
pass = request.getParameter(“password”);
Cookie name_cookie = new Cookie(“username”,user); 
response.addCookie(name_cookie);
Cookie pass_cookie = new Cookie(“password”,pass); 
response.addCookie(pass_cookie);
}
else{
for(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i];
if(cookie.getName().equals(“username”)) 
user=cookie.getValue();
if(cookie.getName().equals(“password”)) 
pass=cookie.getValue();
}
}
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 30
Lập trình Web với Servlet
z Lưu thông tin về phiên làm việc của user
– class HttpSession.
– Có thể dùng để lưu bất kỳ đối tượng nào.
– Đối tượng của class HttpSession được trả về từ method getSession()
của class HttpServletRequest.
– Các method thường sử dụng:
z Object getValue(String name) [2.2: getAttribute]
z void putValue(String name,Object object) [2.2: putAttribute]
z void removeValue(String name) [2.2: removeAttribute]
z String[] getValueNames() [Enumeration getAttributeNames()]
z String getId()
z void setMaxInactiveInterval(int seconds)
– Ví dụ: Session 
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 31
Lập trình Web với Servlet
z Ví dụ lưu ShoppingCart vào session
HttpSession session = request.getSession(true);
ShoppingCart cart = 
(ShoppingCart)session.getValue(“ShoppingCart”);
if(cart==null){
cart = new ShoppingCart();
session.putValue(“ShoppingCart”,cart);
}
//process(cart)
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 32
Lập trình Web với Servlet
z Kết nối cơ sở dữ liệu
– Dùng JDBC (Java DataBase Connectivity) để kết nối và
thao tác với database.
– Quy trình xử lý:
z Tạo JDBC driver và URL database.
z Thiết lập connection đến URL database.
z Tạo đối tượng statement.
z Thực thi các câu lệnh SQL.
z Xử lý kết quả thực thi.
z Đóng kết nối đến database.
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 33
Lập trình Web với Servlet
z Kết nối đến database thông qua ODBC.JDBC trên Windows
– Tạo DataSourceName trong ODBC.JDBC
Connection con = null; 
Statement stmt = null; 
ResultSet rs = null;
String driver = “sun.jdbc.odbc.JdbcOdbcDriver”;
String databaseURL = “jdbc:odbc:DataSourceName”;
try{
Class.forName(driver);
con = DriverManager.getConnection(databaseURL);
stmt = con.createStatement()
rs = stmt.executeQuery(“SELECT * FROM Products”);
while(rs.next()){
out.println(rs.getString[1]+”-”
getInt(“quantity”));//
}
con.close();
}cacth(SQLException se){ con.close(); }
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 34
Lập trình Web với Servlet
z Kết nối database server bất kỳ
– Cần có driver hỗ trợ.
– Kết nối đến Oracle Database Server:
driver=“oracle.jdbc.driver.OracleDriver”
databaseURL =“jdbc:oracle:thin@localhost:1521:”+dbName
con = DriverManager.getConnection(databaseURL,user,password)
– Kết nối đến Sysbase:
driver=“com.sysbase.jdbc.SysDriver”
databaseURL= 
“jdbc:sysbase:Tds:localhost:1521?SERVICENAME=“+dbName
con = DriverManager.getConnection(databaseURL,user,password)
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 35
Bài tập: Ứng dụng tra cứu DBĐT bằng servlet
z Viết một InputForm servlet để tạo một HTML form 
nhập để nhận dữ liệu tra cứu danh bạ điện thoại.
z Viết một SearchAccount servlet để tra cứu thông tin 
danh bạ.
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 36
1. import javax.servlet.*; import javax.servlet.http.*; 
2. import java.io.IOException; 
3. public class InputForm extends HttpServlet {
4. static final private String CONTENT_TYPE = "text/html";
5. //Initialize global variables
6. public void init() throws ServletException {
7. // TO DO ...
8. }
9. public void doGet (HttpServletRequest request, 
10. HttpServletResponse response) 
11. throws ServletException, IOException {
12. // TO DO ...
13. }
14. }
Viết servlet InputForm
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 37
1. //Process the HTTP Get request
2. public void doGet ( HttpServletRequest request, HttpServletResponse
response)
3. throws ServletException, IOException {
4. response.setContentType(CONTENT_TYPE);
5. PrintWriter out = response.getWriter(); // Write to client
6. out.println(“InputForm");
7. out.println("");
8. out.println("Trang Web demo viec tra danh ba dien thoai.");
9. out.println("");
10. out.println("Nhap ten thue bao: ");
11. out.println("Nhap so dien thoai: ");
12. out.println("Nhap dia chi: ");
13. out.println("");
14. out.println(""); out.println("");
15. }
Viết servlet InputForm (t.t)
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 38
InputForm
 Trang Web demo viec tra danh ba dien thoai.
Nhap ten thue bao : 
Nhap so dien thoai : 
Nhap dia chi : 
Kết quả hiển thị trên trình duyệt
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 39
1. import java.io.*; import java.util.*; import java.sql.*;
2. public class SearchAccount extends HttpServlet {
3. static final private String CONTENT_TYPE = "text/html";
4.
5. // Process the HTTP Post request
6. public void doPost (HttpServletRequest request, 
7. HttpServletResponse response) 
8. throws ServletException, IOException
9. {
10. // TODO
11. // Lay gia tri tu cac textbox tren InputForm
12. }
13. }
Viết servlet SearchAccount
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 40
1. //Process the HTTP Post request
2. public void doPost (HttpServletRequest request, HttpServletResponse response) 
3. throws ServletException, IOException {
4. response.setContentType(CONTENT_TYPE);
5. PrintWriter out = response.getWriter();
6. out.println("SearchAccount");
7. out.println("Ket qua tra dien thoai theo yeu cau cua ban :");
8. out.println("");
9. String tentbao = request.getParameter("ttbao");
10. // xay dung lenh SQL
11. String newSQL = "SELECT * FROM CUSTOMER";
12. if (tentbao != null && tentbao.length() != 0) {
13. newSQL = newSQL + " where tentbao like '%" + tentbao + "%'";
14. }
15. String conStr = "jdbc:odbc:DanhBaDT";
16. Statement stmt = null; ResultSet rs = null;
17. 
Viết servlet SearchAccount (t.t)
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 41
1. try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
2. con = DriverManager.getConnection(conStr, "", "");
3. stmt = con.createStatement();
4. rs = stmt.executeQuery(newSQL);
5.
6. out.println("So thu tuTen thue baoSo dien” +
7. “ thoaiDia chi\n");
8. if (rs != null) {
9. for ( int i = 1; rs.next(); ) {
10. out.println("" + i +"" + rs.getString(2) +
11. "" + rs.getString(3) + "" +
12. rs.getString(4) + "\n");
13. } // end for
14. } // end if
15. out.println("");
16. rs.close(); stmt.close(); con.close();
17. } catch (Exception e) { System.out.println("Error : " + e); }
18. 
19. } // End doPost()
Viết servlet SearchAccount
Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM
Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 42
Kết quả chạy thử

File đính kèm:

  • pdfbai_giang_lap_trinh_mang_dung_socket_chuong_5_lap_trinh_web.pdf