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 cuối kỳ 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
A<fmt:parseDate> turns a date into text, and <fmt:formatDate> turns text into a date
B<fmt:parseDate> turns text into a date, and <fmt:formatDate> turns a date into text.
CThey do the same thing.
D<fmt:parseDate> is for calculations, and <fmt:formatDate> is for showing dates.
Lời giải
Đáp án đúng: "<fmt:parseDate> turns text into a date, and <fmt:formatDate> turns a date into text.". Hai thẻ này ngược chiều nhau đúng theo nghĩa của từ: phân tích là đọc chuỗi do người dùng hay cơ sở dữ liệu đưa vào rồi dựng thành đối tượng ngày để so sánh và tính toán, còn định dạng là lấy đối tượng ngày đem xuất ra chuỗi cho người đọc. Lựa chọn "<fmt:parseDate> turns a date into text, and <fmt:formatDate> turns text into a date" đảo đúng hai vai đó nên cả hai vế đều sai. Lựa chọn "They do the same thing." sai vì đầu vào và đầu ra của hai thẻ khác hẳn nhau, một thẻ cần khuôn để hiểu chuỗi đầu vào, thẻ kia cần khuôn để sinh chuỗi đầu ra. Lựa chọn "<fmt:parseDate> is for calculations, and <fmt:formatDate> is for showing dates." đúng một nửa ở vế sau, nhưng thẻ phân tích không tự làm phép tính nào, nó chỉ chuyển chuỗi thành kiểu ngày để mã khác tính được.
Mở trang câu hỏi này →
42Filter 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
Đá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 đó.
Mở trang câu hỏi này →
AThe request will be passed to the next filter or servlet.
BThe filter chain stops and the request never reaches the target resource.
CThe filter is skipped then the server throws an exception.
DThe request will continue to be processed by the next servlet and a warning is shown.
Lời giải
Đáp án đúng: "The filter chain stops and the request never reaches the target resource.". Chuỗi filter chạy theo kiểu lồng nhau, và lệnh gọi chuỗi bên trong doFilter chính là chỗ chuyển quyền cho mắt kế tiếp, hoặc cho tài nguyên đích nếu đã hết filter. Không gọi nó thì luồng xử lý dừng lại tại filter hiện tại và phản hồi được trả về đúng như filter đó đã dựng; đây là cách người ta chặn truy cập chưa đăng nhập rồi chuyển hướng về trang đăng nhập. "The request will be passed to the next filter or servlet." mô tả đúng điều xảy ra khi có gọi chuỗi, nên áp vào trường hợp không gọi là ngược. "The filter is skipped then the server throws an exception." sai cả hai nửa: filter vẫn chạy trọn phương thức, và việc chủ động không chuyển tiếp là hợp lệ nên container không coi đó là lỗi. "The request will continue to be processed by the next servlet and a warning is shown." vừa cho yêu cầu đi tiếp, vừa gán cho container một cảnh báo mà đặc tả không quy định.
Mở trang câu hỏi này →
AEvery time a request is made
BOnly once when the filter is first instantiated
COnly when the application server is restarted
DAfter the doFilter() method is executed
Lời giải
Đáp án đúng: "Only once when the filter is first instantiated". Filter có vòng đời giống servlet: container tạo một thể hiện duy nhất, gọi init với đối tượng FilterConfig một lần để đọc tham số khởi tạo và chuẩn bị tài nguyên, sau đó dùng chung thể hiện ấy cho mọi yêu cầu khớp khuôn địa chỉ, cuối cùng gọi destroy() khi dỡ ứng dụng. "Every time a request is made" là nhịp của doFilter chứ không phải của init; nếu khởi tạo lại mỗi lần thì tham số cấu hình phải đọc lại liên tục và việc dùng chung một thể hiện mất hết ý nghĩa. "Only when the application server is restarted" hẹp quá: triển khai lại hay nạp lại riêng một ứng dụng cũng dựng filter mới mà không cần khởi động lại máy chủ. "After the doFilter() method is executed" đảo ngược trình tự, vì thể hiện phải được khởi tạo xong mới có thể nhận yêu cầu đầu tiên.
Mở trang câu hỏi này →
Đề bài
<filter-mapping>
  <filter-name>filterOne</filter-name>
  <url-pattern>/student*</url-pattern>
</filter-mapping>
<filter-mapping>
  <filter-name>filterTwo</filter-name>
  <url-pattern>/student/add</url-pattern>
</filter-mapping>

Which of the following statements most accurately describes the order in which these filters are processed for a request matching both URL patterns in a Java web application?

AfilterOne is processed first due to its alphabetical precedence over filterTwo.
BfilterOne is processed first because it is declared before filterTwo in the deployment descriptor.
CfilterTwo is processed first because its URL pattern (/student/add) is more specific than the generic pattern (/student*).
DBoth filters are processed simultaneously.
Lời giải
Đáp án đúng: "filterOne is processed first because it is declared before filterTwo in the deployment descriptor.". Đặc tả quy định thứ tự chuỗi filter cho một yêu cầu được xếp theo mô tả triển khai: trước hết là các thẻ filter-mapping khớp theo khuôn địa chỉ, lấy đúng thứ tự xuất hiện trong tệp, rồi mới tới các thẻ khớp theo tên servlet. Vì cả hai khuôn ở đây đều khớp yêu cầu, mắt được gọi trước là mắt khai trước, không phụ thuộc khuôn dài hay ngắn. Lựa chọn giải thích "due to its alphabetical precedence over filterTwo" đưa ra tiêu chí không tồn tại: tên filter chỉ dùng để đối chiếu với thẻ khai báo filter, container không sắp theo thứ tự chữ cái. Lựa chọn cho rằng khuôn "is more specific than the generic pattern" thì nhầm luật của filter với luật chọn servlet, nơi khuôn cụ thể hơn thắng khuôn rộng hơn; với filter thì mọi khuôn khớp đều được dùng và dùng theo thứ tự khai báo. "Both filters are processed simultaneously." sai về cơ chế, vì chuỗi filter chạy tuần tự trên cùng một luồng, mắt sau nằm bên trong lời gọi của mắt trước.
Mở trang câu hỏi này →
AdoGet
BdoPost
CdoFilter
Dservice
Einit
Lời giải
Đáp án đúng: "doFilter". Mọi bộ lọc đều phải hiện thực phương thức này vì đó là chỗ container trao cặp yêu cầu, phản hồi cùng tham chiếu chuỗi bộ lọc; cho chuỗi đi tiếp thì lượt yêu cầu đi sâu vào bộ lọc sau rồi tới servlet, còn không gọi thì bộ lọc chặn lại ngay. Phương thức "doGet" nằm trong servlet HTTP và chỉ chạy cho lượt yêu cầu dùng phương thức đọc, nó không có trong giao diện bộ lọc. Phương thức "doPost" cũng của servlet HTTP, dành riêng cho lượt gửi dữ liệu lên. Phương thức "service" là điểm vào của servlet, nơi phân nhánh theo phương thức HTTP, đứng sau toàn bộ chuỗi bộ lọc. Phương thức "init" có trong vòng đời bộ lọc nhưng mang thân mặc định nên không buộc phải viết lại, và nó chỉ chạy một lần lúc khởi tạo chứ không xử lý yêu cầu.
Mở trang câu hỏi này →
AIt directly manipulates HTML elements on the JSP, HTML page
BIt processes and generates content during the rendering phase
CIt injects JavaScript code into the JSP page
DIt sends AJAX requests to the server
Lời giải
Đáp án đúng: "It processes and generates content during the rendering phase". Thẻ tuỳ biến đơn giản là một lớp Java cài giao diện SimpleTag; khi trang đã dịch xong và đang kết xuất, container tạo đối tượng thẻ, truyền các thuộc tính cùng ngữ cảnh trang và phần thân thẻ, rồi gọi doTag() một lần để thẻ ghi trực tiếp vào dòng ra. Nói cách khác, thẻ sinh nội dung ngay trong lúc máy chủ dựng trang. "It directly manipulates HTML elements on the JSP, HTML page" sai mô hình: trên máy chủ không có cây tài liệu nào để sửa, nó chỉ nối văn bản, còn việc chỉnh phần tử là chuyện của trình duyệt sau khi nhận phản hồi. "It injects JavaScript code into the JSP page" chỉ đúng khi thẻ tình cờ in ra mã kịch bản, đó là một cách dùng lẻ chứ không phải cơ chế tương tác. "It sends AJAX requests to the server" ngược phía: thẻ đang chạy trên máy chủ, không đứng ở máy khách để gửi yêu cầu nền.
Mở trang câu hỏi này →
Aweb.xml
Bserver.xml
Ccontext.xml
Dapplication.properties
Lời giải
Đáp án đúng: "web.xml". Đây là mô tả triển khai của một ứng dụng web, nằm trong thư mục WEB-INF và do container đọc lúc dựng ngữ cảnh; trong đó khai thẻ servlet cùng servlet-mapping, filter cùng filter-mapping, listener, context-param, session-config, welcome-file-list, nên nó đúng là nơi cấu hình ứng dụng cùng servlet và filter. "server.xml" là cấu hình của chính máy chủ Tomcat, gồm cổng, bộ nhận kết nối, host và engine, áp cho mọi ứng dụng đang chạy trên đó chứ không thuộc một gói ứng dụng nào. "context.xml" cũng ở mức máy chủ hoặc mức ngữ cảnh triển khai, hay dùng để khai nguồn dữ liệu và thuộc tính của ngữ cảnh, nhưng không phải chỗ khai servlet hay filter. "application.properties" là quy ước cấu hình của Spring Boot, không nằm trong đặc tả servlet nên container không đọc nó để tìm khai báo servlet.
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 →
ATo define the structure of a web page.
BTo handle HTTP requests and responses.
CTo specify the default error page for the entire web application.
DTo map a specific HTTP error code to a designated error page.
Lời giải
Đáp án đúng: "To map a specific HTTP error code to a designated error page.". Trong mô tả triển khai, một khai báo trang lỗi nhận diện tình huống theo một trong hai lối: theo mã trạng thái hoặc theo kiểu ngoại lệ; phần tử được hỏi chính là lối thứ nhất, nó ghi một mã cụ thể rồi gắn mã đó với đường dẫn trang mà container sẽ chuyển tới khi phản hồi mang mã ấy. Mô tả "To define the structure of a web page." thuộc việc của HTML và trang hiển thị, không phải của cấu hình triển khai. Mô tả "To handle HTTP requests and responses." là việc của servlet; cấu hình chỉ nói cho container biết phải làm gì khi có lỗi, bản thân nó không xử lý lượt gọi nào. Mô tả "To specify the default error page for the entire web application." lại bỏ mất chính vai của mã lỗi: khai bao trùm cho cả ứng dụng thì phải nhận diện theo kiểu ngoại lệ chung, còn khai theo mã thì chỉ áp cho đúng mã đã ghi.
Mở trang câu hỏi này →