jsp九個內建物件、四個域物件及Servlet的三大域物件
一,什麼是內建物件?
在jsp開發中會頻繁使用到一些物件,如ServletContext HttpSession PageContext等.如果每次我們在jsp頁面中需要使用這些物件都要自己親自動手建立就會特別的繁瑣.SUN公司因此在設計jsp時,在jsp頁面載入完畢之後自動幫開發者建立好了這些物件,開發者只需要使用相應的物件呼叫相應的方法即可.這些系統建立好的物件就叫做內建物件.
在servlet程式中,如果開發者希望使用session物件,必須通過request.getSession()來得到session物件;而在jsp程式中,開發中可直接使用session(系統幫我們建立好的session物件的名字就叫session)呼叫相應的方法即可,如:session.getId().
二,九大內建物件到底是哪九大呢?
內建物件名 | 型別 |
---|---|
request | HttpServletRequest |
response | HttpServletResponse |
config | ServletConfig |
application | ServletContext |
session | HttpSession |
exception | Throwable |
page | Object(this) |
out | JspWriter |
pageContext | PageContext |
三,解析幾個內建物件
1)out物件物件,物件型別是JspWriter類,相當於帶快取的PrintWriter(不帶快取)
PrintWriter:write("內容") - - - - - 直接向瀏覽器輸出內容
JspWriter:writer("內容") - - - - - 向jsp緩衝區寫出內容
JspWriter當滿足以下條件時之一時,緩衝區的內容寫出:
a,緩衝區滿了
b,重新整理緩衝區
c,關閉緩衝區
d,jsp頁面執行完畢
2)pageContext物件
pageContext的物件型別是PageContext,叫jsp的上下文物件.
pageContext作用:可以獲取其他八個內建物件
//示例:
pageContext.getOut();
pageContext.getServletConfig()
使用場景:在自定義標籤時會頻繁使用到PageContext物件;或者是定義一個方法需要用到多個物件時,傳一個pageContext物件就能解決問題.
四,JSP中四大域物件
分類:
ServletContext context域
HttpServletRequet request域
HttpSession session域 --前三種在學習Servlet時就能接觸到
PageContext page域 --jsp學習的
域物件的作用:儲存資料,獲取資料,共享資料.
儲存資料:
pageContext.setAttribute("內容");//預設儲存到page域
pageContext.setAttribute("內容",域範圍常量);//儲存到指定域中
//四個域常量
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
獲取資料:
pageContext.getAttribute("內容");
<p>pageContext.getAttribute("name",<span style="font-family:宋體;">域範圍常量</span><span style="font-family:Calibri;">);</span></p>//自動在四個域中搜索資料
pageContext.findAttribute("內容");//在四個域中自動搜尋資料,順序:page域->request域->session域->application域(context域)
域作用範圍:
page域: 只能在當前jsp頁面使用 (當前頁面)
request域: 只能在同一個請求中使用 (轉發)
session域: 只能在同一個會話(session物件)中使用 (私有的)
context域: 只能在同一個web應用中使用 (全域性的)
Servlet的三大域物件
ServletContext context域
HttpServletRequet request域
HttpSession session域
- ServletConfig的解析;
/**
* 在javax.servlet包中,定義了ServletConfig介面。
* Servlet容器使用ServletConfig物件在Servlet初始化時向其傳遞配置資訊。
*所謂的Serlvet配置資訊,就是在Web應用程式中web.xml檔案中配置有關Servlet的內容。
*
*一個ServletConfig物件對應web.xml中一對<serlvet></servlet><servlet-mapping></servlet-mapping>
*其生命週期:是一個servlet的例項化,初始化,就緒,銷燬
*相比較與servletContext來說較短
*/
public class ServletConfig_Test extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletConfig servletConfig = getServletConfig();
//getInitParameter(String name)方法:返回指定名稱的初始化引數的值,如果引數不存在則返回null值。
String blog = servletConfig.getInitParameter("blog");
//getServletName()方法:獲取web.xml檔案中配置的Servlet名稱。
String servletname = servletConfig.getServletName();
}
}
- ServletContext
/**
* servletContext物件是Servlet三大域物件之一,每個Web專案都擁有且唯一的一個ServletContext物件,
* 該物件是Web專案的全域性物件或者上下文。Tomcat伺服器在啟動web專案時,會自動建立一個ServletContext物件,
* 在關閉時,會自動銷燬這個ServletContext物件。ServletContext物件可以在整個Web應用中共享資料資源。
*
* 由於一個WEB應用中的所有Servlet共享同一個ServletContext物件,因此Servlet物件之間可以通過ServletContext物件
* 實現通訊。
*
*1) 實現資料共享
*2) 獲取全域性配置引數
*3) 請求轉發
*a) 拿取請求轉發器,然後轉發
*4) 獲取資原始檔
*5) 用來獲得檔案的MIME的型別.
*
*/
public class ServletContext_text extends HttpServlet{
ServletContext sc ;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config) ;
sc = config.getServletContext() ;//1.
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//第二種方式
ServletContext sc1 = this.getServletContext() ;
System.out.println(sc);
System.out.println(sc1 == sc);
//第三種方式
ServletContext sc2 = request.getSession().getServletContext() ;
System.out.println(sc2 == sc);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}