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

50 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 2/3 — câu 21–40.

Danh sách câu hỏi

40/50 câuCòn 10
AData can be lost
BThe application will automatically release the connection
CThe number of connections to the database can be exhausted (Connection Leak)
DNothing happens
Lời giải
Đáp án đúng: "The number of connections to the database can be exhausted (Connection Leak)". Mỗi kết nối là một tài nguyên của cả tiến trình Java lẫn của máy chủ cơ sở dữ liệu và số lượng luôn có hạn; không đóng thì kết nối vẫn bị giữ, đến lúc pool cạn hoặc server đạt giới hạn phiên thì mọi yêu cầu sau phải chờ rồi hết thời gian và ứng dụng tắc ở chỗ xin kết nối. Vì vậy phải đóng trong khối finally hoặc dùng cú pháp tự đóng tài nguyên. "Data can be lost" là hệ quả gián tiếp chứ không phải điều xảy ra do việc không đóng; dữ liệu đã commit vẫn còn, chỉ phần chưa commit mới bị bỏ khi phiên bị cắt. "The application will automatically release the connection" sai vì bộ thu gom rác không bảo đảm đóng kết nối và cũng không chạy đúng lúc ta cần. "Nothing happens" sai vì hậu quả chỉ chưa thấy khi tải thấp, dưới tải thật thì số kết nối bị giữ tăng dần tới khi cạn.
Mở trang câu hỏi này →
AWhen there is a static SQL query that does not change
BWhen executing the same query multiple times with different parameters
CWhen a stored procedure needs to be called
DWhen the query has no parameters
Lời giải
Đáp án đúng: "When executing the same query multiple times with different parameters". Câu lệnh được chuẩn bị gửi phần SQL có chỗ giữ tham số đi một lần để máy chủ phân tích và lập kế hoạch thực thi, sau đó mỗi lượt chỉ cần gán giá trị mới rồi chạy lại, nên vừa nhanh hơn vừa chặn được chèn mã SQL vì giá trị luôn được truyền như dữ liệu chứ không ghép vào văn bản câu lệnh. "When there is a static SQL query that does not change" không phải lý do để chọn nó: câu lệnh cố định không tham số thì lớp câu lệnh thường đã đủ, điểm mạnh của dạng chuẩn bị nằm ở chỗ có tham số thay đổi. "When a stored procedure needs to be called" là việc của lớp câu lệnh gọi thủ tục, lớp đó mới khai báo được tham số trả ra. "When the query has no parameters" cũng không phải tình huống cần nó, vì không có chỗ giữ nào để gán thì lợi thế chính không được dùng tới.
Mở trang câu hỏi này →
AExplicit transaction management by invoke con.beginTrans()
BTurn off auto commit mode from DBSM for implicit transaction
CIt is automatically managed by DBMS
DInvoke con.commit() or con,rollback()
Lời giải
Đáp án đúng: "Invoke con.commit() or con,rollback()". Trong JDBC, giao dịch được điều khiển trên chính đối tượng Connection: đặt setAutoCommit(false) để nhiều câu lệnh gộp vào một giao dịch, rồi kết thúc bằng commit() khi mọi việc trôi chảy hoặc rollback() trong khối bắt lỗi để trả dữ liệu về trạng thái trước đó; chính cặp lệnh kết thúc này là chỗ lập trình viên quyết định giao dịch, nên nó là câu trả lời sát nhất. "Explicit transaction management by invoke con.beginTrans()" sai vì Connection không có phương thức nào tên như vậy, giao dịch tường minh bắt đầu bằng việc tắt chế độ tự commit chứ không bằng một lệnh mở. "Turn off auto commit mode from DBSM for implicit transaction" sai chỗ: chế độ tự commit được tắt từ phía mã JDBC trên Connection, và tắt nó là bước mở đầu cho giao dịch tường minh chứ không tự kết thúc giao dịch. "It is automatically managed by DBMS" sai vì khi để nguyên chế độ tự commit thì mỗi câu lệnh là một giao dịch riêng, không có cách nào gộp nhiều câu lệnh lại.
Mở trang câu hỏi này →
AModel
BView
CController
DService
Lời giải
Đáp án đúng: "View". Trong MVC, thành phần hiển thị là nơi nhận dữ liệu đã được chuẩn bị sẵn rồi dựng nó thành giao diện trả cho người dùng; ở Java web vai trò này thường do trang JSP đảm nhiệm, nó chỉ đọc các thuộc tính mà tầng điều khiển đặt vào request hay session rồi sinh ra HTML, không tự truy vấn cơ sở dữ liệu. "Model" sai vì nó chỉ giữ dữ liệu và quy tắc nghiệp vụ, tức các lớp thực thể và lớp truy cập dữ liệu, hoàn toàn không biết gì về cách trình bày. "Controller" sai vì nó là servlet tiếp nhận yêu cầu, đọc tham số, gọi tầng nghiệp vụ rồi chọn trang để forward tới: nó điều phối chứ không vẽ giao diện. "Service" sai vì đây không phải một trong ba thành phần của MVC; lớp service chỉ là cách tổ chức nghiệp vụ nằm bên trong phần mô hình, và dù có hay không có nó thì việc trình bày dữ liệu vẫn thuộc tầng hiển thị.
Mở trang câu hỏi này →
25Given the code below:4 lựa chọncó code
Đề bài
HttpSession session = request.getSession();
session.setAttribute("username", "HuyNM");

Which of the following is incorrect?

AThe session must exist or be created automatically
BThe attribute "username" can be retrieved later using the same session
CThe attribute will persist across multiple HTTP requests
DThe attribute is stored in the client browser's local storage
Lời giải
Đáp án đúng: "The attribute is stored in the client browser's local storage". Dữ liệu đặt bằng setAttribute nằm trong đối tượng HttpSession do container giữ trong bộ nhớ của server; thứ duy nhất đi về phía trình duyệt là định danh phiên, thường là cookie JSESSIONID, nên không có mẩu dữ liệu nào tên username được ghi vào kho lưu trữ của trình duyệt. "The session must exist or be created automatically" là mệnh đề đúng, vì request.getSession() không tham số trả về phiên đang có hoặc tạo mới nếu chưa có, nhờ vậy dòng mã luôn có chỗ để ghi. Mệnh đề nói giá trị "can be retrieved later using the same session" cũng đúng, vì getAttribute với cùng tên trong cùng phiên sẽ lấy lại được đối tượng đã đặt. "The attribute will persist across multiple HTTP requests" đúng nốt, bởi phiên tồn tại xuyên nhiều yêu cầu cho tới khi hết thời gian chờ hoặc bị invalidate, đó chính là lý do người ta dùng phiên thay cho phạm vi request.
Mở trang câu hỏi này →
ADatabase
BModel
CView
DController
Lời giải
Đáp án đúng: "Database". Mẫu kiến trúc này chỉ gồm ba vai: phần mô hình giữ dữ liệu và nghiệp vụ, phần hiển thị dựng giao diện, phần điều khiển điều phối yêu cầu. Cơ sở dữ liệu là một hệ thống lưu trữ bên ngoài mà phần mô hình kết nối tới qua JDBC hoặc JPA; nó có thể bị thay bằng tệp hay dịch vụ khác mà kiến trúc không đổi, nên nó nằm ngoài ranh giới của mẫu. "Model" là thành phần chuẩn, chính nó mang các lớp thực thể và lớp truy cập dữ liệu. "View" là thành phần chuẩn, đảm nhiệm việc kết xuất HTML từ dữ liệu được truyền sang. "Controller" là thành phần chuẩn, trong Java web chính là servlet đọc tham số, gọi nghiệp vụ rồi chọn trang để forward tới.
Mở trang câu hỏi này →
AUser Interface App Layer
BApplication Logic Layer
CData Layer
DConnection Layer
Lời giải
Đáp án đúng: "Application Logic Layer". Trong mô hình nhiều tầng, tầng logic ứng dụng là nơi đặt luật nghiệp vụ: kiểm tra dữ liệu đầu vào, tính toán, quyết định thứ tự các bước, rồi mới yêu cầu tầng dữ liệu đọc ghi; trong ứng dụng Java web thì servlet điều phối cùng các lớp nghiệp vụ nằm ở tầng này. "User Interface App Layer" sai vì tầng đó chỉ nhận thao tác của người dùng và hiển thị kết quả, nó không được chứa luật nghiệp vụ nếu muốn thay giao diện mà không viết lại nghiệp vụ. "Data Layer" sai vì nó chỉ chịu trách nhiệm lưu trữ và truy xuất, trả về dữ liệu thô cho tầng trên quyết định. "Connection Layer" sai vì việc mở, giữ và trả kết nối chỉ là chi tiết kỹ thuật bên trong tầng dữ liệu, không phải một tầng mang logic ứng dụng.
Mở trang câu hỏi này →
Asession.getParameter(String name)
Bsession.getValue(String name) )
Csession.getAttribute(String name)
Dsession.fetchAttribute(String name)
Lời giải
Đáp án đúng: "session.getAttribute(String name)". HttpSession lưu dữ liệu theo cặp tên và giá trị: ghi bằng setAttribute, đọc lại bằng getAttribute; phương thức này trả về Object nên ở chỗ dùng thường phải ép kiểu lại, và trả về null khi tên đó chưa từng được đặt. "session.getParameter(String name)" sai vì getParameter là phương thức của request, dùng để đọc tham số client gửi lên qua query string hoặc biểu mẫu, HttpSession không có phương thức này. "session.getValue(String name) )" sai vì getValue là tên cũ đã bị đánh dấu loại bỏ và không còn nằm trong API HttpSession hiện hành. "session.fetchAttribute(String name)" sai vì đặc tả servlet không định nghĩa phương thức nào tên fetchAttribute; gọi nó thì mã không biên dịch được.
Mở trang câu hỏi này →
AA new session is created
BReturns null
CIllegalStateException is thrown
DThe old session is reset
Lời giải
Đáp án đúng: "Returns null". Tham số false nói với container rằng chỉ được trả về phiên đang tồn tại, tuyệt đối không tạo mới; nếu yêu cầu chưa gắn với phiên nào thì phương thức trả về null, nên mã gọi bắt buộc phải kiểm tra null trước khi dùng, và đó cũng là cách thông dụng để biết người dùng đã đăng nhập hay chưa. "A new session is created" sai vì chỉ getSession() không tham số hoặc getSession(true) mới sinh phiên mới. "IllegalStateException is thrown" sai vì ngoại lệ đó xuất hiện khi làm việc với một phiên đã bị invalidate, chứ không phải khi hỏi một phiên chưa tồn tại. "The old session is reset" sai vì ở đây không có phiên nào để đặt lại, và bản thân getSession cũng không bao giờ xoá dữ liệu của phiên đang sống.
Mở trang câu hỏi này →
Đề bài
public class CookieExampleServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO: Your code here
    }
}
ACookie newCookie = new Cookie("username", "john_doe"); response.addCookie(newCookie);
Bresponse.setCookie("username", "john_doe");
Crequest.createCookie("username", "john_doe"); response.sendCookie();
DCookie.create("username", "john_doe"); response.writeCookie();
Lời giải

Đáp án đúng: "Cookie newCookie =

Lời giải
new Cookie("username", "john_doe");
response.addCookie(newCookie);

". Cookie là một đối tượng được dựng bằng hàm khởi tạo hai tham số tên và giá trị, rồi phải nhờ phản hồi mang ra ngoài: addCookie thêm một dòng tiêu đề Set-Cookie vào phần đầu của phản hồi, vì vậy lệnh này phải chạy trước khi nội dung phản hồi được gửi đi. Lựa chọn dùng "response.setCookie("username", "john_doe"); " sai vì HttpServletResponse không có phương thức setCookie; nó chỉ nhận một đối tượng Cookie đã tạo qua addCookie. Lựa chọn dùng "request.createCookie("username", "john_doe"); " sai vì request là luồng dữ liệu đi vào, nó chỉ có getCookies để đọc cookie client gửi lên, và "response.sendCookie(); " cũng không tồn tại trong API. Lựa chọn dùng "Cookie.create("username", "john_doe"); " sai vì lớp Cookie không cung cấp phương thức tĩnh nào tên create, và "response.writeCookie(); " cũng là tên tự đặt: tên đúng duy nhất để đính cookie vào phản hồi là addCookie.

Mở trang câu hỏi này →
Acontext.setAttribute("key", value);
Brequest.setAttribute("key", value);
Csession.setAttribute("key", value);
Dresponse.setAttribute("key", value);
Lời giải

Đáp án đúng: "context.setAttribute("key", value); ". ServletContext là vùng dữ liệu dùng chung cho toàn ứng dụng: lấy nó bằng getServletContext() rồi ghi bằng setAttribute, giá trị đó mọi servlet và mọi người dùng đều đọc được và sống tới khi ứng dụng bị dỡ. "request.setAttribute("key", value); " sai vì phạm vi request chỉ sống trong một lần xử lý yêu cầu, hết lượt forward là mất, không dùng để chia sẻ toàn ứng dụng. "session.setAttribute("key", value); " sai vì dữ liệu khi đó chỉ thuộc về một người dùng và biến mất khi phiên hết thời gian chờ hoặc bị invalidate. "response.setAttribute("key", value); " sai vì HttpServletResponse không có phương thức setAttribute; phản hồi chỉ dùng để đặt tiêu đề, mã trạng thái và ghi nội dung trả về.

Mở trang câu hỏi này →
Đề bài
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)        throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        System.out.println( new Date());
        chain.doFilter(request, response);
}

And in the web.xml:

Đề bài
<filter>
    <filter-name>LoggingFilter</filter-name>
    <filter-class>LoggingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoggingFilter</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping> Assuming that the client sends a request to open the index.jsp page, arrange the following steps correctly to describe the processing inside server. 1: the LoggingFilter intercepts the request to display current date 2: the server compiles and processes the JSP file to generates an HTML response. 3: The final HTML content from index.jsp is sent back to the client's browser. 4: the request continues to index.jsp 5: the HTML response from index.jsp is sent back to the LoggingFilter.

A1-4-2-5-3
B1-5-4-2-3
C1-2-5-3
D1-4-5-3
Lời giải
Đáp án đúng: "1-4-2-5-3". Chuỗi filter là một cái phễu hai chiều: filter khớp mẫu bao trùm nhận yêu cầu trước nên nó in ngày hiện tại, rồi lời gọi chain.doFilter mới đẩy yêu cầu đi tiếp tới index.jsp; container dịch trang JSP thành servlet, biên dịch rồi chạy để sinh HTML; khi phương thức của trang trả về, luồng điều khiển quay lại đúng chỗ ngay sau chain.doFilter trong filter, và chỉ sau khi filter kết thúc thì nội dung mới được đẩy ra trình duyệt. "1-5-4-2-3" sai vì phản hồi không thể quay về filter trước khi yêu cầu kịp tới index.jsp. "1-2-5-3" sai vì bỏ mất bước yêu cầu đi tiếp tới index.jsp, mà thiếu lời gọi chain.doFilter thì trang không bao giờ được chạy. "1-4-5-3" sai vì bỏ mất bước container xử lý trang JSP để sinh HTML, nghĩa là không có nội dung nào để trả về.
Mở trang câu hỏi này →
Đề bài
class: ${
  emp.tel
}

Which of the following statements accurately describes the requirements for accessing and displaying the tel field using this EL expression?

AThe tel field must be declared as public, and no getter method is required.
BThe tel field may be private, but a getTel() method must be provided.
CBoth A and B are correct.
DNeither A nor B is correct.
Lời giải
Đáp án đúng: "The tel field may be private, but a getTel() method must be provided.". EL không đọc trực tiếp trường của lớp: dấu chấm trong biểu thức được hiểu là truy cập thuộc tính theo quy ước JavaBeans, nên khi gặp cách viết trong đề, bộ xử lý đi tìm getTel() (hoặc isTel() nếu kiểu boolean) và báo lỗi không tìm thấy thuộc tính nếu lớp chỉ có trường mà không có phương thức đọc; mức truy cập của trường không hề được xét tới. "The tel field must be declared as public, and no getter method is required." sai đúng ở chỗ đó: để trường là public cũng không giúp EL nhìn thấy nó. "Both A and B are correct." sai vì nó kéo theo cả mệnh đề đòi trường public và bỏ getter, trong khi chỉ cần một phương thức đọc đặt tên đúng quy ước là đủ. "Neither A nor B is correct." sai vì mệnh đề cho phép trường private kèm getTel() mô tả chính xác cách EL lấy giá trị thuộc tính.
Mở trang câu hỏi này →
ARetrieve the first element of the items array in the cart object from the session
BEL will return null if the cart does not exist in the session
CError because EL does not support array retrieval
DBoth A and B are correct
Lời giải
Đáp án đúng: "Both A and B are correct". EL đọc biểu thức trong đề theo từng chặng: tra tên cart trong phạm vi session, lấy tiếp thuộc tính items, rồi dùng toán tử ngoặc vuông để lấy phần tử ở chỉ số 0 của mảng hoặc danh sách đó. Nếu một chặng nào trả về null thì cả biểu thức cho ra null và trang in ra chuỗi rỗng chứ không ném ngoại lệ, vì vậy cả hai mệnh đề cùng mô tả đúng một phần hành vi. Mệnh đề nói biểu thức lấy "the first element of the items array in the cart object" đúng nhưng chỉ là một nửa câu trả lời, vì nó im lặng về trường hợp giỏ hàng chưa có trong phiên. Mệnh đề nói EL sẽ "return null if the cart does not exist" cũng đúng một nửa, vì nó không nói gì tới việc truy cập phần tử khi dữ liệu có đủ. "Error because EL does not support array retrieval" sai vì toán tử ngoặc vuông truy cập được cả mảng, danh sách, Map và thuộc tính của bean.
Mở trang câu hỏi này →
A${bookList[12].title}
B${bookList.get(2).title}
C${bookList["2"].title}
D${bookList.title[2]}
E${bookList[2].title}
Lời giải

Đáp án đúng: "${bookList["2"].title}". Toán tử ngoặc vuông là cách truy cập dùng được cho cả danh sách và Map: EL lấy giá trị trong ngoặc làm khoá rồi ép về kiểu chỉ số khi đối tượng đích là List hoặc mảng, nên chuỗi hai được ép thành số hai; phần tử trả về là một Map, vì vậy dấu chấm đứng sau được hiểu là tra khoá title trong Map đó chứ không phải gọi getter. "${bookList[12].title}" sai vì nó trỏ tới phần tử thứ mười ba, lệch hẳn vị trí được hỏi và thường gây lỗi vượt biên. "${

Lời giải
bookList.get(2).title
}
" sai

vì đó là cách viết lời gọi phương thức kiểu Java, không phải cú pháp truy cập phần tử theo chỉ số mà câu hỏi đang nhắm tới. "${bookList.title[2]}" sai vì nó đi tìm thuộc tính title trên chính danh sách rồi mới lấy chỉ số, tức đảo ngược thứ tự hai chặng truy cập. "${bookList[2].title}" viết chỉ số bằng số nguyên trực tiếp nên chỉ là biến thể trùng nghĩa, không mang điểm kiến thức được kiểm tra là việc ngoặc vuông nhận một khoá rồi tự ép kiểu theo đối tượng đích.

Mở trang câu hỏi này →
AHttpSessionListener
BServletRequestListener
CServletContextListener
DServletResponseListener
Lời giải
Đáp án đúng: "HttpSessionListener". Interface này khai báo hai phương thức sessionCreated và sessionDestroyed, container tự gọi chúng mỗi khi một phiên được sinh ra hoặc hết hiệu lực, nên đây là chỗ để đếm số người đang truy cập hay dọn tài nguyên gắn với phiên; lớp cài đặt chỉ cần đánh chú giải listener hoặc khai báo thẻ listener trong web.xml là container nạp ngay khi khởi động ứng dụng. "ServletRequestListener" sai vì nó bắt sự kiện bắt đầu và kết thúc của từng yêu cầu, một phạm vi hẹp hơn và không liên quan tới vòng đời phiên. "ServletContextListener" sai vì nó theo dõi vòng đời của cả ứng dụng, chỉ chạy một lần khi nạp và một lần khi dỡ. "ServletResponseListener" sai vì đặc tả servlet không có interface nào tên như vậy; phản hồi không có vòng đời riêng để lắng nghe.
Mở trang câu hỏi này →
AHandling HTTP requests and generating responses.
BManaging sessions and cookies for clients.
CObserving changes in the lifecycle of the ServletContext.
DInteracting with databases to perform CRUD operations.
Lời giải
Đáp án đúng: "Observing changes in the lifecycle of the ServletContext.". Lớp cài đặt interface này nhận hai mốc của phạm vi ứng dụng: contextInitialized chạy đúng một lần khi container nạp ứng dụng, trước khi servlet đầu tiên phục vụ yêu cầu nào, và contextDestroyed chạy khi ứng dụng bị dỡ; nhờ vậy đây là nơi dựng sẵn tài nguyên dùng chung, nạp cấu hình vào ServletContext rồi dọn sạch lúc tắt. "Handling HTTP requests and generating responses." sai vì đó là việc của servlet qua doGet và doPost, listener không nhận đối tượng yêu cầu nào. "Managing sessions and cookies for clients." sai vì phạm vi phiên và cookie thuộc về từng người dùng, do mã servlet cùng các listener của phiên lo. "Interacting with databases to perform CRUD operations." sai vì thao tác dữ liệu là việc của tầng truy cập dữ liệu; listener nhiều lắm chỉ chuẩn bị sẵn nguồn kết nối rồi đóng lại khi dỡ ứng dụng.
Mở trang câu hỏi này →
AIt listens to and records conversations
BIt watches for changes in user sessions, like when someone logs in or out
CIt changes session data
DIt helps users navigate through the application
Lời giải
Đáp án đúng: "It watches for changes in user sessions, like when someone logs in or out". Listener của phiên là một lớp được container thông báo mỗi khi vòng đời phiên chuyển trạng thái: đăng nhập thường kéo theo việc tạo phiên mới và ghi thuộc tính người dùng, còn đăng xuất gọi invalidate, và chính container phát sự kiện tương ứng cho lớp đã khai báo, nên nó quan sát được các mốc đó mà không cần servlet nào gọi tay. "It listens to and records conversations" sai vì phiên ở đây là phiên làm việc HTTP giữa trình duyệt và server, không phải cuộc hội thoại nào để ghi âm. "It changes session data" sai vì listener chỉ được thông báo chứ không phải công cụ để sửa dữ liệu; việc ghi thuộc tính vẫn do servlet thực hiện. "It helps users navigate through the application" sai vì điều hướng do tầng điều khiển quyết định qua forward hoặc sendRedirect, listener không can thiệp vào luồng đi của yêu cầu.
Mở trang câu hỏi này →
ATo listen for changes in session attributes
BTo listen for changes in application context parameters
CTo listen for changes in request parameters
DTo listen for changes in session lifecycle events
Lời giải
Đáp án đúng: "To listen for changes in session lifecycle events". Listener của phiên gắn vào các mốc vòng đời do container quản lý: phiên vừa được tạo, phiên bị invalidate hoặc hết thời gian chờ; hai phương thức sessionCreated và sessionDestroyed được gọi đúng ở các mốc đó, nhờ vậy ứng dụng đếm được số phiên đang sống và giải phóng tài nguyên kịp lúc. "To listen for changes in session attributes" sai vì theo dõi việc thêm, thay và xoá thuộc tính là nhiệm vụ của một interface khác dành riêng cho thuộc tính phiên, không phải của listener vòng đời. "To listen for changes in application context parameters" sai vì phạm vi ứng dụng có bộ listener riêng của nó, còn tham số khởi tạo khai báo trong web.xml thì không đổi lúc đang chạy. "To listen for changes in request parameters" sai vì tham số của yêu cầu chỉ đọc được qua getParameter và không có sự kiện nào được phát ra khi chúng khác nhau giữa các yêu cầu.
Mở trang câu hỏi này →
Đề bài
var="myUrl" scope="page"> <c:param name="type" value="book" /> <c:param name="id" value="123" /> </c:url> ${
  myUrl
}
A/app/item?type=book&id=123
B/app/item?type=id&book=123
C/app/item
DNothing will be printed out
EThe JSP failed to compile
Lời giải
Đáp án đúng: "/app/item?type=book&id=123". Thẻ dựng địa chỉ sẽ gom các thẻ tham số lồng trong thân nó thành chuỗi truy vấn, mã hoá giá trị rồi vì có thuộc tính var nên không in ra ngay mà lưu kết quả vào biến myUrl trong phạm vi trang; biểu thức đứng sau đó đọc biến này nên in ra đường dẫn kèm hai tham số theo đúng thứ tự khai báo. Đường dẫn mở đầu bằng dấu gạch chéo được hiểu theo context path của ứng dụng, nên với ứng dụng chạy ở context gốc thì kết quả đúng như chuỗi trên. "/app/item?type=id&book=123" sai vì nó ghép lẫn tên với giá trị: mỗi thẻ tham số lấy name làm tên và value làm giá trị, nên cặp đúng là type đi với book và id đi với 123. "/app/item" sai vì bỏ hết phần truy vấn, trong khi hai thẻ tham số nằm trong thân chính là để nối thêm phần đó. "Nothing will be printed out" sai vì biến có phạm vi trang và được đọc ngay trong cùng trang. "The JSP failed to compile" sai vì cú pháp hoàn toàn hợp lệ khi trang đã khai báo thư viện thẻ lõi.
Mở trang câu hỏi này →