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.

500/11.885 câuCòn 11.385
ATo redirect the client to another web page
BTo forward the request to another resource
CTo handle HTTP POST requests
DTo handle form submissions
Lời giải
Đáp án đúng: "To forward the request to another resource". Cơ chế này chuyển quyền xử lý sang một tài nguyên khác ngay trong cùng một chu trình phục vụ: lấy đối tượng điều phối theo đường dẫn đích rồi gọi forward, trang đích nhận đúng cặp request và response đang có, nên địa chỉ trên trình duyệt không đổi và mọi dữ liệu gắn bằng setAttribute vẫn đọc được bên kia; đó chính là mối nối giữa servlet và JSP trong kiến trúc MVC, và giao diện này còn có include để nhúng kết quả của tài nguyên khác vào phản hồi đang soạn. "To redirect the client to another web page" là việc của sendRedirect: nó trả mã chuyển hướng để trình duyệt tự đi tới địa chỉ mới bằng một yêu cầu khác, không phải chuyển tiếp trong máy chủ. "To handle HTTP POST requests" là nhiệm vụ của doPost trong lớp servlet. "To handle form submissions" là việc servlet đọc dữ liệu biểu mẫu bằng getParameter rồi xử lý, không liên quan tới việc điều phối giữa các tài nguyên.
Mở trang câu hỏi này →
Đề bài
<html>
  <body>
    <form action="Record" >
      User:<input type="text" id="txtname1"  name="txtname2">
      <br>
        Address:<input type="text" id="txtadd1"  name="txtadd2">
        <br>
          <input type="submit" value="GotoZone">
          </form>
        </body>
      </html>

Which of the Servlet code takes input from an html form and displays it on the browser?

Apublic class RecordServlet extends HttpServlet { protected void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException { PrintWriter pw=res.getWriter(); res.setContentType("text/html"); String account=req.getParameter("txtname1"); String Addr=req.getParameter("txtadd1"); pw.println("Hello " + account + " from" + Addr); pw.close(); } }
Bpublic class RecordServlet extends HttpServlet { protected void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException { PrintWriter pw=res.getWriter(); res.setContentType("text/html"); String account=req.getParameter("txtname2"); String Addr=req.getParameter("txtadd2"); pw.println("Hello " + account + " from" + Addr); pw.close(); } }
Cpublic class RecordServlet extends HttpServlet { protected void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException { PrintWriter pw=res.getWriter(); res.setContentType("text/html"); String account=req.getParameter("txtname1"); String Addr=req.getParameter("txtadd1"); pw.println("Hello " + account + " from" + Addr); pw.close(); } }
Dpublic class RecordServlet extends HttpServlet { protected void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException { PrintWriter pw=res.getWriter(); res.setContentType("text/html"); String account=req.getParameter("txtname2"); String Addr=req.getParameter("txtadd2"); pw.println("Hello " + account + " from" + Addr); pw.close(); } }
Lời giải

Đáp án đúng: "public class RecordServlet extends HttpServlet

Lời giải
{
    protected void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
        {
                PrintWriter pw=res.getWriter();
                res.setContentType("text/html");
                String account=req.getParameter("txtname2");
                String Addr=req.getParameter("txtadd2");
                pw.println("Hello " + account + " from" + Addr);
                pw.close();

        }

}". Biểu mẫu khai thuộc tính action trỏ tới Record mà không ghi method, nên trình duyệt gửi theo mặc định là GET, vì vậy lớp servlet phải cài phương thức doGet; đồng thời tên tham số gửi đi là giá trị của thuộc tính name chứ không phải id, tức txtname2 và txtadd2. Lựa chọn dùng "doPost(HttpServletRequest req,HttpServletResponse res)" cùng "req.getParameter("txtname1")" sai cả hai chỗ: không cài doGet nên yêu cầu từ biểu mẫu bị báo không hỗ trợ phương thức, mà tên id cũng không bao giờ được gửi lên. Lựa chọn đọc đúng "req.getParameter("txtname2")" nhưng lại đặt mã trong "doPost(HttpServletRequest req,HttpServletResponse res)" thì vẫn không chạy với yêu cầu GET. Lựa chọn có đúng "doGet(HttpServletRequest req,HttpServletResponse res)" lại lấy "req.getParameter("txtadd1")" theo id, nên hai biến nhận về null và trang chỉ in ra chữ Hello kèm null.

Mở trang câu hỏi này →
Ainit(), destroy(), service()
Bservice(), init(), destroy()
Cinit(), service(), destroy()
Ddestroy(), init(), service()
Lời giải
Đáp án đúng: "init(), service(), destroy()". Vòng đời do container điều khiển theo đúng ba chặng: nạp lớp và tạo đúng một thực thể, gọi init một lần duy nhất để cấp cấu hình và làm việc chuẩn bị; sau đó mỗi yêu cầu đi vào service, nơi lớp cha HTTP đọc phương thức của yêu cầu rồi chuyển sang doGet hay doPost, và nhiều luồng có thể chạy đồng thời trên cùng thực thể ấy; cuối cùng destroy được gọi một lần khi ứng dụng bị gỡ hoặc máy chủ tắt. "init(), destroy(), service()" sai vì đặt việc huỷ trước việc phục vụ: sau destroy thì thực thể đã bị loại, không còn gì để chạy service nữa. "service(), init(), destroy()" sai vì không thể phục vụ yêu cầu trước khi init chạy xong, lúc đó servlet chưa có cấu hình và chưa sẵn sàng. "destroy(), init(), service()" sai ngay ở bước mở màn: destroy không bao giờ đứng đầu, nó chỉ xuất hiện ở cuối đời servlet.
Mở trang câu hỏi này →
AThey are treated differently in the Servlet API.
BQuery parameters are only supported in GET requests.
CBoth are accessed using the same parameter methods.
DPost variables must always have unique names.
Lời giải
Đáp án đúng: "Both are accessed using the same parameter methods.". Trong Servlet API, dữ liệu gửi kèm trên query string và dữ liệu gửi trong thân yêu cầu theo kiểu biểu mẫu mã hoá URL được container trộn vào cùng một tập tham số, nên lập trình viên đọc cả hai bằng cùng nhóm phương thức getParameter, getParameterValues và getParameterMap mà không cần biết chúng đến từ đâu. "They are treated differently in the Servlet API." sai chính vì điều đó: API không tách riêng hai nguồn, khác biệt chỉ nằm ở cách trình duyệt đóng gói lúc gửi. "Query parameters are only supported in GET requests." sai vì một yêu cầu POST vẫn có thể mang query string ngay trên địa chỉ khai trong thuộc tính action, khi đó servlet đọc được cả tham số trên URL lẫn trường của biểu mẫu. "Post variables must always have unique names." sai vì nhiều trường trùng tên là hợp lệ và rất phổ biến với hộp kiểm hay danh sách chọn nhiều giá trị; lúc đó getParameterValues trả về mảng, còn getParameter chỉ trả giá trị đầu tiên.
Mở trang câu hỏi này →
ACookies
BHttpSession
CURL Rewriting
DBoth A, B and C
Lời giải
Đáp án đúng: "Both A, B and C". Câu hỏi hỏi công nghệ nào giúp quản lý phiên trong Java web, và cả ba thứ được liệt kê đều là mảnh của cùng một cơ chế: máy chủ giữ dữ liệu phiên theo một mã phiên, còn mã phiên ấy phải được chuyển qua lại giữa hai bên, bằng cookie hoặc bằng cách nhúng vào đường dẫn. "Cookies" đúng là phương tiện mang mã phiên, nhưng nêu riêng nó thì thiếu: nó chỉ là chỗ chứa mã chứ không phải nơi lưu dữ liệu phiên, và khi trình duyệt chặn nó thì vẫn còn đường khác. "HttpSession" là API phía máy chủ giữ dữ liệu theo từng người dùng, song nó vẫn phải dựa vào mã phiên do client gửi lên mới biết lấy đúng phiên nào, nên một mình nó cũng chưa trả lời đủ. "URL Rewriting" là cách dự phòng khi không có cookie, làm bằng phương thức mã hoá URL để nối mã phiên vào đường dẫn, và bản thân nó không phải toàn bộ cách quản lý phiên.
Mở trang câu hỏi này →
A/src/main/java
B/WEB-INF/classes
C/META-INF
D/WEB-INF
Lời giải
Đáp án đúng: "/WEB-INF". Bộ mô tả triển khai phải nằm ngay trong thư mục này, cạnh hai thư mục classes và lib, vì đó đúng là chỗ container tìm đọc khi triển khai ứng dụng; thư mục này còn được bảo vệ đặc biệt, client không thể gõ địa chỉ để tải trực tiếp bất cứ tệp nào bên trong, nhờ vậy cấu hình và lớp đã biên dịch không bị lộ. "/src/main/java" là thư mục mã nguồn theo quy ước của công cụ xây dựng; nội dung trong đó được biên dịch rồi mới đóng gói, không phải vị trí tệp cấu hình lúc chạy. "/WEB-INF/classes" chỉ chứa các lớp đã biên dịch cùng tệp tài nguyên đi kèm của ứng dụng. "/META-INF" là nơi đặt tệp kê khai của gói và tệp context.xml khai tài nguyên cho Tomcat, không phải nơi container tìm bộ mô tả triển khai.
Mở trang câu hỏi này →
AHttpServlet
BJavaServlet
CWebServlet
DServletClass
Lời giải
Đáp án đúng: "HttpServlet". Khi viết servlet cho một máy chủ web Java, ta tạo lớp kế thừa lớp trừu tượng này rồi ghi đè doGet hoặc doPost: phương thức service có sẵn trong nó đọc phương thức HTTP của yêu cầu rồi gọi đúng phương thức xử lý tương ứng, đồng thời lo sẵn các việc phụ như trả lời yêu cầu chỉ lấy header. "JavaServlet" không có trong đặc tả Servlet, đây chỉ là một cái tên nghe giống thật. "WebServlet" là tên của annotation dùng để khai url-pattern ngay trên lớp thay cho khai báo trong web.xml, nó không phải lớp để kế thừa. "ServletClass" cũng không tồn tại; lớp trừu tượng tổng quát hơn, không phụ thuộc giao thức HTTP, mang tên GenericServlet.
Mở trang câu hỏi này →
Ajava.sql
Bjavax.jdbc
Corg.jdbc
Dcom.db.jdbc
Lời giải
Đáp án đúng: "java.sql". Toàn bộ lõi JDBC nằm trong gói này: lớp quản lý driver để mở kết nối, cùng các giao diện Connection, Statement, PreparedStatement, CallableStatement, ResultSet và lớp ngoại lệ SQLException; phần mở rộng phía máy chủ như DataSource và pool kết nối nằm ở gói javax.sql, nhưng câu hỏi nhắm vào gói cung cấp API JDBC thì đó chính là gói trong Java SE này. "javax.jdbc" không tồn tại; tiền tố javax chỉ đi với javax.sql cho phần mở rộng, không có gói nào mang tên như vậy. "org.jdbc" cũng không có trong thư viện chuẩn, tiền tố org thường thuộc các tổ chức bên thứ ba. "com.db.jdbc" là tên dựng theo kiểu gói riêng của một hãng; viết import như vậy thì trình biên dịch báo không tìm thấy ngay.
Mở trang câu hỏi này →
AHttpServlet
BServletConfig
CServletContext
DServlet
Lời giải
Đáp án đúng: "Servlet". Trình chứa chỉ làm việc với servlet qua đúng kiểu này: giao diện Servlet khai báo init, service, destroy cùng hai phương thức đọc cấu hình và thông tin, nên mọi lớp muốn được container nạp rồi gọi theo vòng đời đều phải hiện thực nó, dù trực tiếp hay gián tiếp qua lớp cha. "HttpServlet" không phải giao diện mà là lớp trừu tượng dành riêng cho giao thức HTTP; nó tiện vì đã cài sẵn service để phân phối sang doGet hay doPost, nhưng kế thừa nó là lựa chọn chứ không phải điều kiện bắt buộc. "ServletConfig" là giao diện mang tham số khởi tạo và tên của một servlet; lớp cha tổng quát có hiện thực nó, song đó không phải điều kiện để một lớp được coi là servlet. "ServletContext" là giao diện mô tả cả ứng dụng web, do container cung cấp cho servlet dùng để chia sẻ dữ liệu toàn ứng dụng, không phải thứ servlet đi hiện thực.
Mở trang câu hỏi này →
AIt is faster than RequestDispatcher.forward()
BIt keeps the original request and response objects
CIt changes the URL in the browser
DIt does not involve client-side communication
Lời giải
Đáp án đúng: "It changes the URL in the browser". Phương thức này trả cho trình duyệt một phản hồi chuyển hướng mang mã 302 cùng header Location, rồi chính trình duyệt phát yêu cầu thứ hai tới địa chỉ mới, vì vậy thanh địa chỉ đổi theo và đích đến thậm chí có thể nằm ở ứng dụng hay máy chủ khác. "It is faster than RequestDispatcher.forward()" sai vì nó thêm hẳn một vòng đi về qua mạng, trong khi forward được xử lý nội bộ ngay trong máy chủ nên nhanh hơn. "It keeps the original request and response objects" sai vì yêu cầu thứ hai đi kèm một cặp request và response hoàn toàn mới: mọi thứ đặt bằng setAttribute trước đó biến mất, chỉ còn dữ liệu nào được gắn trên URL hoặc lưu trong phiên. "It does not involve client-side communication" sai vì cơ chế này dựa hoàn toàn vào việc trình duyệt tự đi lại; thứ không cần phía client tham gia mới chính là forward của RequestDispatcher.
Mở trang câu hỏi này →
APOST
BGET
CDELETE
DPATCH
Lời giải
Đáp án đúng: "POST". Theo đặc tả HTTP, đây là phương thức mang dữ liệu trong thân yêu cầu để máy chủ tạo ra một tài nguyên mới, và nó không idempotent: gửi hai lần thì sinh hai bản ghi, nên biểu mẫu đăng ký hay thêm bản ghi đều khai method này và servlet xử lý trong doPost. "GET" là phương thức an toàn và idempotent, chỉ để đọc: tham số nằm lộ trên URL, bị lưu vào lịch sử trình duyệt và bị cache, lại giới hạn độ dài, nên không dùng để tạo dữ liệu. "DELETE" dùng để xoá tài nguyên đang tồn tại ở địa chỉ được trỏ tới, tức ngược hẳn với việc tạo. "PATCH" dùng để sửa một phần tài nguyên đã có, nên tiền đề của nó là tài nguyên tồn tại sẵn rồi, không phải tạo mới.
Mở trang câu hỏi này →
AIndicates that the requested resource is not available.
BIndicates that the request requires HTTP authentication.
CIndicates an error inside the HTTP server which prevented it from fulfilling the request.
DIndicates that the HTTP server is temporarily overloaded, and unable to handle the request.
Lời giải
Đáp án đúng: "Indicates that the request requires HTTP authentication.". Mã 401 thuộc nhóm 4xx, tức lỗi phía người gọi: máy chủ hiểu yêu cầu nhưng tài nguyên đòi xác thực, nên phản hồi kèm header yêu cầu khai danh tính để trình duyệt hỏi tên và mật khẩu; trong Java web thường gặp mã này khi servlet gọi sendError với hằng số báo chưa xác thực, hoặc khi một ràng buộc bảo mật khai trong web.xml chặn tài nguyên mà người dùng chưa đăng nhập. "Indicates that the requested resource is not available." mô tả mã 404, nghĩa là đường dẫn yêu cầu không tồn tại trên máy chủ, khác hẳn chuyện thiếu danh tính. "Indicates an error inside the HTTP server which prevented it from fulfilling the request." mô tả mã 500, lỗi nội tại của máy chủ, thường do servlet ném ngoại lệ không bắt được nên không soạn nổi phản hồi. "Indicates that the HTTP server is temporarily overloaded, and unable to handle the request." mô tả mã 503, máy chủ quá tải hoặc đang bảo trì nên tạm thời không nhận yêu cầu, và lỗi này không liên quan tới quyền truy cập.
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 →
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 →
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 →
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 →
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 →
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 →
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 →
AThe model processes the request
BThe controller receives the request and processes it
CThe view updates the data
DThe database returns the result
Lời giải
Đáp án đúng: "The controller receives the request and processes it". Trong MVC hướng web, mọi lượt gọi đi vào bộ điều khiển trước: servlet đã ghép với mẫu đường dẫn nhận request, đọc tham số, kiểm tính hợp lệ, rồi quyết định nghiệp vụ nào cần gọi. Chỉ sau đó tầng mô hình mới làm việc, và cuối cùng bộ điều khiển chọn trang để hiển thị kết quả. Lựa chọn "The model processes the request" đảo thứ tự: tầng mô hình không mở cửa ra ngoài, nó chỉ được gọi khi bộ điều khiển chuyển dữ liệu đã lọc vào. Lựa chọn "The view updates the data" sai cả thứ tự lẫn vai, vì phần hiển thị chỉ đọc dữ liệu đã dọn sẵn để vẽ ra chứ không sửa dữ liệu. Lựa chọn "The database returns the result" là mắt gần cuối của chuỗi truy xuất, nằm sau khi tầng mô hình đã gửi câu lệnh xuống, nên không thể là bước đầu tiên.
Mở trang câu hỏi này →