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 đề.
Danh sách câu hỏi
request.setAttribute("data", "value");
response.sendRedirect("result.jsp");Đáp án đúng: "Using the <select> element". Danh sách chọn trong form HTML được dựng bằng phần tử select, mỗi mục là một thẻ option bên trong và giá trị gửi về server là thuộc tính value của mục đang chọn, đọc ở servlet bằng request.getParameter() với tên chính là thuộc tính name của select. "Using the <dropdown> element" sai vì HTML không có phần tử nào tên dropdown, trình duyệt sẽ coi nó là thẻ lạ và không vẽ ra ô chọn nào. "Using the <list> element" cũng không tồn tại; các phần tử danh sách của HTML là ul, ol và li, chúng chỉ để trình bày nội dung và không gửi dữ liệu theo form. "Using the <options> element" sai ở dạng số nhiều: thẻ con hợp lệ bên trong select là option, và bản thân nó cũng không thay được phần tử chứa bên ngoài.
doPost(HttpServletRequest request, HttpServletResponse response)doPut(HttpServletRequest request, HttpServletResponse response)doGet(HttpServletRequest request, HttpServletResponse response)doDelete(HttpServletRequest request, HttpServletResponse response)public class ShowParamsServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext ctx = getServletContext();
PrintWriter out = response.getWriter();
Enumeration<String> paramNames = ctx.getInitParameterNames();
while(paramNames.hasMoreElements()) {
String name = paramNames.nextElement();
out.println(name + ": " + ctx.getInitParameter(name));
}
}
}If web.xml has the following entries:
<context-param>
<param-name>settingOne</param-name>
<param-value>foo</param-value>
</context-param>
<context-param>
<param-name>settingTwo</param-name>
<param-value>bar</param-value></context-param> What will the servlet output?
Đáp án đúng: "settingOne: foo
settingTwo: bar". Vòng lặp đi qua Enumeration do ctx.getInitParameterNames() trả về, và mỗi lần lặp out.println() in ra chuỗi được nối từ name, dấu hai chấm kèm khoảng trắng, rồi ctx.getInitParameter(name); vì vậy mỗi dòng mang cả tên tham số lẫn giá trị của nó, lần lượt theo thứ tự hai phần tử context-param được khai trong web.xml. Lưu ý getInitParameter() ở đây gọi trên ServletContext nên đọc tham số dùng chung cho toàn ứng dụng, khác với tham số riêng của từng servlet. Lựa chọn "foo
bar" bỏ mất phần name và dấu hai chấm mà biểu thức nối chuỗi luôn in kèm. Lựa chọn "settingTwo: bar
settingOne: foo" đảo thứ tự so với thứ tự khai trong tệp cấu hình mà vòng lặp đi theo. Lựa chọn "settingOne
settingTwo" chỉ in tên, tức là kết quả của việc in name mà không gọi getInitParameter().
var="x" value="10" /> <c:set var="y" value="5" /> ${
x + y
}What is the incorrect output produced by the JSP page above?
Đáp án đúng: "<%! %>". Khối khai báo được dịch thành thành viên của lớp servlet mà container sinh ra từ trang JSP, nên biến đặt ở đây là biến mức lớp và phương thức đặt ở đây nằm ngoài phương thức phục vụ; chính vì vậy chúng tồn tại qua nhiều yêu cầu và dùng chung cho mọi người dùng, khác với đoạn mã nhúng thường rơi vào thân phương thức phục vụ và chỉ là biến cục bộ. "<var> " không phải thẻ của JSP, trình dịch trang coi nó là thẻ lạ và gửi nguyên văn ra cho trình duyệt. "<declare> " cũng không tồn tại trong JSP, không có thư viện chuẩn nào định nghĩa thẻ này nên nó không khai báo được gì. "<scriptlet> " không phải cú pháp hợp lệ; dạng tài liệu XML của đoạn mã nhúng có tên thuộc không gian jsp, và dù viết đúng thì mã trong đoạn nhúng vẫn nằm trong thân phương thức phục vụ nên không tạo được thành viên của lớp.
pageContextrequestapplicationsessionparamsrequestinputgetParameters