Danh sách câu hỏi của đề

Câu hỏi: PRJ301 Phát triển ứng dụng Java web – Bộ ôn tập thi lại số 3

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
AThe name of the internationalization bundle
BThe variable to store the formatted message
CThe message key to look up in the resource bundle
DThe scope of the message variable
Lời giải
Đáp án đúng: "The variable to store the formatted message". Thuộc tính var của thẻ định dạng thông điệp đổi hành vi xuất: thay vì in ngay chuỗi đã tra được ra trang, thẻ cất chuỗi đó vào một biến phạm vi theo tên đã đặt để sau đó đọc lại bằng Expression Language hoặc truyền sang thẻ khác, và thuộc tính scope đi kèm quyết định biến nằm trong page, request, session hay application. "The name of the internationalization bundle" là việc của thẻ nạp bundle hoặc của cấu hình bundle mặc định, không phải của var. "The message key to look up in the resource bundle" là vai trò của thuộc tính key, tức chuỗi dùng để tra trong tệp properties. "The scope of the message variable" là vai trò của thuộc tính scope, nó chỉ có nghĩa khi đã có var và không tự nó quyết định tên biến.
Mở trang câu hỏi này →
A<fmt:setLocale>
B<fmt:setTimeZone>
C<fmt:formatDate>
D<fmt:message>
Lời giải
Đáp án đúng: "<fmt:setLocale>". Thẻ này đặt locale cho phần còn lại của trang, nên mọi thẻ định dạng hay phân tích chuỗi đứng sau nó sẽ lấy locale đã đặt làm cơ sở thay vì dựa vào thông tin ngôn ngữ do trình duyệt gửi lên. Lựa chọn "<fmt:setTimeZone>" cũng là thẻ thiết lập bối cảnh nhưng đặt múi giờ dùng khi hiển thị thời gian, nó không đổi quy ước ngôn ngữ, cách viết số hay thứ tự ngày tháng. Lựa chọn "<fmt:formatDate>" là thẻ tiêu thụ chứ không phải thẻ thiết lập: nó xuất một đối tượng ngày thành chuỗi theo khuôn và theo locale đang hiệu lực. Lựa chọn "<fmt:message>" tra một chuỗi trong tập tài nguyên theo khoá; nó chịu ảnh hưởng của locale đã đặt chứ không phải chỗ để đặt locale.
Mở trang câu hỏi này →
ATo define the structure of the webpage
BTo specify the background color of the webpage
CTo contain the visible content of the webpage
DTo include external JavaScript files
Lời giải
Đáp án đúng: "To contain the visible content of the webpage". Tài liệu HTML chia hai vùng: phần đầu giữ siêu dữ liệu không hiển thị như tiêu đề cửa sổ, bộ ký tự, liên kết tới tệp định dạng; phần thân giữ những gì trình duyệt vẽ ra cho người xem như đoạn văn, bảng, biểu mẫu, ảnh. Mọi thứ JSP sinh ra để người dùng đọc đều nằm trong vùng này. Lựa chọn "To define the structure of the webpage" nói quá rộng: cấu trúc tổng thể do chính tài liệu và các thẻ ngữ nghĩa bên trong quyết định, còn thẻ đang hỏi chỉ là một trong hai vùng. Lựa chọn "To specify the background color of the webpage" nhắc một thuộc tính trình bày kiểu cũ nay đã nhường cho CSS, và màu nền dù đặt được cũng chỉ là chi tiết, không phải mục đích của thẻ. Lựa chọn "To include external JavaScript files" là việc của thẻ script với thuộc tính nguồn, thẻ đó đặt được ở nhiều chỗ chứ không gắn riêng với vùng nội dung.
Mở trang câu hỏi này →
ATo chain multiple filters together
BTo filter multiple requests simultaneously
CTo maintain the order of filter execution
DTo manage session data
Lời giải
Đáp án đúng: "To chain multiple filters together". Đối tượng chuỗi filter do container truyền vào doFilter chính là thứ nối các filter thành một đường đi: gọi phương thức doFilter của nó đẩy request sang filter kế tiếp, và khi không còn filter nào thì nó gọi tới servlet hay tài nguyên đích; không gọi thì chuỗi đứt ngay tại đó và request không tới đích. Lựa chọn "To filter multiple requests simultaneously" nhầm sang chuyện đồng thời: mỗi request đi qua chuỗi riêng của nó, còn việc phục vụ nhiều request cùng lúc là do container quản luồng. Lựa chọn "To maintain the order of filter execution" nói về một hệ quả thứ cấp, vì thứ tự thực thi do khai báo ánh xạ filter trong mô tả triển khai quyết định chứ không do đối tượng này đặt ra, nó chỉ đi theo thứ tự đã có. Lựa chọn "To manage session data" nhầm hẳn vai, dữ liệu phiên nằm ở đối tượng phiên và không liên quan tới chuỗi filter.
Mở trang câu hỏi này →
A/WEB-INF/classes/
B/WEB-INF/lib/
C/META-INF/
D/WEB-INF/config/
Lời giải
Đáp án đúng: "/WEB-INF/lib/". Theo cấu trúc chuẩn của ứng dụng web Java, class loader riêng của ứng dụng tự nạp mọi tệp jar nằm trong /WEB-INF/lib/, nên chỉ cần đặt thư viện vào đó là dùng được, không phải khai báo thêm đường dẫn lớp nào. Lựa chọn "/WEB-INF/classes/" là nơi chứa các lớp đã biên dịch của chính ứng dụng, ở dạng cây thư mục theo gói với từng tệp class rời, chứ không phải nơi đặt jar. Lựa chọn "/META-INF/" giữ siêu dữ liệu đóng gói như MANIFEST và ở một số container là tệp khai báo ngữ cảnh; nội dung trong đó không được class loader của ứng dụng coi là thư viện. Lựa chọn "/WEB-INF/config/" không phải thư mục do đặc tả quy định; bạn tự tạo được để chứa tệp cấu hình, nhưng jar bỏ vào đó sẽ không ai nạp.
Mở trang câu hỏi này →
AinitFilter()
Binitialize()
Cinit()
DsetupFilter()
Lời giải
Đáp án đúng: "init()". Filter có vòng đời ba bước do container điều khiển: init(FilterConfig) được gọi đúng một lần ngay sau khi container tạo thực thể filter và trước khi yêu cầu đầu tiên đi qua, doFilter() chạy cho từng yêu cầu khớp mẫu ánh xạ, destroy() chạy khi ứng dụng bị tháo; vì vậy nơi đọc tham số khởi tạo hay mở tài nguyên dùng lâu dài chính là init(). "initFilter()" không nằm trong giao diện Filter, đặt tên này thì container không bao giờ gọi tới và tham số khởi tạo sẽ không được đọc. "initialize()" cũng không thuộc hợp đồng của Filter, đây là tên quen thấy ở nơi khác chứ không phải trong đặc tả servlet. "setupFilter()" tương tự là tên tự đặt; container chỉ gọi đúng chữ ký khai trong giao diện mà lớp filter cài đặt nên một tên gần nghĩa vẫn bị bỏ qua hoàn toàn.
Mở trang câu hỏi này →
AIt matches any single character in the URL
BIt matches any URL that ends with a specific extension
CIt matches any URL under the web application root
DIt matches any URL
Lời giải
Đáp án đúng: "It matches any URL under the web application root". Mẫu gồm dấu gạch chéo kèm dấu sao là mẫu bao trọn đường dẫn: nó khớp mọi đường dẫn nằm trong phạm vi ngữ cảnh của ứng dụng, kể cả trang JSP, servlet và tài nguyên tĩnh, nên thường dùng cho filter cần thấy mọi lượt gọi. Lựa chọn "It matches any single character in the URL" nhầm dấu sao ở đây với ký tự đại diện cho một ký tự trong các mẫu tìm chuỗi; trong ánh xạ của servlet, dấu sao đứng sau dấu gạch chéo bao cả phần đường dẫn còn lại. Lựa chọn "It matches any URL that ends with a specific extension" mô tả loại mẫu khác, loại chỉ nêu đuôi tệp và chỉ khớp những đường dẫn kết thúc bằng đuôi đó. Lựa chọn "It matches any URL" thiếu đúng phần giới hạn quan trọng, vì ánh xạ chỉ có hiệu lực trong ngữ cảnh của ứng dụng này, request vào ứng dụng khác trên cùng server không bị khớp.
Mở trang câu hỏi này →
ABy extending the BodyTagSupport class.
BBy implementing the BodyTag interface directly.
CBy extending the TagSupport class.
DBy implementing the Tag interface directly.
Lời giải
Đáp án đúng: "By extending the BodyTagSupport class.". Lớp tiện ích này đã hiện thực sẵn giao diện xử lý thân thẻ cùng các phương thức vòng đời và hai hàm nhận ngữ cảnh trang, lại giữ hộ vật thể chứa thân thẻ, nên người viết thẻ chỉ cần ghi đè vài phương thức như xử lý khi mở thẻ, sau mỗi lượt đọc thân và khi đóng thẻ. Cách "By implementing the BodyTag interface directly." về nguyên tắc cũng dẫn tới đúng giao diện đó nhưng buộc tự viết đủ mọi phương thức, kể cả phần nhận ngữ cảnh trang và thẻ cha, nên là lối làm thủ công chứ không phải cách thông thường mà câu hỏi nhắm tới. Cách "By extending the TagSupport class." không đạt vì lớp đó chỉ hiện thực nhánh giao diện lặp, thiếu hẳn các phương thức nhận và xử lý thân thẻ. Cách "By implementing the Tag interface directly." còn thiếu hơn nữa: giao diện gốc này không khai phương thức nào để nhận nội dung thân thẻ.
Mở trang câu hỏi này →
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
Đá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ạ.
Mở trang câu hỏi này →
AWhen you want to speed up page loading
BWhen the user's browser blocks cookies
CWhen storing login information long-term
DWhen you don't need to maintain a session
Lời giải
Đáp án đúng: "When the user's browser blocks cookies". Cơ chế phiên mặc định dựa vào một cookie chứa định danh phiên, nên khi trình duyệt chặn cookie thì định danh không quay về server và mỗi lượt gọi lại sinh một phiên mới. Viết lại URL là lối thoát: cho mọi liên kết đi qua phương thức mã hoá đường dẫn của phần trả về để container nhúng định danh phiên vào chính đường dẫn, nhờ đó phiên vẫn theo được người dùng. Lựa chọn "When you want to speed up page loading" không có cơ sở, vì cách này làm đường dẫn dài hơn và buộc mã phải bọc mọi liên kết. Lựa chọn "When storing login information long-term" nhầm vai, phiên là trạng thái ngắn hạn sẽ hết khi quá thời gian chờ; muốn giữ lâu dài cần cookie có hạn dài hoặc lưu trong cơ sở dữ liệu. Lựa chọn "When you don't need to maintain a session" tự phủ định nhu cầu: không cần giữ phiên thì chẳng dùng cookie lẫn viết lại đường dẫn.
Mở trang câu hỏi này →