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 2/3 — câu 21–40.
Danh sách câu hỏi
connect()createConnection()getConnection()openConnection()Đáp án đúng: "ResultSet resultSet =
statement.executeQuery("SELECT *
FROM table_name");". Với câu truy vấn trả về các dòng, executeQuery() là phương thức duy nhất cho thẳng một ResultSet, nên kiểu của biến bên trái khớp kiểu trả về và ngay sau đó duyệt được bằng vòng lặp next(). Lựa chọn viết "int result = statement.executeUpdate(" rồi đưa câu truy vấn vào là sai công dụng, bởi phương thức đó dành cho các câu làm biến đổi dữ liệu và chỉ trả về số nguyên đếm số dòng bị ảnh hưởng, không hề có tập kết quả. Lựa chọn viết "ResultSet resultSet = statement.execute(" gán sai kiểu, vì execute() trả về boolean chứ không trả ResultSet nên trình biên dịch từ chối ngay. Lựa chọn viết "boolean result = statement.execute(" thì đúng kiểu nhưng chỉ cho biết kết quả đầu tiên có phải tập dòng hay không, muốn lấy dữ liệu vẫn phải gọi tiếp getResultSet().
<a href="logoutServlet">Logout</a>When the client clicks the logout link, the following code in the logoutServlet runs:
HttpSession session = request.getSession();
//TODO
response.sendRedirect("login.jsp");What is the best code to write in the TODO section to complete the logout function?
Đáp án đúng: "session.invalidate(); ". Lời gọi này huỷ cả phiên phía máy chủ: mọi thuộc tính bị bỏ và mã định danh cũ không còn hiệu lực, nên sau khi chuyển hướng về trang đăng nhập thì các trang như trang hồ sơ hay trang lịch sử đơn không đọc lại được dữ liệu người dùng cũ, kể cả khi người dùng bấm nút lùi. Lời gọi "session.removeAll(); " không biên dịch được vì giao diện phiên không có phương thức tên đó. Lời gọi "session.getAttribute(“USER”).remove(); " sai hai lẽ: thứ trả về là một vật thể chung không có phương thức này, và khi chưa đăng nhập thì giá trị rỗng sẽ gây ngoại lệ con trỏ rỗng. Lời gọi "session.removeAttribute(“USER”); " chạy được nhưng chỉ bỏ một thuộc tính, phiên vẫn sống cùng các thuộc tính khác nên chưa phải đăng xuất dứt điểm. Dòng "
if(session.getAtriibute(“USER”)!=null) session.remove(“USER”);" dùng hai tên hàm không có trong giao diện phiên, lại viết sai chính tả, nên không biên dịch được. Lời gọi "session.remove(); " cũng vậy, không tồn tại trong giao diện phiên.
Đáp án đúng: "String url = response.encodeURL("currentURL?sessionID=123"); ". Gắn thêm thông tin phiên vào địa chỉ là nhiệm vụ của phản hồi: encodeURL() nhận địa chỉ gốc rồi trả về địa chỉ đã viết lại, container tự quyết định có cần thêm định danh phiên hay không, nên đây đúng là cách làm URL rewriting mà vẫn để container lo phần phiên. Lựa chọn "String url =
response.appendParameterToURL("sessionID", "123");" gọi một phương thức không tồn tại trong HttpServletResponse nên mã không biên dịch được. Lựa chọn "String url = request.appendURLParameter("sessionID", "123"); " cũng là tên tự đặt và còn gọi trên đối tượng yêu cầu, nơi chỉ đọc được tham số chứ không sinh địa chỉ. Lựa chọn "
response.sendRedirect("currentURL?sessionID=123");" không viết lại địa chỉ mà bắt trình duyệt đi tới trang khác, tức thực hiện chuyển hướng chứ không trả về chuỗi địa chỉ đã gắn tham số.
class: ${
emp.tel
}Which of the following statements accurately describes the requirements for accessing and displaying the tel field using this EL expression?
Đáp án đúng: "${
f.calcSubTotal()
}
".Từ bản EL hỗ trợ gọi phương thức, cú pháp có cặp ngoặc đơn nghĩa là gọi thật một phương thức công khai của đối tượng, nên biểu thức này chạy thuật toán tính tổng phụ rồi in giá trị trả về; đó là cách duy nhất trong danh sách kích hoạt được phép tính. Lựa chọn "${f.price}" chỉ truy cập thuộc tính, EL gọi getPrice() và cho ra đơn giá, không có phép tính nào được thực hiện. Lựa chọn "${
f.getPrice()
}
"gọi được phương thức nhưng vẫn là getter của price, kết quả vẫn là đơn giá chứ không phải tổng phụ. Lựa chọn "${f.subTotal}" khiến EL đi tìm thuộc tính tên subTotal, tức tìm getSubTotal(); lớp Food không có phương thức ấy nên trang báo lỗi không tìm thấy thuộc tính thay vì chạy phép tính.
public class MyAppContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// TODO: Your code here
}
public void contextDestroyed(ServletContextEvent event) {
// TODO: Your code here
}