Câu hỏi: PRJ301 Phát triển ứng dụng Java web – Bộ ôn tập thi lại số 3
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
using RequestDispatcher? RequestDispatcher rd = request.getRequestDispatcher("dashboard.jsp");rd.forward(response, request);rd.include(request, response);rd.forward(request, response);response.sendRedirect("dashboard.jsp");Đáp án đúng: "rd.forward(request, response); ". Phương thức forward nhận đúng thứ tự tham số là request rồi mới tới phần trả về, và nó chuyển hẳn quyền xử lý sang tài nguyên đích ngay trong cùng một lượt request, nên mọi thuộc tính đã đặt vào request vẫn dùng được ở trang đích và thanh địa chỉ của trình duyệt không đổi. Lựa chọn "rd.forward(response, request); " đảo thứ tự hai tham số nên không khớp chữ ký phương thức và mã không biên dịch được. Lựa chọn "rd.include(request, response); " là lời gọi hợp lệ nhưng khác nghĩa: nó chèn kết quả của tài nguyên kia vào chỗ đang xử lý rồi trả điều khiển về servlet gọi, không phải chuyển tiếp. Lựa chọn "response.sendRedirect("dashboard.jsp"); " không dùng tới bộ điều phối request: nó trả mã chuyển hướng cho trình duyệt, sinh một request mới, URL đổi và dữ liệu trong phạm vi request cũ mất.
destroy()stop()end()dispose()application.xmlweb.xmlconfig.xmlserver.xmlmanifest.txtsettings.xmlweb.xmlconfig.propertiespublic 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().
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().println("<h1>Hello from @WebServlet!</h1>");
}
}<servlet-mapping>
<servlet-name>ServletA</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletB</servlet-name>
<url-pattern>/bservlet.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletC</servlet-name>
<url-pattern>*.servletC</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletD</servlet-name>
<url-pattern>/dservlet/*</url-pattern>
</servlet-mapping>Given that a user enters the following into thier browser, which (if any) of the mapped servlets will execute? (Choose one.) http://mywebserver:8081/mywebapp
ServletAServletBServletCServletDĐáp án đúng: "<%! private int count = 0; %>". Khối mở đầu bằng dấu chấm than là khai báo: nội dung của nó được đặt thành thành viên của lớp servlet sinh ra từ trang, nằm ngoài phương thức phục vụ, nên biến count tồn tại suốt đời thể hiện servlet và mọi lượt request dùng chung nó. Lựa chọn "<%@ page language="java" %>" là chỉ thị trang, nó cấu hình pha dịch trang chứ không khai báo thành viên nào. Lựa chọn "<%= "Hello World" %>" là biểu thức, giá trị của nó được tính rồi ghi thẳng ra luồng xuất, và đặt dấu chấm phẩy vào đó còn gây lỗi lúc dịch. Lựa chọn "<% int x = 10; %>" là scriptlet, mã bên trong rơi vào thân phương thức phục vụ nên biến ở đó chỉ là biến cục bộ, sinh lại ở mỗi request và không phải một khai báo.
paramsrequestinputgetParametersstmt.getAffectedRows()stmt.countRows()stmt.getRowCount()stmt.executeUpdate()