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 thi lại số 2

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

Danh sách câu hỏi

47/47 câuHết danh sách
AView
BController
CModel
DNone, servlets are not used in MVC2 architecture
Lời giải
Đáp án đúng: "Controller". MVC2 dồn mọi lượt gọi vào một servlet điều phối: nó nhận request, đọc tham số, gọi lớp nghiệp vụ và lớp truy xuất dữ liệu, đặt kết quả vào phạm vi request rồi chuyển sang trang hiển thị. Servlet là lớp Java chạy trên luồng của container nên thích hợp cho việc điều phối và quyết định, chứ không phải cho việc sinh mã HTML. Lựa chọn "View" ứng với trang JSP, nơi chỉ còn thẻ hiển thị và biểu thức đọc dữ liệu; viết HTML bằng lệnh in trong servlet chính là lối cũ mà kiến trúc này muốn bỏ. Lựa chọn "Model" ứng với các lớp mang dữ liệu và quy tắc nghiệp vụ, chúng không biết gì về HTTP. Lựa chọn "None, servlets are not used in MVC2 architecture" nói ngược hẳn, vì không có servlet điều phối thì không còn cấu hình MVC2 nào để nói tới.
Mở trang câu hỏi này →
AConfiguring context parameters
BMapping listener to URL patterns
CDefining listener classes that handle web events
DSpecifying servlet initialization parameters
Lời giải
Đáp án đúng: "Defining listener classes that handle web events". Trong bản mô tả triển khai, phần tử này chỉ chứa tên lớp cài đặt một giao diện lắng nghe; khi nạp ứng dụng, container tự tạo thực thể của lớp đó và gọi phương thức tương ứng mỗi khi có sự kiện, chẳng hạn ngữ cảnh được khởi tạo hay huỷ, phiên sinh ra hay hết hiệu lực, thuộc tính được thêm hay thay. Lựa chọn "Configuring context parameters" là việc của context-param, nơi khai báo cặp tên và giá trị dùng cho cả ứng dụng. Lựa chọn "Mapping listener to URL patterns" gán cho bộ lắng nghe cách hoạt động của servlet và filter: bộ lắng nghe không được gọi theo đường dẫn mà theo sự kiện, nên nó không có phần ghép mẫu đường dẫn nào. Lựa chọn "Specifying servlet initialization parameters" là việc của init-param nằm trong khai báo servlet, và chỉ servlet đó đọc được.
Mở trang câu hỏi này →
ADisplaying a multiline text area
BCreating a checkbox
CAccepting single-line text input
DSelecting items from a dropdown list
Lời giải
Đáp án đúng: "Accepting single-line text input". Thẻ nhập với kiểu văn bản vẽ ra một ô một dòng để người dùng gõ chuỗi; khi biểu mẫu được gửi, trình duyệt ghép giá trị với tên của ô thành một cặp tham số, và phía servlet đọc bằng getParameter với đúng tên đó, nên thiếu tên là mất dữ liệu. Lựa chọn "Displaying a multiline text area" là việc của thẻ vùng văn bản, thứ có thẻ mở và thẻ đóng riêng vì nội dung ban đầu nằm giữa chúng. Lựa chọn "Creating a checkbox" cần đổi kiểu của ô, và cách đọc cũng khác vì ô không được tích thì không gửi tham số nào lên. Lựa chọn "Selecting items from a dropdown list" là việc của thẻ danh sách chọn với các mục bên trong, và nó chỉ gửi lên giá trị của mục đang được chọn.
Mở trang câu hỏi này →
AsetValue(int index, Object value)
BsetParameter(int index, Object value)
CsetInt(int index, int value)
DsetObject(int index, Object value)
Lời giải
Đáp án đúng: "setObject(int index, Object value)". PreparedStatement gán giá trị cho dấu giữ chỗ bằng họ phương thức đặt tham số, nhận chỉ số đếm từ một; trong các lựa chọn, dạng nhận một Object là phương thức tổng quát thật có trong giao diện, driver tự chuyển giá trị sang kiểu SQL phù hợp nên nó dùng được cho mọi kiểu tham số. Lựa chọn "setValue(int index, Object value)" không tồn tại trong JDBC, gọi tới thì mã không biên dịch được. Lựa chọn "setParameter(int index, Object value)" cũng không có trong giao diện này; tên đó quen từ truy vấn của tầng ánh xạ đối tượng. Lựa chọn "setInt(int index, int value)" là phương thức thật nhưng chỉ dành cho tham số số nguyên, nên không phải cách đặt giá trị cho một tham số kiểu bất kỳ như câu hỏi đòi. Dùng dạng nào cũng phải khớp số lượng và thứ tự dấu giữ chỗ, sai chỉ số sẽ lỗi lúc chạy.
Mở trang câu hỏi này →
AFTP
BSMTP
CHTTP
DWebSocket
Lời giải
Đáp án đúng: "HTTP". Lớp cơ sở mà mọi servlet web kế thừa là HttpServlet, và nó hiện thực đúng giao thức của web: container phân tích thông điệp HTTP, dựng cặp đối tượng request và response của HTTP rồi gọi service, từ đó phân nhánh sang doGet, doPost theo phương thức của lượt gọi. Lựa chọn "FTP" là giao thức truyền tệp, không có lớp servlet nào trong thư viện chuẩn hiện thực nó. Lựa chọn "SMTP" dùng để gửi thư và được phục vụ bằng API thư riêng, không đi qua tầng servlet. Lựa chọn "WebSocket" có API riêng với các lớp đầu mối của nó: lượt bắt tay ban đầu đi bằng HTTP rồi kết nối được nâng cấp, sau đó dữ liệu không còn chạy qua cặp request và response của servlet nữa, nên đó không phải giao thức mà servlet phục vụ.
Mở trang câu hỏi này →
A/src
B/WEB-INF
C/META-INF
D/WEB-CONTENT
Lời giải
Đáp án đúng: "/WEB-INF". Bản mô tả triển khai nằm ngay trong /WEB-INF, cạnh hai thư mục chứa lớp biên dịch và thư viện; container đọc tệp này khi nạp ứng dụng. Thư mục đó được đặc tả bảo vệ: trình duyệt không lấy trực tiếp được nội dung bên trong, nhờ vậy cấu hình và lớp biên dịch không bị phơi ra, còn servlet thì vẫn chuyển tiếp tới trang JSP đặt trong đó được. Lựa chọn "/src" là nơi giữ mã nguồn trên máy lập trình viên, nó không được đóng vào gói chạy thật. Lựa chọn "/META-INF" giữ siêu dữ liệu đóng gói như tệp kê khai, và ở một số container là tệp khai báo ngữ cảnh, nhưng bản mô tả triển khai của ứng dụng web không đặt ở đây. Lựa chọn "/WEB-CONTENT" không phải tên do đặc tả quy định: thư mục nội dung web trong các bộ công cụ có nhiều tên khác nhau, và khi triển khai thì nội dung của nó trở thành gốc ứng dụng chứ không còn là một cấp đường dẫn.
Mở trang câu hỏi này →
Asession
Brequest
Cconfig
Dcontext
Lời giải
Đáp án đúng: "session". Trong JSP, trình chứa sinh sẵn một bộ đối tượng ẩn ngay trong phương thức phục vụ của servlet được dịch ra từ trang, và "session" là tham chiếu kiểu HttpSession gắn với một người dùng cụ thể: trình chứa nhận ra người đó qua mã phiên nằm trong cookie hoặc được nối vào URL, nên dữ liệu đặt bằng setAttribute của nó sống qua nhiều lần tải trang thay vì mất khi một yêu cầu kết thúc, và đối tượng ẩn này chỉ vắng mặt nếu trang tự khai tắt phiên trong chỉ thị page. "request" là HttpServletRequest, phạm vi sống hết ngay khi phản hồi được gửi xong, nên không giữ được trạng thái giữa hai lần bấm chuột. "config" là ServletConfig, chỉ dùng để đọc tham số khởi tạo khai cho chính servlet sinh ra từ trang, không dính gì tới trạng thái người dùng. "context" không phải tên đối tượng ẩn nào của JSP; vùng dữ liệu toàn ứng dụng được truy cập qua đối tượng ẩn application kiểu ServletContext, mà dữ liệu ở đó dùng chung cho mọi người nên không thể thay phiên để tách trạng thái riêng từng người.
Mở trang câu hỏi này →