servlet中的三大作用域
request
創建:
請求來的時候
銷燬:
響應信息生成的時候
作用域範圍:
當前請求
session
創建:
請求不攜帶jsessionId就會創建session對象
請求攜帶jsessionId,但未找到對應的session空間
銷燬:
服務器非正常關閉
session超時
手動銷燬(session.invalidate)
作用域範圍:
當前請求
servletContext
創建:
服務器啓動時
銷燬:
服務器關閉時,或項目從服務器上移除時
作用範圍:
當前項目
jsp執行流程:
第一次訪問jsp頁面時,服務器接收請求,由jspservlet來處理此請求,
1,jspSevlet回去查找對應的jsp文件
2,找到之後,服務器會將jsp文件轉換成java文件
3,服務器編譯java文件生成class文件.
4,服務器運行class文件,生成動態的內容,並返回給瀏覽器.
<% 編寫java代碼 %> //中的代碼將會複製到_jspService方法中
<%! 聲明全局變量也可定義方法 %>
<%= 輸出 %>
jsp特有內容(三大指令,四大作用域,九大內置對象)
三大指令:page,taglib,include
四大作用域:
pageContext(pageContext)
request(HttpServletRequest)
session(httpSession)
application(servletContext)
九大內置對象
request
response
session
page
pageContext
out
exception
application
config
EL表達式(jsp2.0後內置)
作用就是代替<%= %> 也就是代替輸出
格式:${表達式}
常用功能:
獲取作用域中的數據
<% pageContext.setAttribute("pkey","pvalue");
request.setAttribute("rkey","rvalue");
request.setAttribute("aa.bb","ralue");
%>
原始方法獲取:
<%=pageContext.getAttribute("pkey")%>
<%=request.getAttribute("rkey")%>
<%=request.getAttribute("aa.bb")%>
EL獲取:
${pageScope.pkey};
${requestScope.rkey}
${requestScope["aa.bb"]}
注意:如果域中沒有,原始的方法取出來的是null而EL取出來的是空字符
便攜方式獲取
<% pageContext.setAttribute("key","pvalue");
request.setAttribute("key","rvalue");
session.setAttribute("keyralue");
appllication.setAttribute("key","ralue");
appllication.setAttribute("aa.bb","ralue");
%>
${applicationScope["aa.bb"]}//如果參數名稱中有特殊字符那麼便捷查找方式不好用,只能用域對象取值
${key}獲取出來的是pvalue
因爲會從四個域中查找數據信息(從小到大)找到即返回
pageContext<request<session<application
獲取複雜的數據
數組:${屬性名稱[index]}
list:${屬性名稱[index]}
map:${屬性名稱.key}
實體對象:${屬性名稱.key}//本質上調用的是實體類的get方法