9個內置對象如下:
1.session對象:會話對象
當客戶端第一次訪問服務器的頁面時,web服務器會自動為該客戶端創建一個session對象並分配一個唯一的id號
常常用它來在多個頁面間共享數據,如我們課可以把訪問權限放在會話中,以免 多次連接數據庫
jsp中session的讀取方法:
Object obj=session.getAttribute("屬性名");
寫方法:
session.setAttribute("屬性名",obj);
其中屬性名相當於標簽,取出的是Object類需要進行前置轉化:
2.application對象
該對象的父類為:javax.servlet.ServletSontext類。
作用域、聲明周期:
在服務器打開時創建,服務器關閉時銷毀,對應用程序來講是唯一的,因此application也是session共享的
從application中取出的對象類型仍然是Object類型,也需要轉化
常用方法:
getAttribute(String name);返回右name指定的application對象的屬性值
getAttributeNames(); 所有application對的屬性名字,枚舉的實例
getInitParamter(String name);由name指定的屬性的初始值
getServletInfo(); Servlet編譯器的版本信息
getAttribute(String name,Object object);由name指定的屬性值object
在jsp中可以直接使用該實例對象,但是在Servlet中獲取該全局唯一對象的方式:
ServletContext application=this.getServletContext();
該對象相當於系統的緩存,用戶存放共享數據,例如系統分頁數、密碼最小長度、版本信息等
3.request對象
通過該對象獲取用戶提交的信息 request.getParameter();
該對象包含了當前用戶請求的上下文,包括表單信息,傳遞的參數信息等
還可以通過次對象獲取session對象
HttpSession session=request.getSession();
4.response對象:相應對象
其父類為javax.servlet.ServletRequest,包含了當前web服務器響應的上下文。
該對象常常被用來完成頁面的跳轉、頁面的自動刷新、頁面的自動跳轉、禁用緩存等功能
頁面跳轉的方法:
response.sendRedirect("頁面的路徑");
頁面自動刷新的方法:
response.setHeader("refresh",3);每隔3秒刷新一次
頁面自動跳轉的方法:
response.setHeader("refresh","3;URL=commom.jsp?ref=aaa");
指定3秒后自動跳轉到common.jsp頁面並傳遞了值為aaa的參數ref
禁用緩存的方法:
response.setHeader("Cache=Control","no-cache");
response.serHeader("Pragma","no-cache");
response.setHeader("Expires",0);
禁用緩存后,當我們單擊后退時,客戶端會自動想服務器請求上一次頁面
5.out對象
輸出流對象。
6.pageContext
可以通過他獲取其它對象
EL中:
${pageContext.request.contextPath} :獲取根目錄
7.page【基本不用】
在編譯的servlet中,Object page = this;
page對象表示當前一個JSP頁面,可以理解為一個對象本身,即:把一個JSP當作一個對象來看待。page對象在開發中幾乎不用,了解一下即可
8.config【ServletConfig】
獲取servlet配置信息
9.exception對象
只有page指令中,isErrorPage=true時,才能使用
jsp中的四大域
setAttribute(), getAttribute(), 用於存儲數據,作用域
pageContext.getAttribute(key, scope)
搜索范圍:page>request>
1.page
自身
2.request
作用域為request
請求結束后,消失
3.session
4. context
作用域為application
EL表達式
<% //模擬真實情況 User user1=new User(); user1.setUsername("張三"); request.setAttribute("user", user1); //屬性值 %>
1. EL表達式的基本形式
如果在jsp模板文件中使用EL表達式,那么表達式的值回直接輸出到網頁上。
例如:Java表達式:<%=request.getParameter("usernamae") %>
--> ${param.username} (form)
2. 使用場景
既可以直接插入到jsp文件的模板文件中,也可以作為jsp標簽的屬性的值。
e.g. <input type="text" name="username" value="" />
3. 直接訪問對象的屬性
e.g. ${request.user.username} <==> ${request.user['username']}
4. EL運算符
算數運算符:
+ - * /(不是整除)%
關系運算符:
== < >..
邏輯運算符
! || &&
empty運算符
true :如果var為null,就返回TRUE
條件運算符
a?b:c
5. EL 語言中定義了11個隱含對象,他們都是java.util.Map類型,
網頁制作者通過他們便捷地訪問web應用的特定數據。
隱含對象名 說明
- application: web應用范圍內的屬性名和屬性值進行映射
- cookie: 客戶請求中的Cookie名和Cookie對象進行映射
- header: 請求頭部的項目名和項目值進行映射,例如:
${header.host} 等價於<%=request.getHeader("host") %>
- headerValues 把Http請求頭部的項目名和所有匹配你的項目值得數組進行映射,例如:
[Ljava.lang.String;@2b08133b 等價於<% request.getHeaders("accept-language") %>
initParam 把web應用的初始化參數名和參數值進行映射
- pageScope 把頁面范圍內的屬性名和屬性值進行映射
- param 把客戶請求的參數名和參數值進行映射
- paramValues 請求參數名對應參數數組
- requestScope 請求返回內的屬性名和屬性值
- sessionScope 回話的范圍內的屬性名和屬性值的映射
2.分類:
(1)請求范圍內的特定數據:header,headerValues,param,paramValues,cookie
${header["user-agent"]} (必須使用[]訪問,因為不符合變量命名規則) <==> <%=requesst.getHeader("user-agent") %>
${cookie.username.value} <==> 調用名為username的Cookie對象的getValue()方法
與前端cookie的關系
(2)特定范圍的屬性值:pageScope,requestScope,sessionScope和applicationScope
屬性
(3)pageContext,表示PageContext對象
${pageContext.request\.contentPath}
${pageContext.servletContext.serverInfo} <==> <%=application.getServerInfo %>
${pageContext.request.requestURL} <==> <%=request.getRequestURL() %>
${pageContext.response.characterEncoding} <==> <%= response.getCharacterEncoding() %>
(4)表示web應用的初始化參數集合,為initParam
<==> <%=appliction.getInitParameter("driver") %>分類:
(1)請求范圍內的特定數據:header,headerValues,param,paramValues,cookie
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 (必須使用[]訪問,因為不符合變量命名規則) <==> <%=requesst.getHeader("user-agent") %>
<==> 調用名為username的Cookie對象的getValue()方法
與前端cookie的關系
(2)特定范圍的屬性值:pageScope,requestScope,sessionScope和applicationScope
屬性
(3)pageContext,表示PageContext對象
${pageContext.request\.contentPath}
${pageContext.servletContext.serverInfo} <==> <%=application.getServerInfo %>
${pageContext.request.requestURL} <==> <%=request.getRequestURL() %>
${pageContext.response.characterEncoding} <==> <%= response.getCharacterEncoding() %>
(4)表示web應用的初始化參數集合,為initParam
<==> <%=appliction.getInitParameter("driver") %>
2.命名變量
EL表達式中的變量成為命名變量,他不是jsp文件的局部變量或實例變量,而是存放在特定范圍內的屬性,
命名變量的名字和屬性名對應。
${username} 找的是特定范圍的屬性(不是參數)
${user.username} 實際上找的不是User的username屬性,而是調用了User的getUsername方法,返回的結果
end