2.1 Introduction
Servlet là một chương trình phía máy chủ
được viết bằng ngôn ngữ lập trình Java. Servlet là một trang Web thành phần xử
lý các yêu cầu của khách hàng và tạo ra nội dung động để đáp ứng. Thông thường,
phản hồi được tạo chứa nội dung HTML được gửi lại cho máy khách.
Servlet là giao thức độc lập có nghĩa là
các loại máy khách khác nhau có thể truy cập Servlet. Các loại máy khách khác
nhau đối với một Servlet có thể là một máy khách Web gửi yêu cầu thông qua HTTP
hoặc nó có thể là một điểm cuối của dịch vụ Web gửi dữ liệu yêu cầu thông qua
giao thức SOAP.
2.2 Servlet API
Tất cả các lớp liên quan đến phát triển và
quản lý Servlet được cung cấp trong hai gói cụ thể là, javax.servlet
javax.servlet.http
·
Javax.servlet
Chứa các giao diện và lớp chung chung được
thiết lập được cố vấn và mở rộng bởi tất cả các Servlet. Gói này về cơ bản cung
cấp một khuôn khổ cho Hoạt động của Servlet.
Nó bao gồm một giao diện có tên Servlet định
nghĩa các phương thức vòng đời cho Servlet. Mọi Servlet phải triển khai javax.
Servlet.
·
javax.servlet.http
Chứa các lớp và giao diện được sử dụng để
phát triển Servlet hoạt động với giao thức HTTP.
Figure 2.1 hệ thống phân cấp API Servlet.
Gói javax.servlet chứa một lớp trừu tượng
có tên là GenericServlet kế thừa từ lớp Object và giúp thiết kế một Servlet độc
lập với giao thức.
GenericServlet thực hiện ba giao diện cụ
thể là,
·
Servlet - Giao diện này
xác định các phương thức vòng đời của một Servlet.
·
ServletConfig - Giao diện
này định nghĩa các phương thức được sử dụng bởi Servlet container để truyền
thông tin đến một cá thể Servlet trong quá trình khởi tạo nó.
·
Serializable - Giao diện
này được định nghĩa trong gói java.io để tuần tự hóa trạng thái của một đối tượng.
. Đoạn mã 1 trình bày cách tạo một servlet
đăng nhập độc lập với giao thức.
Trong mã đã cho, lớp có tên
LoginServlet Để phát triển một Servlet
chỉ có thể truy cập thông qua trình duyệt Web, bạn có thể tạo một HTTP Servlet
bằng cách mở rộng lớp HttpServlet. Lớp HTTPServlet là một lớp con của
GenericServlet và cho phép tạo Servlet dựa trên HTTP như một phần của ứng dụng
Web.
Đoạn mã 2 cho thấy việc tạo servlet đăng nhập để được truy cập trên Web
Trong đoạn mã đã cho, LoginServlet được định
nghĩa là HTTP servlet, vì vậy nó sẽ được truy cập thông qua giao thức HTTP.
2.3 Servlet Life Cycle
Một đời sống của servlet có thể được định
nghĩa là toàn bộ quá trình từ khi tạo ra đến khi hủy
Instantiation
Trong giai đoạn này, thùng chứa servlet tạo
một đối tượng của servlet
Initialization
Trong giai đoạn này, thùng chứa servlet
gọi phương thức Init() bắt đầu vòng
đời của Servlet.
Service
Servlet xử
lý yêu cầu do máy khách đưa ra và tạo phản hồi động để gửi lại cho máy khách
Destroy
Thùng chứa
hủy servlet
Unavailable
thùng chứa
giải phóng bộ nhớ bị chiếm dụng bởi Servlet.
Figure2.2 Vòng đời của servlet
2.3.1 Servlet Life Cycle Methods
Vòng đời Servlet được xác định bằng các
phương pháp sau:
Init()
Phương thức khởi tạo servlet. Vòng đời của
servlet bắt đầu bằng phương thức init (). Phương thức init () chỉ được gọi một
lần bởi máy chủ và không gọi lại cho mỗi yêu cầu của người dùng.
Service()
phương thức xử lý yêu cầu của máy khách.
Destroy()
Phương thức này sẽ hủy giao diện servlet,
nếu không có thêm yêu cầu nào được xử lý. Máy chủ gọi phương thức này sau khi tất
cả các yêu cầu đã được xử lý hoặc số giây dành riêng cho máy chủ đã trôi qua,
tùy điều kiện nào đến trước.
2.3.2 Servlet Architecture
Vùng chứa Servlet chịu trách nhiệm xử lý
việc thực thi Servlet dựa trên mô hình đa luồng. Điều này có nghĩa là, khi vùng
chứa nhận được yêu cầu cho cùng một Servlet, nó sẽ tạo một luồng mới để xử lý
việc thực thi Servlet và hủy khi quá trình thực thi hoàn tất.
Figure 2.3 Xử lý nhiều yêu cầu của khách hang cùng 1 lúc
luồng thông tin trong Servlet như sau:
1.Trình duyệt Web gửi một yêu cầu HTTP đến
máy chủ Web thông qua Bộ định vị tài nguyên đồng nhất (URL). Ví dụ, một URL,
http: // localhost: 8080 /.../ LoginServlet được gửi đến Máy chủ Web.
2. Khi
nhận được yêu cầu, công cụ Web sẽ xem xét tệp mô tả triển khai web.xml để khớp
URL với các Servlet đã đăng ký.
3. Sau
khi tìm thấy Servlet được yêu cầu, công cụ Web sẽ chuyển tiếp nó tới vùng chứa
Servlet chịu trách nhiệm khởi tạo cá thể Servlet.
4. Đầu
tiên vùng chứa định vị lớp servlet, tải servlet và tạo một thể hiện của servlet
trong bộ nhớ
5. Sau khi Servlet được tải bởi vùng chứa
Servlet, nó sẽ được khởi tạo hoàn toàn và sau đó yêu cầu của khách hàng được xử
lý
Để phục vụ yêu cầu của nhiều khách hàng,
thùng chứa servlet tạo nhiều luồng cho cùng một cá thể Servlet. Mỗi cá thể xử
lý yêu cầu nhận được từ máy khách và tạo ra phản hồi được gửi đến công cụ Web,
từ đó gửi phản hồi đên khách hàng.
2.4 Handling Servlet Request
2.5 Handling Servlet Response
Xử lý phản hồi Servlet xác định một đối tượng để giúp Servlet gửi phản hồi đến máy khách bằng các giao diện khác nhau.
Khi một servlet xử lý một yêu cầu, máy chủ sẽ chuyển một đối tượng yêu cầu, đối tượng này thực thi giao diện ServletRequest. Với đối tượng này, servlet có thể tìm hiểu thông tin về yêu cầu thực tế như giao thức, Bộ định vị tài nguyên đồng nhất (URL) và kiểu. Nó có thể truy cập các phần của yêu cầu thô như tiêu đề và luồng đầu vào. Trong cũng có thể truy xuất các thông số yêu cầu cụ thể của khách hàng, chẳng hạn như dữ liệu được nhập vào biểu mẫu trực tuyến.
Một số phương thức được định nghĩa trong giao diện ServletRequest như sau:
public String getParameter(String s)
public Object getAttribute(String name)
public int getContentLength()
public ServletInputStream getInputStream() throws IOException
public String getServerName()
public Cookie[] getCookies()
public String getHeader (String name)
public String getMethod()
public String getPathInfo()
public String getAuthType()
public java.lang.String getParameter(java.lang.String name)
public java .util . Enumeration getParameterNames ()
public java.lang.String[] getParameterValues(java.lang.String name)
Tiêu đề Yêu cầu Http
Accept: Nó được sử dụng để chỉ định các loại tiêu đề được khách hàng chấp nhận.
Accept-Charset: Các bộ ký tự được phản hồi chấp nhận được trường này chỉ định.
Accept-Encoding: Hạn chế mã hóa nội dung được chấp nhận bởi phản hồi được đề cập trong trường.
Accept-Language: Trường này đặt giới hạn cho một nhóm ngôn ngữ tự nhiên được sử dụng bởi phản hồi.
Authorization: Authentication of a user agent with a server is done by this field.
Đọc tiêu đề Biểu mẫu Yêu cầu
public String getHeader (String name)
public java.util.Enumeration getHeaders(java.lang.String name)
public java .util . Enumeration getHeaderNames ()
Biểu mẫu HTML (form)
Text input
Drop-down list input
Submit button
Methods (GET/POST)
Action
Xử lý dữ liệu biểu mẫu bằng đối tượng yêu cầu
doGET ()
doPOST ()
2.5.1 ‘ServletResponse’ Interface
Phản hồi của Servlet là
phản hồi được gửi bởi servlet tới máy khách. Các giao diện ServletResponse và
HttpServletResponse bao gồm tất cả các phương thức cần thiết để tạo và thao tác
đầu ra của một servlet.
Giao diện
ServletResponse xác định các phương thức cho phép truy xuất luồng đầu ra để gửi
dữ liệu đến máy khách, quyết định loại nội dung, v.v. Giao diện ServletResponse
định nghĩa một đối tượng, được sử dụng để cung cấp phản hồi cho một máy khách.
Đối tượng này được truyền
như một đối số cho phương thức service () của một servlet.
Các phương thức được xác
định bởi giao diện ServletResponse như sau:
-
public
java.lang.String getContentType ():
Trả về kiểu Tiện ích mở
rộng Internet Mail Extensions (MIME) của nội dung yêu cầu hoặc null nếu kiểu
không được biết.
-
public
PrintWriter getWriter() throws IOException:
Trả về một đối tượng của
lớp PrintWriter gửi văn bản ký tự đến máy khách.
-
public
ServletOutputStream getOutputStream() throws IOException:
Sử dụng đối tượng ServletOutputStream để
ghi phản hồi dưới dạng dữ liệu nhị phân cho máy khách.
-
public
void setContentType(java.lang.String str):
Được sử dụng để đặt định dạng mà dữ liệu
được gửi đến máy khách, ở định dạng văn bản bình thường hoặc định dạng html.
2.5.2 HttpServletResponse Interface
Giao diện
HttpServletResponse mở rộng giao diện ServletResponse và cung cấp
thông tin tới
HttpServlet. Nó định nghĩa một đối tượng HttpServlet, được truyền như một đối
số cho phương thức service () của servlet.
Sử dụng giao
diện HttpServletResponse, bạn có thể đặt tiêu đề phản hồi HTTP, đặt loại nội
dung của phản hồi, thu được luồng văn bản cho phản hồi, có được luồng nhị phân
cho phản hồi, chuyển hướng yêu cầu HTTP đến một URL khác hoặc thêm cookie vào
phản hồi.
2.5.3 Methods in HttpServletResponse
Interface
Các phương thức
được xác định bởi giao diện HttpServletResponse như sau:
-
public
void addCookie (Cookie cookie):
Thêm cookie đã chỉ định vào phản hồi, được
gửi đến khách hàng.
Code Snippet 6:
-
public
void addHeader(java.lang.String name, java.lang.String value):
Được sử dụng để thêm tên và giá trị vào
tiêu đề phản hồi.
-
public
boolean containsHeader(String name):
Được sử dụng để xác minh xem tiêu đề phản
hồi có chứa bất kỳ giá trị nào không. Nó trả về true nếu tiêu đề phản hồi có
bất kỳ giá trị nào. Ngược lại, nó trả về false.
-
public
void sendError(int sc) throws java.io.IOException:
Gửi phản hồi lỗi cho máy khách bằng mã
trạng thái được chỉ định và xóa bộ đệm. Mã trạng thái được sử dụng để chỉ ra lý
do, một yêu cầu không được đáp ứng hoặc một yêu cầu đã được chuyển hướng.
2.5.4 Response Headers
Tiêu đề phản hồi được đính kèm với các tệp
được gửi trở lại máy khách. Nó chứa ngày, kích thước và loại tệp mà máy chủ gửi
lại cho máy khách và cả dữ liệu về chính máy chủ.
Tiêu đề phản hồi có thể được sử dụng để chỉ
định cookie để cung cấp ngày sửa đổi. Nó cũng được sử dụng để hướng dẫn trình
duyệt tải lại trang. Ngoài ra, nó chỉ định mức độ lớn của tệp, để xác định thời
gian kết nối HTTP cần được duy trì.
2.5.5 Sending Headers
Các phương thức của giao diện
HttpServletResponse được sử dụng để gửi thông tin tiêu đề đến máy khách như
sau:
-
addHeader
() - Thêm tiêu đề phản hồi với tên và giá trị đã cho.
-
addDateHeader
() - Thêm tiêu đề phản hồi với tên và giá trị ngày đã cho.
-
addIntHeader
() - Thêm tiêu đề phản hồi với tên và giá trị số nguyên đã cho.
-
containsHeader
() - Trả về một giá trị boolean để cho biết nếu tiêu đề phản hồi có đã được
thiết lập.
2.5.6 Sending Data from Servlet Using Response Object
Hãy để chúng tôi tạo một servlet để gửi dữ
liệu tệp jar bằng đối tượng phản hồi đến máy khách.
-
Đối
tượng Phản hồi phải thực hiện các bước sau:
Thông báo cho
trình duyệt, loại tệp / dữ liệu đang được chuyển.
Chuyển đổi dữ
liệu đối tượng thành luồng.
Code Snippet 7: cho thấy cách gửi dữ liệu
bằng đối tượng phản hồi.
Trong đoạn mã đã cho, response.setContentType (“application/jar”) nói
với trình duyệt để nhận ra rằng đối tượng phản hồi mang một JAR.
OutputStream os = response . getOutputStream () đọc các byte JAR và ghi
các byte vào luồng đầu ra nhận được từ đối tượng phản hồi.
Reading Binary Data (Đọc dữ liệu nhị phân)
-
Công dụng :
Một số ứng dụng Web như e-mail cần
gửi các tệp như tài liệu và hình ảnh, từ một hệ thống khác dưới dạng tệp đính
kèm. Trong trường hợp này, dữ liệu được truyền từ máy khách đến ứng dụng Web sẽ
thuộc loại nhị phân. Trong những trường hợp như vậy, người dùng sẽ chỉ định
tham chiếu đến các tệp nhị phân trong trực tuyến hình thức.
-Các Phương thức hoạt động :
1.
Dùng Multipart / form-data:
- Định Nghĩa:
Multipart / form-data là một loại phương tiện
Internet trả về một tập hợp các giá trị là kết quả của người dùng điền vào một
biểu mẫu. Các bộ giá trị này được truyền dưới dạng dữ liệu nhị phân. Mỗi yêu cầu
được xử lý bởi một servlet có một luồng đầu vào được liên kết với nó.
-Cú pháp
Bạn sử dụng get InputStream () để
truy xuất luồng đầu vào dưới dạng ServletInputStream
vật. Cú pháp của phương thức getInputStream () như sau:
2. Producing Text and Binary
Data(Sản xuất dữ liệu văn bản và dữ liệu nhị phân)
Có hai phương thức thuộc giao diện
ServletResponse để tạo ra các luồng đầu ra là
sau:
1. GetOutputStream () trả về một
ServletOutputStream, có thể được sử dụng cho dữ liệu nhị phân.
2. GetWriter () trả về một java. io. Đối
tượng PrintWriter, chỉ được sử dụng cho văn bản đầu ra. Phương thức getWriter
() kiểm tra kiểu nội dung để xác định bộ ký tự nào để sử dụng, vì vậy
setContentType () nên được gọi trước getWriter ().
3. Sending Text and Binary Data (Gửi dữ liệu văn bản và dữ liệu nhị
phân)
- Định nghĩa:
Bất cứ khi nào bất kỳ tệp nào được gửi
đến máy khách đều phải được mã hóa, ví dụ: hình ảnh hoặc tệp đính kèm văn bản,
nó được gửi dưới dạng dữ liệu nhị phân. ServletOutputStream cung cấp một luồng
đầu ra để gửi tệp nhị phân dữ liệu cho khách hàng.
Các phương thức được hỗ trợ bởi lớp
ServletOutputStream như sau:
Ghi một giá trị boolean cho máy khách
không có ký tự Carriage Return-Line Feed (CRLF) tại
kết thúc.
Ghi giá trị ký tự cho máy khách, theo
sau là Nguồn cấp dữ liệu dòng trả lại vận chuyển (CRLF).
Redirecting Requests (yêu cầu chuyển hướng)
-Định nghĩa:
Bất cứ khi nào khách hàng đưa ra yêu
cầu, yêu cầu sẽ được chuyển đến vùng chứa servlet. Servlet container quyết định
liệu servlet liên quan có thể xử lý yêu cầu hay không. Nếu servlet không thể xử
lý yêu cầu, nó quyết định rằng yêu cầu có thể được xử lý bởi một servlet hoặc
JSP khác.
Sau đó, servlet gọi phương thức
sendRedirect () và gửi phản hồi đến trình duyệt cùng với mã trạng thái. Trình
duyệt đưa ra một yêu cầu mới, với tên của servlet bây giờ có thể xử lý yêu cầu
và hiển thị kết quả trên trình duyệt. Việc chuyển hướng này được thực hiện bởi
các phương pháp sau:
-
public
void sendRedirect(java.lang.String location) throws java.io.IOException
Gửi phản hồi chuyển hướng tới khách hàng bằng cách sử
dụng URL vị trí chuyển hướng được chỉ định. Ví dụ:
response . sendRedirect (response .
encodeRedirectURL (contextPath +“/maps”) ) ;
Chuyển hướng
yêu cầu đến vị trí được chỉ định.
-
public
java.1ang.String encodeRedirectURL(java.1ang.String url)
Mã hóa URL được chỉ định để sử dụng
trong phương thức sendRedirect () hoặc nếu không mã hóa cần thiết, trả về URL
không thay đổi. Tất cả các URL được gửi bằng phương thức sendRedirect () nên được mã hóa chạy bằng
phương pháp này.
1.Request
Dispatcher(Yêu cầu điều phối viên)
- Định nghĩa:
Các servlet đôi khi cần truy cập tài nguyên mạng để đáp ứng các yêu
cầu của khách hàng. Các nguồn tài nguyên có thể là một servlet khác, một trang
JSP hoặc một tập lệnh CGI. Một servlet chạy trong một môi trường được gọi là ngữ
cảnh servlet, mô tả các tham số khác nhau được liên kết với servlet. Một
servlet thuộc về chỉ một ngữ cảnh servlet.
-chú ý:
Một servlet không thể truy cập các tài nguyên như các trang HTML
tĩnh, được lưu trữ trong các tệp cục bộ bằng cách sử dụng các đối tượng
RequestDi spat cher. Tài nguyên cục bộ có thể được truy cập bằng phương pháp
getResource (Đường dẫn chuỗi) của đối tượng ServletContext trả về đối tượng URL
cho một tài nguyên được chỉ định bởi Mã định danh tài nguyên thống nhất cục bộ
(URI), ví dụ: '/ html'.
Phương thức ServletRequest. getRequestDispatcher (java. lang.String)
cho phép sử dụng đường dẫn tương đối trong khi phương thức
ServletContext.getRequestDispatcher (java. lang. chuỗi) chỉ cho phép đường dẫn
tuyệt đối.
- Các servlet thuộc cùng một ứng dụng có
thể chia sẻ dữ liệu bằng các phương pháp sau:
Giao diện RequestDispatcher như sau:
-Trong đó:
- requestl là yêu cầu của khách hàng đối với
servlet;
- responseel là phản hồi được thực
hiện bởi servlet đối với máy khách
Ví dụ:
-
Trong đoạn code này truy xuất
ngữ cảnh của servlet, từ thể hiện RequestDispatcher của nó, và sau đó điều
khiển fonNards đến trang JSP.
-Phương thức được sử dụng để bao gồm nội dung của một servlet, trang JSP hoặc một tệp HTML khác đó là phương thức Include();
Ví dụ:
Trong đó:
- requestl là đối tượng chứa yêu cầu
của khách hàng.
-
responseel là đối tượng chứa phản hồi của servlet.
Trình bày mã bao gồm nội dung từ đường dẫn
được chỉ định:
Ví dụ:
2.8
Initializing Servlets
Trong một ứng dụng Web, thông tin kết
nối cơ sở dữ liệu như tên người dùng và mật khẩu SOL
không
được gửi đến servlet mỗi khi khách hàng đưa ra yêu cầu Do đó thông tin này cần
phải được
được
chuyển đến servlet trước khi bắt đầu vòng đời của servlet
Để chuyển các tham số từ clienteside
sang các servlet để thực thi lần đầu tiên và
truy
xuất dữ liệu được yêu cầu theo chỉ định của người dùng mà servlet cần được khởi
tạo Để thiết lập
giao
tiếp máy chủ khách hàng không bị gián đoạn khi bắt đầu khởi tạo quy trình được
thực hiện Sau khi
thiết
lập kết nối đầu tiên, quá trình này được thực hiện bằng cách tự động làm mới
trang
được
quản lý bởi chính servlet
2.8.1 init Parameters
Để
truyền đối số trong quá trình khởi tạo, servletcontainer sử dụng một ObjectOfServletConfig
giao
diện Giao diện ServletConfig cung cấp nhiều phương pháp khác nhau để cấu
hình một servlety trước đây
xử
lý dữ liệu do khách hàng yêu cầu
Servlet
có quyền truy cập trực tiếp vào các tham số khởi tạo Servlet bằng cách sử dụng getInitParameter
() method
Code
Snipper10: minh họa mã truy xuất các tham số của servlet.
Phương
thức tương tự có sẵn trong giao diện ServletConfiq để đọc tham số khởi tạo.
2.8.2 Reading Parameters in initil Method
Code
Snipper11: minh họa cách một servlet đọc các tham số khởi tạo
2.8.3 ServletContext
Đầu
tiên vùng chứa định vị lớp servlet tải servlet và tạo một thể hiện của
servlet
Sau đó, nó gọi phương thức init() để khởi tạo giao diện ServletConfig
của servlet A
đối
tượng được truyền dưới dạng đối số cho phương thức init() cung cấp quyền
truy cập cho servlet sang giao diện ServletContext
2.8.4 ‘ServletContex’ Interface
Bối
cảnh của servlet cung cấp quyền truy cập vào các tài nguyên và cơ sở vật chất
khác nhau, chung cho tất cả
các
servlet trong ứng dụng API servlet được sử dụng để đặt thông tin chung cho tất
cả các senilet
trong
một ứng dụng
Các
Servlet chạy trong cùng một máy chủ đôi khi chia sẻ tài nguyên chẳng hạn như
các tệp có nhiều trang JSP
và
các servlet khác Điều này là bắt buộc khi một số servlet được liên kết với nhau
để tạo thành một
ứng
dụng chẳng hạn như ứng dụng trò chuyện tạo phòng trò chuyện duy nhất cho tất cả
người dùng
APl
của servlet cũng biết về các tài nguyên của các servlet trong ngữ cảnh Các thuộc
tính của
Lớp
ServletContext có thể được sử dụng để chia sẻ thông tin giữa một nhóm
các servlet
2.8.5 ‘ServletContex’ Methods
Các
phương thức ServletContext được sử dụng để lấy và thiết lập thông tin bổ
sung về servlet
Sau
đây là một số phương thức thường được sử dụng của giao diện ServletContext
El public String getInitParameter(String name) Trả về tham số
giá
trị cho tên tham số được chỉ định
El public void setAttribute(String name,Object object) Đặt giá trị đã cho
đối
tượng trong phạm vi ứng dụng
El public Object getAttribute (String name) Trả về thuộc tính cho
tên
cụ thể
El public Enumeration getlnitParameterNames() Trả về tên của
các
tham số khởi tạo ngữ cảnh như một Danh sách các đối tượng Chuỗi
El public void removeAttribute (String name) Xóa thuộc tính Với
tên
được cung cấp từ ngữ cảnh servlet
Code Snippet 12: hiển thị tệp web.xml để chỉ định các tham số ngữ
cảnh và servlet tham số khởi tạo
Code Snippet 13: trình diễn mã để đọc các tham số ngữ cảnh từ tệp xml.web
2.9 Error Handling in Servlets
1. Khái niệm
Có nhiều tình
huống mà máy chủ Web có thể báo lỗi. Một trang web được người dung truy cập có
thể là chuyển từ địa điểm này sang địa điểm khác. Người dùng đã gõ sai địa chỉ trang web người
dùng yêu cầu, Trang web bị cấm, bị xóa tạm thời hoặc phiên bản HTTP không được
tìm thấy. Cũng có một số các tình huống khác mà lỗi có thể được tạo ra.
2. Các loại lỗi
thường hay gặp
-
Lỗi 301: là một mã trạng thái HTTP ( response code HTTP) để thông báo rằng
các trang web hoặc URL đã chuyển hướng vĩnh viễn sang một trang web
hoặc URL khác, có nghĩa là tất cả những giá trị của trang web hoặc URL gốc sẽ
chuyển hết sang URL mới.
- Lỗi
302: là một mã trạng thái
HTTP ( response code HTTP) thể thông báo rằng
trang web hoặc URL đã chuyển hướng tạm thời sang địa chỉ mới nhưng vẫn phải
dựa trên URL cũ. Vì một lý do nào đó, ví dụ như bảo trì trang web chính.
- Lỗi 400: là một mã trạng
thái HTTP, thông báo cho người dùng biết rằng hiện máy chủ web không thể xử lý
truy vấn do sự cố nào đó.
- Lỗi 401: Do bị hạn chế truy cập bởi admin hoặc do bạn đã gõ sai mật khẩu
truy cập của mình.
- Lỗi 404: là 1 mã trạng thái HTTP, nó có nghĩa trang web bạn đang muốn truy cập
không tìm thấy trên máy chủ hiện hành.
- Lỗi 408: là mã trạng thái HTTP có nghĩa là yêu cầu
bạn gửi đến máy chủ trang web (ví dụ yêu cầu tải trang web) mất nhiều thời gian
hơn so với máy chủ của trang web đã được chuẩn bị để chờ đợi. Nói cách khác,
kết nối của bạn với trang web “đã hết thời gian”.
-
Lỗi 500: là sever của website mà chúng ta truy
cập bị gặp sự cố. Sự cố mà sever của website gặp phải có thể do quá nhiều người
truy cập một lúc
Một ví dụ về lỗi 404
3. Phương thức lỗi
trong lớp ‘HttpServlet’
- Các lỗi trong quá trình thực thi ứng dụng Web được thông
báo bằng các phương pháp sau:
+ sendError(): Phương thức này kiểm tra mã lỗi rồi gửi cho
người dung một thông báo. Sau khi gửi thông báo cho người dung thì bộ đệm sẽ bị
xóa.
* Cú Pháp:
public void sendError(int MaLoi) throws java.io.exception
* MaLoi: là
mã lỗi truyền vào cho phương thức ví dụ 404,301,500.
* Ví dụ về
phương thức sendError():
+
setStatus(): Phương thức này sẽ chuyển hướng trang web sang một trang thông báo
lỗi với nội dung được chỉ định trước.
* Cú pháp:
pulic void HttpServletReponse.setStatus(int MaLoi)
* MaLoi: là
mã lỗi truyền vào cho phương thức ví dụ 404,301,500.
* Ví dụ về
phương thức setStatus():
4. Logging
Errors
- Hiểu một
cách đơn giản "Logging" là "ghi
chép" lại các vấn đề trong quá trình ứng dụng hoạt động.
Các vấn đề ở đây là các thông tin lỗi, các cảnh báo (warning), và các thông tin
khác, ... Các thông tin này có thể được hiển thị trên màn hình Console hoặc
ghi vào file
- Phương
thức log () cũng hỗ trợ gỡ lỗi bằng cách mô tả tất cả các chi tiết về lỗi. Lỗi
có thể được xem bằng cách sử dụng log () để ghi lại trong một máy chủ.
*
Phương thức log() có thể được sử dụng bằng cách truyền một đối số hoặc hai đối
số
*
Cú pháp: pubic void log(String
ThongBao)
*
ThongBao: là thông báo được chỉ định.
5. Forwarding to Error Page
-
RequestDispatcher được
sử dụng để chuyển hướng yêu cầu của người dùng đến một trang Web khi nhận một
thông báo lỗi trên máy chủ. Đối tượng RequestDispatcher
được
tạo bởi servlet container.
-
Các phương thức tạo object interface cho RequestDispatcher:
+ ServletContext.getRequestDispatcher (String
path): Phương thức này nhận chuỗi string làm đường dẫn, nằm trong phạm vi
của ServletContext. Đường dẫn, liên quan đến gốc được
truyền như một đối số. Path được sử dụng để xác định vị trí của servlet mà nó
được chuyển hướng đến.
+
ServletContext. getNamedDispatcher(String name): Phương thức này nhận một chuỗi
string để chỉ ra tên của servlet cho ServletContext. Nó trả về một đối tượng
RequestDispatcher cho servlet được đặt tên.
+
ServletRequest.getRequestDispatcher(string path): Phương pháp này sử dụng đường
dẫn tương đối là vị trí của tệp liên quan đến đường dẫn 'hiện tại. Điều này tương
tự như phương thức trong cùng tên như trong servletContext. Chuyển đổi đường
dẫn servlet hiện tại so với một đường dẫn hoàn chỉnh.
*
Ví dụ về thị việc gửi đối tượng lỗi
Bài viết kết thúc, Cảm ơn bạn đã đọc. hãy để lại bình luận của bạn!
Không có nhận xét nào:
Đăng nhận xét