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ố 4

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
AcontextInitialized()
BcontextCreated()
CinitContext()
DinitializeContext()
Lời giải
Đáp án đúng: "contextInitialized()". Giao diện ServletContextListener chỉ có hai phương thức: contextInitialized(ServletContextEvent) chạy sau khi container dựng xong ServletContext và trước khi servlet hay filter nào phục vụ yêu cầu đầu tiên, còn contextDestroyed() chạy lúc ứng dụng bị tháo; vì vậy đây là chỗ hợp lý để nạp cấu hình chung hoặc mở sẵn pool kết nối. "contextCreated()" không có trong giao diện, đặt tên này kèm chú giải ghi đè thì mã không biên dịch được, còn nếu bỏ chú giải thì container không bao giờ gọi tới. "initContext()" cũng không thuộc hợp đồng của listener; chữ init ở đây dễ bị lẫn với init() của servlet và filter, hai phương thức thuộc vòng đời thành phần khác hẳn. "initializeContext()" tương tự là tên tự đặt; container chỉ gọi đúng chữ ký khai trong giao diện đã đăng ký nên một tên gần đúng vẫn bị bỏ qua.
Mở trang câu hỏi này →
Ahttp://java.sun.com/jsp/jstl/core
Bhttp://javax.servlet.jsp.jstl/core
Chttp://java.sun.com/jstl/core
Dhttp://jstl.java.net/core
Lời giải
Đáp án đúng: "http://java.sun.com/jsp/jstl/core". Đây là định danh không gian tên mà đặc tả gán cho thư viện lõi của JSTL, và bộ dịch trang dùng đúng chuỗi này để tìm tệp mô tả thẻ trong gói thư viện, nên chỉ thị taglib phải ghi nguyên văn nó cùng một tiền tố, thường là chữ c. Lựa chọn "http://javax.servlet.jsp.jstl/core" nhìn giống tên gói Java nhưng không khớp định danh nào trong tệp mô tả thẻ, trang sẽ không dịch nổi. Lựa chọn "http://java.sun.com/jstl/core" thiếu đoạn jsp ở giữa, nó thuộc lớp định danh của bản JSTL cũ hơn chứ không phải thư viện lõi mà chỉ thị taglib hiện dùng. Lựa chọn "http://jstl.java.net/core" là địa chỉ đặt theo tên trang dự án, không phải định danh thư viện nào cả.
Mở trang câu hỏi này →
AUse <sql:iterate> with result attribute.
BUse <c:forEach> with items set to ${result.rows}.
CUse <sql:forEach> with the rows attribute.
DUse <c:loop> with query attribute.
Lời giải
Đáp án đúng: "Use <c:forEach> with items set to ${result.rows}.". Thẻ truy vấn của JSTL đặt kết quả vào một biến kiểu Result, trong đó thuộc tính rows là mảng các dòng dưới dạng ánh xạ tên cột sang giá trị, nên thẻ lặp của thư viện lõi nhận items là biểu thức ấy rồi mỗi vòng cho ra một dòng để lấy cột bằng EL. Lựa chọn "Use <sql:iterate> with result attribute." dựa vào một thẻ không có trong thư viện sql, việc duyệt vẫn phải do thẻ lặp của thư viện lõi làm. Lựa chọn "Use <sql:forEach> with the rows attribute." đặt thẻ sai không gian tên vì forEach thuộc tiền tố lõi, và thẻ lặp cũng không có thuộc tính rows mà chỉ nhận items. Lựa chọn "Use <c:loop> with query attribute." sai cả tên thẻ lẫn thuộc tính, thư viện lõi không có thẻ loop và không nhận thuộc tính query.
Mở trang câu hỏi này →
44What is NOT the use of filter in JSP?5 lựa chọn
AAuthentication blocking request based on user identity.
BLogging and auditing - Tracking uses of a web application.
CImage Conversion - Scaling maps and so on.
DLink to my bootstrap.min.css in a JSP file
EData Compression - Making downloads smaller
Lời giải
Đáp án đúng: "Link to my bootstrap.min.css in a JSP file". Nhúng một tệp CSS vào trang là việc của thẻ liên kết trong phần đầu của HTML do trang JSP sinh ra, rồi trình duyệt tự tải tệp đó bằng một request riêng; không bước nào trong chuỗi filter tham gia việc khai báo liên kết ấy. Lựa chọn "Authentication blocking request based on user identity." lại đúng là việc filter hay làm nhất, vì doFilter kiểm tra phiên rồi quyết định gọi tiếp chuỗi hay chuyển hướng về trang đăng nhập. Lựa chọn "Logging and auditing - Tracking uses of a web application." cũng khả thi vì mã trong filter chạy cả trước và sau tài nguyên đích nên ghi lại được đường dẫn, thời gian và kết quả. Lựa chọn "Image Conversion - Scaling maps and so on." là ví dụ kinh điển của filter biến đổi nội dung trả về. Lựa chọn "Data Compression - Making downloads smaller" cũng là filter bọc phần trả về để nén dữ liệu.
Mở trang câu hỏi này →
ATo define the URL pattern to which the filter is applied
BTo specify the order in which filters are executed
CTo provide configuration options specific to the filter
DTo set session attributes
Lời giải
Đáp án đúng: "To provide configuration options specific to the filter". Thẻ init-param đặt trong thẻ filter mang cặp tên và giá trị mà filter đọc lại qua FilterConfig trong init(), nhờ đó những thứ như bảng mã, danh sách đường dẫn bỏ qua hay cờ bật tắt không phải viết cứng trong mã nguồn. Lựa chọn "To define the URL pattern to which the filter is applied" là việc của thẻ filter-mapping với url-pattern, nằm ở chỗ khác trong mô tả triển khai. Lựa chọn "To specify the order in which filters are executed" cũng không, thứ tự chuỗi filter do trật tự xuất hiện của các filter-mapping quyết định chứ không khai bằng tham số khởi tạo. Lựa chọn "To set session attributes" lẫn giữa cấu hình lúc khởi tạo với dữ liệu chạy thật, thuộc tính phiên chỉ được đặt trong mã khi đã có yêu cầu.
Mở trang câu hỏi này →
ATo initialize the filter.
BTo define the filter's URL mapping.
CTo perform the actual filtering of requests and responses.
DTo destroy the filter.
Lời giải
Đáp án đúng: "To perform the actual filtering of requests and responses.". Phương thức doFilter là chỗ duy nhất trong vòng đời filter thực sự nằm trên đường đi của request: nó nhận cả request và phần trả về, được phép xem và sửa chúng, rồi gọi chuỗi để chuyển cho filter kế tiếp hoặc tài nguyên đích, và phần mã viết sau lời gọi đó chạy trên đường về nên xử lý được cả nội dung trả về. Lựa chọn "To initialize the filter." là việc của init, chạy một lần khi container tạo filter và nhận cấu hình để đọc tham số khởi tạo. Lựa chọn "To define the filter's URL mapping." không phải việc của mã trong doFilter mà do khối ánh xạ filter trong mô tả triển khai hoặc thuộc tính của annotation filter quyết định. Lựa chọn "To destroy the filter." là việc của destroy, chạy một lần khi ứng dụng dừng để giải phóng tài nguyên.
Mở trang câu hỏi này →
ATo create a visual representation of the application's data flow.
BTo define the order in which filters are applied.
CTo specify which URL patterns or servlets the filter should intercept.
DTo map filter attributes to HTML elements.
Lời giải
Đáp án đúng: "To specify which URL patterns or servlets the filter should intercept.". Thẻ filter-mapping nối tên filter đã khai báo với một url-pattern hoặc một servlet-name, nên nó quyết định yêu cầu nào phải đi qua filter trước khi tới đích; có thể thêm dispatcher để chặn cả lượt forward, include hay lượt chuyển tới trang lỗi. Lựa chọn "To define the order in which filters are applied." chỉ đúng một phần và không phải mục đích khai báo: trật tự là hệ quả của thứ tự các filter-mapping xuất hiện trong tệp, bản thân thẻ không có chỗ ghi số thứ tự. Lựa chọn nói nó dùng "To create a visual representation of the application" cùng dòng dữ liệu thì thuộc tài liệu thiết kế, không phải việc của mô tả triển khai. Lựa chọn "To map filter attributes to HTML elements." cũng lạc chỗ, filter làm việc với yêu cầu và phản hồi ở phía máy chủ, nó không gắn với phần tử nào trong trang.
Mở trang câu hỏi này →
AIt stores the current iteration index and other state information.
BIt sets the variable and other status information to be null when the loop finishes.
CIt modifies the collection used in iteration.
DIt specifies the scope of the iterator variable.
Lời giải
Đáp án đúng: "It stores the current iteration index and other state information.". Thuộc tính varStatus đặt tên cho một biến kiểu LoopTagStatus mà thẻ lặp tạo ra ở mỗi vòng, nhờ đó trang đọc được chỉ số đếm từ không, số thứ tự đếm từ một, cùng các cờ cho biết đang ở vòng đầu hay vòng cuối, rất tiện để kẻ hàng chẵn lẻ hoặc đánh số danh sách. Lựa chọn "It sets the variable and other status information to be null when the loop finishes." hiểu sai cơ chế: biến này chỉ tồn tại trong phạm vi thân vòng lặp, hết vòng là không truy cập được nữa chứ không phải bị gán rỗng. Lựa chọn "It modifies the collection used in iteration." cũng không đúng, tập dữ liệu được truyền qua items và thẻ lặp chỉ đọc, varStatus không can thiệp vào nó. Lựa chọn "It specifies the scope of the iterator variable." nhầm sang thuộc tính khác, phạm vi của biến vòng lặp không khai bằng varStatus.
Mở trang câu hỏi này →
AServletContextAttributeListener
BServletRequestListener
CHttpSessionListener
DServletContextListener
Lời giải
Đáp án đúng: "ServletContextListener". Nạp JDBC driver là việc chỉ cần làm một lần cho cả ứng dụng và phải xong trước khi có request đầu tiên, nên đúng chỗ là contextInitialized của giao diện này: container gọi phương thức đó ngay sau khi ngữ cảnh ứng dụng được tạo và trước khi bất kỳ servlet nào phục vụ, còn contextDestroyed là nơi dọn dẹp khi ứng dụng dừng. Lựa chọn "ServletContextAttributeListener" chỉ được gọi khi có thuộc tính của ngữ cảnh ứng dụng bị thêm, thay hoặc xoá; nếu không ai đặt thuộc tính thì nó không chạy lần nào. Lựa chọn "ServletRequestListener" chạy theo từng request, nên driver bị nạp lặp lại vô ích và vẫn muộn hơn thời điểm khởi động ứng dụng. Lựa chọn "HttpSessionListener" gắn với vòng đời phiên người dùng, mà ứng dụng có thể phục vụ nhiều request không tạo phiên nào, khi đó driver có thể không bao giờ được nạp.
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 →