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

49 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–49.

Danh sách câu hỏi

49/49 câuHết danh sách
AinitFilter()
Binitialize()
Cinit()
DsetupFilter()
Lời giải
Đáp án đúng: "init()". Filter có vòng đời ba bước do container điều khiển: init(FilterConfig) được gọi đúng một lần ngay sau khi container tạo thực thể filter và trước khi yêu cầu đầu tiên đi qua, doFilter() chạy cho từng yêu cầu khớp mẫu ánh xạ, destroy() chạy khi ứng dụng bị tháo; vì vậy nơi đọc tham số khởi tạo hay mở tài nguyên dùng lâu dài chính là init(). "initFilter()" không nằm trong giao diện Filter, đặt tên này thì container không bao giờ gọi tới và tham số khởi tạo sẽ không được đọc. "initialize()" cũng không thuộc hợp đồng của Filter, đây là tên quen thấy ở nơi khác chứ không phải trong đặc tả servlet. "setupFilter()" tương tự là tên tự đặt; container chỉ gọi đúng chữ ký khai trong giao diện mà lớp filter cài đặt nên một tên gần nghĩa vẫn bị bỏ qua hoàn toàn.
Mở trang câu hỏi này →
ACalled by the server (via the service method)to allow a servlet to handle a GET request.
BThe GET method is the default method to pass information from browser to web server.
CBoth of the above.
DNone of the above.
Lời giải
Đáp án đúng: "Both of the above.". Câu hỏi gộp hai mệnh đề về cùng một phương thức và cả hai đều đứng vững: ở phía server, service() nhận yêu cầu rồi gọi lại doGet() để servlet xử lý yêu cầu GET; ở phía client, GET là phương thức mặc định khi trình duyệt mở một liên kết hoặc gửi form không khai thuộc tính method, nên chỉ lựa chọn gộp mới trả lời trọn vẹn. "Called by the server (via the service method)to allow a servlet to handle a GET request." chỉ mô tả nửa phía container và bỏ mất hành vi mặc định của trình duyệt. "The GET method is the default method to pass information from browser to web server." chỉ mô tả nửa phía client, không nói gì tới cách servlet nhận được yêu cầu đó. "None of the above." sai vì hai mệnh đề trên đều là mô tả đúng của GET.
Mở trang câu hỏi này →
AStatement
BPreparedStatement
CCallableStatement
DResultSet
Lời giải
Đáp án đúng: "CallableStatement". CallableStatement là nhánh con của PreparedStatement dành riêng cho thủ tục và hàm trong cơ sở dữ liệu: câu lệnh viết theo cú pháp gọi thủ tục với dấu chấm hỏi làm chỗ giữ, prepareCall() tạo ra đối tượng, registerOutParameter() khai các tham số trả ra, rồi đọc giá trị ra sau khi thực thi. "Statement" chỉ gửi đi một câu SQL đã ghép sẵn thành văn bản, không có chỗ giữ tham số và không khai được tham số trả ra nên không gọi được thủ tục có tham số OUT. "PreparedStatement" có chỗ giữ tham số và được biên dịch trước, nhưng chỉ phục vụ câu SQL thường và cũng không khai báo được tham số trả ra. "ResultSet" không phải câu lệnh mà là con trỏ để đọc bảng kết quả sau khi một câu lệnh đã chạy xong.
Mở trang câu hỏi này →
AGET
BHEAD
CPUT
DPOST
EUPDATE
FDELETE
Lời giải
Đáp án đúng: "UPDATE". Tập phương thức mà HTTP 1.1 định nghĩa gồm GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE và CONNECT; không có phương thức nào tên UPDATE, việc sửa dữ liệu trên server được làm bằng PUT khi thay trọn tài nguyên hoặc bằng POST khi gửi dữ liệu cho server tự xử lý. "GET" là phương thức đọc tài nguyên và là mặc định của trình duyệt nên chắc chắn thuộc tập chuẩn. "HEAD" cũng có trong đặc tả, hành xử như GET nhưng chỉ trả về phần header mà không có body, thường dùng để kiểm tra tài nguyên còn sống hay đã đổi. "PUT" có trong đặc tả, dùng để ghi hoặc thay thế tài nguyên tại đúng đường dẫn đã chỉ. "POST" có trong đặc tả, đặt dữ liệu trong body để server xử lý và là phương thức của form gửi dữ liệu. "DELETE" cũng có trong đặc tả, yêu cầu xoá tài nguyên tại đường dẫn đó.
Mở trang câu hỏi này →
Arequest.newSession(true)
Brequest.getSession(true)
Crequest.getHttpSession()
DsessionManager.get()
Lời giải
Đáp án đúng: "request.getSession(true)". Phương thức này tìm định danh phiên mà trình duyệt gửi kèm trong cookie JSESSIONID hoặc trong đường dẫn; nếu phiên còn hợp lệ thì trả về đúng phiên đó, nếu không thì container tạo phiên mới và gắn cookie trả về, nên dạng không tham số getSession() hành xử y như vậy còn getSession(false) trả về null thay vì tạo mới. "request.newSession(true)" không tồn tại trong HttpServletRequest, và cái tên này còn ngụ ý luôn tạo phiên mới nên sẽ làm mất dữ liệu phiên đang có. "request.getHttpSession()" cũng không có trong giao diện; HttpSession là tên kiểu trả về chứ không nằm trong tên phương thức. "sessionManager.get()" giả định ứng dụng tự giữ một đối tượng quản lý phiên, trong khi vòng đời phiên do container quản và chỉ truy cập được thông qua đối tượng yêu cầu.
Mở trang câu hỏi này →
AHttpSessionListener
BHttpSessionAttributeListener
CServletContextListener
DServletRequestListener
Lời giải
Đáp án đúng: "HttpSessionAttributeListener". Đây là listener nghe trên dữ liệu đặt trong phiên: container gọi attributeAdded() khi một thuộc tính được đặt lần đầu, attributeReplaced() khi giá trị cũ bị ghi đè và attributeRemoved() khi thuộc tính bị gỡ, nên muốn theo dõi giá trị của biến trong session đổi ra sao thì dùng đúng giao diện này. "HttpSessionListener" chỉ nghe việc phiên được tạo và bị phá qua sessionCreated() và sessionDestroyed(), tức là vòng đời của phiên chứ không phải nội dung bên trong nó. "ServletContextListener" nghe vòng đời của toàn ứng dụng, chạy lúc ServletContext khởi tạo và lúc bị tháo, không liên quan tới phiên. "ServletRequestListener" nghe một yêu cầu vào và ra khỏi phạm vi xử lý, phạm vi này ngắn hơn phiên và cũng không báo gì về thay đổi giá trị trong session.
Mở trang câu hỏi này →
ASession creation
BRequest handling
CContext initialization
DForm submission
ENone of the others
Lời giải
Đáp án đúng: "Context initialization". ServletContextListener là listener của phạm vi ứng dụng: contextInitialized() chạy một lần sau khi container dựng xong ServletContext và trước khi yêu cầu đầu tiên được phục vụ, contextDestroyed() chạy khi ứng dụng bị tháo, nên các việc như nạp cấu hình chung hay mở pool kết nối được đặt ở đây. "Session creation" là sự kiện của phạm vi phiên, do HttpSessionListener nghe qua sessionCreated(). "Request handling" thuộc phạm vi một yêu cầu, do ServletRequestListener hoặc chính servlet và filter xử lý, không phải việc của listener ứng dụng. "Form submission" là hành vi phía trình duyệt, tới server nó chỉ là một yêu cầu GET hay POST bình thường và không sinh ra sự kiện listener riêng nào. "None of the others" sai vì khởi tạo ngữ cảnh đúng là sự kiện mà giao diện này nghe.
Mở trang câu hỏi này →
Astmt.getAffectedRows()
Bstmt.countRows()
Cstmt.getRowCount()
Dstmt.executeUpdate()
Lời giải
Đáp án đúng: "stmt.executeUpdate()". Với các câu lệnh làm thay đổi dữ liệu như INSERT, UPDATE hay DELETE, JDBC dùng executeUpdate() và chính nó trả về một số nguyên là số dòng bị ảnh hưởng, nên không cần hỏi thêm phương thức nào khác; executeQuery() thì dành cho SELECT và trả về ResultSet, còn execute() trả về boolean cho biết kết quả là bảng dữ liệu hay là số đếm. "stmt.getAffectedRows()" không tồn tại trong giao diện Statement, số dòng đã nằm ngay trong giá trị trả về của lệnh thực thi. "stmt.countRows()" cũng không có; muốn đếm dòng trong bảng thì phải tự viết một câu SELECT COUNT chứ không có phương thức sẵn. "stmt.getRowCount()" là tên nghe hợp lý nhưng không thuộc giao diện Statement; con số dòng đọc được của một ResultSet cũng phải tự đếm khi duyệt.
Mở trang câu hỏi này →
AThe name of the internationalization bundle
BThe variable to store the formatted message
CThe message key to look up in the resource bundle
DThe scope of the message variable
Lời giải
Đáp án đúng: "The variable to store the formatted message". Thuộc tính var của thẻ định dạng thông điệp đổi hành vi xuất: thay vì in ngay chuỗi đã tra được ra trang, thẻ cất chuỗi đó vào một biến phạm vi theo tên đã đặt để sau đó đọc lại bằng Expression Language hoặc truyền sang thẻ khác, và thuộc tính scope đi kèm quyết định biến nằm trong page, request, session hay application. "The name of the internationalization bundle" là việc của thẻ nạp bundle hoặc của cấu hình bundle mặc định, không phải của var. "The message key to look up in the resource bundle" là vai trò của thuộc tính key, tức chuỗi dùng để tra trong tệp properties. "The scope of the message variable" là vai trò của thuộc tính scope, nó chỉ có nghĩa khi đã có var và không tự nó quyết định tên biến.
Mở trang câu hỏi này →