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 2/3 — câu 21–40.
Danh sách câu hỏi
session.setAttribute("user", null);public class CookieExampleServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO: Your code here
}
}Đáp án đúng: "Cookie newCookie =
new Cookie("username", "john_doe");
response.addCookie(newCookie);". Cookie là một đối tượng được dựng bằng hàm khởi tạo hai tham số tên và giá trị, rồi phải nhờ phản hồi mang ra ngoài: addCookie thêm một dòng tiêu đề Set-Cookie vào phần đầu của phản hồi, vì vậy lệnh này phải chạy trước khi nội dung phản hồi được gửi đi. Lựa chọn dùng "response.setCookie("username", "john_doe"); " sai vì HttpServletResponse không có phương thức setCookie; nó chỉ nhận một đối tượng Cookie đã tạo qua addCookie. Lựa chọn dùng "request.createCookie("username", "john_doe"); " sai vì request là luồng dữ liệu đi vào, nó chỉ có getCookies để đọc cookie client gửi lên, và "response.sendCookie(); " cũng không tồn tại trong API. Lựa chọn dùng "Cookie.create("username", "john_doe"); " sai vì lớp Cookie không cung cấp phương thức tĩnh nào tên create, và "response.writeCookie(); " cũng là tên tự đặt: tên đúng duy nhất để đính cookie vào phản hồi là addCookie.
Đáp án đúng: "${bookList["2"].title}". Toán tử ngoặc vuông là cách truy cập dùng được cho cả danh sách và Map: EL lấy giá trị trong ngoặc làm khoá rồi ép về kiểu chỉ số khi đối tượng đích là List hoặc mảng, nên chuỗi hai được ép thành số hai; phần tử trả về là một Map, vì vậy dấu chấm đứng sau được hiểu là tra khoá title trong Map đó chứ không phải gọi getter. "${bookList[12].title}" sai vì nó trỏ tới phần tử thứ mười ba, lệch hẳn vị trí được hỏi và thường gây lỗi vượt biên. "${
bookList.get(2).title
}
" saivì đó là cách viết lời gọi phương thức kiểu Java, không phải cú pháp truy cập phần tử theo chỉ số mà câu hỏi đang nhắm tới. "${bookList.title[2]}" sai vì nó đi tìm thuộc tính title trên chính danh sách rồi mới lấy chỉ số, tức đảo ngược thứ tự hai chặng truy cập. "${bookList[2].title}" viết chỉ số bằng số nguyên trực tiếp nên chỉ là biến thể trùng nghĩa, không mang điểm kiến thức được kiểm tra là việc ngoặc vuông nhận một khoá rồi tự ép kiểu theo đối tượng đích.
ServletContextAttributeListenerServletRequestListenerHttpSessionListenerServletContextListener<context-param> tag in the web.xml file?
<web-app>
<context-param>
<param-name>studentName</param-name>
<param-value>abcJhn</param-value>
</context-param></web-app>
Đáp án đúng: "ServletContext sc = getServletContext();
String serverName = sc.getInitParameter("studentName"); ". Khai báo tham số nằm trực tiếp trong phần tử gốc của mô tả triển khai, không lồng trong khai báo của một servlet nào, nên nó là tham số khởi tạo của cả ứng dụng và chỉ vật thể ngữ cảnh ứng dụng đọc được, lấy bằng lời gọi trong servlet rồi hỏi theo tên. Dòng "request.getParameter("studentName"); " đọc tham số của lượt yêu cầu, tức dữ liệu từ chuỗi truy vấn hay biểu mẫu, nên luôn trả về giá trị rỗng với tham số khai trong tệp cấu hình. Đoạn "ServletConfig sc = getServletConfig()." sai hai lẽ: vật thể cấu hình chỉ thấy tham số khởi tạo khai riêng bên trong khai báo của chính servlet đó, và dòng lại kết thúc bằng dấu chấm nên mã không biên dịch được. Dòng "response.getParameter("studentName"); " sai vì đối tượng phản hồi chỉ dùng để ghi kết quả trả về, nó không có hàm đọc tham số nào.
varitemsstepcase