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

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章