'JSP面試題都在這裡(修訂版)'

JSP Java 人生第一份工作 Java架構人生 2019-08-23
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

out對象:
  • out對象用於向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型並不是PrintWriter,是JspWriter
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

out對象:
  • out對象用於向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型並不是PrintWriter,是JspWriter
JSP面試題都在這裡(修訂版)

  • 我們可以簡單理解為:JspWriter就是帶緩存的PrintWrieter
  • out對象的原理如下:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

out對象:
  • out對象用於向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型並不是PrintWriter,是JspWriter
JSP面試題都在這裡(修訂版)

  • 我們可以簡單理解為:JspWriter就是帶緩存的PrintWrieter
  • out對象的原理如下:
JSP面試題都在這裡(修訂版)

  • 只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象才去調用ServletResponse.getWriter方法,並通過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中
  • 設置page指令的buffer屬性關閉了out對象的緩存功能
  • out對象的緩衝區已滿
  • 整個JSP頁面結束
  • 一般我們在JSP頁面輸出都是用表達式(<%=%>),所以out對象用得並不是很多
page對象

內置對象page是HttpJasPage對象,其實page對象代表的就是當前JSP頁面,是當前JSP編譯後的Servlet類的對象。也就是說:page對象相當於普通java類的this

exception對象
  • 內置對象exception是java.lang.Exception類的對象,exception封裝了JSP頁面拋出的異常信息。exception經常被用來處理錯誤頁面
  • 前面我們已經講過了怎麼設置錯誤頁面了,下面我們就來簡單使用一下exception對象吧
  • 1.jsp頁面
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

out對象:
  • out對象用於向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型並不是PrintWriter,是JspWriter
JSP面試題都在這裡(修訂版)

  • 我們可以簡單理解為:JspWriter就是帶緩存的PrintWrieter
  • out對象的原理如下:
JSP面試題都在這裡(修訂版)

  • 只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象才去調用ServletResponse.getWriter方法,並通過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中
  • 設置page指令的buffer屬性關閉了out對象的緩存功能
  • out對象的緩衝區已滿
  • 整個JSP頁面結束
  • 一般我們在JSP頁面輸出都是用表達式(<%=%>),所以out對象用得並不是很多
page對象

內置對象page是HttpJasPage對象,其實page對象代表的就是當前JSP頁面,是當前JSP編譯後的Servlet類的對象。也就是說:page對象相當於普通java類的this

exception對象
  • 內置對象exception是java.lang.Exception類的對象,exception封裝了JSP頁面拋出的異常信息。exception經常被用來處理錯誤頁面
  • 前面我們已經講過了怎麼設置錯誤頁面了,下面我們就來簡單使用一下exception對象吧
  • 1.jsp頁面
JSP面試題都在這裡(修訂版)

  • error.jsp頁面
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

out對象:
  • out對象用於向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型並不是PrintWriter,是JspWriter
JSP面試題都在這裡(修訂版)

  • 我們可以簡單理解為:JspWriter就是帶緩存的PrintWrieter
  • out對象的原理如下:
JSP面試題都在這裡(修訂版)

  • 只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象才去調用ServletResponse.getWriter方法,並通過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中
  • 設置page指令的buffer屬性關閉了out對象的緩存功能
  • out對象的緩衝區已滿
  • 整個JSP頁面結束
  • 一般我們在JSP頁面輸出都是用表達式(<%=%>),所以out對象用得並不是很多
page對象

內置對象page是HttpJasPage對象,其實page對象代表的就是當前JSP頁面,是當前JSP編譯後的Servlet類的對象。也就是說:page對象相當於普通java類的this

exception對象
  • 內置對象exception是java.lang.Exception類的對象,exception封裝了JSP頁面拋出的異常信息。exception經常被用來處理錯誤頁面
  • 前面我們已經講過了怎麼設置錯誤頁面了,下面我們就來簡單使用一下exception對象吧
  • 1.jsp頁面
JSP面試題都在這裡(修訂版)

  • error.jsp頁面
JSP面試題都在這裡(修訂版)

  • 效果:
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

out對象:
  • out對象用於向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型並不是PrintWriter,是JspWriter
JSP面試題都在這裡(修訂版)

  • 我們可以簡單理解為:JspWriter就是帶緩存的PrintWrieter
  • out對象的原理如下:
JSP面試題都在這裡(修訂版)

  • 只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象才去調用ServletResponse.getWriter方法,並通過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中
  • 設置page指令的buffer屬性關閉了out對象的緩存功能
  • out對象的緩衝區已滿
  • 整個JSP頁面結束
  • 一般我們在JSP頁面輸出都是用表達式(<%=%>),所以out對象用得並不是很多
page對象

內置對象page是HttpJasPage對象,其實page對象代表的就是當前JSP頁面,是當前JSP編譯後的Servlet類的對象。也就是說:page對象相當於普通java類的this

exception對象
  • 內置對象exception是java.lang.Exception類的對象,exception封裝了JSP頁面拋出的異常信息。exception經常被用來處理錯誤頁面
  • 前面我們已經講過了怎麼設置錯誤頁面了,下面我們就來簡單使用一下exception對象吧
  • 1.jsp頁面
JSP面試題都在這裡(修訂版)

  • error.jsp頁面
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)

總結:

  1. request 用戶端請求,此請求會包含來自GET/POST請求的參數
  2. response 網頁傳回用戶端的迴應
  3. pageContext 網頁的屬性是在這裡管理,代表的編譯後JSP內容
  4. session 與請求有關的會話期
  5. application servlet 正在執行的內容
  6. out 用來傳送回應的輸出
  7. config servlet的構架部件
  8. page JSP網頁本身
  9. exception 針對錯誤網頁,未捕捉的例外

jsp和servlet的區別、共同點、各自應用的範圍?

jsp和servlet的區別、共同點、各自應用的範圍?
  1. JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。
  2. Servlet和JSP最主要的不同點在於:Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。
  3. JSP側重於視圖,Servlet主要用於控制邏輯。


屬性作用域範圍

屬性作用域範圍
  1. page【只在一個頁面中保存屬性,跳轉頁面無效】
  2. requet【只在一次請求中保存屬性,服務器跳轉有效,瀏覽器跳轉無效】
  3. session【在一個會話範圍中保存屬性,無論何種跳轉均有效,關閉瀏覽器後無效】
  4. application【在整個服務器中保存,所有用戶都可以使用】

應用場景:

  1. request:如果客戶向服務器發請求,產生的數據,用戶看完就沒用了,像這樣的數據就存在request域,像新聞數據,屬於用戶看完就沒用的
  2. session:如果客戶向服務器發請求,產生的數據,用戶用完了等一會兒還有用,像這樣的數據就存在session域中,像購物數據,用戶需要看到自己購物信息,並且等一會兒,還要用這個購物數據結帳
  3. servletContext:如果客戶向服務器發請求,產生的數據,用戶用完了,還要給其它用戶用,像這樣的數據就存在servletContext域中,像聊天數據


寫出5種JSTL常用標籤

寫出5種JSTL常用標籤
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>


寫一個自定義標籤要繼承什麼類

寫一個自定義標籤要繼承什麼類

我們可以有兩種方式來實現自定義標籤:

  • 傳統方式,實現Tag接口(老方法)
  • 簡單方式,繼承SimpleTagSupport類


SimpleTagSupport類的執行順序(原理):

  • ①WEB容器調用標籤處理器對象的setJspContext方法,將代表JSP頁面的pageContext對象傳遞給標籤處理器對象
  • ②WEB容器調用標籤處理器對象的setParent方法,將父標籤處理器對象傳遞給這個標籤處理器對象。【注意,只有在標籤存在父標籤的情況下,WEB容器才會調用這個方法】
  • ③如果調用標籤時設置了屬性,容器將調用每個屬性對應的setter方法把屬性值傳遞給標籤處理器對象。如果標籤的屬性值是EL表達式或腳本表達式,則WEB容器首先計算表達式的值,然後把值傳遞給標籤處理器對象。
  • ④如果簡單標籤有標籤體,容器將調用setJspBody方法把代表標籤體的JspFragment對象傳遞進來
  • ⑤執行標籤時:容器調用標籤處理器的doTag()方法,開發人員在方法體內通過操作JspFragment對象,就可以實現是否執行、迭代、修改標籤體的目的。
"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

out對象:
  • out對象用於向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型並不是PrintWriter,是JspWriter
JSP面試題都在這裡(修訂版)

  • 我們可以簡單理解為:JspWriter就是帶緩存的PrintWrieter
  • out對象的原理如下:
JSP面試題都在這裡(修訂版)

  • 只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象才去調用ServletResponse.getWriter方法,並通過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中
  • 設置page指令的buffer屬性關閉了out對象的緩存功能
  • out對象的緩衝區已滿
  • 整個JSP頁面結束
  • 一般我們在JSP頁面輸出都是用表達式(<%=%>),所以out對象用得並不是很多
page對象

內置對象page是HttpJasPage對象,其實page對象代表的就是當前JSP頁面,是當前JSP編譯後的Servlet類的對象。也就是說:page對象相當於普通java類的this

exception對象
  • 內置對象exception是java.lang.Exception類的對象,exception封裝了JSP頁面拋出的異常信息。exception經常被用來處理錯誤頁面
  • 前面我們已經講過了怎麼設置錯誤頁面了,下面我們就來簡單使用一下exception對象吧
  • 1.jsp頁面
JSP面試題都在這裡(修訂版)

  • error.jsp頁面
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)

總結:

  1. request 用戶端請求,此請求會包含來自GET/POST請求的參數
  2. response 網頁傳回用戶端的迴應
  3. pageContext 網頁的屬性是在這裡管理,代表的編譯後JSP內容
  4. session 與請求有關的會話期
  5. application servlet 正在執行的內容
  6. out 用來傳送回應的輸出
  7. config servlet的構架部件
  8. page JSP網頁本身
  9. exception 針對錯誤網頁,未捕捉的例外

jsp和servlet的區別、共同點、各自應用的範圍?

jsp和servlet的區別、共同點、各自應用的範圍?
  1. JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。
  2. Servlet和JSP最主要的不同點在於:Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。
  3. JSP側重於視圖,Servlet主要用於控制邏輯。


屬性作用域範圍

屬性作用域範圍
  1. page【只在一個頁面中保存屬性,跳轉頁面無效】
  2. requet【只在一次請求中保存屬性,服務器跳轉有效,瀏覽器跳轉無效】
  3. session【在一個會話範圍中保存屬性,無論何種跳轉均有效,關閉瀏覽器後無效】
  4. application【在整個服務器中保存,所有用戶都可以使用】

應用場景:

  1. request:如果客戶向服務器發請求,產生的數據,用戶看完就沒用了,像這樣的數據就存在request域,像新聞數據,屬於用戶看完就沒用的
  2. session:如果客戶向服務器發請求,產生的數據,用戶用完了等一會兒還有用,像這樣的數據就存在session域中,像購物數據,用戶需要看到自己購物信息,並且等一會兒,還要用這個購物數據結帳
  3. servletContext:如果客戶向服務器發請求,產生的數據,用戶用完了,還要給其它用戶用,像這樣的數據就存在servletContext域中,像聊天數據


寫出5種JSTL常用標籤

寫出5種JSTL常用標籤
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>


寫一個自定義標籤要繼承什麼類

寫一個自定義標籤要繼承什麼類

我們可以有兩種方式來實現自定義標籤:

  • 傳統方式,實現Tag接口(老方法)
  • 簡單方式,繼承SimpleTagSupport類


SimpleTagSupport類的執行順序(原理):

  • ①WEB容器調用標籤處理器對象的setJspContext方法,將代表JSP頁面的pageContext對象傳遞給標籤處理器對象
  • ②WEB容器調用標籤處理器對象的setParent方法,將父標籤處理器對象傳遞給這個標籤處理器對象。【注意,只有在標籤存在父標籤的情況下,WEB容器才會調用這個方法】
  • ③如果調用標籤時設置了屬性,容器將調用每個屬性對應的setter方法把屬性值傳遞給標籤處理器對象。如果標籤的屬性值是EL表達式或腳本表達式,則WEB容器首先計算表達式的值,然後把值傳遞給標籤處理器對象。
  • ④如果簡單標籤有標籤體,容器將調用setJspBody方法把代表標籤體的JspFragment對象傳遞進來
  • ⑤執行標籤時:容器調用標籤處理器的doTag()方法,開發人員在方法體內通過操作JspFragment對象,就可以實現是否執行、迭代、修改標籤體的目的。
JSP面試題都在這裡(修訂版)

總結

SimpleTagSupport,一般調用doTag方法或者實現SimpleTag接口

JSP是如何被執行的?執行效率比SERVLET低嗎?

JSP是如何被執行的?執行效率比SERVLET低嗎?
  • 當客戶端向一個jsp頁面發送請求時,Web Container將jsp轉化成servlet的源代碼(只在第一次請求時),然後編譯轉化後的servlet並加載到內存中執行,執行的結果response到客戶端
  • jsp只在第一次執行的時候會轉化成servlet,以後每次執行,web容器都是直接執行編譯後的servlet,所以jsp和servlet只是在第一次執行的時候不一樣,jsp慢一點,以後的執行都是相同的


如何避免jsp頁面自動生成session對象?為什麼要這麼做?

如何避免jsp頁面自動生成session對象?為什麼要這麼做?

可以使用頁面指令顯式關掉,代碼如下:

<%@ page session="false" %>

jsp的缺點?

jsp的缺點?
  • 1)不好調試
  • 2)與其他腳本語言的交互(可讀性差)


說出Servlet和CGI的區別?

說出Servlet和CGI的區別?
  • Servlet處於服務器進程中,只會有一個servlet實例,每個請求都會產生一個新的線程,而且servlet實例一般不會銷燬
  • CGI:來一個請求就創建一個進程,用完就銷燬,效率低於servlet


簡述JSP的設計模式。

簡述JSP的設計模式。

在Web開發模式中,有兩個主要的開發結構,稱為模式一(Mode I)和模式二(Mode II)

首先我們來理清一些概念吧:

  • DAO(Data Access Object):主要對數據的操作,增加、修改、刪除等原子性操作。
  • Web層:界面+控制器,也就是說JSP【界面】+Servlet【控制器】
  • Service業務層:將多個原子性的DAO操作進行組合,組合成一個完整的業務邏輯
  • 控制層:主要使用Servlet進行控制
  • 數據訪問層:使用DAO、Hibernate、JDBC技術實現對數據的增刪改查
  • JavaBean用於封裝數據,處理部分核心邏輯,每一層中都用到!

模式一指的就是在開發中將顯示層、控制層、數據層的操作統一交給JSP或者JavaBean來進行處理

模式一有兩種情況:

完全使用JSP做開發:

  • 優點:
  • 開發速度賊快,只要寫JSP就行了,JavaBean和Servlet都不用設計!
  • 小幅度修改代碼方便,直接修改JSP頁面交給WEB容器就行了,不像Servlet還要編譯成.class文件再交給服務器!【當然了,在ide下開發這個也不算是事】

  • 缺點:
  • 程序的可讀性差、複用性低、代碼複雜!什麼jsp代碼、html代碼都往上面寫,這肯定很難閱讀,很難重用!

使用JSP+JavaBean做開發:

  • 優點:
  • 程序的可讀性較高,大部分的代碼都寫在JavaBean上,不會和HTML代碼混合在一起,可讀性還行的
  • 可重複利用高,核心的代碼都由JavaBean開發了,JavaBean的設計就是用來重用、封裝,大大減少編寫重複代碼的工作!

  • 缺點:
  • 沒有流程控制,程序中的JSP頁面都需要檢查請求的參數是否正確,異常發生時的處理。顯示操作和業務邏輯代碼工作會緊密耦合在一起的!日後維護會困難

Mode II 中所有的開發都是以Servlet為主體展開的,由Servlet接收所有的客戶端請求,然後根據請求調用相對應的JavaBean,並所有的顯示結果交給JSP完成!,也就是俗稱的MVC設計模式!

"

JSP常見面試題

jsp靜態包含和動態包含的區別

jsp靜態包含和動態包含的區別
  • 在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,response)來對頁頭和頁尾面進行包含
  • inclue指令也是做這樣的事情,我們來試驗一下吧!
  • 這是頁頭
JSP面試題都在這裡(修訂版)

  • 這是頁尾
JSP面試題都在這裡(修訂版)

  • 在1.jsp中把頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp
JSP面試題都在這裡(修訂版)

  • include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!
JSP面試題都在這裡(修訂版)

  • 上面已經提及到了,include指令是靜態包含,include行為是動態包含其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)
  • include行為語法是這個樣子的
<jsp:include page=""/>
  • 我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來
JSP面試題都在這裡(修訂版)

  • 訪問1.jsp頁面看一下效果:
JSP面試題都在這裡(修訂版)

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:
JSP面試題都在這裡(修訂版)

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)
  • 當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含
  • 動態包含可以向包含的頁面傳遞參數(用處不大),並且是分別處理兩個頁面的(將被包含頁面編譯後得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】
  • 模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 我的頁尾也有個名為s的字符串變量
JSP面試題都在這裡(修訂版)

  • 現在我使用靜態包含看看會發生什麼,出現異常了。
JSP面試題都在這裡(修訂版)

  • 出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s
JSP面試題都在這裡(修訂版)

  • 使用動態包含就可以避免這種情況
JSP面試題都在這裡(修訂版)

JSP面試題都在這裡(修訂版)

總結

  1. <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期
  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件
  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容複製到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數範圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

jsp有哪些內置對象?作用分別是什麼?

jsp有哪些內置對象?作用分別是什麼?

九個內置對象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

其中,request、response、session、application、config這五個對象和Servlet的API是一樣的。這5個對象我就不解釋了。

在JSP中,尤其重要的是pageContext對象。

pageContext是內置對象中最重要的一個對象,它代表著JSP頁面編譯後的內容(也就是JSP頁面的運行環境)!

pageContext對象
  • 既然它代表了JSP頁面編譯後的內容,理所當然的:它封裝了對其他8大內置對象的引用!,也就是說,通過pageContext可以獲取到其他的8個內置對象!
JSP面試題都在這裡(修訂版)

  • 看下效果:
JSP面試題都在這裡(修訂版)

pageContext作為域對象
  • 類似於request,session,ServletContext作為域對象而言都有以下三個方法
  • setAttribute(String name,Objcet o)
  • getAttribute(String name)
  • removeAttribute(String name)
  • 當然了,pageContext也不例外,pageContext也有這三個方法
  • pageContext本質上代表的是當前JSP頁面編譯後的內容,作為域對象而言,它就代表著當前JSP頁面(也就是page)!也就是說:pageContext域對象只在page範圍內有效,超出了page範圍就無效了
  • 首先來看看在page範圍內能不能使用
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

  • 我們現在來試驗一下是不是超出了page範圍就無效了!
  • 在2.jsp中request域對象設置屬性
JSP面試題都在這裡(修訂版)

  • 企圖在1.jsp中pageContext取出request存進去的屬性
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)



  • pageContext本質上代表著編譯後JSP的內容,pageContext還可以封裝了訪問其他域的方法
  • 上面的pageContext默認是page範圍的但pageContext對象重載了set、get、removeAttribute這三個方法
  • getAttribute(String name,int scope)
  • setAttribute(String name,Object value,int scope)
  • removeAttribute(String name,int scope)
  • 多了一個設置域範圍的一個參數,如果不指定默認就是page。當然了,pageContext把request、session、application、page這幾個域對象封裝著了靜態變量供我們使用
  • PageContext.APPLICATION_SCOPE
  • PageContext.SESSION_SCOPE
  • PageContext.REQUEST_SCOPE
  • PageContext.PAGE_SCOPE
  • 剛才我們沒有使用重載方法的時候,使用pageContext是無法獲取到request域對象設置的屬性的。現在我們使用重載後的方法看一下能不能獲取得到
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)



  • pageContexst還有這麼一個方法:
  • findAttribute(String name)

  • 該方法會查找各個域的屬性,從小到大開始尋找!也就是page—>request->session->application。
  • 我們用此方法看能不能查找出request域對象的屬性吧!
JSP面試題都在這裡(修訂版)

  • 效果如下:
JSP面試題都在這裡(修訂版)

out對象:
  • out對象用於向瀏覽器輸出數據,與之對應的是Servlet的PrintWriter對象。然而這個out對象的類型並不是PrintWriter,是JspWriter
JSP面試題都在這裡(修訂版)

  • 我們可以簡單理解為:JspWriter就是帶緩存的PrintWrieter
  • out對象的原理如下:
JSP面試題都在這裡(修訂版)

  • 只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象才去調用ServletResponse.getWriter方法,並通過該方法返回的PrintWriter對象將out對象的緩衝區中的內容真正寫入到Servlet引擎提供的緩衝區中
  • 設置page指令的buffer屬性關閉了out對象的緩存功能
  • out對象的緩衝區已滿
  • 整個JSP頁面結束
  • 一般我們在JSP頁面輸出都是用表達式(<%=%>),所以out對象用得並不是很多
page對象

內置對象page是HttpJasPage對象,其實page對象代表的就是當前JSP頁面,是當前JSP編譯後的Servlet類的對象。也就是說:page對象相當於普通java類的this

exception對象
  • 內置對象exception是java.lang.Exception類的對象,exception封裝了JSP頁面拋出的異常信息。exception經常被用來處理錯誤頁面
  • 前面我們已經講過了怎麼設置錯誤頁面了,下面我們就來簡單使用一下exception對象吧
  • 1.jsp頁面
JSP面試題都在這裡(修訂版)

  • error.jsp頁面
JSP面試題都在這裡(修訂版)

  • 效果:
JSP面試題都在這裡(修訂版)

總結:

  1. request 用戶端請求,此請求會包含來自GET/POST請求的參數
  2. response 網頁傳回用戶端的迴應
  3. pageContext 網頁的屬性是在這裡管理,代表的編譯後JSP內容
  4. session 與請求有關的會話期
  5. application servlet 正在執行的內容
  6. out 用來傳送回應的輸出
  7. config servlet的構架部件
  8. page JSP網頁本身
  9. exception 針對錯誤網頁,未捕捉的例外

jsp和servlet的區別、共同點、各自應用的範圍?

jsp和servlet的區別、共同點、各自應用的範圍?
  1. JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。
  2. Servlet和JSP最主要的不同點在於:Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。
  3. JSP側重於視圖,Servlet主要用於控制邏輯。


屬性作用域範圍

屬性作用域範圍
  1. page【只在一個頁面中保存屬性,跳轉頁面無效】
  2. requet【只在一次請求中保存屬性,服務器跳轉有效,瀏覽器跳轉無效】
  3. session【在一個會話範圍中保存屬性,無論何種跳轉均有效,關閉瀏覽器後無效】
  4. application【在整個服務器中保存,所有用戶都可以使用】

應用場景:

  1. request:如果客戶向服務器發請求,產生的數據,用戶看完就沒用了,像這樣的數據就存在request域,像新聞數據,屬於用戶看完就沒用的
  2. session:如果客戶向服務器發請求,產生的數據,用戶用完了等一會兒還有用,像這樣的數據就存在session域中,像購物數據,用戶需要看到自己購物信息,並且等一會兒,還要用這個購物數據結帳
  3. servletContext:如果客戶向服務器發請求,產生的數據,用戶用完了,還要給其它用戶用,像這樣的數據就存在servletContext域中,像聊天數據


寫出5種JSTL常用標籤

寫出5種JSTL常用標籤
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>


寫一個自定義標籤要繼承什麼類

寫一個自定義標籤要繼承什麼類

我們可以有兩種方式來實現自定義標籤:

  • 傳統方式,實現Tag接口(老方法)
  • 簡單方式,繼承SimpleTagSupport類


SimpleTagSupport類的執行順序(原理):

  • ①WEB容器調用標籤處理器對象的setJspContext方法,將代表JSP頁面的pageContext對象傳遞給標籤處理器對象
  • ②WEB容器調用標籤處理器對象的setParent方法,將父標籤處理器對象傳遞給這個標籤處理器對象。【注意,只有在標籤存在父標籤的情況下,WEB容器才會調用這個方法】
  • ③如果調用標籤時設置了屬性,容器將調用每個屬性對應的setter方法把屬性值傳遞給標籤處理器對象。如果標籤的屬性值是EL表達式或腳本表達式,則WEB容器首先計算表達式的值,然後把值傳遞給標籤處理器對象。
  • ④如果簡單標籤有標籤體,容器將調用setJspBody方法把代表標籤體的JspFragment對象傳遞進來
  • ⑤執行標籤時:容器調用標籤處理器的doTag()方法,開發人員在方法體內通過操作JspFragment對象,就可以實現是否執行、迭代、修改標籤體的目的。
JSP面試題都在這裡(修訂版)

總結

SimpleTagSupport,一般調用doTag方法或者實現SimpleTag接口

JSP是如何被執行的?執行效率比SERVLET低嗎?

JSP是如何被執行的?執行效率比SERVLET低嗎?
  • 當客戶端向一個jsp頁面發送請求時,Web Container將jsp轉化成servlet的源代碼(只在第一次請求時),然後編譯轉化後的servlet並加載到內存中執行,執行的結果response到客戶端
  • jsp只在第一次執行的時候會轉化成servlet,以後每次執行,web容器都是直接執行編譯後的servlet,所以jsp和servlet只是在第一次執行的時候不一樣,jsp慢一點,以後的執行都是相同的


如何避免jsp頁面自動生成session對象?為什麼要這麼做?

如何避免jsp頁面自動生成session對象?為什麼要這麼做?

可以使用頁面指令顯式關掉,代碼如下:

<%@ page session="false" %>

jsp的缺點?

jsp的缺點?
  • 1)不好調試
  • 2)與其他腳本語言的交互(可讀性差)


說出Servlet和CGI的區別?

說出Servlet和CGI的區別?
  • Servlet處於服務器進程中,只會有一個servlet實例,每個請求都會產生一個新的線程,而且servlet實例一般不會銷燬
  • CGI:來一個請求就創建一個進程,用完就銷燬,效率低於servlet


簡述JSP的設計模式。

簡述JSP的設計模式。

在Web開發模式中,有兩個主要的開發結構,稱為模式一(Mode I)和模式二(Mode II)

首先我們來理清一些概念吧:

  • DAO(Data Access Object):主要對數據的操作,增加、修改、刪除等原子性操作。
  • Web層:界面+控制器,也就是說JSP【界面】+Servlet【控制器】
  • Service業務層:將多個原子性的DAO操作進行組合,組合成一個完整的業務邏輯
  • 控制層:主要使用Servlet進行控制
  • 數據訪問層:使用DAO、Hibernate、JDBC技術實現對數據的增刪改查
  • JavaBean用於封裝數據,處理部分核心邏輯,每一層中都用到!

模式一指的就是在開發中將顯示層、控制層、數據層的操作統一交給JSP或者JavaBean來進行處理

模式一有兩種情況:

完全使用JSP做開發:

  • 優點:
  • 開發速度賊快,只要寫JSP就行了,JavaBean和Servlet都不用設計!
  • 小幅度修改代碼方便,直接修改JSP頁面交給WEB容器就行了,不像Servlet還要編譯成.class文件再交給服務器!【當然了,在ide下開發這個也不算是事】

  • 缺點:
  • 程序的可讀性差、複用性低、代碼複雜!什麼jsp代碼、html代碼都往上面寫,這肯定很難閱讀,很難重用!

使用JSP+JavaBean做開發:

  • 優點:
  • 程序的可讀性較高,大部分的代碼都寫在JavaBean上,不會和HTML代碼混合在一起,可讀性還行的
  • 可重複利用高,核心的代碼都由JavaBean開發了,JavaBean的設計就是用來重用、封裝,大大減少編寫重複代碼的工作!

  • 缺點:
  • 沒有流程控制,程序中的JSP頁面都需要檢查請求的參數是否正確,異常發生時的處理。顯示操作和業務邏輯代碼工作會緊密耦合在一起的!日後維護會困難

Mode II 中所有的開發都是以Servlet為主體展開的,由Servlet接收所有的客戶端請求,然後根據請求調用相對應的JavaBean,並所有的顯示結果交給JSP完成!,也就是俗稱的MVC設計模式!

JSP面試題都在這裡(修訂版)

MVC設計模式:

  • 顯示層(View):主要負責接受Servlet傳遞的內容,調用JavaBean,將內容顯示給用戶
  • 控制層(Controller):主要負責所有用戶的請求參數,判斷請求參數是否合法,根據請求的類型調用JavaBean,將最終的處理結果交給顯示層顯示!
  • 模型層(Mode):模型層包括了業務層,DAO層。

總結

  • (1)ModelI,JSP+JavaBean設計模式。
  • (2)ModelII,MVC設計模式。


原文地址:https://dwz.cn/NhBjgHRk作者:Java3y
"

相關推薦

推薦中...