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.

640/11.896 câuCòn 11.256
621Consider the following code:4 lựa chọncó code
Đề bài
protected void doPost(HttpServletRequest req,
                      HttpServletResponse res)
               throws ServletException, IOException {
         String user = req.getParameter("username");
         res.getWriter().println("User: " + user);
}

Which of the following statements is the most incorrect?

AThe code handles POST requests.
BThe code may return "User: null" if the username parameter is not provided.
CgetParameter("username") retrieves the value from the URL query string.
DgetWriter().println() is used to send a response back to the client.
Lời giải
Đáp án đúng: "getParameter("username") retrieves the value from the URL query string.". Hàm đọc tham số không phân biệt nguồn: nó gộp tham số trong chuỗi truy vấn của địa chỉ với tham số nằm trong thân yêu cầu đã mã hoá theo dạng biểu mẫu; đoạn mã ở đây phục vụ lượt gửi dữ liệu lên, nơi dữ liệu biểu mẫu nằm trong thân, nên khẳng định giá trị được lấy từ chuỗi truy vấn là chỗ sai nhất. Nhận định "The code handles POST requests." lại đúng, vì phương thức được viết chính là phương thức phục vụ lượt gửi dữ liệu. Nhận định "The code may return "User: null" if the username parameter is not provided." cũng đúng: không có tham số thì hàm trả về giá trị rỗng và phép nối chuỗi in ra chữ null. Nhận định "getWriter().println() is used to send a response back to the client." đúng nữa, vì bộ ghi lấy từ phản hồi ghi thẳng vào thân phản hồi trả về cho máy khách.
Mở trang câu hỏi này →
ARedirects all errors to error.jsp
BHandles errors by including error.jsp
CDeclares a default error page for the entire application
DHas no effect in JSP
Lời giải
Đáp án đúng: "Redirects all errors to error.jsp". Chỉ thị này khai cho riêng trang chứa nó một trang nhận lỗi: khi trang sinh ra ngoại lệ không được bắt, container dừng việc dựng phản hồi và đưa lượt yêu cầu sang trang đã khai, nơi thường bật thuộc tính tự nhận là trang lỗi để đọc được vật thể ngoại lệ, nên nói nó dồn mọi lỗi của trang sang trang kia là mô tả sát nhất. Mô tả "Handles errors by including error.jsp" nói sai cơ chế: chèn thì nội dung trang lỗi được ghép vào phản hồi đang dở, còn ở đây trang lỗi thay hẳn kết quả. Mô tả "Declares a default error page for the entire application" nhầm phạm vi: chỉ thị page chỉ có hiệu lực trong một trang, muốn áp cho toàn ứng dụng thì phải khai trang lỗi trong mô tả triển khai. Mô tả "Has no effect in JSP" sai hẳn vì đây là một thuộc tính chuẩn của chỉ thị page.
Mở trang câu hỏi này →
A@WebServlet
B@ServletMapping
C@RequestMapping
D@ServletConfig
Lời giải
Đáp án đúng: "@WebServlet". Từ bản đặc tả có hỗ trợ chú giải, đặt chú giải này trên lớp servlet kèm mẫu đường dẫn là đủ để container quét lúc khởi động rồi tự đăng ký ánh xạ, nên không cần khai cặp phần tử khai báo servlet và phần tử ánh xạ trong mô tả triển khai nữa. Chú giải "@ServletMapping" không tồn tại trong đặc tả; phần ánh xạ nằm luôn trong thuộc tính giá trị hoặc thuộc tính mẫu đường dẫn của chú giải đúng. Chú giải "@RequestMapping" là của khung Spring MVC, dùng để nối phương thức trong lớp điều khiển với đường dẫn, không phải cơ chế của đặc tả servlet. Còn "@ServletConfig" chỉ là tên nhái theo giao diện cấu hình servlet vốn dùng để đọc tham số khởi tạo; giao diện đó không phải chú giải và không khai được ánh xạ nào.
Mở trang câu hỏi này →
Ainit()
Bservice()
Cdestroy()
DdoGet()
EdoPost()
Lời giải
Đáp án đúng: "service()". Đây là điểm vào duy nhất mà container gọi cho mỗi lượt yêu cầu tới servlet; nó chạy lại trong từng lượt rồi mới đọc phương thức HTTP để phân nhánh, nên số lần chạy của nó bằng tổng số lượt yêu cầu và luôn lớn hơn hoặc bằng mọi phương thức khác. Phương thức "init()" chỉ chạy đúng một lần trong cả vòng đời, lúc container nạp và khởi tạo servlet. Phương thức "destroy()" cũng chỉ một lần, khi servlet bị tháo khỏi bộ nhớ. Phương thức "doGet()" chạy nhiều lần nhưng chỉ cho những lượt yêu cầu dùng phương thức đọc, nên luôn ít hơn tổng số lượt. Phương thức "doPost()" cũng vậy, chỉ nhận phần lượt gửi dữ liệu lên, mà phần này trong ứng dụng thường còn nhỏ hơn phần đọc.
Mở trang câu hỏi này →
ATo define the structure of a web page.
BTo handle HTTP requests and responses.
CTo specify the default error page for the entire web application.
DTo map a specific HTTP error code to a designated error page.
Lời giải
Đáp án đúng: "To map a specific HTTP error code to a designated error page.". Trong mô tả triển khai, một khai báo trang lỗi nhận diện tình huống theo một trong hai lối: theo mã trạng thái hoặc theo kiểu ngoại lệ; phần tử được hỏi chính là lối thứ nhất, nó ghi một mã cụ thể rồi gắn mã đó với đường dẫn trang mà container sẽ chuyển tới khi phản hồi mang mã ấy. Mô tả "To define the structure of a web page." thuộc việc của HTML và trang hiển thị, không phải của cấu hình triển khai. Mô tả "To handle HTTP requests and responses." là việc của servlet; cấu hình chỉ nói cho container biết phải làm gì khi có lỗi, bản thân nó không xử lý lượt gọi nào. Mô tả "To specify the default error page for the entire web application." lại bỏ mất chính vai của mã lỗi: khai bao trùm cho cả ứng dụng thì phải nhận diện theo kiểu ngoại lệ chung, còn khai theo mã thì chỉ áp cho đúng mã đã ghi.
Mở trang câu hỏi này →
A/WEB-INF/lib
B/WEB-INF/classes
C/META-INF
DRoot directory
Lời giải
Đáp án đúng: "/WEB-INF/lib". Container tự đưa mọi tệp jar nằm trong thư mục này vào đường nạp lớp của ứng dụng khi triển khai, nên đây là chỗ đặt thư viện ngoài như trình điều khiển JDBC hay thư viện thẻ, và vì nằm dưới WEB-INF nên trình duyệt không tải về được. Thư mục "/WEB-INF/classes" cũng thuộc đường nạp lớp nhưng dành cho lớp đã biên dịch của chính ứng dụng, xếp theo cây gói, không phải cho gói jar. Thư mục "/META-INF" giữ siêu dữ liệu của gói như tệp kê khai hay cấu hình ngữ cảnh riêng của máy chủ, và không được nạp vào đường nạp lớp. Còn "Root directory" là gốc nội dung web, nơi đặt trang và tài nguyên tĩnh phục vụ trực tiếp cho trình duyệt; để jar ở đó thì vừa không được nạp vừa có nguy cơ bị tải xuống.
Mở trang câu hỏi này →
AdoGet
BdoPost
CdoFilter
Dservice
Einit
Lời giải
Đáp án đúng: "doFilter". Mọi bộ lọc đều phải hiện thực phương thức này vì đó là chỗ container trao cặp yêu cầu, phản hồi cùng tham chiếu chuỗi bộ lọc; cho chuỗi đi tiếp thì lượt yêu cầu đi sâu vào bộ lọc sau rồi tới servlet, còn không gọi thì bộ lọc chặn lại ngay. Phương thức "doGet" nằm trong servlet HTTP và chỉ chạy cho lượt yêu cầu dùng phương thức đọc, nó không có trong giao diện bộ lọc. Phương thức "doPost" cũng của servlet HTTP, dành riêng cho lượt gửi dữ liệu lên. Phương thức "service" là điểm vào của servlet, nơi phân nhánh theo phương thức HTTP, đứng sau toàn bộ chuỗi bộ lọc. Phương thức "init" có trong vòng đời bộ lọc nhưng mang thân mặc định nên không buộc phải viết lại, và nó chỉ chạy một lần lúc khởi tạo chứ không xử lý yêu cầu.
Mở trang câu hỏi này →
A<c:import url="header.jsp"/>
B<c:include file="header.jsp"/>
C<c:forward page="header.jsp"/>
D<c:redirect url="header.jsp"/>
Lời giải
Đáp án đúng: "<c:import url="header.jsp"/>". Thẻ này nạp nội dung của một tài nguyên theo địa chỉ rồi ghép vào trang đang dựng; vì làm việc theo địa chỉ nên nó đọc được cả tài nguyên trong ứng dụng và tài nguyên ngoài, lại có thể hứng kết quả vào một biến thay vì in ra ngay. Cách viết "<c:include file="header.jsp"/>" không tồn tại trong thư viện lõi: việc chèn theo lối đó là hành động chuẩn của JSP và dùng tên thuộc tính khác. Cách viết "<c:forward page="header.jsp"/>" cũng không có trong thư viện lõi; chuyển tiếp là hành động chuẩn của JSP và nó trao hẳn quyền dựng phản hồi cho trang đích. Cách viết "<c:redirect url="header.jsp"/>" có thật nhưng gửi mã chuyển hướng về trình duyệt để nó gọi trang khác, tức thay cả trang chứ không chèn nội dung vào trang hiện tại.
Mở trang câu hỏi này →
A200
B404
C500
D201
Lời giải
Đáp án đúng: "200". Mã này nghĩa là máy chủ đã nhận, hiểu và xử lý xong lượt yêu cầu, thân phản hồi chứa nội dung được yêu cầu; với servlet thì đây là mã mặc định khi mã lệnh không tự đặt mã trạng thái khác và không ném ngoại lệ ra ngoài. Mã "404" nói máy chủ chạy bình thường nhưng không có tài nguyên ứng với đường dẫn, thường do sai ánh xạ servlet hoặc sai tên trang. Mã "500" báo lỗi phát sinh phía máy chủ, trong ứng dụng Java web thường là một ngoại lệ không được bắt thoát ra khỏi servlet hay trang JSP. Mã "201" cũng thuộc nhóm thành công nhưng mang nghĩa đã tạo mới một tài nguyên, nên nó gắn với lượt gửi dữ liệu lên chứ không phải lượt đọc bằng phương thức GET.
Mở trang câu hỏi này →
AdoFilter
Bservice
Cexecute
DinitFilter
Lời giải
Đáp án đúng: "doFilter". Giao diện bộ lọc đặt toàn bộ phần việc chặn tại phương thức này: nó nhận cặp yêu cầu, phản hồi và tham chiếu chuỗi bộ lọc, làm việc trước khi cho chuỗi đi tiếp, rồi còn có thể làm thêm việc sau khi lượt gọi quay về; không cho chuỗi đi tiếp thì lượt yêu cầu dừng ngay tại đó. Phương thức "service" thuộc servlet, là nơi container đẩy yêu cầu vào sau khi mọi bộ lọc đã cho qua, nên không nằm trong giao diện bộ lọc. Phương thức "execute" không có trong giao diện này, đó là tên quen thuộc ở các khung khác chứ không phải phần của đặc tả servlet. Phương thức "initFilter" là tên sai: vòng đời bộ lọc dùng hàm khởi tạo nhận cấu hình và hàm dọn khi tháo, mà hai hàm đó lại có thân mặc định nên không buộc phải viết.
Mở trang câu hỏi này →
A<filter> and <filter-mapping>
B<filter-definition> and <filter-mapping>
C<filter> and <application-filter>
D<servlet-filter> and <filter-mapping>
Lời giải

Đáp án đúng: "<filter> and <filter-mapping> ". Khai một bộ lọc cần hai phần: phần tử đầu đặt tên bộ lọc rồi chỉ ra lớp hiện thực cùng tham số khởi tạo, phần tử sau nối tên đó với mẫu đường dẫn hoặc tên servlet mà bộ lọc phải chặn, và thứ tự các phần tử nối chính là thứ tự chuỗi bộ lọc chạy. Cặp "<filter-definition> and <filter-mapping> " dùng một tên phần tử không có trong lược đồ của mô tả triển khai, nên máy chủ báo lỗi ngay khi đọc tệp. Cặp "<filter> and <application-filter> " đúng nửa đầu nhưng nửa sau là tên tự đặt, không tồn tại, nên bộ lọc được khai mà chẳng gắn vào đường dẫn nào. Cặp "<servlet-filter> and <filter-mapping> " cũng vậy: phần tử khai báo bộ lọc không mang tiền tố servlet, lược đồ không nhận tên này.

Mở trang câu hỏi này →
ATo make the page load faster; set in the doGet() method
BTo ensure compatibility with HTTP 1.1; set in web.xml only
CTo correctly display special characters and support localization; commonly set in the JSP page directive with contentType
DTo enable white box testing of JSP pages; set in the init() method
Lời giải
Đáp án đúng: "To correctly display special characters and support localization; commonly set in the JSP page directive with contentType". Bảng mã quyết định cách chuỗi byte được diễn giải thành ký tự, nên khai UTF-8 là cách để chữ có dấu và các hệ chữ khác hiện đúng; chỗ khai quen dùng là chỉ thị page của trang, nơi vừa đặt kiểu nội dung trả về kèm bảng mã, vừa đặt bảng mã dùng lúc dịch trang. Lý do "To make the page load faster; set in the doGet() method" sai cả hai nửa: bảng mã không làm trang tải nhanh hơn, và phương thức phục vụ của servlet không phải nơi khai bảng mã cho trang JSP. Lý do "To ensure compatibility with HTTP 1.1; set in web.xml only" cũng không ổn vì giao thức không đòi một bảng mã cụ thể, còn mô tả triển khai chỉ là một nơi khai thêm, không phải nơi duy nhất. Lý do "To enable white box testing of JSP pages; set in the init() method" lạc hẳn đề: kiểm thử hộp trắng chẳng liên quan tới bảng mã ký tự.
Mở trang câu hỏi này →
ATo specify the language of the formatted number
BTo define the number format pattern
CTo set the currency symbol
DTo set the time zone for the formatting
Lời giải
Đáp án đúng: "To define the number format pattern". Thuộc tính này nhận một mẫu định dạng số, chẳng hạn số chữ số thập phân, dấu phân nhóm hàng nghìn hay dạng phần trăm, và thẻ sẽ dựng bộ định dạng theo đúng mẫu đó thay cho mẫu mặc định của miền địa phương. Việc "To specify the language of the formatted number" do miền địa phương quyết định, khai bằng thẻ đặt miền hoặc thuộc tính riêng, chứ không phải bằng mẫu. Việc "To set the currency symbol" có thuộc tính riêng dành cho ký hiệu tiền tệ và chỉ có nghĩa khi kiểu định dạng là tiền tệ, nên không trùng vai với mẫu. Việc "To set the time zone for the formatting" thuộc nhóm thẻ định dạng ngày giờ, vì một con số thuần không mang thông tin múi giờ nào.
Mở trang câu hỏi này →
Aauto-commit on
Bauto-commit off
Cmanual-commit
DNo transaction by default
Lời giải
Đáp án đúng: "auto-commit on". Theo đặc tả JDBC, kết nối mới mở ở chế độ tự chốt: mỗi câu lệnh chạy xong là được chốt ngay thành một giao dịch riêng, nên muốn gộp nhiều câu lệnh thành một đơn vị không chia cắt thì phải tự tắt chế độ đó rồi gọi chốt hoặc hoàn tác bằng tay. Chế độ "auto-commit off" chỉ có khi mã gọi hàm đặt chế độ tự chốt với giá trị sai, tức là trạng thái do người lập trình chủ động đặt, không phải trạng thái ban đầu. Tên gọi "manual-commit" chính là cách nói khác của việc tự chốt bằng tay sau khi đã tắt chế độ mặc định, nên cũng không phải điều kết nối nhận được lúc mới mở. Nhận định "No transaction by default" không đúng vì không có câu lệnh nào chạy ngoài giao dịch: ở chế độ mặc định mỗi câu lệnh vẫn là một giao dịch, chỉ rất ngắn và được chốt tự động.
Mở trang câu hỏi này →
ARemove each attribute from the session manually
BCall session.invalidate() and then redirect to login
CSet session timeout to zero and reload the page
DDelete the session cookie only from the client side
Lời giải
Đáp án đúng: "Call session.invalidate() and then redirect to login". Huỷ phiên làm container xoá đối tượng phiên phía máy chủ và vô hiệu mã định danh, nên mã cũ còn trong trình duyệt cũng không mở lại được dữ liệu; chuyển hướng sau đó buộc trình duyệt tạo lượt yêu cầu mới tới trang đăng nhập. Cách "Remove each attribute from the session manually" chỉ dọn từng thuộc tính, phiên vẫn sống và vẫn nhận tiếp dữ liệu mới với đúng mã định danh đó. Cách "Set session timeout to zero and reload the page" không dọn phiên ngay tại lúc đăng xuất mà phụ thuộc cách container hiểu giá trị không dương. Cách "Delete the session cookie only from the client side" chỉ xoá dấu vết ở máy khách, còn phiên trên máy chủ vẫn hiệu lực cho ai giữ được mã định danh.
Mở trang câu hỏi này →
A<jsp:include>
B<jsp:plugin>
C<jsp:useBean>
D<jsp:setProperty>
Lời giải
Đáp án đúng: "<jsp:include>". Hành động chuẩn này được dịch thành lời gọi bộ điều phối ngay lúc trang đang phục vụ yêu cầu, nên tài nguyên đích được chạy và kết quả của nó mới được ghép vào phản hồi; nhờ vậy nội dung chèn luôn mới theo từng lượt gọi, khác với chỉ thị ghép mã nguồn một lần lúc dịch trang. Thẻ "<jsp:plugin>" sinh ra đoạn mã nhúng để trình duyệt nạp applet hoặc bean phía máy khách, không dùng để chèn tài nguyên của máy chủ. Thẻ "<jsp:useBean>" chỉ định vị hoặc khởi tạo một đối tượng Java trong phạm vi đã chọn, không sinh nội dung chèn. Thẻ "<jsp:setProperty>" gán giá trị cho thuộc tính của bean vừa khai báo, cũng không liên quan tới việc nạp thêm tài nguyên.
Mở trang câu hỏi này →
Aname
Bclass
Cbody-content
Ddescription
Lời giải
Đáp án đúng: "name". Trong tệp mô tả thư viện thẻ, phần tử khai báo một thẻ dùng thuộc tính con này để đặt tên mà trang JSP sẽ gọi sau tiền tố, nên chính nó quyết định cú pháp người viết trang nhìn thấy. Thuộc tính "class" không phải phần tử dùng ở đây: lớp xử lý thẻ được chỉ bằng phần tử tag-class, và nó trả lời câu hỏi mã nào chạy, không phải thẻ tên gì. Thuộc tính "body-content" khai thân thẻ thuộc loại nào, chẳng hạn rỗng, chỉ chứa nội dung không có mã, hay do chính thẻ tự diễn giải, nên nó mô tả hình dạng thân chứ không đặt tên. Thuộc tính "description" chỉ là phần văn bản giải thích cho người đọc và công cụ sinh tài liệu, không ảnh hưởng tới cách gọi thẻ.
Mở trang câu hỏi này →
ATo play a game of catch.
BTo store data in a session.
CTo deal with errors that happen when the JSP page is running.
DTo capture user input.
Lời giải
Đáp án đúng: "To deal with errors that happen when the JSP page is running.". Thẻ này bọc một đoạn trang, bắt ngoại lệ phát sinh khi đoạn đó thực thi và đặt vật thể ngoại lệ vào biến nêu ở thuộc tính lưu, nhờ vậy trang không ném lỗi ra ngoài mà tự xử lý tiếp, thường kèm một thẻ kiểm xem biến đó có giá trị hay không. Diễn giải "To play a game of catch." chỉ là lối chơi chữ theo nghĩa thông thường của từ, không có liên hệ nào với thư viện thẻ. Diễn giải "To store data in a session." là việc của thẻ gán giá trị với phạm vi phiên, không phải của thẻ bắt lỗi. Diễn giải "To capture user input." thuộc về biểu mẫu HTML cùng các tham số đọc qua EL, cũng nằm ngoài vai trò xử lý ngoại lệ.
Mở trang câu hỏi này →
A<c:if>
B<c:choose>
C<c:when>
D<c:otherwise>
Lời giải
Đáp án đúng: "<c:if>". Thẻ này nhận một thuộc tính kiểm tra là biểu thức luận lý, EL tính ra đúng hoặc sai, rồi thân thẻ chỉ được dựng ra kết quả khi giá trị là đúng; đó là dạng rẽ nhánh một nhánh, không có phần ngược lại. Thẻ "<c:choose>" tự nó không mang biểu thức nào, chỉ làm vỏ chứa các nhánh con, nên không trực tiếp quyết định hiển thị. Thẻ "<c:when>" có mang biểu thức nhưng chỉ hợp lệ khi nằm trong thẻ vỏ rẽ nhiều nhánh, và cả nhóm chạy theo lối chọn nhánh đầu tiên khớp chứ không phải kiểm một điều kiện độc lập. Thẻ "<c:otherwise>" là nhánh dự phòng khi mọi nhánh trước đều không khớp, bản thân nó không nhận biểu thức luận lý nào.
Mở trang câu hỏi này →
A/WEB-INF/classes/
B/WEB-INF/lib/
C/Web-Pages/
D/META-INF/
Lời giải
Đáp án đúng: "/Web-Pages/". Thư mục này là gốc nội dung web của ứng dụng: mọi thứ đặt ở đây đều được máy chủ phục vụ trực tiếp theo đường dẫn tương ứng, nên trang JSP, trang HTML, tệp định kiểu và tệp script dùng cho giao diện đều nằm trong đó. Thư mục "/WEB-INF/classes/" chứa lớp đã biên dịch của ứng dụng và nằm trong đường nạp lớp, lại bị container che nên trình duyệt không truy cập trực tiếp được. Thư mục "/WEB-INF/lib/" chỉ dành cho thư viện đóng gói dạng jar và cũng bị che như vậy. Thư mục "/META-INF/" giữ siêu dữ liệu của gói, ví dụ tệp kê khai hay cấu hình ngữ cảnh riêng của máy chủ, nên cũng không phải nơi đặt tài nguyên hiển thị.
Mở trang câu hỏi này →