Tất cả câu hỏi

Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.

560/11.885 câuCòn 11.325
541Filter 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 →
AChanging the response sent to the client.
BHandling the request before it reaches the servlet or resource.
CAltering the client's browser settings.
DEncrypting the request data.
Lời giải
Đáp án đúng: "Handling the request before it reaches the servlet or resource.". Filter đứng trước tài nguyên trong chuỗi xử lý, nên mọi dòng mã viết phía trên lời gọi chain.doFilter chạy khi yêu cầu còn chưa tới servlet hay trang JSP: đó là chỗ kiểm tra đăng nhập rồi chặn sớm, đặt bảng mã cho tham số, ghi log hoặc bọc lại đối tượng yêu cầu. Phần mã nằm sau lời gọi đó mới là hậu xử lý. "Changing the response sent to the client." sai vì sửa phản hồi chỉ làm được sau khi chuỗi đã chạy xong, tức thuộc về hậu xử lý. "Altering the client's browser settings." sai vì mã phía server không với tới được thiết lập của trình duyệt. "Encrypting the request data." sai không phải vì filter không làm nổi việc đó, mà vì đây chỉ là một ví dụ việc cụ thể có thể làm trong tiền xử lý, không phải định nghĩa của khái niệm đang hỏi.
Mở trang câu hỏi này →
AIt sets the body content of the custom tag.
BIt returns the body content as a string.
CIt initializes the BodyContent object for the tag.
DIt releases any resources associated with the body content.
Lời giải
Đáp án đúng: "It sets the body content of the custom tag.". Với thẻ cài đặt interface có thân đệm, sau khi phương thức mở thẻ báo rằng thân cần được đệm lại, container tạo một đối tượng chứa thân rồi gọi phương thức này để trao đối tượng đó cho lớp xử lý thẻ, sau đó mới chạy thân và ghi kết quả vào đấy; nhờ vậy các phương thức chạy sau đọc được nội dung thân đã dựng. "It returns the body content as a string." sai vì phương thức này không trả về gì; muốn lấy chuỗi thì phải gọi phương thức đọc chuỗi trên đối tượng thân đã nhận. "It initializes the BodyContent object for the tag." sai vì đối tượng đệm do container tạo trước và truyền vào, phương thức chỉ nhận lấy tham chiếu chứ không tự khởi tạo. "It releases any resources associated with the body content." sai vì việc trả lại tài nguyên thuộc về phương thức release ở cuối vòng đời thẻ.
Mở trang câu hỏi này →
Atagclass
Bclass
Chandler
Dimplementation
Lời giải
Đáp án đúng: "tagclass". Trong khai báo một thẻ tuỳ biến, thuộc tính này là chỗ ghi tên đầy đủ của lớp Java cài đặt bộ xử lý thẻ; nhờ nó mà bộ dịch trang biết phải nạp và khởi tạo lớp nào khi gặp thẻ, rồi gọi các phương thức vòng đời của thẻ trên đối tượng vừa tạo. "class" sai vì đó là tên thuộc tính quá chung và được dùng ở chỗ khác, khai báo thẻ không nhận dạng viết rút gọn này. "handler" sai vì nó chỉ là cách gọi vai trò của lớp, tức bộ xử lý thẻ, chưa bao giờ là tên thuộc tính trong khai báo. "implementation" sai vì nó mô tả ý niệm lớp cài đặt chứ không phải tên thuộc tính mà bộ dịch chấp nhận; viết tên tự đặt vào đây thì trang không dịch được vì khai báo thẻ bị coi là không hợp lệ.
Mở trang câu hỏi này →
A`javax.servlet.Servlet`
B`javax.servlet.filter.Filter`
C`javax.servlet.jsp.tagext.Tag`
D`javax.servlet.http.HttpServlet`
Lời giải
Đáp án đúng: "`javax.servlet.jsp.tagext.Tag`". Đây là interface gốc của mô hình thẻ cổ điển: nó khai báo setPageContext, setParent, doStartTag, doEndTag và release, và container gọi đúng theo trình tự đó mỗi khi gặp thẻ trong trang, nên lớp xử lý thẻ phải cài đặt interface này, thường là kế thừa lớp hỗ trợ sẵn, rồi được khai báo trong tệp mô tả thư viện thẻ. "`javax.servlet.Servlet`" sai vì nó mô tả vòng đời của một servlet phục vụ yêu cầu HTTP, không phải cơ chế thẻ trong trang. "`javax.servlet.filter.Filter`" sai vì lọc yêu cầu là chuyện trước và sau servlet, hơn nữa interface lọc nằm ngay trong gói javax.servlet chứ không có gói con tên như vậy. "`javax.servlet.http.HttpServlet`" sai vì đó là một lớp trừu tượng dùng để viết servlet theo doGet và doPost, không phải interface mà bộ xử lý thẻ cài đặt.
Mở trang câu hỏi này →
ATo pick the main language for the website.
BTo tell other tags which language and country format to use.
CTo change the user's language settings.
DTo choose the language for database information.
Lời giải
Đáp án đúng: "To tell other tags which language and country format to use.". Thẻ này ghi locale vào cấu hình định dạng của trang và đè lên locale mà trình duyệt gửi kèm trong tiêu đề yêu cầu, nên mọi thẻ định dạng đứng sau nó trong phạm vi đó, từ in số, in ngày cho tới tra gói tài nguyên, đều dùng chung một quy ước ngôn ngữ và quốc gia; nhờ vậy cùng một dữ liệu có thể hiện ra theo kiểu Việt Nam hay kiểu Mỹ mà không sửa mã. "To pick the main language for the website." sai vì nó chỉ ảnh hưởng tới các thẻ định dạng trong phạm vi nơi đặt, không phải một thiết lập ngôn ngữ chung cho cả website. "To change the user's language settings." sai vì mã phía server không sửa được thiết lập trên máy khách; trình duyệt của người dùng vẫn nguyên. "To choose the language for database information." sai vì dữ liệu lấy ra bằng thứ ngôn ngữ nào là do câu truy vấn và nội dung đã lưu, thẻ định dạng không can thiệp.
Mở trang câu hỏi này →
A<fmt:setTimeZone>
B<fmt:setLocale>
C<fmt:formatDate>
D<fmt:setBundle>
Lời giải
Đáp án đúng: "<fmt:formatDate>". Thẻ này nhận một đối tượng ngày giờ qua thuộc tính value rồi kết xuất thành chuỗi theo quy ước của locale đang có hiệu lực, chọn được phần nào để in và dạng dài ngắn qua type cùng dateStyle, hoặc tự ấn định khuôn qua pattern; nó là thẻ duy nhất trong nhóm thực sự sinh ra chữ trên trang. "<fmt:setTimeZone>" sai vì nó chỉ đặt múi giờ dùng cho các thẻ định dạng đứng sau, bản thân không in ra ngày nào. "<fmt:setLocale>" sai vì nó chỉ ấn định ngôn ngữ và quốc gia, tức chuẩn bị điều kiện cho thẻ định dạng chứ không kết xuất giá trị. "<fmt:setBundle>" sai vì nó nạp gói tài nguyên cho các thẻ lấy chuỗi đã dịch, không liên quan tới việc dựng chuỗi ngày giờ.
Mở trang câu hỏi này →
AIt catches exceptions thrown during the execution of its body content.
BIt handles errors thrown by JSP expressions.
CIt catches HTTP errors and redirects to an error page.
DIt encapsulates code to be executed asynchronously.
Lời giải
Đáp án đúng: "It catches exceptions thrown during the execution of its body content.". Thẻ này bọc một đoạn thân trang: nếu bất kỳ lệnh nào trong thân ném ngoại lệ thì thân bị dừng ngay tại đó, ngoại lệ bị giữ lại chứ không bay lên container, và khi có thuộc tính var thì đối tượng ngoại lệ được đặt vào biến đó để trang tự kiểm tra rồi hiển thị thông báo tuỳ ý. "It handles errors thrown by JSP expressions." sai vì phạm vi nó bao là mọi thứ chạy trong thân, không riêng biểu thức, và bản thân nó chỉ bắt rồi trao lại cho trang chứ không tự xử lý lỗi. "It catches HTTP errors and redirects to an error page." sai vì mã lỗi HTTP cùng việc chuyển sang trang lỗi do khai báo error-page trong web.xml hoặc chỉ thị errorPage của trang đảm nhiệm. "It encapsulates code to be executed asynchronously." sai vì thân thẻ vẫn chạy tuần tự trong cùng luồng đang xử lý yêu cầu, thư viện thẻ lõi không cung cấp cơ chế chạy bất đồng bộ.
Mở trang câu hỏi này →
Đề bài
var="myUrl" scope="page"> <c:param name="type" value="book" /> <c:param name="id" value="123" /> </c:url> ${
  myUrl
}
A/app/item?type=book&id=123
B/app/item?type=id&book=123
C/app/item
DNothing will be printed out
EThe JSP failed to compile
Lời giải
Đáp án đúng: "/app/item?type=book&id=123". Thẻ dựng địa chỉ sẽ gom các thẻ tham số lồng trong thân nó thành chuỗi truy vấn, mã hoá giá trị rồi vì có thuộc tính var nên không in ra ngay mà lưu kết quả vào biến myUrl trong phạm vi trang; biểu thức đứng sau đó đọc biến này nên in ra đường dẫn kèm hai tham số theo đúng thứ tự khai báo. Đường dẫn mở đầu bằng dấu gạch chéo được hiểu theo context path của ứng dụng, nên với ứng dụng chạy ở context gốc thì kết quả đúng như chuỗi trên. "/app/item?type=id&book=123" sai vì nó ghép lẫn tên với giá trị: mỗi thẻ tham số lấy name làm tên và value làm giá trị, nên cặp đúng là type đi với book và id đi với 123. "/app/item" sai vì bỏ hết phần truy vấn, trong khi hai thẻ tham số nằm trong thân chính là để nối thêm phần đó. "Nothing will be printed out" sai vì biến có phạm vi trang và được đọc ngay trong cùng trang. "The JSP failed to compile" sai vì cú pháp hoàn toàn hợp lệ khi trang đã khai báo thư viện thẻ lõi.
Mở trang câu hỏi này →
ATo listen for changes in session attributes
BTo listen for changes in application context parameters
CTo listen for changes in request parameters
DTo listen for changes in session lifecycle events
Lời giải
Đáp án đúng: "To listen for changes in session lifecycle events". Listener của phiên gắn vào các mốc vòng đời do container quản lý: phiên vừa được tạo, phiên bị invalidate hoặc hết thời gian chờ; hai phương thức sessionCreated và sessionDestroyed được gọi đúng ở các mốc đó, nhờ vậy ứng dụng đếm được số phiên đang sống và giải phóng tài nguyên kịp lúc. "To listen for changes in session attributes" sai vì theo dõi việc thêm, thay và xoá thuộc tính là nhiệm vụ của một interface khác dành riêng cho thuộc tính phiên, không phải của listener vòng đời. "To listen for changes in application context parameters" sai vì phạm vi ứng dụng có bộ listener riêng của nó, còn tham số khởi tạo khai báo trong web.xml thì không đổi lúc đang chạy. "To listen for changes in request parameters" sai vì tham số của yêu cầu chỉ đọc được qua getParameter và không có sự kiện nào được phát ra khi chúng khác nhau giữa các yêu cầu.
Mở trang câu hỏi này →
AIt listens to and records conversations
BIt watches for changes in user sessions, like when someone logs in or out
CIt changes session data
DIt helps users navigate through the application
Lời giải
Đáp án đúng: "It watches for changes in user sessions, like when someone logs in or out". Listener của phiên là một lớp được container thông báo mỗi khi vòng đời phiên chuyển trạng thái: đăng nhập thường kéo theo việc tạo phiên mới và ghi thuộc tính người dùng, còn đăng xuất gọi invalidate, và chính container phát sự kiện tương ứng cho lớp đã khai báo, nên nó quan sát được các mốc đó mà không cần servlet nào gọi tay. "It listens to and records conversations" sai vì phiên ở đây là phiên làm việc HTTP giữa trình duyệt và server, không phải cuộc hội thoại nào để ghi âm. "It changes session data" sai vì listener chỉ được thông báo chứ không phải công cụ để sửa dữ liệu; việc ghi thuộc tính vẫn do servlet thực hiện. "It helps users navigate through the application" sai vì điều hướng do tầng điều khiển quyết định qua forward hoặc sendRedirect, listener không can thiệp vào luồng đi của yêu cầu.
Mở trang câu hỏi này →
AHandling HTTP requests and generating responses.
BManaging sessions and cookies for clients.
CObserving changes in the lifecycle of the ServletContext.
DInteracting with databases to perform CRUD operations.
Lời giải
Đáp án đúng: "Observing changes in the lifecycle of the ServletContext.". Lớp cài đặt interface này nhận hai mốc của phạm vi ứng dụng: contextInitialized chạy đúng một lần khi container nạp ứng dụng, trước khi servlet đầu tiên phục vụ yêu cầu nào, và contextDestroyed chạy khi ứng dụng bị dỡ; nhờ vậy đây là nơi dựng sẵn tài nguyên dùng chung, nạp cấu hình vào ServletContext rồi dọn sạch lúc tắt. "Handling HTTP requests and generating responses." sai vì đó là việc của servlet qua doGet và doPost, listener không nhận đối tượng yêu cầu nào. "Managing sessions and cookies for clients." sai vì phạm vi phiên và cookie thuộc về từng người dùng, do mã servlet cùng các listener của phiên lo. "Interacting with databases to perform CRUD operations." sai vì thao tác dữ liệu là việc của tầng truy cập dữ liệu; listener nhiều lắm chỉ chuẩn bị sẵn nguồn kết nối rồi đóng lại khi dỡ ứng dụng.
Mở trang câu hỏi này →
AHttpSessionListener
BServletRequestListener
CServletContextListener
DServletResponseListener
Lời giải
Đáp án đúng: "HttpSessionListener". Interface này khai báo hai phương thức sessionCreated và sessionDestroyed, container tự gọi chúng mỗi khi một phiên được sinh ra hoặc hết hiệu lực, nên đây là chỗ để đếm số người đang truy cập hay dọn tài nguyên gắn với phiên; lớp cài đặt chỉ cần đánh chú giải listener hoặc khai báo thẻ listener trong web.xml là container nạp ngay khi khởi động ứng dụng. "ServletRequestListener" sai vì nó bắt sự kiện bắt đầu và kết thúc của từng yêu cầu, một phạm vi hẹp hơn và không liên quan tới vòng đời phiên. "ServletContextListener" sai vì nó theo dõi vòng đời của cả ứng dụng, chỉ chạy một lần khi nạp và một lần khi dỡ. "ServletResponseListener" sai vì đặc tả servlet không có interface nào tên như vậy; phản hồi không có vòng đời riêng để lắng nghe.
Mở trang câu hỏi này →
A${bookList[12].title}
B${bookList.get(2).title}
C${bookList["2"].title}
D${bookList.title[2]}
E${bookList[2].title}
Lời giải

Đá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. "${

Lời giải
bookList.get(2).title
}
" sai

vì đó 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.

Mở trang câu hỏi này →
ARetrieve the first element of the items array in the cart object from the session
BEL will return null if the cart does not exist in the session
CError because EL does not support array retrieval
DBoth A and B are correct
Lời giải
Đáp án đúng: "Both A and B are correct". EL đọc biểu thức trong đề theo từng chặng: tra tên cart trong phạm vi session, lấy tiếp thuộc tính items, rồi dùng toán tử ngoặc vuông để lấy phần tử ở chỉ số 0 của mảng hoặc danh sách đó. Nếu một chặng nào trả về null thì cả biểu thức cho ra null và trang in ra chuỗi rỗng chứ không ném ngoại lệ, vì vậy cả hai mệnh đề cùng mô tả đúng một phần hành vi. Mệnh đề nói biểu thức lấy "the first element of the items array in the cart object" đúng nhưng chỉ là một nửa câu trả lời, vì nó im lặng về trường hợp giỏ hàng chưa có trong phiên. Mệnh đề nói EL sẽ "return null if the cart does not exist" cũng đúng một nửa, vì nó không nói gì tới việc truy cập phần tử khi dữ liệu có đủ. "Error because EL does not support array retrieval" sai vì toán tử ngoặc vuông truy cập được cả mảng, danh sách, Map và thuộc tính của bean.
Mở trang câu hỏi này →
Đề bài
class: ${
  emp.tel
}

Which of the following statements accurately describes the requirements for accessing and displaying the tel field using this EL expression?

AThe tel field must be declared as public, and no getter method is required.
BThe tel field may be private, but a getTel() method must be provided.
CBoth A and B are correct.
DNeither A nor B is correct.
Lời giải
Đáp án đúng: "The tel field may be private, but a getTel() method must be provided.". EL không đọc trực tiếp trường của lớp: dấu chấm trong biểu thức được hiểu là truy cập thuộc tính theo quy ước JavaBeans, nên khi gặp cách viết trong đề, bộ xử lý đi tìm getTel() (hoặc isTel() nếu kiểu boolean) và báo lỗi không tìm thấy thuộc tính nếu lớp chỉ có trường mà không có phương thức đọc; mức truy cập của trường không hề được xét tới. "The tel field must be declared as public, and no getter method is required." sai đúng ở chỗ đó: để trường là public cũng không giúp EL nhìn thấy nó. "Both A and B are correct." sai vì nó kéo theo cả mệnh đề đòi trường public và bỏ getter, trong khi chỉ cần một phương thức đọc đặt tên đúng quy ước là đủ. "Neither A nor B is correct." sai vì mệnh đề cho phép trường private kèm getTel() mô tả chính xác cách EL lấy giá trị thuộc tính.
Mở trang câu hỏi này →
Đề bài
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)        throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        System.out.println( new Date());
        chain.doFilter(request, response);
}

And in the web.xml:

Đề bài
<filter>
    <filter-name>LoggingFilter</filter-name>
    <filter-class>LoggingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoggingFilter</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping> Assuming that the client sends a request to open the index.jsp page, arrange the following steps correctly to describe the processing inside server. 1: the LoggingFilter intercepts the request to display current date 2: the server compiles and processes the JSP file to generates an HTML response. 3: The final HTML content from index.jsp is sent back to the client's browser. 4: the request continues to index.jsp 5: the HTML response from index.jsp is sent back to the LoggingFilter.

A1-4-2-5-3
B1-5-4-2-3
C1-2-5-3
D1-4-5-3
Lời giải
Đáp án đúng: "1-4-2-5-3". Chuỗi filter là một cái phễu hai chiều: filter khớp mẫu bao trùm nhận yêu cầu trước nên nó in ngày hiện tại, rồi lời gọi chain.doFilter mới đẩy yêu cầu đi tiếp tới index.jsp; container dịch trang JSP thành servlet, biên dịch rồi chạy để sinh HTML; khi phương thức của trang trả về, luồng điều khiển quay lại đúng chỗ ngay sau chain.doFilter trong filter, và chỉ sau khi filter kết thúc thì nội dung mới được đẩy ra trình duyệt. "1-5-4-2-3" sai vì phản hồi không thể quay về filter trước khi yêu cầu kịp tới index.jsp. "1-2-5-3" sai vì bỏ mất bước yêu cầu đi tiếp tới index.jsp, mà thiếu lời gọi chain.doFilter thì trang không bao giờ được chạy. "1-4-5-3" sai vì bỏ mất bước container xử lý trang JSP để sinh HTML, nghĩa là không có nội dung nào để trả về.
Mở trang câu hỏi này →
Acontext.setAttribute("key", value);
Brequest.setAttribute("key", value);
Csession.setAttribute("key", value);
Dresponse.setAttribute("key", value);
Lời giải

Đáp án đúng: "context.setAttribute("key", value); ". ServletContext là vùng dữ liệu dùng chung cho toàn ứng dụng: lấy nó bằng getServletContext() rồi ghi bằng setAttribute, giá trị đó mọi servlet và mọi người dùng đều đọc được và sống tới khi ứng dụng bị dỡ. "request.setAttribute("key", value); " sai vì phạm vi request chỉ sống trong một lần xử lý yêu cầu, hết lượt forward là mất, không dùng để chia sẻ toàn ứng dụng. "session.setAttribute("key", value); " sai vì dữ liệu khi đó chỉ thuộc về một người dùng và biến mất khi phiên hết thời gian chờ hoặc bị invalidate. "response.setAttribute("key", value); " sai vì HttpServletResponse không có phương thức setAttribute; phản hồi chỉ dùng để đặt tiêu đề, mã trạng thái và ghi nội dung trả về.

Mở trang câu hỏi này →
Đề bài
public class CookieExampleServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO: Your code here
    }
}
ACookie newCookie = new Cookie("username", "john_doe"); response.addCookie(newCookie);
Bresponse.setCookie("username", "john_doe");
Crequest.createCookie("username", "john_doe"); response.sendCookie();
DCookie.create("username", "john_doe"); response.writeCookie();
Lời giải

Đáp án đúng: "Cookie newCookie =

Lời giải
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.

Mở trang câu hỏi này →
AA new session is created
BReturns null
CIllegalStateException is thrown
DThe old session is reset
Lời giải
Đáp án đúng: "Returns null". Tham số false nói với container rằng chỉ được trả về phiên đang tồn tại, tuyệt đối không tạo mới; nếu yêu cầu chưa gắn với phiên nào thì phương thức trả về null, nên mã gọi bắt buộc phải kiểm tra null trước khi dùng, và đó cũng là cách thông dụng để biết người dùng đã đăng nhập hay chưa. "A new session is created" sai vì chỉ getSession() không tham số hoặc getSession(true) mới sinh phiên mới. "IllegalStateException is thrown" sai vì ngoại lệ đó xuất hiện khi làm việc với một phiên đã bị invalidate, chứ không phải khi hỏi một phiên chưa tồn tại. "The old session is reset" sai vì ở đây không có phiên nào để đặt lại, và bản thân getSession cũng không bao giờ xoá dữ liệu của phiên đang sống.
Mở trang câu hỏi này →