39
1 1 章課後練習 選擇題 1. 以下何者適合使用 GET 請求來發送? A使用者名稱、密碼 B檢視論譠頁面 C信用卡資料 D查詢資料的分頁 答案:BD 提示:敏感性資料不應使用 GET 來發送。論譠頁面、資料分頁可以使用 GET便於使用者設定為書籤。 2. 以下何者應該使用 POST 請求來發送? A使用者名稱、密碼 B檔案上傳 C搜尋引擎的結果頁面 D留言版訊息 答案:ABD 提示:敏感性資料、大量資料不應使用 GET 來發送。搜尋引擎結果畫面可以使 GET,便於使用者設定為書籤。 3. 以下何者適合使用 GET 請求來發送? A檢視靜態頁面 B查詢商品資料 C新增商品資料 D刪除商品資料 答案:AB 提示:這題在考等冪操作,不改變伺服器狀態的查詢應使用 GET4. 以下何者應該使用 POST 請求來發送? A查詢商品資料 B新增商品資料 C更新商品資料 D刪除商品資料 答案:BCD 提示:這題在考非等冪操作,會改變伺服器狀態的查詢應使用 POST

Servlet & JSP 教學手冊第二版 - 課後練習解答

Embed Size (px)

DESCRIPTION

Servlet & JSP 教學手冊第二版

Citation preview

Page 1: Servlet & JSP 教學手冊第二版 - 課後練習解答

1

第 1 章課後練習

選擇題

1. 以下何者適合使用 GET 請求來發送?

(A) 使用者名稱、密碼

(B) 檢視論譠頁面

(C) 信用卡資料

(D) 查詢資料的分頁

答案:B、D

提示:敏感性資料不應使用 GET 來發送。論譠頁面、資料分頁可以使用 GET,

便於使用者設定為書籤。

2. 以下何者應該使用 POST 請求來發送?

(A) 使用者名稱、密碼

(B) 檔案上傳

(C) 搜尋引擎的結果頁面

(D) 留言版訊息

答案:A、B、D

提示:敏感性資料、大量資料不應使用 GET 來發送。搜尋引擎結果畫面可以使

用 GET,便於使用者設定為書籤。

3. 以下何者適合使用 GET 請求來發送?

(A) 檢視靜態頁面

(B) 查詢商品資料

(C) 新增商品資料

(D) 刪除商品資料

答案:A、B

提示:這題在考等冪操作,不改變伺服器狀態的查詢應使用 GET。

4. 以下何者應該使用 POST 請求來發送?

(A) 查詢商品資料

(B) 新增商品資料

(C) 更新商品資料

(D) 刪除商品資料

答案:B、C、D

提示:這題在考非等冪操作,會改變伺服器狀態的查詢應使用 POST。

Page 2: Servlet & JSP 教學手冊第二版 - 課後練習解答

2

5. 中文字「良」在 UTF-8 編碼下,三個位元組的十六進位數值表示分別為

「E8」、「89」、「AF」,那麼在 URI 編碼規範下,應如何表示?

(A) E889AF

(B) %E889AF

(C) %E8%89%AF

(D) %E889AF%

答案:C

6. 以下何者是屬於客戶端執行的程式?

(A) JSP

(B) JavaScript

(C) Servlet

(D) Applet

答案:B、D

7. Servlet/JSP 主要是屬於哪個 Java 平台的規範之中?

(A) Java SE

(B) Java ME

(C) Java EE

答:C

8. Servlet/JSP 必須基於哪一類型的容器才能提供服務?

(A) Applet 容器

(B) 應用程式客戶端容器

(C) Web 容器

(D) EJB 容器

答:C

9. Web 容器在收到瀏覽器請求時,會如何處理請求?

(A) 使用單一執行緒處理所有請求

(B) 一個請求就建立一個執行緒來處理請求

(C) 一個請求就建立一個行程來處理請求

(D) 一個請求就執行一個容器來處理請求

答:B

Page 3: Servlet & JSP 教學手冊第二版 - 課後練習解答

3

10. Java EE 中各技術標準最後將由什麼文件明訂規範?

(A) JCP

(B) JSR

(C) JDK

答:B

提示:JCP 是組織名稱。JDK 是 Java 開發工具箱名稱。

Page 4: Servlet & JSP 教學手冊第二版 - 課後練習解答

4

第 2 章課後練習

選擇題

1. 若要針對 HTTP 請求撰寫 Servlet 類別,以下何者是正確的作法?

(A) 實作 Servlet介面

(B) 繼承 GenericServlet

(C) 繼承 HttpServlet

(D) 直接定義一個結尾名稱為 Servlet 的類別

答案:C

2. 續上題,如何針對 HTTP 的 GET 請求進行處理與回應?

(A) 重新定義 service()方法

(B) 重新定義 doGet()方法

(C) 定義一個方法名稱為 doService()

(D) 定義一個方法名稱為 get()

答案:B

提示:不建議也不應重新定義 HttpServlet所繼承下來的 service()方法。

3. HttpServlet是定義在哪個套件之中?

(A) javax.servlet

(B) javax.servlet.http

(C) java.http

(D) javax.http

答案:B

提示:與 Servlet 定義相關的類別或介面都位於 javax.servlet套件之中,像

是 Servlet、GenericServlet、ServletRequest、ServletResponse

等。與 HTTP 定義相關的類別或介面都位於 javax.servlet.http套件之中,

像是 HttpServlet、HttpServletRequest、HttpServletResponse等。

4. 你在 web.xml 中定義了以下的內容:

<servlet>

<servlet-name>Goodbye</servlet-name>

<servlet-class>cc.openhome.LogutServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>GoodBye</servlet-name>

Page 5: Servlet & JSP 教學手冊第二版 - 課後練習解答

5

<url-pattern>/goodbye</url-pattern>

</servlet-mapping>

哪個 URL 可以正確的要求 Servlet 進行請求處理?

(A) /GoodBye

(B) /goodbye.do

(C) /LoguotServlet

(D) /goodbye

答案:D

5. 在 Web 容器中,以下哪兩個介面的實例分別代表 HTTP 請求與回應物件?

(A) HttpRequest

(B) HttpServletRequest

(C) HttpServletResponse

(D) HttpPrintWriter

答案:B、C

6. 在Web應用程式中,何者負責將HTTP請求轉換為HttpServletRequest

物件?

(A) Servlet 物件

(B) HTTP 伺服器

(C) Web 容器

(D) JSP 網頁

答案:C

7. 在 Web 應用程式的檔案與目錄結構中,web.xml 是放置在哪個目錄之中?

(A) WEB-INF 目錄

(B) conf 目錄

(C) lib 目錄

(D) classes 目錄

答案:A

8. Web 應用程式中要尋找某個類別檔案,會到哪些位置尋找?

(A) WEB-INF/classes 目錄

(B) WEB-INF/lib 中的 JAR 檔案

(C) 根目錄中的 bin 目錄

(D) JAR 檔案中的 META-INF 目錄

答案:A、B

Page 6: Servlet & JSP 教學手冊第二版 - 課後練習解答

6

9. web-fragement.xml 必須放置在 JAR 檔案的哪個目錄中?

(A) META-INF/resources 目錄

(B) META-INF 目錄

(C) classes 目錄

(D) config 目錄

答案:B

10. 你在 web.xml 中定義了以下的內容:

<servlet>

<servlet-name>Goodbye</servlet-name>

<servlet-class>cc.openhome.LogutServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Goodbye</servlet-name>

<url-pattern>/goodbye</url-pattern>

</servlet-mapping>

如果改用@WebServlet的話,該如何設定?

(A) @WebServlet("/goodbye")

(B) @WebServlet("Goodbye")

(C) @WebServlet(name="/goodbye",

urlPatterns="Goodbye")

(D) @WebServlet(name="Goodbye",

urlPatterns="/goodbye")

答案:D

實作題

1. 講師提示:這個練習在讓學生動手實作 HttpServlet 的繼承、web.xml

的定義,並能夠自行查詢線上 API 文件,了解 HttpServletRequest 有

哪些方法可以利用。

2. 提示:這個練習在讓學生動作撰寫表單(學生必須自行學習基本的 HTML),

了解GET與POST如何在Servlet中進行處理,學生必須重新定義doPost()

方法,並了解如何在 Servlet 中撰寫判斷分支來呈現不同條件下的結果畫面。

Page 7: Servlet & JSP 教學手冊第二版 - 課後練習解答

7

第 3 章課後練習

課後練習

選擇題

1. 以下的空格應該填入哪個方法?

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.____________;

out.println("<html>");

...

(A) getPrintWriter()

(B) getWriter()

(C) getBufferedWriter()

(D) getOutputWriter()

答案:B

2. 請問以下的 Servlet 程式片段輸出結果為何?

out.println("第一個 Servlet程式");

out.flush();

request.getRequestDispatcher("message.jsp")

.forward(request,response);

out.println("Hello!World!");

(A) 顯示"第一個 Servlet 程式"後轉發 message.jsp

(B) 顯示"第一個 Servlet 程式"與"Hello!World!"

(C) 直接轉發給 message.jsp 進行回應

(D) 丟出 IllegalStateException

答案:D

提示:在 flush()之後回應已確認,此時再 forward()就會發生

IllegalStateException。

3. 你將 secret.jsp 檔案放在 WEB-INF 目錄中,哪個方式或程式片段可以正確

讓 secret.jsp 進行回應?

(A) 使用瀏覽器請求/WEB-INF/secret.jsp

(B) request.getRequestDispatcher("/WEB-INF/secret.j

sp")並進行 forward()

Page 8: Servlet & JSP 教學手冊第二版 - 課後練習解答

8

(C) 使用 response.sendRedirect("/WEB-INF/secret.jsp")

(D) 使用 response.sendError("/WEB-INF/secret.jsp")

答案:B

4. 如果想知道使用者所使用的瀏覽器版本等相關訊息,可以執行哪一段程式

碼:

(A) request.getHeaderParameter("User-Agent")

(B) request.getParameter("User-Agent")

(C) request.getHeader("User-Agent")

(D) request.getRequestHeader("User-Agent")

答案:C

5. 如果想取得輸出串流物件對瀏覽器輸出位元資料,應該撰寫哪一段程式碼?

(A) ResponseStream out = response.getResponseStream();

(B) ResponseStream out = response.getStream();

(C) ResponseStream out = response.getOutputStream();

(D) ServletOutputStream out = response.getOutputStream();

答案:D

6. 哪幾個程式碼可以取得 password 請求參數的值?

(A) request.getParameter("password");

(B) request.getParameters("password")[0];

(C) request.getParameterValues("password")[0];

(D) request.getRequestParameter("password");

答案:A、C

提示:getParameterValues()會用字串陣列傳回指定的請求參數值,如果請

求參數只有一個值,則透過指定索引值 0也可取得該值。

7. 下面這個程式碼片段會輸出什麼結果?

PrintWriter writer = response.getWriter();

writer.println("第一個 Servlet程式");

OutputStream stream = response.getOutputStream();

stream.println("第一個 Servlet程式".getBytes());

(A) 瀏覽器會看到兩段"第一個 Servlet程式"的文字

(B) 瀏覽器會看到一段"第一個 Servlet程式"的文字

(C) 丟出 IllegalStateException

(D) 由於沒有正確地設定內容類型(content-type),瀏覽器會提示

另存新檔

Page 9: Servlet & JSP 教學手冊第二版 - 課後練習解答

9

答案:C

提示:同一個請求週期中,HttpServletResponse 的 getWriter()與

getOutputStream() 只 能 擇 一 使 用 , 否 則 會 丟 出

IllegalStateException。

8. 如果要設置回應的內容類型標頭,哪幾個選項是正確的作法?

(A) response.setHeader("Content-Type", "text/html");

(B) response.setContentType("text/html");

(C) response.addHeader("Content-Type", "text/html");

(D) response.setContentHeader("text/html");

答案:A、B、C

9. 下面哪個選項,可以正確地追加自訂標頭"MyHead"的值?

(A) response.setHeader("MyHeader", "Value2");

(B) response.appendHeader("MyHeader", "Value2");

(C) response.addHeader("MyHeader", "Value2");

(D) response.insertHeader("MyHeader", "Value2");

答案:C

10. 哪幾個方法是定義在HttpServletRequest中,而非由ServletRequet

中繼承而來?

(A) getMethod()

(B) getHeader()

(C) getParameter()

(D) getCookies()

答案:A、B、D

提示:與 HTTP 請求有關的方法,是定義在 HttpServletRequest 中,與通

用請求有關的,是定義在 ServletRequest中,例如 getParameter()。

實作題:

1. 請實作一個 Web 應用程式,可以將使用者所發送的 name 請求參數值畫在

一張圖片上(參考下圖,底圖可任選)。

提示:http://caterpillar.onlyfun.net/Gossip/ServletJSP/GetOutputStream.html

Page 10: Servlet & JSP 教學手冊第二版 - 課後練習解答

10

圖 3.18 根據使用者輸入動態產生圖片內容

畫圖的部份不難,主要讓學生練習如何取得請求參數、如何使用

ServletOutputStream 以及利用搜尋引擎尋找解答的能力。

2. 請實作一個 Web 應用程式,可動態產生使用者登入密碼(參考下圖,僅需

先實作動態產生密碼圖片功能即可,送出表單後密碼驗證功能還不用實現)。

圖 3.19 動態產生登入密碼

提示:主要是上一題練習的延伸,隨機產生四個數字,再畫到圖片上。這個練習

可結合 Session屬性的運用,就可實作出登入的部份。

Page 11: Servlet & JSP 教學手冊第二版 - 課後練習解答

11

第 4 章課後練習

選擇題

1. 在瀏覽器禁用 Cookie 的情況下,哪些機制仍可以用於會話管理?

(A) HttpSession

(B) URL 重寫

(C) 隱藏欄位

(D) Cookie API

答案:B、C

2. 如何設定 Cookie 的有效期限?

(A) 使用 setMaxAge()

(B) 使用 setMaxInactive()

(C) 使用 setMaxInactiveInterval()

(D) 在 web.xml 中設定<cookie-timeout>

答案:A

3. web.xml 中<session-timeout>的設定單位是?

(A) 時

(B) 分

(C) 秒

(D) 毫秒

答案:B

4. 要讓使用者選擇是否自動登入,可以使用哪個機制?

(A) HttpSession

(B) Cookie

(C) HttpServletRequest

(D) URL 重寫

答案:B

提示:SessionCookieConfig可以設定儲存 Session ID 的 Cookie 存活期限,

但這必須在應用程式啟始時設定,無法讓使用者於應用程式服務期間選擇是否自

動登入,因此使用 Cookie,仍是實作使用者決定是否自動登入的機制。

5. 關於 HttpSession的 setMaxInactiveInterval()方法,以下描述何

者錯誤?

Page 12: Servlet & JSP 教學手冊第二版 - 課後練習解答

12

(A) 設定的單位是「分」

(B) 用來設定 HttpSession在瀏覽器多久沒活動後失效

(C) 用來設定 Cookie的失效時間

(D) 會覆蓋 web.xml 中<session-timeout>的設定

答案:A、C

6. 關於 HttpSession的描述,以下何者錯誤?

(A) 關閉瀏覽器後 HttpSession就會被回收

(B) 可以執行 invalidate()使之失效

(C) 不同的瀏覽器使用相同的 Session ID,也會取得不同的

HttpSession物件

(D) HttpSession 的 setMaxInactiveInterval()方法設定為-1

將永不失效

答案:A、C

提示:關閉瀏覽器後立即失效的是儲存 Session ID 的 Cookie,不是

HttpSession物件。

7. 哪幾個物件提供有 setAttribute()方法?

(A) ServletRequest

(B) HttpSession

(C) ServletConfig

(D) ServletResponse

答案:A、B

8. 關於 Servlet/JSP 的 Session ID,何者正確?

(A) 預設使用 Cookie 來儲存 Session ID

(B) Cookie 的名稱是 JSESSIONID

(C) 在禁用 Cookie 時,可以使用 URL 重寫來發送 Session ID

(D) 必須自行呼叫 HttpSession的 getId()方可產生

答案:A、C

提示:Session ID 可以透過 SessionCookieConfig 修改名稱。

9. 哪幾個物件的屬性設定可以跨越請求範圍?

(A) ServletRequest

(B) HttpSession

(C) ServletConfig

(D) ServletResponse

答案:B

Page 13: Servlet & JSP 教學手冊第二版 - 課後練習解答

13

10. HttpSession失效的時機為何?

(A) 執行 invaliate()方法

(B) 下次請求超過 web.xml 中<session-timeout>的設定時間

(C) 存活時間超過 setMaxInactiveInterval()方法設定的時間

(D) 關閉瀏覽器

答案:A、B

提示:無論是<session-timeout>或 setMaxInactiveInterval()所設定

的時間,都是指瀏覽器沒有再次請求活動的時間,而不是指 HttpSession本身

的存活時間。

實作題

1. 請實作一個 Web 應用程式,可動態產生使用者登入密碼,送出表單後必須

通過密碼驗證才可觀看到使用者頁面。

提示:此題仍第 3 章課後練習第 2 個實作題之延伸。

圖 4.10 圖片驗證

2. 實作一個登入表單,如果使用者核取「記住名稱、密碼」,則下次造訪表單

時,將會自動在名稱、密碼欄位填入上次登入時所使用的值。

圖 4.11 記住名稱、密碼

Page 14: Servlet & JSP 教學手冊第二版 - 課後練習解答

14

3. 實作一個購物車應用程式,可以在採購網頁進行購物、顯示目前採購項目數

量,並可觀看購物車內容。

圖 4.12 採購網頁

圖 4.13 購物車網頁

Page 15: Servlet & JSP 教學手冊第二版 - 課後練習解答

15

第 5 章課後練習

選擇題

1. 如果是整個應用程式會共用的資料,則適合存放在哪個物件之中成為屬性?

(A) ServletConfig

(B) ServletContext

(C) ServletRequest

(D) Session

答案:B

2. 如果要取得 ServletContext初始參數,則可以執行哪個方法?

(A) getContextParameter()

(B) getParameter()

(C) getInitParameter()

(D) getAttribute()

答案:C

3. 假設有段程式碼如下,其中 PARAM為設定於 web.xml 中的初始參數:

public class SomeServlet extends HttpServlet {

private String param;

public SomeServlet() {

param = getInitParameter("PARAM");

}

}

以下何者正確?

(A) param被設定為 web.xml 中的初始參數值

(B) 無法通過編譯

(C) 應該改用 getServletParameter()方法

(D) 發生 NullPointerException

答案:D

4. 繼承 HttpServlet之後,若要進行 Servlet 初始化,重新定義哪個方法才

是正確的作法?

(A) public void init(ServletConfig config) throws

ServletException;

Page 16: Servlet & JSP 教學手冊第二版 - 課後練習解答

16

(B) public void init() throws ServletException

(C) public String getInitParameter(String name)

(D) public Enumeration getInitParameterNames()

答案:B

5. 哪幾個物件提供有 getAttribute()方法?

(A) ServletRequest

(B) HttpSession

(C) ServletConfig

(D) ServletContext

答案:A、B、D

6. 關於過濾器的描述,以下何者正確?

(A) Filter介面定義了 init()、service()與 destroy()方法

(B) 會傳入 ServletRequest與 ServletResponse至 Filter

(C) 要執行下一個過濾器,必須執行 FilterChaing的 next()方法

(D) 如果要取得初始參數,要使用 FilterConfig物件

答案:B、D

7. 關於 FilterChain的描述,何者正確?

(A) 如果不呼叫 FilterChain 的 doFilter()方法,則請求略過接

下來的過濾器而直接交給 Servlet

(B) 如果有下一個過濾器,呼叫 FilterChain的 doFilter()方法,

會將請求交給下一個過濾器

(C) 如果沒有下一個過濾器,呼叫 FilterChain 的 doFilter()方

法,會將請求交給 Servlet

(D) 如果沒有下一個過濾器,呼叫 FilterChain 的 doFilter()方

法沒有作用

答案:B、C

8. 關於 FilterConfig的描述,何者錯誤?

(A) 會在 Filter介面的 init()方法呼叫時傳入

(B) 為@WebServlet、web.xml 中<filter>設定的代表物件

(C) 可讀取<servlet>標籤中<init-param>所設定的初始參數

(D) 可使用 getInitParameter()方法讀取初始參數

答案:A、B、D

Page 17: Servlet & JSP 教學手冊第二版 - 課後練習解答

17

9. 以下的程式碼將實作請求包裹器:

public class MyRequestWrapper ________________ {

public MyRequstWrapper(HttpServletRequest request) {

super(requset);

}

….

}

請問空白處應該填上哪個程式碼片段?

(A) implements ServletRequest

(B) extends ServletRequestWrapper

(C) implements HttpServletRequest

(D) extends HttpServletRequestWrapper

答案:D

10. 關於請求包裹器,以下描述何者正確?

(A) 可以實作 ServletRequest介面

(B) 可以繼承 ServletRequestWrapper類別

(C) 一定要繼承 ServletRequestWrapper類別

(D) HttpServletRequestWrapper 是

ServletRequestWrapper的子類別

答案:A、B、D

11. 關 於 HttpServletRequestWrapper 與

HttpServletResponseWrapper的描述,何者有誤?

(A) 分 別 實 作 了 HttpServletRequest 介 面 與

HttpServletResponse介面

(B) 分 別 繼 承 了 ServletRequestWrapper 與

ServletResponseWrapper類別

(C) 實作時,至少要重新定義一個父類別中的方法

(D) 實作時必須在建構式中呼叫父類別建構式

答案:A、B、D

12. 在開發過濾器時,以下何者是正確的觀念?

(A) 必須考慮前後過濾器之間的關係

(B) 掛上過濾器後不改變應用程式原有的功能

(C) 設計 Servlet 時必須考慮到未來加裝過濾器的需求

(D) 每個過濾器要設計為獨立互不影響的元件

答案:B、D

Page 18: Servlet & JSP 教學手冊第二版 - 課後練習解答

18

13. 關於 Filter介面上的 doFilter()方法之說明,何者有誤?

(A) 會傳入兩個參數 ServletRequest、ServletResponse

(B) 會傳入三個參數 ServletRequest、ServletResponse、

FilterChain

(C) 前一個過濾器呼叫 FilterChain 的 doFilter()後,會執行目

前過濾器的 doFilter()方法

(D) 前一個過濾器的 doFilter()執行過後,會執行目前過濾器的

doFilter()方法

答案:B、C

14. 你有一段程式碼片段:

HttpSession session = request.getSession();

User user = new User();

session.setAttrubute("user", user);

以下何種作法,可以讓你在不修改程式碼的情況下,實作統計線上人數?

(A) 實作 HttpSessionBindingListener

(B) 實作 HttpSessionListener

(C) 實作 HttpSessionActivationListener

(D) 以上皆非

答案:B

提示:題目要求不修改原有的程式碼,所以 B 是唯一的可能性。

15. 以下傾聽器中,不需要使用@WebListener或在 web.xml 中設定的是?

(A) HttpSessionListener

(B) HttpSessionBindingListener

(C) ServletContextListener

(D) ServletAttributeListener

答案:B

實作題

1. 請擴充 5.2.2 節中的範例,不僅統計線上人數,還可以在頁面上顯示目前登

入使用者的名稱、瀏覽器資訊、最後活動時間。

Page 19: Servlet & JSP 教學手冊第二版 - 課後練習解答

19

圖 5.11 線上使用者資訊

2. 在 5.2.2 節中,使用 HttpSessionBindingListener在使用者登入後進

行資料庫查詢功能,請改用 HttpSessionAttributeListener 來實作

這個功能。

3. 你的應用程式不允許使用者輸入 HTML 標籤,但可以允許使用者輸入一些

代碼作些簡單的樣式。例如:

[b]粗體[/b]

[i]斜體[/i]

[big]放大字體[/big]

[small]縮小字體[/small]

HTML 的過濾功能,可以直接使用本章所開發的字元過濾器,並基於該字元

過濾器進行擴充。

4. 在 5.3.3 開 發 的 字 元 編 碼 過 濾 器 與 編 碼 設 定 過 濾 器 , 繼 承

HttpServletRequestWrapper 後都僅重新定義了 getParameter()

方 法 , 事 實 上 為 了 完 整 性 , getParameterValues() 、

getParameterMap()等方法也要重新定義,請加強 5.3.3 的字元編碼過濾

器 與 編 碼 設 定 過 濾 器 , 針 對 getParameterValues() 、

getParameterMap()重新定義。

Page 20: Servlet & JSP 教學手冊第二版 - 課後練習解答

20

第 6 章課後練習

選擇題

1. 關於 JSP 的描述,哪個正確?

(A) JSP 是直譯式的網頁,與 Servlet 無關

(B) JSP 會先轉譯為.java,然後編譯為.class 載入容器

(C) JSP 會直接由容器動態生成 Servlet 實例,無需轉譯

(D) JSP 是丟到瀏覽器端,由瀏覽器進行直譯

答案:B

2. 關於 JSP 的描述,哪個正確?

(A) 要在 JSP 中撰寫 Java 程式碼,必須重新定義_jspService()

(B) 重新定義 jspInit()來作 JSP 初次載入容器的初始化動作

(C) 重新定義 jspDestroy()來作 JSP 從容器銷毀時的結尾動作

(D) 要在 JSP 中撰寫 Java 程式碼,必須重新定義 service()

答案:B、C

3. 如果想要在 JSP 中定義方法,應該使用哪個 JSP 元素?

(A) <% %>

(B) <%= %>

(C) <%! %>

(D) <%-- --%>

答案:C

4. 當 JSP 中有撰寫中文時,而執行結果出現亂碼,必須檢查 page 指示元素

的哪些屬性設定是否正確?

(A) contentType

(B) language

(C) extends

(D) pageEncoding

答案:A、D

提示:基本上還得檢查一下編輯器的預設編碼與 pageEncoding是否一致。

Page 21: Servlet & JSP 教學手冊第二版 - 課後練習解答

21

5. 哪個 JSP 隱含物件,轉譯後對應 ServletContext物件?

(A) pageContext

(B) config

(C) page

(D) application

答案:D

6. 在會話範圍中以名稱"bean"放置了一個 JavaBean 屬性,JavaBean 上有個

getMessage()方法,請問以下哪個方式呼叫 getMessage()以取得訊息

並顯示出來?

(A) <jsp:getProperty name="bean" property="message">

(B) ${requestScope.bean.message}

(C) <%= request.getBean().getMessage() %>

(D) ${bean.message}

答案:B、D

提示:<jsp:getProperty>前必須先使用<jsp:useBean>並指定 scope 為

request,否則<jsp:getProperty>只會在 page範圍中尋找屬性。

7. 在 Web 應用程式中有以下的程式碼,執行後轉發至某個 JSP 網頁:

Map<String, String> map = new HashMap<String, String>();

map.put("user", "caterpillar");

map.put("role", "admin");

request.setAttribute("login", map);

以下哪個選項可以正確地使用 EL 取得 map中的值?

(A) ${map.user}

(B) ${map["role"]}

(C) ${login.user}

(D) ${login[role]}

答案:C

提示:選項 D 必須改為${login["role"]}才是正確。

Page 22: Servlet & JSP 教學手冊第二版 - 課後練習解答

22

8. 在 Web 應用程式中有以下的程式碼,執行後轉發至某個 JSP 網頁:

Map<String, String> map = new HashMap<String, String>();

map.put("local.role", "admin");

request.setAttribute("login", map);

以下哪個選項可以正確地使用 EL 取得 map中的值?

(A) ${map.local.role}

(B) ${login.local.role}

(C) ${map["local.role"]}

(D) ${login["local.role"]}

答案:D

9. 在 Web 應用程式中有以下的程式碼,執行後轉發至某個 JSP 網頁:

List<String> names = new ArrayList<String>();

names.add("caterpillar");

request.setAttribute("names", names);

以下哪個選項可以正確地使用 EL 取得 List中的值?

(A) ${names.0}

(B) ${names[0]}

(C) ${names.[0]}

(D) ${names["0"]}

答案:B、D

提示:在[]指定索引值時可以用雙引號,所以 D 也是正確的。

10. 以下何者不是 EL 隱含物件?

(A) param

(B) request

(C) pageContext

(D) cookie

答案:B

實作題

JSP 終究會轉譯為 Servlet,Servlet 作得到的事,JSP 都作得到,試著將本章節

微網誌綜合練習中,cc.openhome.controller套件所有Servlet,全使用 JSP

來改寫,你會需要在 web.xml 中設定初始參數、URL 模式等。

Page 23: Servlet & JSP 教學手冊第二版 - 課後練習解答

23

第 7 章課後練習

選擇題

1. 哪些 JSTL 標籤可用來進行 Java 程式中 if、if..else的功能?

(A) <c:if>

(B) <c:else>

(C) <c:when>

(D) <c:otherwise>

答案:C、D

2. 如果打算使用 request 物件的 setCharacterEncoding()方法設定字

元編碼處理方式,則以下哪個 JSTL 標籤可以不必使用 Scriptlet?

(A) <c:if>

(B) <c:set>

(C) <c:out>

(D) <c:url>

答案:B

3. JSTL 的<c:forEach>標籤 items屬性,接受哪些型態?

(A) 字串

(B) 陣列

(C) Collection

(D) Map

答案:A、B、C、D

4. 關於<c:catch>的使用,哪幾個不正確?

(A) 使用<c:catch>將可能產生例外的網頁段落包起來

(B) JSP 頁面必須設定 isErrorPage為 true

(C) 例外發生時,使用 exception取得例外物件

(D) 例外物件會設定給 var屬性所指定的名稱

答案:A、D

5. 以下哪幾個選項,可以讓你在 JSP 的四個屬性範圍中設置物件?

(A) <jsp:setProperty>

(B) <jsp:useBean>

(C) <c:set>

Page 24: Servlet & JSP 教學手冊第二版 - 課後練習解答

24

(D) <c:setBean>

答案:B、C

6. 以下哪幾個選項,可以讓你設定 Locale資訊?

(A) <fmt:bundle>的 locale屬性

(B) <fmt:setBundle>的 value屬性

(C) <fmt:message>的 bundle屬性

(D) <fmt:setBundle>的 locale屬性

答案: B、D

提 示 : bundle 屬性 接 受 LocalizationContext , 建 構時 需 要 的

ResourceBundle可以指定 Locale物件

7. JSTL 函式庫提供的 length()函式,接受哪些型態?

(A) 字串

(B) 陣列

(C) Collection

(D) Map

答案:A、B、C、D

8. 如果 JSP中出現 HttpServletResponse的 sendRedirect()方法的使

用,可以考慮使用哪個標籤取代?

(A) <jsp:forward>

(B) <c:redirect>

(C) <c:url>

(D) <%@include>

答案:B

9. JSP 中出現了以下程式碼:

<% session.setAttribute("login", "caterpillar"); %>

以下哪個標籤可以避免這段程式碼的使用?

(A) <c:set var="login" value="caterpillar" scope="session"/>

(B) <jsp:setProperty var="login"

value="caterpillar" scope="session"/>

(C) <jsp:useBean id="login"

value="caterpillar" scope="session"/>

(D) <c:set target="login"

value="caterpillar" scope="session"/>

答案:A

Page 25: Servlet & JSP 教學手冊第二版 - 課後練習解答

25

10. 以下哪幾個選項可以進行 XML 字元替換?

(A) <c:out>

(B) ${fn:escapeXML}

(C) <fmt:message>

(D) ${param}

答案:A、B

實作題

1. 請建立一個首頁,預設用英文顯示訊息,但可以讓使用者選擇使用英文、繁

體中文或簡體中文。

圖 7.14 預設是英文首頁

圖 7.15 切換至繁體中文首頁

圖 7.16 切換至簡體中文首頁

Page 26: Servlet & JSP 教學手冊第二版 - 課後練習解答

26

第 8 章課後練習

選擇題

1. 如果 taglib設定如下:

<%@taglib prefix="x" uri="http://openhome.cc/magic/x"%>

則以下何者會是使用自訂標籤的正確方式?

(A) <x:if>

(B) <magic:forEach>

(C) <if/>

(D) <x:if/>

答案:A

2. 在使用 Tag File 自訂標籤時,若 JSP 中有以下的內容:

<%@taglib prefix="html" tagdir="/WEB-INF/tagFile" %>

以下何者描述正確?

(A) 可以<html:Errors/>的方式使用自訂標籤

(B) 可以<htmlErrors/>的方式使用自訂標籤

(C) 可以<Errors/>的方式使用自訂標籤

(D) taglib的定義有誤,無法使用自訂標籤

答案:D

提示:Tag File 只能放在/WEB-INF/tags 或其子資料夾中。

3. 關於 tag指示元素的 body-content屬性,以下說明何者正確?

(A) 可設定的值有 JSP、scriptless、empty與 tagdependent

(B) 預設值是 scriptless

(C) 設定為 tagdependent 時,本體內容將不作任何處理直接傳入

Tag File 中

(D) 如果本體中要執行 Scriptlet,則要設定為 JSP

答案:B、C

4. 在繼承 SimpleTagSupport後,doTag()的實作如下:

public void doTag() throws JspException {

try {

if(test) {

getJspBody(). ;

}

Page 27: Servlet & JSP 教學手冊第二版 - 課後練習解答

27

} catch (java.io.IOException ex) {

throw new JspException("執行錯誤", ex);

}

}

如果 test為 true時,將執行本體內容並輸出結果至瀏覽器,則空白部份

應填入?

(A) invoke()

(B) invoke(new JspWriter())

(C) invoke(null)

(D) invoke(new PrintWriter())

答案:C

5. 在繼承 SimpleTagSupport後,doTag()的實作如下:

public void doTag() throws JspException {

try {

if(test) {

// ...

}

else {

throw new ;

}

} catch (java.io.IOException ex) {

throw new JspException("執行錯誤", ex);

}

}

如果 test為 false時,希望能中斷 JSP 後續頁面的處理?則空白部份應

填入?

(A) SkipPageException()

(B) IOException()

(C) ServletException()

(D) Exception()

答案:A

6. 在繼承 TagSupport後,有個程式片段實作如下:

public int ______ ______ throws JspException {

if(test) {

// ...

return EVAL_PAGE;

Page 28: Servlet & JSP 教學手冊第二版 - 課後練習解答

28

}

return SKIP_PAGE;

}

如果 test為 false時,希望能中斷 JSP 後續頁面的處理?則空白部份應

是實作哪個方法?

(A) doTag()

(B) doStartTag()

(C) doEndTag()

(D) doAfterBody()

答案:C

7. 在繼承 BodyTagSupport 類別實作自訂標籤時,基本上 doStartTag()

方法可以傳回的有效值有哪幾個?

(A) SKIP_BODY

(B) EVAL_BODY_BUFFERED

(C) EVAL_BODY_INCLUDE

(D) EVAL_PAGE

答案:A、B、C

8. 在 TagSupport類別的實作中,doStartTag()、doEndTag()的預設傳

回值是?

(A) SKIP_BODY、EVAL_PAGE

(B) EVAL_BODY_INCLUDE、EVAL_PAGE

(C) EVAL_BODY_INCLUDE、SKIP_PAGE

(D) SKIP_BODY、SKIP_PAGE

答案:A

9. Tag File 檔案轉譯後,是繼承自哪個類別?

(A) TagSupport

(B) BodyTagSupport

(C) SimpleTagSupport

(D) HttpServlet

答案:B

10. 關於 Tag File,何者有誤?

(A) .tag檔案中可以使用 Scriptlet

(B) 自訂標籤的本體可以使用 Scriptlet

Page 29: Servlet & JSP 教學手冊第二版 - 課後練習解答

29

(C) .tag的 Scriptlet 中定義的變數,可以在 JSP 中使用

(D) .tag的 Scriptlet 中可以使用 request、response等隱含物件

答案:B、C

實作題

1. 請開發一個自訂標籤,可以如下使用:

<g:eachImage var="image" dir="/avatars">

<img src="${image}"/><br>

</g:eachImage>

你可以指定某個目錄,這個自訂標籤將取得該目錄下所有圖片的路徑,並設

定給 var 所指定的變數名稱,之後在標籤本體中可以使用該名稱(像上例

使用${image}搭配<img>標籤將圖片顯示在瀏覽器上)。

2. 請使用 Tag 開發自訂標籤,模擬 JSTL 的<c:set>與<c:remove>標籤功

能,其中<c:set>的模擬至少具備 var、value 與 scope 屬性,

<c:remove>的模擬至少具備 var、scope屬性。

Page 30: Servlet & JSP 教學手冊第二版 - 課後練習解答

30

第 9 章課後練習

選擇題

1. 哪些 JDBC 驅動程式可以有跨平台的特性?

(A) TYPE 1

(B) TYPE 2

(C) TYPE 3

(D) TYPE 4

答案:C、D

2. 哪種 JDBC 驅動程式是基於資料庫所提供的 API 來進行實作?

(A) TYPE 1

(B) TYPE 2

(C) TYPE 3

(D) TYPE 4

答案:B

3. JDBC 相關介面或類別,是放在哪個套件之下加以管理?

(A) java.lang

(B) javax.sql

(C) java.sql

(D) java.util

答案:C

4. 使用 JDBC 時,通常會需要處理哪個受檢例外(Checked Exception)?

(A) RuntimeException

(B) SQLException

(C) DBException

(D) DataException

答案:B

5. 關於 Connection的描述,何者正確?

(A) 可以從 DriverManager上取得 Connection

(B) 可以從 DataSource上取得 Connection

(C) 在方法結束之後 Connection會自動關閉

(D) Connection是執行緒安全(Thread-safe)

Page 31: Servlet & JSP 教學手冊第二版 - 課後練習解答

31

答案:A、B

提示:Connection 不是執行緒安全的,不可以在多執行緒環境下共用

Connection,以免發生資料錯亂的問題。

6. 使用 Statement來執行 SELECT等查詢用的 SQL 指令時,應使用下列哪

個方法?

(A) executeSQL()

(B) executeQuery()

(C) executeUpdate()

(D) executeFind()

答案:B

7. 哪個物件正確使用下,可以適當地避免 SQL Injection 的問題?

(A) Statement

(B) ResultSet

(C) PreparedStatement

(D) Command

答案:C

8. 取得 Connection之後,如何取得 Statement物件?

(A) conn.createStatement()

(B) conn.buildStatement()

(C) conn.getStatement()

(D) conn.createSQLStatement()

答案:A

9. 以下描述何者有誤?

(A) 使用 Statement一定會發生 SQL Injection

(B) 使用 PreparedStatement就不會發生 SQL Injection

(C) 不使用 Connection時必須加以關閉

(D) ResultSet代表查詢的結果集合

答案:A、B

提示:只要有正確的使用觀念,即使用 Statement 也不一定會發生 SQL

Injection。如果使用不正確,使用 PreparedStatement 也有可能發生 SQL

Injection。

10. 使用 Statement的 executeQuery()方法,會傳回哪個型態?

(A) int

Page 32: Servlet & JSP 教學手冊第二版 - 課後練習解答

32

(B) boolean

(C) ResultSet

(D) Table

答案:C

實作題

1. 微網誌應用程式中,AccountDAOJdbcImpl與 BlahDAOJdbcImpl中,

為了處理 SQLException 與正確的關閉 Statement、Connection,充

斥著大量重複的 try...catch 程式碼,請嘗試透過設計的方式,讓

try...catch 程式碼可以重複使用,以簡化 AccountDAOJdbcImpl 與

BlahDAOJdbcImpl的原始碼內容。

提示:搜尋關鍵字「JdbcTemplate」了解相關設計方式。

Page 33: Servlet & JSP 教學手冊第二版 - 課後練習解答

33

第 10 章課後練習

選擇題

1. 哪幾個 Web 容器提供的驗證方式,會出現對話方塊讓使用者輸入名稱、密

碼?

(A) BASIC

(B) FORM

(C) DIGEST

(D) CLIENT_CERT

答案:A、C、D

2. 以下何者驗證方式,有機會自行設計登入畫面與登出機制?

(A) BASIC

(B) FORM

(C) DIGEST

(D) CLIENT_CERT

答案:B

3. 在使用容器表單驗證時,<form>的 action屬性應設置為?

(A) j_security

(B) j_check

(C) j_security_check

(D) 沒有規範

答案:C

4. 假設有以下的 web.xml 設定檔:

<security-constraint>

<web-resource-collection>

<web-resource-name>Login Required</web-resource-name>

<url-pattern>/delete.jsp</url-pattern>

<url-pattern>/delete.do</url-pattern>

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

<auth-constraint>

<role-name>admin</role-name>

Page 34: Servlet & JSP 教學手冊第二版 - 課後練習解答

34

</auth-constraint>

</security-constraint>

以下描述何者正確?

(A) 只有 admin 角色才可以存取/delete.jsp 與/delete.do

(B) admin 角色只允許使用 GET 與 POST 方法

(C) GET 與 POST 方法只允許 admin 使用

(D) 其他角色可使用 GET、POST 以外的 HTTP 方法存取

答案:A、C、D

提示:admin 可以使用所有的 HTTP 方法來存取/delete.jsp 與/delete.do。

5. 如 果 要 保 證 資 料 傳 輸 時 的 完 整 性 與 機 密 性 , 必 須 在

<security_contraint>中使用哪兩個標籤?

(A) <user-data-constraint>

(B) <transport-guarantee>

(C) <auth-constraint>

(D) <form-login-config>

答案:A、B

6. 假設有以下的 web.xml 設定檔:

<security-constraint>

<web-resource-collection>

<web-resource-name>Login Required</web-resource-name>

<url-pattern>/delete.jsp</url-pattern>

<url-pattern>/delete.do</url-pattern>

</web-resource-collection>

<auth-constraint/>

</security-constraint>

以下描述何者正確?

(A) 所有角色都可以存取/delete.jsp 與/delete.do

(B) 存取/delete.jsp 與/delete.do 任何 HTTP 方法都是允許的

(C) 沒有任何角色可以存取/delete.jsp 與/delete.do

(D) 這個設定片段是錯誤的,無法部署

答案:C

7. 驗證成功但授權失敗,則會出現哪種狀態碼及訊息?

(A) 404 Not Found

(B) 401 Unauthorized

(C) 403 Forbidden

Page 35: Servlet & JSP 教學手冊第二版 - 課後練習解答

35

(D) 500 Error

答案:C

8. 哪幾個 Web 容器提供的驗證方式,會需要使用到憑證?

(A) BASIC

(B) FORM

(C) DIGEST

(D) CLIENT_CERT

答案:D

9. HttpServletRequest中的 isUserInRole()可以協助達到安全的哪項

要求?

(A) 驗證

(B) 授權

(C) 機密性

(D) 完整性

答案:B

提示:會使用到 isUserInRole()方法的 URL,基本上會先透過宣告式安全的

驗證及授權,再透過 isUserInRole()作更細部的授權控制。

10. 以下何者是<transport-guarantee>的合法設定值?

(A) NONE

(B) CONFIDENTIAL

(C) INTEGRAL

(D) SSL

答案:A、B、C

實作題

1. 在 9.2.4 曾經實作一個檔案管理程式,請利用本章學到的 Web 容器安全管

理,必須通過表單驗證才能使用檔案管理程式。

提示:如果使用 Tomcat,必須在 catalina.policy 中的 grant 區段,加入以下

內容:

// DataSource 與 Realm

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.tomcat.dbcp.dbcp";

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.tomcat.dbcp.pool.impl";

Page 36: Servlet & JSP 教學手冊第二版 - 課後練習解答

36

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.tomcat.dbcp.pool";

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.catalina.realm";

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.catalina.session";

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.tomcat.util.http.fileupload.disk";

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.tomcat.util.http.fileupload";

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.tomcat.util.http.fileupload.servlet";

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.tomcat.util.http.fileupload.util";

permission java.lang.RuntimePermission

"accessClassInPackage.org.apache.catalina.core";

permission java.net.SocketPermission

"localhost:3306","connect,resolve";

permission java.util.PropertyPermission "*","read";

Page 37: Servlet & JSP 教學手冊第二版 - 課後練習解答

37

第 11 章課後練習

實作題

1. 請實作一個簡單的圖片上傳程式,使用者上傳的圖片,可以直接內嵌在

HTML 郵件中顯示,而不是以附件方式顯示。例如若使用者使用以下表單:

圖 11.6 上傳圖片表單

則收到的郵件內容要是如下:

圖 11.7 內嵌圖片的 HTML 郵件

提示:搜尋關鍵字 cid。

Page 38: Servlet & JSP 教學手冊第二版 - 課後練習解答

38

第 12 章課後練習

選擇題

1. 當繼承 HttpServlet後,重新定義 doGet()方法,以在 GET 請求來到時

執行,這實際上是哪個模式的實現結果?

(A) Factory Method 模式

(B) Template Method 模式

(C) Command 模式

(D) Proxy 模式

答案:B

2. 在 web.xml 中定義使用者登入驗證過濾器、效能過濾器,就可以有攔截請

求,這是哪個模式的實現?

(A) Business Delegate 模式

(B) Interceptor Filter 模式

(C) Service Locator 模式

(D) Front Controller 模式

答案:B

3. 以下哪幾個屬於 Java EE 模式?

(A) Business Delegate 模式

(B) Interceptor Filter 模式

(C) Service Locator 模式

(D) Front Controller 模式

答案:A、B、C、D

4. 想要降低前端所採用技術及後端服務物件的耦合度,例如為免日後前端從

Servlet/JSP 改用 JSF 時必須對後端物件作出修改,則適合採用哪個模式?

(A) Business Delegate 模式

(B) Interceptor Filter 模式

(C) Service Locator 模式

(D) Front Controller 模式

答案:A

5. 在分散式的應用當中,你希望對某個物件隱藏取得遠端服務物件的細節(也

許是透過 RMI、JNDI 等),則應採用哪個模式?

Page 39: Servlet & JSP 教學手冊第二版 - 課後練習解答

39

(A) Business Delegate 模式

(B) Interceptor Filter 模式

(C) Service Locator 模式

(D) Front Controller 模式

答案:C