52
1 LP TRÌNH NET TRÊN JAVA – SERVLETS Gii thiu và cu trúc

Servlets Slide

Embed Size (px)

Citation preview

Page 1: Servlets Slide

1

LẬP TRÌNH NET TRÊNJAVA – SERVLETSGiới thiệu và cấu trúc

Page 2: Servlets Slide

Nội dungNội dung2

AppletServlets, JSP,Sockets programmingRMI URLRMI, URLJDBC

Page 3: Servlets Slide

AppletApplet3

Chương trình GUI chạy trên web browserJava bytecode được tải đến từ web servery ợVấn đề về cơ chế bảo mật

SandboxSandboxMã Java bytecode chưa được kiểm thử trước khi chạyKhông kiểm tra được độ tin cậy của mã chạyKhông kiểm tra được độ tin cậy của mã chạy

Page 4: Servlets Slide

ServletsServlets4

Không phải là chương trình GUIKhởi tạo trang web động, trả lời lại những yêu ạ g ộ g, ạ g ycầu của webJSP: Java Server PagesJSP: Java Server Pages

Là những phương pháp khác nhau để khởi tạo servletsservlets.

Page 5: Servlets Slide

Lập trình mạngLập trình mạng

ế ế5

Là sự giao tiếp giữa các tiến trìnhCác cách tiếp cận khác nhau:p ậ

Mức thấp thông qua API: socketsCần phải hiểu rõ hình thức mạng, địa chỉ …Cần phải hiểu rõ hình thức mạng, địa chỉ …

Tiếp cận hướng đối tượng: RMI, CORBATiếp cận trên cơ sở hướng phục vụ: URLTiếp cận trên cơ sở hướng phục vụ: URL

Page 6: Servlets Slide

SocketsSockets

ề6

Sockets API thường được sử dụng nhiều trong lập trình API trên CSocket là sự giao tiếp trừu tượng điểm cuốiCác loại sockets khác nhau:Các loại sockets khác nhau:

Stream (kết nối qua stream byte)D t ( á độ lậ )Datagram (các messages độc lập)

Sử dụng sockets cần phải hiểu rõ về các tầng ế ốkết nối mạng OSI, địa chỉ mạng, hàng đợi …

Page 7: Servlets Slide

Java socketsJava sockets7

Sockets trong Java đơn giản hơn trong CChe giấu chi tiếtAPI được sử dụng thích hợp nhất với TCP/IP

Các đối tượng khác nhau được sử dụng choCác đối tượng khác nhau được sử dụng cho các kiểu giao tiếp mạng khác nhau:

Socket (Stream Client)Socket (Stream Client)ServerSocket (Stream Server)D t S k t (M i t d)DatagramSocket (Message oriented)

Page 8: Servlets Slide

Socket và ServerSocket (trên giao iế TCP/IP)tiếp TCP/IP)

ế ế ố8

Thiết lập kết nối ngang hàngSocket cung cấp I/O stream liên kết với kết nốig p

Sử dụng phương thức I/O của JavaXuất hiện ngoại lệ mới là vấn đề khó giải quyếtXuất hiện ngoại lệ mới là vấn đề khó giải quyếtNên sử dụng không nhiều quá một stream

Page 9: Servlets Slide

DatagramSocket và D P k (UDP)DatagramPacket (UDP)

ế9

Giao tiếp hướng thông tinTrao đổi thông tin, gửi và nhậnNằm trong Java I/O

Các hạn chếCác hạn chếKhông tin cậyHàng đợi không được đảm bảoHàng đợi không được đảm bảoNhân đôi thông tin có thể xảy raCầ hiể ấ ề i hứ để ử dCần hiểu rất rõ về giao thức mạng để sử dụng

Page 10: Servlets Slide

Socket classSocket class

ề10

Class mô tả về socketTạo một socketạ ộ

Socket(InetAddress address, int port)Socket(String host int port)Socket(String host, int port)Socket(InetAddress address, int port, InetAddress localAddr int localPort)InetAddress, localAddr, int localPort)Socket(String host, int port, InetAddress, localAddr int localPort)localAddr, int localPort)Socket()

Page 11: Servlets Slide

(tiếp)… (tiếp)Lấy thông tin về một socket

11

Lấy thông tin về một socketInetAddress getInetAddress() : trả về địa chỉ mà socket kết nối đến. int getPort() : trả về địa chỉ mà socket kết nối đến. InetAddress getLocalAddress() : trả về địa chỉ cục bộbộ.int getLocalPort() : trả về địa chỉ cục bộ.

Sử dụng Streamspublic OutputStream getOutputStream() throws IOException - Trả về một output stream cho việc viết các byte đến socket này.ypublic InputStream getInputStream() throws IOException - Trả về một input stream cho việc đọc các byte từ socket này.y

Page 12: Servlets Slide

Ví dụ - kết nối đến webserverVí dụ kết nối đến webserverimport java net *;

12

import java.net.*;import java.io.*;public class getSocketInfo {

public static void main(String[] args) {for (int i = 0; i < args.length; i++) {try {try {

Socket theSocket = new Socket(args[i], 80);System.out.println("Connected to " + theSocket getInetAddress() +theSocket.getInetAddress() +" on port " + theSocket.getPort() + " from port " +theSocket.getLocalPort() + " of " +

theSocket getLocalAddress());theSocket.getLocalAddress());}

Page 13: Servlets Slide

Lập trình internetLập trình internet

ấ ể ố13

Tất cả điểm cuối được phân biệt bởi 3 loại sau:

Cổng giao tiếp UDP/TCPSố cổng (độc lập với service)g ( ộ ập )Địa chỉ IP

IP của người sử dụngIP của người sử dụngIP mạng

Page 14: Servlets Slide

Java Sockets và IPJava Sockets và IP14

Lớp InetAddressPhương thức:g

static InetAddress getByName(String);static InetAddress getLocalHost();static InetAddress getLocalHost();byte getAddress();String getHostAddress();String getHostAddress();String getHostName();

Page 15: Servlets Slide

TCP client/serverTCP client/server

ố15

Client sử dụng đối tượng SocketCần xác định địa chỉ serverĐịa chỉ IP/hostname và số cổngLiên kết stream với giao tiếp

Server sử dụng đối tượng ServerSocketCần phải xác định số cổng serverCần phải xác định số cổng serverNhận kết nối mới

Kết nối mới tạo đối tượng SocketKết nối mới tạo đối tượng Socket

Page 16: Servlets Slide

Ví dụ - in IP của locahostVí dụ in IP của locahostimport java net *;

16

import java.net.*;public class HostInfo {

public static void main(String args[]) {H tI f h t H tI f ()HostInfo host = new HostInfo();host.init();}public void init() {

try {InetAddress myHost =

InetAddress getLocalHost();InetAddress.getLocalHost();System.out.println(myHost.getHostAddress());System.out.println(myHost.getHostName());

} t h (U k H tE ti ) {} catch (UnknownHostException ex) {System.err.println("Cannot find local host");

}}

}

Page 17: Servlets Slide

Ví dụ - lấy IP của local/remote hostVí dụ lấy IP của local/remote host

public class Sample1 {17

1. public class Sample1 {2. public static void main (String[] args) {3. try {4. InetAddress localAddr = InetAddress.getLocalHost();5. System.out.println( "Local Host Address (Host/IP): " 6 + localAddr toString() );6. + localAddr.toString() );

7. InetAddress remoteAddr = 8. InetAddress.getByName("www.vnn.vn");9. System.out.println( "Web Server IP: " 10 + remoteAddr.toString() );10. remoteAddr.toString() );11. }12. catch (UnknownHostException ex) {ex.printStackTrace(); }

}// d i13. }// end main14. }// End class

Page 18: Servlets Slide

Ví dụ về Talk client/serverVí dụ về Talk client/server18

Lớp TalkerĐược phân luồngĐọc stream vào và đưa stream ra

Lớp TalkServerLớp TalkServerTạo ServerSocket, đợi sự kết nối từ clientTạo 2 đối tượng Talker và chạy chúngTạo 2 đối tượng Talker và chạy chúng

Lớp TalkClientế ốTạo Socket, kết nối với server

Tạo 2 đối tượng Talker và chạy chúng

Page 19: Servlets Slide

RMI – Remote method invocationRMI Remote method invocation

Ý ố19

Ý tưởng tạo đối tượng Java thực thi mạngServer phải bao gồm code, theo dõi requestsp g , q

Tại một số địa chỉ/hostnameGọi phương thức request và trả về kết quảGọi phương thức request, và trả về kết quảTuần tự hóa

Cli t hải t đối t từClient phải tạo đối tượng từ xa

Page 20: Servlets Slide

Ví dụ RMI codeVí dụ RMI code20

SimpleRMI, AlternativeSimpleRMICung cấp từ xa về thêm/bớt đối tượngTạo đối tượng server phục vụ client

SortRMiSortRMiTạo phương thức ngắn từ xaCó thể dễ dàng nhận/gửi các kiểu đối tượngCó thể dễ dàng nhận/gửi các kiểu đối tượng phức

Page 21: Servlets Slide

URL – Uniform Resource LocatorURL Uniform Resource Locator21

Địa chỉ internet world wide web Lớp URL của Javap

Xây dựng và phân tích các URLTạo đối tượng URLConnectionTạo đối tượng URLConnection

Có thể tương tác với serverTạo kết nối tới URLTạo kết nối tới URL

InputStream để đọc dữ liệu từ server

Page 22: Servlets Slide

Một số phương thức URLMột số phương thức URL22

String getHost();String getPath();g g ();String getQuery();InputStream openStream();InputStream openStream();URLConnection openConnection();

Page 23: Servlets Slide

Tìm và in trang webTìm và in trang web23

try {URL u = new URL("http://www.google.com");( p g g )BufferedReader r = new BufferedReader(

new InputStreamReader( u openStream()));new InputStreamReader( u.openStream()));String s;while ( (s = r.readLine()) != null)

System.out.print(s);y p ( )} catch (... I/O and URL Exceptions ..

Page 24: Servlets Slide

24

Servlets và JSP

Page 25: Servlets Slide

Giới thiệuGiới thiệu

25

JSP là công nghệ script chạy phía web server của hãng Sun giống như ASP/PHPJSP dù ô ữ J h á hát biể h if fJSP dùng ngôn ngữ Java cho các phát biểu như if, for, do…while, while, biểu thức, lời gọi hàm…. và phân biệt chữ HOA và thườngchữ HOA và thường.Hiện JSP có thể chạy trên nhiều Web server khác nhau từ Tomcat, Apache, Jrun, JavaWebServer,... Miễn làtừ Tomcat, Apache, Jrun, JavaWebServer,... Miễn là chúng hỗ trợ Servlet Engine.Để server nhận biết được file nào là JSP, ta luôn dùng ậ ợ , gextension đã qui định theo cấu hình (mặc định là *.jsp).

Page 26: Servlets Slide

Lập trình web và JavaLập trình web và Java26

Page 27: Servlets Slide

Java web serverJava web server

ồ27

Server bao gồm JVMJava sẵn sàng thực thi, không cần khởi động với mỗi request gửi đếnJVM có một số đối tượng servlets

Khi request gửi đến, phương thức đối tượng servlet được gọi để bắt request

Nếu request gửi đến có lớp servlet mới, lớp có thể được load trực tiếpTạo lớp với mở rộng

javax.servlet.http.HttpServlet

Page 28: Servlets Slide

Tạo servletTạo servlet28

Tạo lớp sử dụngjavax.servlet.http.HttpServlet

Viết phương thứcinit() – được gọi khi đối tượng được khởi tạoinit() được gọi khi đối tượng được khởi tạodoGet() / doPost() – được gọi khi web request được gửi đếnđược gửi đếndestroy() – được gọi khi hủy đối tượng

Page 29: Servlets Slide

Ví dụ ServletVí dụ Servlet

bli l H ll S l t t d Htt S l t {

29

public class HelloServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {// set the content type of the response

C ( / )response.setContentType("text/html");// get a writer associated with the response stream.PrintWriter out = response getWriter();PrintWriter out response.getWriter();out.println("<HEAD><TITLE>Hello</TITLE></HEAD>");out.println("<BODY><p>Hello Client</p></BODY>");out.close();

}}}

Page 30: Servlets Slide

JSP – Java Server PagesJSP Java Server Pages

ồ30

Tạo mã HTML bao gồm mã Java trong đóKhông cần định nghĩa lớp, chỉ cần trộn mã trong HTML

File .jsp được convert sang servlet một cách j p ợ g ộtự động

Page 31: Servlets Slide

Cấu trúc trang JSPCấu trúc trang JSP31

Một trang JSP là 1 file *.jsp , ví dụ: “hello.jsp”Viết một trang JSP bằng bất kỳ trình soạn thảo nào kể ả N t d ồi l l i ới tê * jcả Notepad, rồi lưu lại với tên *.jsp.

JSP thường dùng các đối tượng Java chính quy để xử lý các giải thuật phức tạp Các đối tượng java này sẽlý các giải thuật phức tạp. Các đối tượng java này sẽ được đóng gói dạng JavaBean.Đoạn script JSP được đóng trong tag <% %>Đoạn script JSP được đóng trong tag <% .... %>.Biểu thức dạng: <%= (exp) %> tương đương với <% out print( exp ) %>out.print( exp ) %>

ví dụ: <%= (5 + 3) %> tương đương với <% out.println( 5 + 3 ) %>

Page 32: Servlets Slide

Các đối tượng có sẵn trong JSPCác đối tượng có sẵn trong JSP

ố32

Đối tượng requestĐối tượng responseợ g pĐối tượng outĐối tượng applicationĐối tượng applicationĐối tượng session

Page 33: Servlets Slide

Ví dụ JSPVí dụ JSP%@ i t "j til *" %

33

<%@ page import="java.util.*" %><HTML><HEAD><TITLE>JSP Demo</TITLE></HEAD><BODY><%!

Date theDate = new Date();Date theDate = new Date();Date getDate(){

System.out.println( "In getDate() method" );return theDate;

}}%>Hello! The time is now <%= getDate() %></BODY></HTML>

Page 34: Servlets Slide

Ví dụ - data jspVí dụ data.jsp<HTML>

34

1. <HTML> 2. <HEAD> <TITLE>JSP Example</TITLE> </HEAD> 3. <BODY BGCOLOR="ffffcc"> 4. <CENTER> 5. <H2>Date and Time</H2> 6 <% /*Begin JSP script–Java code sample–Comment6. <% /*Begin JSP script Java code sample Comment

*/7. java.util.Date today = new java.util.Date();

out println("Today's date is: "+today);8. out.println("Today's date is: "+today); 9. %> 10. </CENTER> 11. </BODY> </HTML>

Page 35: Servlets Slide

Các thẻ script trong JSPCác thẻ script trong JSP

Khối % %35

Khối <% ... %> Dùng để nắm bắt các khai báo, biểu thức, tạo đối tượng, gọi phương thức… VD:p g<% out.println(“<h1> Hello to JSP world </h1>”); %>

ẻ %@ %Thẻ <%@page ... %> Dùng để khai báo ngôn ngữ script, các phát biểu import. VD: %@page language="java" import="java.util.*; java.sql.*" %%@page a guage ja a po t ja a ut ; ja a sq %

Thẻ <%! .... %>Dùng để khai báo các biến, các phương thức cấp trang JSP. VD:<%! int x = 10; double y = 2.0; %>.

Page 36: Servlets Slide

(tiếp)… (tiếp)36

Thẻ <%= ... %> Dùng cho các biểu thức.VD: <%= a+b %> or <%= new java.util.Date() %>

Thẻ <%@ include ... %> Dùng để chèn các file JSP khác VD:Dùng để chèn các file JSP khác. VD:<%@include file="copyright.html" %>

Page 37: Servlets Slide

Lớp JAppletLớp JApplet

ể ế37

Sử dụng để viết appletAppletviewer – sử dụng để chay applet mà pp ụ g y ppkhông cần web browserĐưa applet vào trong HTMLĐưa applet vào trong HTML<APPLET

code=classnamecode classnamecodebase=optional_path_to_classeswidth=200height=200>

Alternate text</APPLET>

Page 38: Servlets Slide

38

JDBCJDBC

Page 39: Servlets Slide

Kiến trúc tổng quátKiến trúc tổng quát39

Page 40: Servlets Slide

Những bước cơ bản để sử dụng d b Jdatabase trong Java

ế ố40

1. Tạo kết nối – connection2. Tạo cú pháp JDBC Statementsạ p p3. Chạy cú pháp SQL

Nhận kết quả ResultSet4. Nhận kết quả ResultSet5. Đóng kết nối

Page 41: Servlets Slide

1 Tạo kết nối - connection1. Tạo kết nối connection

i t j l *41

import java.sql.*;Nạp driver của dữ liệu cung cấp

Class forName("oracle jdbc driver OracleDriver");Class.forName( oracle.jdbc.driver.OracleDriver );Phương thức động nạp driver cho cơ sở dữ liệu Oracle

DriverManager.registerDriver(new g g (com.microsoft.jdbc.sqlserver.SQLServerDriver());

Tạo kết nối - connectionC ti D i M tC ti (Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@oracle-prod:1521:OPROD", username, passwd); Connection connection = DriverManager.getConnection( "jdbc:microsoft:sqlserver://<Host>:1433",username,passwd);d);

Page 42: Servlets Slide

2 Tạo cú pháp - JDBC statement2. Tạo cú pháp JDBC statement42

Statement stmt = conn.createStatement() ; Khởi tạo đối tượng Statement dành cho gửi cú pháp SQL tới cơ sở dữ liệu:1. Chuẩn bị Statement

ế ố2. Liên kết tham số3. Cộng vào trong gói4 Lặp lại bước 2 và 3 đến khi truy cập vào từng phần tử của một4. Lặp lại bước 2 và 3 đến khi truy cập vào từng phần tử của một

bảng5. Khởi động (chạy)

Page 43: Servlets Slide

Ví dụVí dụ43

Statement stmt = conn.createStatement( );int[] rows;for(int i=0; i<accts.length; i++) {

accts[i].calculateInterest( );stmt.addBatch("UPDATE account " +

"SET balance = " +accts[i].getBalance( ) +

"WHERE acct id = " + accts[i].getID( ));_ [ ] g ( ));}

rows = stmt executeBatch( );rows stmt.executeBatch( );

Page 44: Servlets Slide

3 Chạy cú pháp SQL3. Chạy cú pháp SQL

St i t L hi h C t t bl44

String createLehigh = "Create table Lehigh " +"(SSN Integer not null, Name VARCHAR(32), " + "Marks Integer)";( ), g ) ;stmt.executeUpdate(createLehigh);

String insertLehigh = "Insert into Lehigh l (123456789 b 100)values“ + "(123456789,abc,100)";

stmt.executeUpdate(insertLehigh);p ( g );

Page 45: Servlets Slide

4 Nhận kết quả - ResultSet4. Nhận kết quả ResultSet

S h h l * f h h

45

String queryLehigh = "select * from Lehigh";

ResultSet rs = Stmt.executeQuery(queryLehigh);

while (rs.next()) {int ssn = rs.getInt("SSN");String name = rs.getString("NAME");int marks = rs.getInt("MARKS");g ( );

}

Page 46: Servlets Slide

5 Đóng kết nối5. Đóng kết nối46

stmt.close();conn.close();();

Page 47: Servlets Slide

Tiến trình và JDBCTiến trình và JDBC

JDBC h hé SQL t t t hó l i thà h hó47

JDBC cho phép SQL statements nhóm lại thành nhóm trong một tiến trình riêng biệtĐiều khiển tiến trình được thực hiện bởi đối tượngĐiều khiển tiến trình được thực hiện bởi đối tượng Connection, kiểu ngầm định là auto-commit, tức là mỗi một sql statement được đối xử như một tiến trìnhCó thể tắt chế độ auto-commit với conn.setAutoCommit(false);Và ó thể bật l i ới tA t C it(t )Và có thể bật lại với conn.setAutoCommit(true);Một khi auto-commit bị tắt, không có SQL statement nào được đưa ra cho đến khi thực hiện conn commit();được đưa ra cho đến khi thực hiện conn.commit();Tại thời điểm tất cả sự thay đổi được thực hiện bởi SQL statements sẽ là bất biến trong cơ sở dữ liệug ệ

Page 48: Servlets Slide

Bắt lỗi với ngoại lệ ExceptionsBắt lỗi với ngoại lệ Exceptions

ể ấ ể48

Chương trình có thể lấy lại và để lại trong cơ sở dữ liệu trạng thái phù hợpệ ạ g p ợpNếu cú pháp try ném được ngoại lệ, nó có thể bắt ngoại lệ với cú pháp catchthể bắt ngoại lệ với cú pháp catchSử dụng finally {…} để dọn dẹp ngoại lệCó thể quay lại tiến trình catch { …} hoặc đóng kết nối tới cơ sở dữ liệu và làm sạchđóng kết nối tới cơ sở dữ liệu và làm sạch các quan hệ trong khối lệnh finally {…}

Page 49: Servlets Slide

Một cách khác để kết nối cơ sở dữ liệ (JDBC ODBC)liệu (JDBC-ODBC)

49

Page 50: Servlets Slide

Metadata trong cơ sở dữ liệuMetadata trong cơ sở dữ liệu

Kết ối ủ ở dữ liệ h hé ấ50

Kết nối của cơ sở dữ liệu cho phép cung cấp các thông tin biểu thị các bảng thông qua cú pháp SQL dung lượng của kết nối các quypháp SQL, dung lượng của kết nối, các quy trình kết nối

Các thông tin đó được tạo nên bởi đối tượng DatabaseMetaData

Page 51: Servlets Slide

Ví dụ MetadataVí dụ Metadata51

…Connection con = …. ;

DatabaseMetaData dbmd = con.getMetaData();

String catalog = null;String catalog = null; String schema = null;String table = “sys%”; String[ ] types = null;

ResultSet rs =ResultSet rs dbmd.getTables(catalog , schema , table , types );

Page 52: Servlets Slide

Ví dụ JDBC - metadataVí dụ JDBC metadatabli t ti id i tRS(R ltS t ) th SQLE ti

52

public static void printRS(ResultSet rs) throws SQLException{

ResultSetMetaData md = rs.getMetaData(); // get number of columnsint nCols = md.getColumnCount();// print column names// print column namesfor(int i=1; i < nCols; ++i)

System.out.print( md.getColumnName( i)+",");/ / output resultsetwhile ( rs.next() ){ for(int i=1; i < nCols; ++i){ for(int i=1; i < nCols; ++i)

System.out.print( rs.getString( i)+",");System.out.println( rs.getString(nCols) );

}}