SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
第 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
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




                                         2
10. Java EE 中各技術標準最後將由什麼文件明訂規範?
  (A) JCP
  (B) JSR
  (C) JDK
答:B
提示:JCP 是組織名稱。JDK 是 Java 開發工具箱名稱。




                                   3
第 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>


                                                                  4
<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



                                                   5
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 中撰寫判斷分支來呈現不同條件下的結果畫面
       ,                                            。




                                                                   6
第 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()


                                                           7
(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),瀏覽器會提示
       另存新檔


                                                                     8
答案: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




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


畫圖的部份不難,主要讓學生練習如何取得請求參數、如何使用
ServletOutputStream 以及利用搜尋引擎尋找解答的能力。


2.   請實作一個 Web 應用程式,可動態產生使用者登入密碼(參考下圖,僅需
     先實作動態產生密碼圖片功能即可 送出表單後密碼驗證功能還不用實現)
                      ,                。




               圖 3.19 動態產生登入密碼


提示:主要是上一題練習的延伸,隨機產生四個數字,再畫到圖片上。這個練習
可結合 Session 屬性的運用,就可實作出登入的部份。




                                      10
第 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()方法,以下描述何
   者錯誤?


                                                     11
(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


                                                         12
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
3.   實作一個購物車應用程式,可以在採購網頁進行購物、顯示目前採購項目數
     量,並可觀看購物車內容。




                圖 4.12 採購網頁




                圖 4.13 購物車網頁



                                     14
第 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;


                                                          15
(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




                                                         16
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


                                                            17
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 節中的範例,不僅統計線上人數,還可以在頁面上顯示目前登
     入使用者的名稱、瀏覽器資訊、最後活動時間。




                                                           18
圖 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
第 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 是否一致。




                                                   20
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"]}才是正確。




                                                                21
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 模式等。




                                                                22
第 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>


                                                 23
(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


                                                                     24
10. 以下哪幾個選項可以進行 XML 字元替換?
  (A)    <c:out>
  (B)    ${fn:escapeXML}
  (C)    <fmt:message>
  (D)    ${param}
答案:A、B


 實作題
1.   請建立一個首頁,預設用英文顯示訊息,但可以讓使用者選擇使用英文、繁
     體中文或簡體中文。




                     圖 7.14 預設是英文首頁




                    圖 7.15 切換至繁體中文首頁




                    圖 7.16 切換至簡體中文首頁




                                       25
第 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().              ;
           }


                                                               26
} 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;


                                                             27
}
         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


                                                28
(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
第 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)


                                                   30
答案: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


                                                          31
(B)   boolean
  (C)      ResultSet
  (D)      Table
答案:C


 實作題
1.   微網誌應用程式中,AccountDAOJdbcImpl 與 BlahDAOJdbcImpl 中,
     為了處理 SQLException 與正確的關閉 Statement、Connection,充
     斥著大量重複的 try...catch 程式碼,請嘗試透過設計的方式,讓
     try...catch 程式碼可以重複使用,以簡化 AccountDAOJdbcImpl 與
     BlahDAOJdbcImpl 的原始碼內容。
     提示:搜尋關鍵字「JdbcTemplate」了解相關設計方式。




                                                   32
第 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>


                                                                   33
</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


                                                                   34
(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";


                                                                       35
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
第 11 章課後練習
 實作題
1.   請實作一個簡單的圖片上傳程式,使用者上傳的圖片,可以直接內嵌在
     HTML 郵件中顯示,而不是以附件方式顯示。例如若使用者使用以下表單:




               圖 11.6 上傳圖片表單
     則收到的郵件內容要是如下:




              圖 11.7 內嵌圖片的 HTML 郵件
     提示:搜尋關鍵字 cid。



                                      37
第 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 等),則應採用哪個模式?


                                                38
(A)   Business Delegate 模式
  (B)   Interceptor Filter 模式
  (C)   Service Locator 模式
  (D)   Front Controller 模式
答案:C




                                39

Mais conteúdo relacionado

Mais procurados

Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletJustin Lin
 
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletJustin Lin
 
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理Justin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
 
整合資料庫
整合資料庫整合資料庫
整合資料庫Justin Lin
 
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLServlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLJustin Lin
 
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSPServlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSPJustin Lin
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤Justin Lin
 
Ch05 Servlet進階API、過濾器與傾聽器
Ch05 Servlet進階API、過濾器與傾聽器Ch05 Servlet進階API、過濾器與傾聽器
Ch05 Servlet進階API、過濾器與傾聽器Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch01 簡介Web應用程式
Ch01 簡介Web應用程式Ch01 簡介Web應用程式
Ch01 簡介Web應用程式Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Justin Lin
 
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Justin Lin
 
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定ServletJustin Lin
 

Mais procurados (20)

Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 ServletServlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版試讀 - 撰寫與設定 Servlet
 
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
 
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
Servlet & JSP 教學手冊第二版 - 第 4 章:會話管理
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
整合資料庫
整合資料庫整合資料庫
整合資料庫
 
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTLServlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
 
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSPServlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
Servlet & JSP 教學手冊第二版 - 第 6 章:使用 JSP
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
Servlet & JSP 教學手冊第二版 - 第 8 章:自訂標籤
 
Ch05 Servlet進階API、過濾器與傾聽器
Ch05 Servlet進階API、過濾器與傾聽器Ch05 Servlet進階API、過濾器與傾聽器
Ch05 Servlet進階API、過濾器與傾聽器
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch01 簡介Web應用程式
Ch01 簡介Web應用程式Ch01 簡介Web應用程式
Ch01 簡介Web應用程式
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
 
Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答Java SE 7 技術手冊 - 課後練習解答
Java SE 7 技術手冊 - 課後練習解答
 
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
 

Destaque

Spring 2.0 技術手冊書名頁
Spring 2.0 技術手冊書名頁Spring 2.0 技術手冊書名頁
Spring 2.0 技術手冊書名頁Justin Lin
 
Spring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 SpringSpring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 SpringJustin Lin
 
Java 8 與 retrolambda
Java 8 與 retrolambdaJava 8 與 retrolambda
Java 8 與 retrolambdaJustin Lin
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJustin Lin
 
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Justin Lin
 
Python 起步走
Python 起步走Python 起步走
Python 起步走Justin Lin
 

Destaque (6)

Spring 2.0 技術手冊書名頁
Spring 2.0 技術手冊書名頁Spring 2.0 技術手冊書名頁
Spring 2.0 技術手冊書名頁
 
Spring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 SpringSpring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 Spring
 
Java 8 與 retrolambda
Java 8 與 retrolambdaJava 8 與 retrolambda
Java 8 與 retrolambda
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
 
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
 
Python 起步走
Python 起步走Python 起步走
Python 起步走
 

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

中心教员J2 Ee面试题
中心教员J2 Ee面试题中心教员J2 Ee面试题
中心教员J2 Ee面试题yiditushe
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVCjeffz
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geekJohnson Gau
 
IoTDB Quick Start
IoTDB Quick StartIoTDB Quick Start
IoTDB Quick StartJialinQiao
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记yiditushe
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing江華 奚
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践Li JianYe
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile ServicesKuo-Chun Su
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现yiditushe
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展江華 奚
 
Struts快速学习指南
Struts快速学习指南Struts快速学习指南
Struts快速学习指南yiditushe
 
JdonFramework中文
JdonFramework中文JdonFramework中文
JdonFramework中文banq jdon
 
Entity framework 入門第一課
Entity framework 入門第一課Entity framework 入門第一課
Entity framework 入門第一課Sean Lu
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4Cat Chen
 
上海立派信息技术有限公司
上海立派信息技术有限公司上海立派信息技术有限公司
上海立派信息技术有限公司yiditushe
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析Justin Lin
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 

Semelhante a Servlet & JSP 教學手冊第二版 - 課後練習解答 (20)

中心教员J2 Ee面试题
中心教员J2 Ee面试题中心教员J2 Ee面试题
中心教员J2 Ee面试题
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVC
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
 
IoTDB Quick Start
IoTDB Quick StartIoTDB Quick Start
IoTDB Quick Start
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现基于J2 Ee 的通用Web 信息系统框架设计与实现
基于J2 Ee 的通用Web 信息系统框架设计与实现
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
Struts快速学习指南
Struts快速学习指南Struts快速学习指南
Struts快速学习指南
 
JdonFramework中文
JdonFramework中文JdonFramework中文
JdonFramework中文
 
Entity framework 入門第一課
Entity framework 入門第一課Entity framework 入門第一課
Entity framework 入門第一課
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
 
上海立派信息技术有限公司
上海立派信息技术有限公司上海立派信息技术有限公司
上海立派信息技术有限公司
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 

Mais de Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組Justin Lin
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理Justin Lin
 
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承Justin Lin
 
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別Justin Lin
 
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式Justin Lin
 
3.型態與運算子
3.型態與運算子3.型態與運算子
3.型態與運算子Justin Lin
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走Justin Lin
 
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDEJustin Lin
 
Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄Justin Lin
 

Mais de Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理
 
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
 
5. 從模組到類別
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
 
4. 流程語法與函式
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
 
3.型態與運算子
3.型態與運算子3.型態與運算子
3.型態與運算子
 
1. Python起步走
1. Python起步走1. Python起步走
1. Python起步走
 
2. 從 REPL 到 IDE
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
 
Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄Python 3.9 技術手冊目錄
Python 3.9 技術手冊目錄
 

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。 1
  • 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 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 的類別 答案: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> 4
  • 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 5
  • 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 中撰寫判斷分支來呈現不同條件下的結果畫面 , 。 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() 答案: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() 7
  • 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),瀏覽器會提示 另存新檔 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、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 9
  • 10. 圖 3.18 根據使用者輸入動態產生圖片內容 畫圖的部份不難,主要讓學生練習如何取得請求參數、如何使用 ServletOutputStream 以及利用搜尋引擎尋找解答的能力。 2. 請實作一個 Web 應用程式,可動態產生使用者登入密碼(參考下圖,僅需 先實作動態產生密碼圖片功能即可 送出表單後密碼驗證功能還不用實現) , 。 圖 3.19 動態產生登入密碼 提示:主要是上一題練習的延伸,隨機產生四個數字,再畫到圖片上。這個練習 可結合 Session 屬性的運用,就可實作出登入的部份。 10
  • 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()方法,以下描述何 者錯誤? 11
  • 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 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 答案: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; 15
  • 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 16
  • 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 17
  • 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 節中的範例,不僅統計線上人數,還可以在頁面上顯示目前登 入使用者的名稱、瀏覽器資訊、最後活動時間。 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 是丟到瀏覽器端,由瀏覽器進行直譯 答案: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 是否一致。 20
  • 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"]}才是正確。 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"]} 答案: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 模式等。 22
  • 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> 23
  • 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 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/> 答案: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(). ; } 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()) 答案: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; 27
  • 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 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、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) 30
  • 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 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、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> 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、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 34
  • 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"; 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 模式 答案: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 等),則應採用哪個模式? 38
  • 39. (A) Business Delegate 模式 (B) Interceptor Filter 模式 (C) Service Locator 模式 (D) Front Controller 模式 答案:C 39