Tải bản đầy đủ (.docx) (16 trang)

Kiến thưc JSP và Servlet Java web cơ bản

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.67 MB, 16 trang )

JSP và Servlets
JSP là cái chi
JSP hiểu đơn giản là những dòng code java được ghi vào HTML text

1. JSP Fundamentals
*JSP Element: là những element trong HTML chứa code java
-

-

-

JSP Expression:
o Công dụng: thực hiện một đoạn biểu thức hoặc phương thức trong java và tự động
chuyển sang thành HTML, chỉ chứa được 1 dòng code
o Syntax: <%= //some code %>
JSP Scriptles:
o Cơng dụng: thực hiện một dịng hoặc một khối code java nhưng ko tự động chuyển
sang thành HTML được, nếu muốn chuyển phải dùng hàm built-in out.println
o Syntax: <% //some code %>
JSP Declarations:
o Công dụng: Khai báo một phương thức trong java
o Syntax: <%! //some methods %>
o Lưu ý: dùng JSP Expression hoặc JSP Scriptles để gọi tới phương thức được khai báo

*Gọi class Java bằng JSP: trong thực tế ta hạn chế viết những dòng JSP Elements mà thay vào đó có
thể viết class java bên ngồi mà sử dụng
-

Cách dùng :
o Đi từ package đến class rồi đến methods


o Import package vào với JSP Directives. Ví dụ <%@ page import=”tên_package.*” %>

*Include file vào JSP
-

Ta có thể include file HTML hoặc là file jsp khác bằng câu lệnh:
<jsp:include page=”tên_file” />

*Một số hàm built –in trong JSP:
-

Request : dùng để gửi yêu cầu đến client để nhận về thông tin
Response: dùng để phản hồi lại yêu cầu từ client
Out: dùng để chuyển nội dung code java thành HTML
Session: chứa thông tin riêng về một user
Application: chứa thông tin chia sẽ từ nhiều user

2. Reading HTML Form Data With JSP
-

-

Để đọc dử liệu từ form HTML thì đầu tiên attribute action của form tag phải chỉ tới file jsp sẽ
thực hiện thao tác đọc, khi nhấn submit thì các dữ liệu trong input của form sẽ được gửi về
cho file trong attribute action
Ta dùng câu lệnh:
o request.getParameter(“name của input”) để lấy một giá trị từ input có một giá trị
hoặc có thể dùng short hand ${param.name_input}
o request.getParameterValues(“name của input”) để lấy tất cả giá trị của input chứa
nhiều giá trị, thường được chứa vào mảng



Lưu ý: với syntax shorthand thì khơng cần đặt tron jsp elements, muốn lấy tất cả giá trị trong
input thì phải chứ nó vào một chuỗi ví dụ:

3. State Management in JSP
A. Tracking actions ngời dùng bằng session
-

Như đã nói ở trên session là phần riêng biệt, duy nhất của mỗi user, Ví dụ : một cái giỏ hàng
thì giỏ hàng của mỗi người đều khác nhau -> giỏ hàng là một session.

-

Cơ chế của session với tomcat: Tomcat nó sẽ luôn dữ liệu session của mỗi người dùng, khi
người dùng truy cập thì dựa vào session của mỗi người mà nhận diện được người đó -> nói
dễ hiểu tomcat và trình duyệt sẽ lưu session cũa mỗi user tự động.

-

Với mỗi trình quản lý sever khác nhau thì sau một khoảng thời gian cụ thể nó sẽ tự động
restart session của người dùng (với tomcat là mỗi 5phuts)

*Một số phương thức của session:
-

-

-


Thêm dữ liệu vào session:
o

Syntax: session.setAtribute (String key , Object value);

o

Trong đó:

-

key: là tên người lập trình đặt để có thể truy cập đến



value: là đối tượng được đưa vào session

Lấy dữ liệu từ session
o

Syntax: session.getAtribute(String key);

o

Trong đó: muốn lấy ra giá trị nào thì nhập key của giá trị đó

o

Lưu ý: khi lưu giá trị lấy từ session vào một collection thì ta phải ép kiểu thành
collection đó, VD:


Lấy id :
o

-



Syntax: session.getId();

Invalidate:
o

Khi bạn muốn hủy bỏ session ngay lập tức không chờ đến thời gian timeout

o

Syntax: session.invalidate()

Configure Session Timeout
o

Khi bạn muốn chỉnh sửa thời gian timeout của server


o

Syntax: session.setMaxInactiveInterval(milisecond)

B. Cookies

1. Tổng quan về Cookies
-

Cookie là gì : cookies được dùng để chứa thông tin về người dùng giúp web nhận biết được
người dùng này là ai, dữ liệu trong cookie được lưu dưới dạng cặp key(name) và value, một
trang web có thể có nhiều cookie cho 1 người dùng để lưu nhiều thơng tin khác nhau. Trình
duyệt chỉ gửi cookie mà trùng với tên domain của servẻr

2. Thao tác với Cookie trong jsp
-

JSP cung cấp cho ta một class tên là Cookie để thao tác với cookie, class này được định nghĩa
trong gói thư viện javax.servlet.http

-

Cách để tạo một cookies:

-

o

Syntax: Cookies theCookie = new Cookies(String name, String value)

o

Trong đó:
theCookie :tên biến lưu trữ cookies




String name: là name (key) của cookie



String value: là value của name đó

Gửi cookie cho browser
o

-



Syntax: respone.addCookie(theCookie)

Set life span cho cookies
o

Syntax: theCookie.setMaxAge(second)

-

Ví dụ sending cookie cho browser:

-

Get cookies từ browser:

-


o

Syntax: Cookie[] theCookies = request.getCookies();

o

Vì một web có nhiều cookies cho mỗi người dùng nên khi get ta get tất cả nên phải
lưu trữ nó trong 1 mảng các object Cookie

Lây tên của Cookie:
o

-

Syntax: theCookie.getName()

Lấy value của Cookie:
o

Syntax: theCookie.getValue();


-

Ví dụ đọc dữ liệu từ Cookies:

C. Endcode URL Cookie
-


Trong cookie có một số ký tự mà browser khơng đọc được ví dụ như khoảng trắng, dấu + …... Lúc này ta sẽ mã hóa các ký tự đó thành code URL theo nguyên tắc của bảng mã UTF-8

-

Trong java cung cấp cho chúng ta 2 class để encode (mã hóa) và decode (giải mã) URL :

-

o

java.net.URLEncoder : để encode

o

java.net.URLDecoder : để decode

Cách để encode:
o

Syntax: URLEncoder.encode(String s, "UTF-8");

o

Trong đó :

o

-




String s : là chuỗi muốn mã hóa



UTF-8 : là bảng mã sẽ được dùng để mã hóa

Vídụ:

Cách để decode:
o

Syntax: URLDecoder.decode(String s, "UTF-8");

o

Trong đó:

o



String s : là chuỗi muốn giải mã



UTF-8 : là bảng mã sẽ được dùng để mã hóa

Vídụ:



3. JSP Standard Tag Library (JSTL)
-

Tag JSP: Trong thực tế ta luôn hạn chế dùng quá nhiều code scriptles, để giúp hạn chế điều
đó ta dùng tag jsp

-

Lợi ích của tag JSP:

-

o

Hạn chế tối đa số lượng code scriptles trong jsp

o

Giữ file JSP clean

o

Có thể tái sử dụng cho nhiều file, tránh được viết hàng ngành dòng code lặp đi lặp lại

Có 2 loại tag :
o

Custome Tag : Tag do người dùng tự định nghĩa và sử dụng


o

JSP Standard Tag Library (JSTL): là thư viện thẻ chuẩn do JSP cung cấp

-

JSTL có 5 tag chính : Core Tag, Functions Tag, I18 Tag, XML Tag, SQL Tag

-

Để sử dụng JSTL ta phải copy file jar của thư viện vào thư mục lib của project

A. Core Tag
-

Core Tag là một trong 5 tag cơ bản của JSTL nó cung cấp 1 số thao tác xử lý đơn giản

-

Để sử dụng core tag ta dùng câu lệnh:

*Một số tag phổ biến của core tags:
-

-

<c:forEch></c:forEach> : để lặt các phần tử trong một thành phần của trang
o

Ví dụ:


o

Trong đó :


var : là biến lưu tạm như biến i trong vòng for



items : là thành phần được lặp qua



Lưu ý : vì items là thành phần của trang nên khi ta muốn lặp qua nó ta phải
dùng lệnh pageContent.setAtribute(String name, value); để set nó thành
một atribute của trang

<c:if></c:if> : là một câu lệnh if đơn giản (trong core tag ko có else tag cho if)
o

Ví dụ:


o
-

-

Trong đó test là điều kiện


<c:choose></c:choose> : là một câu lệnh switch case trong core tag
o

Ví dụ:

o

Trong đó:


<c:when> : là từng case



<c:otherwise> : giống như defautl

<c:set var=”ten_bien” value=”gia_tri” scope=”pham_vi”> : dùng để khai báo một biến

B. Function Tag
-

Có các hàm dựng sẳn dùng cho JSTL

-

Syntax của Function Tag khá khác so với các tag khác, như 1 lời gọi hàm không cần cặp dấu
< />

-


Để sử dụng function tag ta dùng câu lệnh:

*Một số hàm phổ biến trong function tag:
-

fn:length(data) : cho ra độ dài của data truyền vào

-

fn:startsWith(s) : test xem một String có bắt đầu bằng s hay ko

-

fn:endWith(s) : test xem một String có kết thúc bằng s hay ko

-

fn:join(array,c) : nối các thành phần của mảng thành 1 chuỗi với ký tự ngăn cách giữa các
phần tử là c (tương tự trong JS)


o
-

Lưu ý : nếu muốn dùng join thì phải dùng split để biến chuỗi thành mảng

fn:split(string,c) : tách một chuỗi ký tự thành một mảng các phần tử với c là điểm chung
được cắt (tương tự JS)
o


VD: fn:split(“,”) : khi nó tra tới dấu “,” thì sẽ cắt ra thành 1 phần tử. Dấu “, ” sẽ được
bỏ

C. Formating Tag (I18N Tag)
-

Là tag giúp ta định dạng dử liệu cho mỗi ngôn ngữ tránh hard code cho mỗi ngôn ngữ khác
nhau

-

Để sử dụng formating tag ta dùng câu lệnh:

*Một số hàm phổ biến trong Formarting Tag
-

<fmt:setLocale value=”locale”/> : để set locale cho cả trang

-

<fmt:setBundel basename=”url” /> : để set bundel hay nguồn dịch cho tất cả các hàm
<fmt:message/>
o

-

Lưu ý : khi set bundle có thể chỉ cần đưa url đến tên cả file khơng cần nối thêm
locale vì nếu ta có setLocale cho trang thì hàm sẽ tự động nối thêm locale cho file


<fmt:message key = ”tên_key”> : để set 1 label khi ta đã setBundle thì hàm sẽ lấy giá trị từ
url được set theo key của hàm, nó sẽ thay đổi tùy theo url được set
o

Lưu ý : theo chuẩn đặt tên thì các key của file resources thì key có tên như sau :
labels.name (với name là người dùng đặt)

*Một số lưu ý đặt tên file:
-

-

Tên file resources với mỗi locale đều phải được đặt theo quy tắt
namefile_lanCode_countryCode.properties. Với:
o

Namefile : là tên file

o

LanCode: là mã ngôn ngữ

o

CountryCode : là mã quốc giá

o

Ví dụ: mylabels_us_US.properties (ngơn ngữ là tiếng anh và quốc gia là US)


sau:

Trong file resources thì gồm các cặp key và value, ví dụ:
o

Labels.greet = Hello

4. Servlet Fundamentals
-

Servlet là một class mở rộng của java giúp có thể chạy code java trên server, khởi tạo HTML
gửi về cho client


-

Cơ chế của servlet : client sẽ gửi request về cho java class và java class sẽ gửi response về cho
client file HTML

-

Vòng đời của Servlet:

-

Một vòng đời của servlet có 5 bước:
o

Tải lớp Servlet vào bộ nhớ


o

Tạo đối tượng lớp Servlet

o

Gọi phương thức init() của Servlet

o

Gọi phương thức service() của Servlet (trong service thì có phương thức doGet() và
doPost() )

o

Gọi phương thức destroy() của Servlet

-

Ví dụ chương trình Hello World của Servlet

-

Ta chỉ cần quan tâm đến phương thức doGet() và @WebServlet(“HelloServlet”) đầu class,
trong đó:
o

@WebServlet(“HelloServlet”) : là đường dẫn đến file class java



o

response.setContentType("text/html") : là lệnh dùng để set giá trị trả về cho client là
file html. Với setContentType là để nói cho client hiểu kiểu trả về là gì và text/html là
quy chuẩn để khai báo kiểu trả về là file HTML

o

PrintWriter out = response.getWriter() : là để tạo đối tượng out thuộc lớp
PrintWriter để ghi nối vào file HTML trả về cho client

o

out.print(“HTML content”) : ghi nội dung HTML vào file HTML

*Điểm khác nhau giữa Servlet và JSP
-

-

Servlet
Là một file class Java (1 file java)
Nó sẽ generate ra HTMl và gửi về cho
client

JSP
- Là một file HTML với đuôi mở rộng là
.jsp (1 file HTML tích hợp thêm code
java)
- Bản thân nó chứa nd HTML tĩnh và JSP

dùng để generate ra HTML bên trong
file
Khi nào dùng Servlet và JSP: trong thực tế ta dùng kết hợp cả 2, Servlet sẽ dùng để xử lý số
liệu logic và JSP dùng để generate ra web

A. Lấy data form
-

Để lấy data form ta dùng câu lệnh : request.getParameter(“name”)

-

Ví dụ:

-

Trong form khi dùng servlet để xử lý dữ liệu thì ta khai báo thêm một thuộc tính là methods
= “GET/ POST”

-

Phương thức GET sẽ gửi data cho phương thức doGet() của servlet còn POST sẽ gửi data cho
phương thức doPost

*Điểm khác nhau giữa GET và POST
-

Cả 2 đều là phương thức truyền dữ liệu của giao thức HTPP, khi người dùng nhấn submit thì
data sẽ được mã hóa theo giản đồ gọi là URL encoding giản đồ này gồm các cặp name =
value và các giá trị ngăn cách nhau bởi dấu &

o
-

Ví dụ: name=value1&name1=value2&name2=value3
GET
GET sẽ gửi thông tin người dùng
thông qua đường dẫn trang. Ví dụ :
/>m?name=value1&name1=value1

-

POST
POST sẽ gửi thơng tin dưới dạng
HTML header, nó chính là phần
body của HTML header
Tính bảo mật cao


-

Kém bảo mật dễ lộ thơng tin
Hạn chế dữ liệu
Có thể truyền bookmark hoặc email
URL
- Không thể gửi các dử liệu nhị phần,
hình ảnh
*Khi nào dùng GET khi nào dùng POST

-


Khơng giớ hạn dữ liệu
Khơng truyền đc bookmark và
email URL
Có thể gửi dữ liệu nhị phân, hình
ảnh....

-

GET thường được dùng để lấy dữ liệu để truy xuất dữ liệu nhanh chóng

-

POST được dùng để tạo dữ liệu vì nó bảo mật hơn

B. Reading Servlet Parameter
-

web.xml là gì : web.xml là file configure cho tất cả file servlet nó có thể chứa đường dẫn cho
file servlet, hoặc chứa các Context Parameters.... File web.xml nằm trong thư mục WEB-INF

-

Cách đoc Context Parameters từ file web.xml:
o

Context Parameters từ file web.xml có dạng:

o

Để đọc được ta cần phải khai báo đối tượng thuộc lớp ServletContext và cho nó

bằng phương thức getServletContext()

o
-

Ví dụ :



Trong đó : ServletrContext là interface giúp Servlet giao tiếp với Servler
Container,



getServletContext() sẽ trả về một ServletContext mà có session thuộc về nó
(?)

Cuối cùng dùng getInitParameter(“param-name”) : đẻ lấy parameter ứng với paramname


5. Mơ hình MVC (Model – View – Controller)
A. Mơ hình MVC
-

Mơ hình MVC (Model – View – Controller) : là một mơ hình tổ chức phần mềm, như tên gọi
nó chia làm 3 phần mỗi phần đảm nhiệm 1 chức năng riêng biệt nhưng có kết nối với nhau

-

Model : là trung tâm dữ liệu, nó có thể là database, một file ,… cung cấp dữ liệu cho

controller (Database)

-

Controller : sẽ nhận request từ client thực hiện các logic từ data của modal và trả về cho
view (Servlet)

-

View : sẽ nhận data từ Controller để hiển thị ra trang web trả về client (JSP)

*Luồng xử lý trong MVC:
-

Client sẽ gửi request về cho Controller

-

Controller gửi yêu cầu tới Model, và Model trả dử liệu về cho Controller để tiếp tục xử lý

-

Controller nhận data từ Model và thực hiện các xử lý logic. Sau khi hoàn tất Controller gửi
Data cho View

-

View sẽ nhận data và generate ra HTML respone về cho client

B. Mơ hình MVC trong Java

-

Trong Java thì Servlet sẽ là Controller, JSP sẽ là View và một database bất kỳ sẽ là Model

-

Một file Servlet trong mô hình MVC:


-

Một file JSP trong mơ hình MVC:

-

Phần sau đây ta sẽ giải thích kỹ hơn về các câu lệnh

1. request.setAttribute()
-

Là câu lệnh sẽ set dữ liệu cho dòng request để file tiếp theo nhận dịng request có thể xử
dụng dữ liệu này

2. RequestDispatcher
-

RequestDispatcher là một interface giúp ta định nghĩa 1 object có thể nhận request từ clent
và gửi nó cho bất kỳ nguồn nào (HTML file, JSP file, file Servlet khác) khác

-


Ví dụ khai báo object RequestDispatcher

-

Trong đó :
o

-

Phương thức request.getRequestDispatcher(“/view_student.jsp”) : sẽ tạo một đối
tượng RequestDispatcher và nó chứa địa chỉ để ta có thể gửi request đến (ở đây là 1
file JSP)

dispatcher.forward(request, response) : là câu lệnh để ta chuyển request đến file khác đã
được định dạng từ trước, nó có 2 tham số chính là request và respone được chuyển đi

3. Tóm tắt cơ chế
-

Servlet nó sẽ nhận dịng request, sau khi xử lý tính tốn tạo ra data, ta đính data đó vào dịng
request bằng câu lệnh request.setAttribute() để chuyển nó đi

-

Để chuyển dịng request sang file khác trước hết ta cần khai báo đối tượng
RequestDispatcher, trong phương thức getRequestDispatcher(“đường dẫn”) ta truyền tham
số là đường dẫn đến file muốn truyền request



-

Ta dùng dispatcher.forward(request, response) để tiến hành gửi dòng request sau khi được
đính kèm dử liệu đến file tiếp theo (cụ thể ở đây là file JSP)

-

Ở file JSP sẽ tự động nhận request nên ta có thể dùng ${ } để truy cập đến data và rendar nó
ra thành HTML

6. JDBC
-

JDBC là gì : JDBC là một thư viện giúp Servlet có thể kết nối với database

-

Để cài đặt JDBC ta làm tương tự JSTL, sau khi tải xong ta thêm vào file WEB-INF/lib của
project

7. Xây dụng một database web app hoàn chỉnh
A. Connection Pool
-

Cơ chế làm việc với database của tomcat: tomcat chỉ có thể kết nối với 1 database nhưng lại
cho phép kết nối với nhiều người dùng, trong 1 thời điểm database chỉ có thể tương tác với 1
user. Điều này dẫn đến hệ thông bị chậm, để khắc phục ta dùng tới khái niệm Connection
Pool

1. Connection Pool là gì?

-

Connection pool là kỹ thuật cho phép tạo và duy trì một tập các kết nối dùng chung làm tăng
hiệu xuât cho ứng dụng web bằng cách sử dụng lại các kết nối khi có yêu cầu thay vì tạo mới

2. Triển khai Connection Pool
-

Để triển khai Connection Pool cho Tomcat hiểu ta cần dùng đến file context.xml (file này cần
được lưu trong thu mục META-INF), trong file context.html ta có thể cấu hình cho connection
pool

-

File context.xml có dạng:

-

Trong đó


o

name : là bí danh để servlet có thể gọi tới

o

maxActive = “20” : là số lượng kết nối tối đa tại một thời điểm

o


maxIdle = “5” : số lượng kết nối tối thiểu được duy trì khi database rảnh. Nghĩa là
nếu chỉ có 1,2 kết nối thì số lượng kết nối trong bể ln được duy trì là 5 để sẳn sàng
cho dự án

o

maxWait = “10000” : là thời gian chờ kết nối, nếu vượt quá số này sẽ coi như không
kết nối được, hệ thống chuyển sang việc khác (milisecond)

o

Username và password : là username và password dùng để đăng nhập vào database

o

url: cung cấp đường dẫn đến database shcema

B. Kết nối Servlet với database bằng JDBC
-

Để kết nối Servlet với database có 5 bước theo mơ hình sau:

-

Bước 1: Khai báo Driver(JDBC) bằng Class.forname()

-

Bước 2: Get Connection bằng 1 class java


-

Bước 3: tạo Statement để tương tác với database

-

Bước 4: Gửi đi query để nhận về data

-

Bước 5: Đóng connection

1. Khai báo Driver (JDBC)
-

Để khai báo Driver (JDBC) ta dùng câu lệnh Class.forname(“com.mysql.cj.jdbc.Driver”) để
đăng ký driver dùng để kết nối với database cụ thể ở đây driver là JDBC


2. Get Connection bằng 1 class java riêng biệt
-

Để connect được với database ta dùng câu lệnh DriverManager.getConnection(String url,
String name, String pass)

-

Trong đó :
o


String url : là url dẫn đến database “jdbc:mysql://localhost:3306/name_database”

o

String name : là tên đăng nhập dtb

o

String pass : là password đn dtb

-

Phương thức getConnection() sẽ trả về 1 object Connection

-

Ví dụ bước 1 và 2

-

Lưu ý : ta có 2 Exception là ClassNotFound và SQLException vì forName() sẽ throw ra
ClassNotFound và getConnection() sẽ throw ra SQLException

3. Tạo Statement
-

Statement là đối tượng cho phép ta gửi execute về cho SQL và nhận lại dữ liệu, statement là
trung gian giúp ta giao tiếp với database


-

Có 2 loại là : Statement và PreparedStatement

-

Điểm khác nhau là PreparedStatement có thể truyền được tham số

-

Để tạo statement ta dùng phương thức: .createStatement() cho object connection

-

Để gửi đi execute ta dùng phương thức .executeQuery(String execute) : phương thức này sẽ
trả về một ResultSet

4. Gửi đi Execute
-

Để gửi đi execute ta dùng phương thức .executeQuery(String execute) : phương thức này sẽ
trả về một ResultSet

-

Phương thức trên sẽ vừa gửi và vừa nhận về data


-


ResultSet là một interface cho phép ta nhận data được gửi về từ database dưới dạng các
bảng

-

Ví dụ cho bc 3,4:

5. Close Connection
-

Sau khi lấy xong data ta tiến hành close các object trong finally

-

Ví dụ cho bc 5:



×