Your SlideShare is downloading. ×
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Servlet & JSP 教學手冊第二版 - 課後練習解答
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

2,646

Published on

Servlet & JSP 教學手冊第二版

Servlet & JSP 教學手冊第二版

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,646
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
68
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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。 1
  • 2. 5. 中文字「良」在 UTF-8 編碼下,三個位元組的十六進位數值表示分別為 「E8」「89」「AF」 、 、 ,那麼在 URI 編碼規範下,應如何表示? (A) E889AF (B) %E889AF (C) %E8%89%AF (D) %E889AF%答案:C6. 以下何者是屬於客戶端執行的程式? (A) JSP (B) JavaScript (C) Servlet (D) Applet答案:B、D7. Servlet/JSP 主要是屬於哪個 Java 平台的規範之中? (A) Java SE (B) Java ME (C) Java EE答:C8.Servlet/JSP 必須基於哪一類型的容器才能提供服務? (A) Applet 容器 (B) 應用程式客戶端容器 (C) Web 容器 (D) EJB 容器答:C9. Web 容器在收到瀏覽器請求時,會如何處理請求? (A) 使用單一執行緒處理所有請求 (B) 一個請求就建立一個執行緒來處理請求 (C) 一個請求就建立一個行程來處理請求 (D) 一個請求就執行一個容器來處理請求答:B 2
  • 3. 10. Java EE 中各技術標準最後將由什麼文件明訂規範? (A) JCP (B) JSR (C) JDK答:B提示:JCP 是組織名稱。JDK 是 Java 開發工具箱名稱。 3
  • 4. 第 2 章課後練習 選擇題1.若要針對 HTTP 請求撰寫 Servlet 類別,以下何者是正確的作法? (A) 實作 Servlet 介面 (B) 繼承 GenericServlet (C) 繼承 HttpServlet (D) 直接定義一個結尾名稱為 Servlet 的類別答案:C2. 續上題,如何針對 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> 4
  • 5. <url-pattern>/goodbye</url-pattern> </servlet-mapping> 哪個 URL 可以正確的要求 Servlet 進行請求處理? (A) /GoodBye (B) /goodbye.do (C) /LoguotServlet (D) /goodbye答案:D5. 在 Web 容器中,以下哪兩個介面的實例分別代表 HTTP 請求與回應物件? (A) HttpRequest (B) HttpServletRequest (C) HttpServletResponse (D) HttpPrintWriter答案:B、C6. 在 Web 應用程式中 何者負責將 HTTP 請求轉換為 HttpServletRequest , 物件? (A) Servlet 物件 (B) HTTP 伺服器 (C) Web 容器 (D) JSP 網頁答案:C7.在 Web 應用程式的檔案與目錄結構中,web.xml 是放置在哪個目錄之中? (A) WEB-INF 目錄 (B) conf 目錄 (C) lib 目錄 (D) classes 目錄答案:A8.Web 應用程式中要尋找某個類別檔案,會到哪些位置尋找? (A) WEB-INF/classes 目錄 (B) WEB-INF/lib 中的 JAR 檔案 (C) 根目錄中的 bin 目錄 (D) JAR 檔案中的 META-INF 目錄答案:A、B 5
  • 6. 9. web-fragement.xml 必須放置在 JAR 檔案的哪個目錄中? (A) META-INF/resources 目錄 (B) META-INF 目錄 (C) classes 目錄 (D) config 目錄答案:B10. 你在 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 中撰寫判斷分支來呈現不同條件下的結果畫面 , 。 6
  • 7. 第 3 章課後練習課後練習 選擇題1. 以下的空格應該填入哪個方法? response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.____________; out.println("<html>"); ... (A) getPrintWriter() (B) getWriter() (C) getBufferedWriter() (D) getOutputWriter()答案:B2. 請問以下的 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() 7
  • 8. (C) 使用 response.sendRedirect("/WEB-INF/secret.jsp") (D) 使用 response.sendError("/WEB-INF/secret.jsp")答案:B4. 如果想知道使用者所使用的瀏覽器版本等相關訊息,可以執行哪一段程式 碼: (A) request.getHeaderParameter("User-Agent") (B) request.getParameter("User-Agent") (C) request.getHeader("User-Agent") (D) request.getRequestHeader("User-Agent")答案:C5. 如果想取得輸出串流物件對瀏覽器輸出位元資料,應該撰寫哪一段程式碼? (A) ResponseStream out = response.getResponseStream(); (B) ResponseStream out = response.getStream(); (C) ResponseStream out = response.getOutputStream(); (D) ServletOutputStream out = response.getOutputStream();答案:D6. 哪幾個程式碼可以取得 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),瀏覽器會提示 另存新檔 8
  • 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、C9. 下面哪個選項,可以正確地追加自訂標頭"MyHead"的值? (A) response.setHeader("MyHeader", "Value2"); (B) response.appendHeader("MyHeader", "Value2"); (C) response.addHeader("MyHeader", "Value2"); (D) response.insertHeader("MyHeader", "Value2");答案:C10. 哪幾個方法是定義在 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 9
  • 10. 圖 3.18 根據使用者輸入動態產生圖片內容畫圖的部份不難,主要讓學生練習如何取得請求參數、如何使用ServletOutputStream 以及利用搜尋引擎尋找解答的能力。2. 請實作一個 Web 應用程式,可動態產生使用者登入密碼(參考下圖,僅需 先實作動態產生密碼圖片功能即可 送出表單後密碼驗證功能還不用實現) , 。 圖 3.19 動態產生登入密碼提示:主要是上一題練習的延伸,隨機產生四個數字,再畫到圖片上。這個練習可結合 Session 屬性的運用,就可實作出登入的部份。 10
  • 11. 第 4 章課後練習 選擇題1. 在瀏覽器禁用 Cookie 的情況下,哪些機制仍可以用於會話管理? (A) HttpSession (B) URL 重寫 (C) 隱藏欄位 (D) Cookie API答案:B、C2. 如何設定 Cookie 的有效期限? (A) 使用 setMaxAge() (B) 使用 setMaxInactive() (C) 使用 setMaxInactiveInterval() (D) 在 web.xml 中設定<cookie-timeout>答案:A3. web.xml 中<session-timeout>的設定單位是? (A) 時 (B) 分 (C) 秒 (D) 毫秒答案:B4. 要讓使用者選擇是否自動登入,可以使用哪個機制? (A) HttpSession (B) Cookie (C) HttpServletRequest (D) URL 重寫答案:B提示 SessionCookieConfig 可以設定儲存 Session ID 的 Cookie 存活期限 : ,但這必須在應用程式啟始時設定 ,無法讓使用者於應用程式服務期間選擇是否自動登入,因此使用 Cookie,仍是實作使用者決定是否自動登入的機制。5. 關於 HttpSession 的 setMaxInactiveInterval()方法,以下描述何 者錯誤? 11
  • 12. (A) 設定的單位是「分」 (B) 用來設定 HttpSession 在瀏覽器多久沒活動後失效 (C) 用來設定 Cookie 的失效時間 (D) 會覆蓋 web.xml 中<session-timeout>的設定答案:A、C6. 關於 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、B8. 關於 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 12
  • 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 記住名稱、密碼 13
  • 14. 3. 實作一個購物車應用程式,可以在採購網頁進行購物、顯示目前採購項目數 量,並可觀看購物車內容。 圖 4.12 採購網頁 圖 4.13 購物車網頁 14
  • 15. 第 5 章課後練習 選擇題1. 如果是整個應用程式會共用的資料,則適合存放在哪個物件之中成為屬性? (A) ServletConfig (B) ServletContext (C) ServletRequest (D) Session答案:B2. 如果要取得 ServletContext 初始參數,則可以執行哪個方法? (A) getContextParameter() (B) getParameter() (C) getInitParameter() (D) getAttribute()答案:C3. 假設有段程式碼如下,其中 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答案:D4. 繼承 HttpServlet 之後,若要進行 Servlet 初始化,重新定義哪個方法才 是正確的作法? (A) public void init(ServletConfig config) throws ServletException; 15
  • 16. (B) public void init() throws ServletException (C) public String getInitParameter(String name) (D) public Enumeration getInitParameterNames()答案:B5. 哪幾個物件提供有 getAttribute()方法? (A) ServletRequest (B) HttpSession (C) ServletConfig (D) ServletContext答案:A、B、D6. 關於過濾器的描述,以下何者正確? (A) Filter 介面定義了 init()、service()與 destroy()方法 (B) 會傳入 ServletRequest 與 ServletResponse 至 Filter (C) 要執行下一個過濾器,必須執行 FilterChaing 的 next()方法 (D) 如果要取得初始參數,要使用 FilterConfig 物件答案:B、D7. 關於 FilterChain 的描述,何者正確? (A) 如果不呼叫 FilterChain 的 doFilter()方法,則請求略過接 下來的過濾器而直接交給 Servlet (B) 如果有下一個過濾器,呼叫 FilterChain 的 doFilter()方法, 會將請求交給下一個過濾器 (C) 如果沒有下一個過濾器,呼叫 FilterChain 的 doFilter()方 法,會將請求交給 Servlet (D) 如果沒有下一個過濾器,呼叫 FilterChain 的 doFilter()方 法沒有作用答案:B、C8.關於 FilterConfig 的描述,何者錯誤? (A) 會在 Filter 介面的 init()方法呼叫時傳入 (B) 為@WebServlet、web.xml 中<filter>設定的代表物件 (C) 可讀取<servlet>標籤中<init-param>所設定的初始參數 (D) 可使用 getInitParameter()方法讀取初始參數答案:A、B、D 16
  • 17. 9. 以下的程式碼將實作請求包裹器:public class MyRequestWrapper ________________ { public MyRequstWrapper(HttpServletRequest request) { super(requset); } ….} 請問空白處應該填上哪個程式碼片段? (A) implements ServletRequest (B) extends ServletRequestWrapper (C) implements HttpServletRequest (D) extends HttpServletRequestWrapper答案:D10. 關於請求包裹器,以下描述何者正確? (A) 可以實作 ServletRequest 介面 (B) 可以繼承 ServletRequestWrapper 類別 (C) 一定要繼承 ServletRequestWrapper 類別 (D) HttpServletRequestWrapper 是 ServletRequestWrapper 的子類別答案:A、B、D11. 關 於 HttpServletRequestWrapper 與 HttpServletResponseWrapper 的描述,何者有誤? (A) 分 別 實 作 了 HttpServletRequest 介 面 與 HttpServletResponse 介面 (B) 分 別 繼 承 了 ServletRequestWrapper 與 ServletResponseWrapper 類別 (C) 實作時,至少要重新定義一個父類別中的方法 (D) 實作時必須在建構式中呼叫父類別建構式答案:A、B、D12. 在開發過濾器時,以下何者是正確的觀念? (A) 必須考慮前後過濾器之間的關係 (B) 掛上過濾器後不改變應用程式原有的功能 (C) 設計 Servlet 時必須考慮到未來加裝過濾器的需求 (D) 每個過濾器要設計為獨立互不影響的元件答案:B、D 17
  • 18. 13. 關於 Filter 介面上的 doFilter()方法之說明,何者有誤? (A) 會傳入兩個參數 ServletRequest、ServletResponse (B) 會 傳 入 三 個 參 數 ServletRequest 、 ServletResponse 、 FilterChain (C) 前一個過濾器呼叫 FilterChain 的 doFilter()後,會執行目 前過濾器的 doFilter()方法 (D) 前一個過濾器的 doFilter()執行過後,會執行目前過濾器的 doFilter()方法答案:B、C14. 你有一段程式碼片段: 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 節中的範例,不僅統計線上人數,還可以在頁面上顯示目前登 入使用者的名稱、瀏覽器資訊、最後活動時間。 18
  • 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()重新定義。 19
  • 20. 第 6 章課後練習 選擇題1.關於 JSP 的描述,哪個正確? (A) JSP 是直譯式的網頁,與 Servlet 無關 (B) JSP 會先轉譯為.java,然後編譯為.class 載入容器 (C) JSP 會直接由容器動態生成 Servlet 實例,無需轉譯 (D) JSP 是丟到瀏覽器端,由瀏覽器進行直譯答案:B2. 關於 JSP 的描述,哪個正確? (A) 要在 JSP 中撰寫 Java 程式碼,必須重新定義_jspService() (B) 重新定義 jspInit()來作 JSP 初次載入容器的初始化動作 (C) 重新定義 jspDestroy()來作 JSP 從容器銷毀時的結尾動作 (D) 要在 JSP 中撰寫 Java 程式碼,必須重新定義 service()答案:B、C3. 如果想要在 JSP 中定義方法,應該使用哪個 JSP 元素? (A) <% %> (B) <%= %> (C) <%! %> (D) <%-- --%>答案:C4. 當 JSP 中有撰寫中文時,而執行結果出現亂碼,必須檢查 page 指示元素 的哪些屬性設定是否正確? (A) contentType (B) language (C) extends (D) pageEncoding答案:A、D提示:基本上還得檢查一下編輯器的預設編碼與 pageEncoding 是否一致。 20
  • 21. 5. 哪個 JSP 隱含物件,轉譯後對應 ServletContext 物件? (A) pageContext (B) config (C) page (D) application答案:D6. 在會話範圍中以名稱"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"]}才是正確。 21
  • 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"]}答案:D9. 在 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 模式等。 22
  • 23. 第 7 章課後練習 選擇題1. 哪些 JSTL 標籤可用來進行 Java 程式中 if、if..else 的功能? (A) <c:if> (B) <c:else> (C) <c:when> (D) <c:otherwise>答案:C、D2. 如果打算使用 request 物件的 setCharacterEncoding()方法設定字 元編碼處理方式,則以下哪個 JSTL 標籤可以不必使用 Scriptlet? (A) <c:if> (B) <c:set> (C) <c:out> (D) <c:url>答案:B3. JSTL 的<c:forEach>標籤 items 屬性,接受哪些型態? (A) 字串 (B) 陣列 (C) Collection (D) Map答案:A、B、C、D4. 關於<c:catch>的使用,哪幾個不正確? (A) 使用<c:catch>將可能產生例外的網頁段落包起來 (B) JSP 頁面必須設定 isErrorPage 為 true (C) 例外發生時,使用 exception 取得例外物件 (D) 例外物件會設定給 var 屬性所指定的名稱答案:A、D5. 以下哪幾個選項,可以讓你在 JSP 的四個屬性範圍中設置物件? (A) <jsp:setProperty> (B) <jsp:useBean> (C) <c:set> 23
  • 24. (D) <c:setBean>答案:B、C6. 以下哪幾個選項,可以讓你設定 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、D8. 如果 JSP 中出現 HttpServletResponse 的 sendRedirect()方法的使 用,可以考慮使用哪個標籤取代? (A) <jsp:forward> (B) <c:redirect> (C) <c:url> (D) <%@include>答案:B9. 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 24
  • 25. 10. 以下哪幾個選項可以進行 XML 字元替換? (A) <c:out> (B) ${fn:escapeXML} (C) <fmt:message> (D) ${param}答案:A、B 實作題1. 請建立一個首頁,預設用英文顯示訊息,但可以讓使用者選擇使用英文、繁 體中文或簡體中文。 圖 7.14 預設是英文首頁 圖 7.15 切換至繁體中文首頁 圖 7.16 切換至簡體中文首頁 25
  • 26. 第 8 章課後練習 選擇題1. 如果 taglib 設定如下: <%@taglib prefix="x" uri="http://openhome.cc/magic/x"%> 則以下何者會是使用自訂標籤的正確方式? (A) <x:if> (B) <magic:forEach> (C) <if/> (D) <x:if/>答案:A2. 在使用 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、C4. 在繼承 SimpleTagSupport 後,doTag()的實作如下: public void doTag() throws JspException { try { if(test) { getJspBody(). ; } 26
  • 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())答案:C5. 在繼承 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()答案:A6. 在繼承 TagSupport 後,有個程式片段實作如下: public int ______ ______ throws JspException { if(test) { // ... return EVAL_PAGE; 27
  • 28. } return SKIP_PAGE; } 如果 test 為 false 時,希望能中斷 JSP 後續頁面的處理?則空白部份應 是實作哪個方法? (A) doTag() (B) doStartTag() (C) doEndTag() (D) doAfterBody()答案:C7. 在繼承 BodyTagSupport 類別實作自訂標籤時,基本上 doStartTag() 方法可以傳回的有效值有哪幾個? (A) SKIP_BODY (B) EVAL_BODY_BUFFERED (C) EVAL_BODY_INCLUDE (D) EVAL_PAGE答案:A、B、C8.在 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答案:A9. Tag File 檔案轉譯後,是繼承自哪個類別? (A) TagSupport (B) BodyTagSupport (C) SimpleTagSupport (D) HttpServlet答案:B10. 關於 Tag File,何者有誤? (A) .tag 檔案中可以使用 Scriptlet (B) 自訂標籤的本體可以使用 Scriptlet 28
  • 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 屬性。 29
  • 30. 第 9 章課後練習 選擇題1. 哪些 JDBC 驅動程式可以有跨平台的特性? (A) TYPE 1 (B) TYPE 2 (C) TYPE 3 (D) TYPE 4答案:C、D2. 哪種 JDBC 驅動程式是基於資料庫所提供的 API 來進行實作? (A) TYPE 1 (B) TYPE 2 (C) TYPE 3 (D) TYPE 4答案:B3. JDBC 相關介面或類別,是放在哪個套件之下加以管理? (A) java.lang (B) javax.sql (C) java.sql (D) java.util答案:C4. 使用 JDBC 時,通常會需要處理哪個受檢例外(Checked Exception)? (A) RuntimeException (B) SQLException (C) DBException (D) DataException答案:B5. 關於 Connection 的描述,何者正確? (A) 可以從 DriverManager 上取得 Connection (B) 可以從 DataSource 上取得 Connection (C) 在方法結束之後 Connection 會自動關閉 (D) Connection 是執行緒安全(Thread-safe) 30
  • 31. 答案:A、B提 示 : Connection 不 是 執 行 緒 安 全 的 , 不 可 以 在 多 執 行 緒 環 境 下 共 用Connection,以免發生資料錯亂的問題。6. 使用 Statement 來執行 SELECT 等查詢用的 SQL 指令時,應使用下列哪 個方法? (A) executeSQL() (B) executeQuery() (C) executeUpdate() (D) executeFind()答案:B7. 哪個物件正確使用下,可以適當地避免 SQL Injection 的問題? (A) Statement (B) ResultSet (C) PreparedStatement (D) Command答案:C8. 取得 Connection 之後,如何取得 Statement 物件? (A) conn.createStatement() (B) conn.buildStatement() (C) conn.getStatement() (D) conn.createSQLStatement()答案:A9. 以下描述何者有誤? (A) 使用 Statement 一定會發生 SQL Injection (B) 使用 PreparedStatement 就不會發生 SQL Injection (C) 不使用 Connection 時必須加以關閉 (D) ResultSet 代表查詢的結果集合答案:A、B提示:只要有正確的使用觀念,即使用 Statement 也不一定會發生 SQLInjection。如果使用不正確,使用 PreparedStatement 也有可能發生 SQLInjection。10. 使用 Statement 的 executeQuery()方法,會傳回哪個型態? (A) int 31
  • 32. (B) boolean (C) ResultSet (D) Table答案:C 實作題1. 微網誌應用程式中,AccountDAOJdbcImpl 與 BlahDAOJdbcImpl 中, 為了處理 SQLException 與正確的關閉 Statement、Connection,充 斥著大量重複的 try...catch 程式碼,請嘗試透過設計的方式,讓 try...catch 程式碼可以重複使用,以簡化 AccountDAOJdbcImpl 與 BlahDAOJdbcImpl 的原始碼內容。 提示:搜尋關鍵字「JdbcTemplate」了解相關設計方式。 32
  • 33. 第 10 章課後練習 選擇題1. 哪幾個 Web 容器提供的驗證方式,會出現對話方塊讓使用者輸入名稱、密 碼? (A) BASIC (B) FORM (C) DIGEST (D) CLIENT_CERT答案:A、C、D2. 以下何者驗證方式,有機會自行設計登入畫面與登出機制? (A) BASIC (B) FORM (C) DIGEST (D) CLIENT_CERT答案:B3. 在使用容器表單驗證時,<form>的 action 屬性應設置為? (A) j_security (B) j_check (C) j_security_check (D) 沒有規範答案:C4. 假設有以下的 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> 33
  • 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、B6. 假設有以下的 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) 這個設定片段是錯誤的,無法部署答案:C7. 驗證成功但授權失敗,則會出現哪種狀態碼及訊息? (A) 404 Not Found (B) 401 Unauthorized (C) 403 Forbidden 34
  • 35. (D) 500 Error答案:C8. 哪幾個 Web 容器提供的驗證方式,會需要使用到憑證? (A) BASIC (B) FORM (C) DIGEST (D) CLIENT_CERT答案:D9. 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"; 35
  • 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"; 36
  • 37. 第 11 章課後練習 實作題1. 請實作一個簡單的圖片上傳程式,使用者上傳的圖片,可以直接內嵌在 HTML 郵件中顯示,而不是以附件方式顯示。例如若使用者使用以下表單: 圖 11.6 上傳圖片表單 則收到的郵件內容要是如下: 圖 11.7 內嵌圖片的 HTML 郵件 提示:搜尋關鍵字 cid。 37
  • 38. 第 12 章課後練習 選擇題1. 當繼承 HttpServlet 後,重新定義 doGet()方法,以在 GET 請求來到時 執行,這實際上是哪個模式的實現結果? (A) Factory Method 模式 (B) Template Method 模式 (C) Command 模式 (D) Proxy 模式答案:B2. 在 web.xml 中定義使用者登入驗證過濾器、效能過濾器,就可以有攔截請 求,這是哪個模式的實現? (A) Business Delegate 模式 (B) Interceptor Filter 模式 (C) Service Locator 模式 (D) Front Controller 模式答案:B3.以下哪幾個屬於 Java EE 模式? (A) Business Delegate 模式 (B) Interceptor Filter 模式 (C) Service Locator 模式 (D) Front Controller 模式答案:A、B、C、D4. 想要降低前端所採用技術及後端服務物件的耦合度,例如為免日後前端從 Servlet/JSP 改用 JSF 時必須對後端物件作出修改,則適合採用哪個模式? (A) Business Delegate 模式 (B) Interceptor Filter 模式 (C) Service Locator 模式 (D) Front Controller 模式答案:A5. 在分散式的應用當中,你希望對某個物件隱藏取得遠端服務物件的細節(也 許是透過 RMI、JNDI 等),則應採用哪個模式? 38
  • 39. (A) Business Delegate 模式 (B) Interceptor Filter 模式 (C) Service Locator 模式 (D) Front Controller 模式答案:C 39

×