Ngân hàng câu hỏi của chương

Câu hỏi: HSF302 - Phần 5: Spring MVC và REST controller

30 câu trắc nghiệm kèm lời giải của môn HSF302 - Làm việc với Spring Framework, xếp theo thứ tự nhập vào ngân hàng. Trang 2/2 — câu 21–30.

Danh sách câu hỏi

30/30 câuHết danh sách
AMaps POST requests
BMaps GET requests to /list
CDenotes a view name
DDisables route
Lời giải
Đáp án đúng: "Maps GET requests to /list". @GetMapping là dạng rút gọn của @RequestMapping(method = RequestMethod.GET); đặt @GetMapping("/list") lên một phương thức trong controller nghĩa là DispatcherServlet sẽ chuyển mọi yêu cầu HTTP GET tới đường dẫn /list (cộng với tiền tố @RequestMapping ở cấp lớp nếu có) cho phương thức đó xử lý, thường để hiển thị danh sách. "Maps POST requests" là vai trò của @PostMapping, dùng khi gửi form hay tạo mới dữ liệu. "Denotes a view name" sai vì chuỗi /list là đường dẫn URL; tên view là giá trị phương thức trả về, chẳng hạn chuỗi product-list để ViewResolver tìm template. "Disables route" sai vì annotation này đăng ký thêm một route chứ không tắt route nào; Spring không có annotation mapping dùng để vô hiệu hoá đường dẫn.
Mở trang câu hỏi này →
A@ExceptionHandler methods handle exceptions across all controllers by default; @ControllerAdvice limits them to one controller
B@ExceptionHandler only works with REST controllers; @ControllerAdvice only with MVC controllers
C@ExceptionHandler in a controller handles exceptions for that controller; @ControllerAdvice can apply such handlers globally
DBoth are deprecated in favor of filters
Lời giải

Đáp án đúng: "@ExceptionHandler in a controller handles exceptions for that controller; @ControllerAdvice can apply such handlers globally". Phương thức @ExceptionHandler khai báo trong một controller chỉ bắt ngoại lệ ném ra từ các handler của chính controller đó; muốn dùng chung cho nhiều controller, ta đặt các phương thức @ExceptionHandler vào một lớp @ControllerAdvice hoặc @RestControllerAdvice, và mặc định lớp này áp cho mọi controller, có thể thu hẹp bằng basePackages hay assignableTypes. Phát biểu "handle exceptions across all controllers by default; @ControllerAdvice limits them to one controller" nói ngược hoàn toàn vai trò của hai annotation. Phát biểu "only works with REST controllers; @ControllerAdvice only with MVC controllers" sai vì cả hai dùng được cho controller trả view lẫn controller REST. "Both are deprecated in favor of filters" sai vì cả hai vẫn là cơ chế chính thức trong Spring hiện nay; filter chạy trước DispatcherServlet nên không thay được việc xử lý ngoại lệ ở tầng handler.

Mở trang câu hỏi này →
ATo manage database connections.
BTo handle HTTP requests and return a model and view.
CTo define user interfaces.
DTo configure application security.
Lời giải
Đáp án đúng: "To handle HTTP requests and return a model and view.". Trong Spring MVC, DispatcherServlet chuyển yêu cầu tới phương thức handler của controller (lớp @Controller với @GetMapping, @PostMapping); controller đọc tham số, gọi service, đặt dữ liệu vào Model rồi trả về tên view hoặc đối tượng ModelAndView để ViewResolver phân giải thành trang, ví dụ trang Thymeleaf. "To manage database connections." sai vì kết nối do DataSource và connection pool lo, còn truy cập dữ liệu nằm ở repository. "To define user interfaces." sai vì giao diện do view template định nghĩa, controller chỉ chọn view và cấp dữ liệu. "To configure application security." là việc của Spring Security qua SecurityFilterChain, chạy ở tầng filter trước khi yêu cầu tới controller.
Mở trang câu hỏi này →
AObserver
BModel-View-Controller
CDecorator
DCommand
Lời giải
Đáp án đúng: "Model-View-Controller". Spring MVC được xây dựng theo mẫu MVC: Controller, các lớp gắn @Controller, nhận yêu cầu và gọi tầng nghiệp vụ; Model chứa dữ liệu cần hiển thị; View như template Thymeleaf hay JSP trình bày dữ liệu đó; tất cả được điều phối qua DispatcherServlet theo mẫu Front Controller. "Observer" là mẫu cho phép nhiều đối tượng đăng ký nhận thông báo khi một đối tượng thay đổi, Spring có dùng ý tưởng này cho ApplicationEvent nhưng Spring MVC không dựa trên nó. "Decorator" là mẫu bọc đối tượng để thêm hành vi, không phải nền tảng của framework web này. "Command" là mẫu đóng gói một yêu cầu thành đối tượng, cũng không phải kiến trúc tổng thể của Spring MVC.
Mở trang câu hỏi này →
AAs a listener.
BAs a filter.
CAs a servlet.
DAs a resource.
Lời giải
Đáp án đúng: "As a servlet.". DispatcherServlet bản chất là một lớp con của HttpServlet, nên trong web.xml nó được khai báo bằng thẻ servlet với servlet-name và servlet-class là org.springframework.web.servlet.DispatcherServlet, thường kèm init-param contextConfigLocation trỏ tới tệp cấu hình Spring và load-on-startup, rồi gắn đường dẫn bằng servlet-mapping, ví dụ url-pattern là dấu gạch chéo để nhận mọi yêu cầu. "As a listener." là cách khai báo ContextLoaderListener, thành phần khởi tạo root application context khi ứng dụng web khởi động, không phải DispatcherServlet. "As a filter." dùng cho các Filter như CharacterEncodingFilter hay DelegatingFilterProxy của Spring Security, chạy trước servlet. "As a resource." không phải cách đăng ký thành phần xử lý yêu cầu; thẻ resource-ref trong web.xml chỉ khai báo tham chiếu tới tài nguyên JNDI như DataSource.
Mở trang câu hỏi này →
AViewResolver
BHandlerMapping
CController
DModel
Lời giải
Đáp án đúng: "HandlerMapping". Luồng xử lý của DispatcherServlet: nhận yêu cầu, hỏi các HandlerMapping, chẳng hạn RequestMappingHandlerMapping đọc @RequestMapping, @GetMapping, để tìm handler (phương thức controller) cùng các interceptor phù hợp, rồi dùng HandlerAdapter gọi handler, nhận model và tên view, cuối cùng nhờ ViewResolver phân giải view. "ViewResolver" xuất hiện ở cuối luồng, đổi tên view logic thành view thật, không chọn controller. "Controller" là chính đối tượng cần được tìm ra, nó không tự quyết định yêu cầu nào thuộc về mình. "Model" chỉ là vùng chứa dữ liệu truyền từ controller sang view, không tham gia việc định tuyến yêu cầu.
Mở trang câu hỏi này →
AUnrelated to Spring MVC and cannot bind to model attributes
BBinding-aware JSP tags that integrate with Spring MVC to bind form fields to model properties
CA replacement for HTML input elements and attributes
DOnly supports GET forms and not POST
Lời giải
Đáp án đúng: "Binding-aware JSP tags that integrate with Spring MVC to bind form fields to model properties". Thư viện thẻ form của Spring cung cấp các thẻ JSP như form:form, form:input, form:select, form:errors; thẻ form:form gắn với một đối tượng trong model qua modelAttribute, mỗi form:input với thuộc tính path đọc giá trị thuộc tính tương ứng để điền sẵn và đặt tên trường đúng, để khi gửi lên data binding của Spring MVC gán ngược vào đối tượng, còn form:errors hiển thị lỗi kiểm hợp lệ. "Unrelated to Spring MVC and cannot bind to model attributes" sai vì gắn với model attribute chính là lý do thư viện tồn tại. "A replacement for HTML input elements and attributes" sai vì các thẻ này cuối cùng vẫn sinh ra thẻ HTML input, select chuẩn và cho truyền thuộc tính HTML qua; chúng bổ sung khả năng binding chứ không thay thế HTML. "Only supports GET forms and not POST" sai vì form:form mặc định dùng POST và còn hỗ trợ PUT, DELETE qua trường ẩn kết hợp HiddenHttpMethodFilter.
Mở trang câu hỏi này →
ATo define user interfaces.
BTo represent domain objects and data.
CTo manage HTTP requests.
DTo handle application deployment.
Lời giải
Đáp án đúng: "To represent domain objects and data.". Dù hiểu Model theo nghĩa thành phần M trong mẫu MVC, tức các đối tượng miền như Product, Order mang dữ liệu và quy tắc nghiệp vụ, hay theo nghĩa interface Model của Spring MVC, nơi controller gọi model.addAttribute để chuyển dữ liệu sang view, thì Model đều là nơi chứa và mang dữ liệu. "To define user interfaces." sai vì giao diện là phần View, như template Thymeleaf, chỉ đọc dữ liệu từ model để hiển thị. "To manage HTTP requests." sai vì nhận và xử lý yêu cầu HTTP là việc của DispatcherServlet và Controller. "To handle application deployment." sai vì triển khai ứng dụng là việc đóng gói và cấu hình máy chủ, không thuộc thành phần nào của MVC.
Mở trang câu hỏi này →
AHandling UI rendering on the client
BActing as the front controller to dispatch requests to appropriate handlers
CEncrypting HTTP requests
DManaging database transactions
Lời giải
Đáp án đúng: "Acting as the front controller to dispatch requests to appropriate handlers". DispatcherServlet là front controller (bộ điều khiển trung tâm) của Spring MVC: mọi yêu cầu HTTP đi vào một điểm duy nhất này, nó hỏi HandlerMapping để tìm phương thức controller khớp đường dẫn và phương thức HTTP, gọi qua HandlerAdapter, nhận về tên view và model rồi nhờ ViewResolver render, hoặc ghi thẳng dữ liệu ra phản hồi với @ResponseBody, đồng thời xử lý exception qua HandlerExceptionResolver. "Handling UI rendering on the client" sai vì DispatcherServlet chạy trên máy chủ, còn render phía trình duyệt là việc của JavaScript; ngay cả render phía máy chủ nó cũng uỷ cho View. "Encrypting HTTP requests" là việc của TLS ở tầng kết nối HTTPS, do máy chủ web như Tomcat cấu hình. "Managing database transactions" thuộc @Transactional và transaction manager ở tầng service.
Mở trang câu hỏi này →
ADispatcherServlet
BEntityManager
CJdbcTemplate
DApplicationContext
Lời giải
Đáp án đúng: "DispatcherServlet". Trong Spring Web MVC, DispatcherServlet là front controller (bộ điều khiển trung tâm) nhận mọi yêu cầu HTTP, hỏi HandlerMapping để tìm controller phù hợp, nhờ HandlerAdapter gọi phương thức, rồi dùng ViewResolver hoặc HttpMessageConverter để tạo phản hồi; Spring Boot tự đăng ký servlet này cho đường dẫn gốc. "EntityManager" là giao diện của JPA để thao tác thực thể với cơ sở dữ liệu, thuộc tầng dữ liệu chứ không nhận yêu cầu HTTP. "JdbcTemplate" là lớp tiện ích chạy câu lệnh SQL qua JDBC. "ApplicationContext" là IoC container chứa và quản lý mọi bean, kể cả DispatcherServlet, nhưng bản thân nó không xử lý yêu cầu HTTP.
Mở trang câu hỏi này →