內建預設物件
JSP 預先宣告了幾個物件,可以讓我們直接在 <% %>
裡使用:
application | 在 Servlet 常用的 ServletContext 物件。 |
config | 在 Servlet 常用的 ServletConfig 物件。 |
out | JSP 自帶的 JspWriter 物件。 |
page | 基本上是個 Object 的物件。 |
pageContext | JSP 自帶的 PageContext 物件。 |
request | 在 Servlet 常用的 HttpServletRequest 物件。 |
response | 在 Servlet 常用的 HttpServletResponse 物件。 |
session | 在 Servlet 常用的 HttpSession 物件。 |
exception | 基本上是個 Throwable 的物件。 |
application
用來保存所有瀏覽這個站點(web-app)的使用者共用的訊息,像是聊天室就能以這個機制簡單架設,只要使用 setAttribute("屬性名稱","屬性內容")
紀錄訊息,然後用 getAttribute("屬性名稱")
取得「屬性內容」即可,也可用 removeAttribute("屬性名稱")
刪除。更多…
其它還有一些有趣、但不常用的功能,像是可將初始化設定值寫在 web.xml 裡面當作參數,然後透過 application 的 getInitParameter()
取出來使用:
[ WEB-INF\web.xml ]
[ helloworld.jsp ]
[ browser ]
config
可以取得在 web.xml 為 Servlet 設定的初始化參數,基本上用不到,因此略過;不想略過的話,請按我。
使用 getInitParameter("屬性名稱")
,取得 web.xml 中以 <init-param><param-name>屬性名稱</param-name><param-value>屬性內容</param-value></init-param>
設定的「屬性內容」,例如:
[ WEB-INF\web.xml ]
[ helloworld.jsp ]
[ browser ]
可以使用 getInitParameterNames()
取得所有參數名稱。
out
用 print()
或 println()
輸出字串資料給 HTML 網頁。
page(基本上用不到)
既然是個 Object,也就表示沒什麼功能可以操作,純粹用來表示 JSP 網頁本身的物件。
pageContext(原則上別用到)
可以使用 setAttribute("鍵", "值")
將資料紀錄在網頁中保存,再用 getAttribute("鍵")
把「值」取出來。
request
負責接收 HTTP 通訊的物件,通常用來取得經由 HTTP 通訊所夾帶的訊息,例如前一張網頁遞交的 form 填表資料,通常使用 getParameter("元件名稱")
取得填表資料,或者在那之前使用 SetCharacterEncoding("字元編碼")
設定以哪一種編碼來取得資料,避免亂碼。更多…
除此之外,還可用 getRemoteAddr()
取得 IP、getRemoteHost()
取得主機名稱、getHeader("屬性名稱")
取得使用者操作環境與 HTML 中 HEADER 的訊息,像是以 request.getHeader("user-agent")
來判斷使用者的作業系統與瀏覽器。
response
負責發送 HTTP 通訊的物件,主要透過其 sendRedirect("網址")
重新導向網頁。
雖然在 Servlet 這是非常實用的物件,不過在基本上是 HTML 的 JSP 有直接做法,變得很少用到。通常需要進階描述發送出去的訊息時才會使用,像是遞交 File 物件時以 setContextType()
描述 MIME、或者希望能確認遞交動作是否完成而使用 isCommitted()
、甚至最佳化 HTTP 發送的緩衝大小而使用 setBufferSize()
。
session
用來保存使用者瀏覽期間的訊息,裡面的資料會在關閉瀏覽器後才清除,資料存在期間,使用者在網站開啟的每張 JSP 網頁,都能共用 session 物件的資料。適合跨網頁保存資料的場合,例如是否已登錄帳戶的訊息。
你可以在 A.jsp 中使用 session.setAttribute("屬性名稱","屬性內容")
將訊息保存在 session,然後在 B.jsp 使用 session.getAttribute("屬性名稱")
取得「屬性內容」。
與 application 物件的差別是,session 只有使用者能存取資料,其他瀏覽同一個網站的使用者並沒有共用這些資料。
exception
可用 getMessage()
取得前一張網頁所 throw 出的 Exception 訊息,必須搭配 <%@ page isErrorPage="ture" %>
將用到 exception 物件的 JSP 網頁,設為錯誤處理專用的頁面。
通常會在前一張網頁使用 <%@ page errorPage="" %>
指令,指向含有 exception.getMessage() 的 JSP 網頁,再用 <% throw new Exception("") %>
丟出錯誤訊息,讓 exception.getMessage() 的 JSP 網頁接收~