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

Trang 1

Trang 2

Trang 3

Trang 4

Trang 5

Trang 6

Trang 7

Trang 8

Trang 9

Trang 10
Tải về để xem bản đầy đủ
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
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:
bai_giang_lap_trinh_mang_dung_socket_chuong_5_lap_trinh_web.pdf

