Câu hỏi: PRJ301 Phát triển ứng dụng Java web – Bộ ôn tập cuối kỳ số 2
50 câu trắc nghiệm kèm lời giải của môn PRJ301 - Phát triển ứng dụng Java web, xếp đúng thứ tự trong đề. Trang 3/3 — câu 41–50.
Danh sách câu hỏi
50/50 câuHết danh sách
AIt catches exceptions thrown during the execution of its body content.
BIt handles errors thrown by JSP expressions.
CIt catches HTTP errors and redirects to an error page.
DIt encapsulates code to be executed asynchronously.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It catches exceptions thrown during the execution of its body content.". Thẻ này bọc một đoạn thân trang: nếu bất kỳ lệnh nào trong thân ném ngoại lệ thì thân bị dừng ngay tại đó, ngoại lệ bị giữ lại chứ không bay lên container, và khi có thuộc tính var thì đối tượng ngoại lệ được đặt vào biến đó để trang tự kiểm tra rồi hiển thị thông báo tuỳ ý. "It handles errors thrown by JSP expressions." sai vì phạm vi nó bao là mọi thứ chạy trong thân, không riêng biểu thức, và bản thân nó chỉ bắt rồi trao lại cho trang chứ không tự xử lý lỗi. "It catches HTTP errors and redirects to an error page." sai vì mã lỗi HTTP cùng việc chuyển sang trang lỗi do khai báo error-page trong web.xml hoặc chỉ thị errorPage của trang đảm nhiệm. "It encapsulates code to be executed asynchronously." sai vì thân thẻ vẫn chạy tuần tự trong cùng luồng đang xử lý yêu cầu, thư viện thẻ lõi không cung cấp cơ chế chạy bất đồng bộ.
A<fmt:setTimeZone>
B<fmt:setLocale>
C<fmt:formatDate>
D<fmt:setBundle>
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "<fmt:formatDate>". Thẻ này nhận một đối tượng ngày giờ qua thuộc tính value rồi kết xuất thành chuỗi theo quy ước của locale đang có hiệu lực, chọn được phần nào để in và dạng dài ngắn qua type cùng dateStyle, hoặc tự ấn định khuôn qua pattern; nó là thẻ duy nhất trong nhóm thực sự sinh ra chữ trên trang. "<fmt:setTimeZone>" sai vì nó chỉ đặt múi giờ dùng cho các thẻ định dạng đứng sau, bản thân không in ra ngày nào. "<fmt:setLocale>" sai vì nó chỉ ấn định ngôn ngữ và quốc gia, tức chuẩn bị điều kiện cho thẻ định dạng chứ không kết xuất giá trị. "<fmt:setBundle>" sai vì nó nạp gói tài nguyên cho các thẻ lấy chuỗi đã dịch, không liên quan tới việc dựng chuỗi ngày giờ.
ATo pick the main language for the website.
BTo tell other tags which language and country format to use.
CTo change the user's language settings.
DTo choose the language for database information.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "To tell other tags which language and country format to use.". Thẻ này ghi locale vào cấu hình định dạng của trang và đè lên locale mà trình duyệt gửi kèm trong tiêu đề yêu cầu, nên mọi thẻ định dạng đứng sau nó trong phạm vi đó, từ in số, in ngày cho tới tra gói tài nguyên, đều dùng chung một quy ước ngôn ngữ và quốc gia; nhờ vậy cùng một dữ liệu có thể hiện ra theo kiểu Việt Nam hay kiểu Mỹ mà không sửa mã. "To pick the main language for the website." sai vì nó chỉ ảnh hưởng tới các thẻ định dạng trong phạm vi nơi đặt, không phải một thiết lập ngôn ngữ chung cho cả website. "To change the user's language settings." sai vì mã phía server không sửa được thiết lập trên máy khách; trình duyệt của người dùng vẫn nguyên. "To choose the language for database information." sai vì dữ liệu lấy ra bằng thứ ngôn ngữ nào là do câu truy vấn và nội dung đã lưu, thẻ định dạng không can thiệp.
A`javax.servlet.Servlet`
B`javax.servlet.filter.Filter`
C`javax.servlet.jsp.tagext.Tag`
D`javax.servlet.http.HttpServlet`
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "`javax.servlet.jsp.tagext.Tag`". Đây là interface gốc của mô hình thẻ cổ điển: nó khai báo setPageContext, setParent, doStartTag, doEndTag và release, và container gọi đúng theo trình tự đó mỗi khi gặp thẻ trong trang, nên lớp xử lý thẻ phải cài đặt interface này, thường là kế thừa lớp hỗ trợ sẵn, rồi được khai báo trong tệp mô tả thư viện thẻ. "`javax.servlet.Servlet`" sai vì nó mô tả vòng đời của một servlet phục vụ yêu cầu HTTP, không phải cơ chế thẻ trong trang. "`javax.servlet.filter.Filter`" sai vì lọc yêu cầu là chuyện trước và sau servlet, hơn nữa interface lọc nằm ngay trong gói javax.servlet chứ không có gói con tên như vậy. "`javax.servlet.http.HttpServlet`" sai vì đó là một lớp trừu tượng dùng để viết servlet theo doGet và doPost, không phải interface mà bộ xử lý thẻ cài đặt.
A
tagclassB
classC
handlerD
implementationLời giải
Mở trang câu hỏi này →Đáp án đúng: "tagclass". Trong khai báo một thẻ tuỳ biến, thuộc tính này là chỗ ghi tên đầy đủ của lớp Java cài đặt bộ xử lý thẻ; nhờ nó mà bộ dịch trang biết phải nạp và khởi tạo lớp nào khi gặp thẻ, rồi gọi các phương thức vòng đời của thẻ trên đối tượng vừa tạo. "class" sai vì đó là tên thuộc tính quá chung và được dùng ở chỗ khác, khai báo thẻ không nhận dạng viết rút gọn này. "handler" sai vì nó chỉ là cách gọi vai trò của lớp, tức bộ xử lý thẻ, chưa bao giờ là tên thuộc tính trong khai báo. "implementation" sai vì nó mô tả ý niệm lớp cài đặt chứ không phải tên thuộc tính mà bộ dịch chấp nhận; viết tên tự đặt vào đây thì trang không dịch được vì khai báo thẻ bị coi là không hợp lệ.
AIt sets the body content of the custom tag.
BIt returns the body content as a string.
CIt initializes the BodyContent object for the tag.
DIt releases any resources associated with the body content.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It sets the body content of the custom tag.". Với thẻ cài đặt interface có thân đệm, sau khi phương thức mở thẻ báo rằng thân cần được đệm lại, container tạo một đối tượng chứa thân rồi gọi phương thức này để trao đối tượng đó cho lớp xử lý thẻ, sau đó mới chạy thân và ghi kết quả vào đấy; nhờ vậy các phương thức chạy sau đọc được nội dung thân đã dựng. "It returns the body content as a string." sai vì phương thức này không trả về gì; muốn lấy chuỗi thì phải gọi phương thức đọc chuỗi trên đối tượng thân đã nhận. "It initializes the BodyContent object for the tag." sai vì đối tượng đệm do container tạo trước và truyền vào, phương thức chỉ nhận lấy tham chiếu chứ không tự khởi tạo. "It releases any resources associated with the body content." sai vì việc trả lại tài nguyên thuộc về phương thức release ở cuối vòng đời thẻ.
AChanging the response sent to the client.
BHandling the request before it reaches the servlet or resource.
CAltering the client's browser settings.
DEncrypting the request data.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Handling the request before it reaches the servlet or resource.". Filter đứng trước tài nguyên trong chuỗi xử lý, nên mọi dòng mã viết phía trên lời gọi chain.doFilter chạy khi yêu cầu còn chưa tới servlet hay trang JSP: đó là chỗ kiểm tra đăng nhập rồi chặn sớm, đặt bảng mã cho tham số, ghi log hoặc bọc lại đối tượng yêu cầu. Phần mã nằm sau lời gọi đó mới là hậu xử lý. "Changing the response sent to the client." sai vì sửa phản hồi chỉ làm được sau khi chuỗi đã chạy xong, tức thuộc về hậu xử lý. "Altering the client's browser settings." sai vì mã phía server không với tới được thiết lập của trình duyệt. "Encrypting the request data." sai không phải vì filter không làm nổi việc đó, mà vì đây chỉ là một ví dụ việc cụ thể có thể làm trong tiền xử lý, không phải định nghĩa của khái niệm đang hỏi.
48Filter can be defined in which file?4 lựa chọn
Aweb.xml
BIn Java @WebFilter annotation
CBoth A and B
DNo need to define, just implement in Servlet
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Both A and B". Container nhận khai báo filter từ cả hai nguồn khi nạp ứng dụng: cặp thẻ filter và filter-mapping trong bộ mô tả triển khai, hoặc chú giải đặt ngay trên lớp cài đặt interface lọc kèm mẫu URL của nó; cả hai cách đều dẫn tới cùng một kết quả là filter được đưa vào chuỗi xử lý của những yêu cầu khớp mẫu. "web.xml" sai vì nêu một mình nó là bỏ qua đường khai báo bằng chú giải, thứ cho phép viết xong lớp là dùng được mà không sửa bộ mô tả. "In Java @WebFilter annotation" sai vì ngược lại, nêu một mình chú giải là bỏ mất bộ mô tả triển khai, nơi người ta vẫn phải dùng khi cần ấn định thứ tự các filter trong chuỗi. "No need to define, just implement in Servlet" sai hẳn, bởi một lớp lọc không được khai báo và không có mẫu ánh xạ thì container không biết tới nó, yêu cầu đi thẳng vào servlet mà không qua lớp đó.
AAt the end of the filter's lifecycle
BBefore each doFilter() method call
CAfter the web application is undeployed
DImmediately after the filter's first invocation
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "At the end of the filter's lifecycle". Container gọi init đúng một lần khi đưa đối tượng filter vào hoạt động, gọi doFilter cho từng yêu cầu khớp mẫu, rồi gọi destroy đúng một lần ở cuối đời đối tượng đó, sau khi mọi lời gọi doFilter đang dở đã kết thúc, để filter trả lại những tài nguyên nó giữ như kết nối hay tệp log. "Before each doFilter() method call" sai vì không có móc nào chạy trước từng lần lọc; chính phần đầu của doFilter đóng vai đó. "After the web application is undeployed" sai vì thứ tự ngược lại: container phải gọi destroy trong lúc còn đang dỡ ứng dụng, tức trước khi ứng dụng rời khỏi bộ nhớ, chứ không thể gọi vào một đối tượng đã bị bỏ. "Immediately after the filter's first invocation" sai vì chỉ có một đối tượng filter dùng lại cho mọi yêu cầu, hết lần lọc đầu tiên nó vẫn phải sống để phục vụ tiếp.
AThe filter matching the request via a URL pattern.
BThe filter matching the request via a servlet name.
CThe filter declared first in the deployment descriptor.
DThe filter processed in alphabetical order based on its name.
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "The filter matching the request via a URL pattern.". Khi dựng chuỗi filter cho một yêu cầu, container xếp trước toàn bộ filter khớp theo mẫu URL, theo đúng thứ tự khai báo trong bộ mô tả triển khai, rồi mới nối tiếp các filter khớp theo tên servlet; vì vậy với một yêu cầu khớp cả hai kiểu, filter khớp mẫu URL luôn chạy trước. "The filter matching the request via a servlet name." sai vì nó vẫn được vào chuỗi nhưng đứng sau nhóm khớp mẫu URL, nên nó không phải thứ chạy trước. "The filter declared first in the deployment descriptor." sai vì thứ tự khai báo chỉ quyết định trật tự bên trong từng nhóm, nó không vượt được quy tắc nhóm khớp mẫu URL đứng trước nhóm khớp tên servlet. "The filter processed in alphabetical order based on its name." sai vì đặc tả không hề xếp chuỗi theo thứ tự chữ cái; tên filter chỉ dùng để nối khối khai báo với khối ánh xạ.