JSP
概念
JSP全稱(chēng)Java Server Page(Java服務(wù)端頁(yè)面),通俗上來(lái)講就是可以編寫(xiě)Java代碼的HTML頁(yè)面。在最早期是沒(méi)有JSP的,那么后端開(kāi)發(fā)人員想要展示一個(gè)網(wǎng)頁(yè),就是在Servlet中 拼接html. 于是就有了JSP, 但是JSP不是一門(mén)新的技術(shù),他的本質(zhì)上還是Servlet, 意思是服務(wù)器還是會(huì)將 JSP 轉(zhuǎn)成Java代碼,在Java代碼中,還是去拼接的頁(yè)面。
編譯指令
- 頁(yè)指令
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
contentType:內(nèi)容類(lèi)型;
language: 頁(yè)面的語(yǔ)言
import: java.lang.? 、javax.servlet.?、javax.servlet.jsp.?、javax.servlet.http.*四個(gè)包不需要顯式的導(dǎo)入。
- 包含指令
<%@ include file=”” %>
用法是在file中書(shū)寫(xiě)另外一個(gè)jsp頁(yè)面,該指令是一個(gè)編譯期的行為。
- 標(biāo)簽庫(kù)指令
<%@ taglib %>
標(biāo)簽庫(kù)指令是講到j(luò)stl的時(shí)候會(huì)用到。
- JSP聲明
腳本語(yǔ)法
-
注釋
html注釋
<!-- -->
隱藏注釋
<%-- --%>
- 腳本段
<%-- --%>
-
jsp聲明與表達(dá)式
聲明:
<%! int a = 3 %>
表達(dá)式:<%=a%>
動(dòng)作指令或者標(biāo)準(zhǔn)動(dòng)作
- jsp:include
<jsp:include page=""></jsp:include>
include的動(dòng)作指令與編譯指令,最大的區(qū)別在于動(dòng)作指令是一個(gè)運(yùn)行期的行為,就在在代碼的運(yùn)行階段才會(huì)將頁(yè)面拼接到一起,而include的編譯指令是一個(gè)編譯期的行為,即頁(yè)面是在編譯階段就已經(jīng)合并到一起了。
- jsp:forward與jsp:param
<jsp:forward page="forwarded.jsp">
<jsp:param name="username" value="zhangsan"/>
</jsp:forward>
jsp:forward指令的意思是直接跳轉(zhuǎn)到page對(duì)應(yīng)的頁(yè)面,可以通過(guò) jsp:param攜帶參數(shù)。而到被跳轉(zhuǎn)的
頁(yè)面可以直接通過(guò) request(jsp內(nèi)置對(duì)象) 來(lái)獲取參數(shù)的值,獲取的方式如下:
<%
String name = request.getParameter("username");
%>
<%=name %>
- jsp:useBean、jsp:setProperty、jsp:getProperty
<%-- 相當(dāng)于實(shí)例化了一個(gè)對(duì)象:User user = new User() --%>
<jsp:useBean id="user" class="com.qf.domain.User"/>
<%-- 相當(dāng)于 user.setUsername("張三") --%>
<jsp:setProperty name="user" property="username" value="張三"></jsp:setProperty>
<%-- 相當(dāng)于 user.getUsername() --%>
<jsp:getProperty name="user" property="username"/>
jsp九大內(nèi)置對(duì)象
request 、response、pageContext、session、application、out、congif、
page、exception
最常用的有四個(gè):request,response,session,application
EL
-
概念
- El(Expression Language),全稱(chēng)表達(dá)式語(yǔ)言,目的是盡量的消除JSP頁(yè)面中的java代碼
使用樣例
${param.username} # 相當(dāng)于request.getParameter(“”)
${sessionScope.name} # session.getAttribute(“name”)
${applicationScope.name} # application.getAttribute(“name”);
${requestScope.name} # request.getAttribute(“name”)
${3 + 4}
${7 * 8}
${8 / 7}
${sessionScope.user.name} # 獲取session中user的name屬性
${user.name} # 會(huì)按照request -> session -> application的順序查找
{empty requestScope.gender} #判斷一個(gè)數(shù)據(jù)是否為null, 或者一個(gè)字符串為空或""
${empty requestScope.gender ? "默認(rèn)值" : requestScope.gender}
JSTL
-
概念
- JSTL(jsp standard tag library)全稱(chēng)為"標(biāo)準(zhǔn)標(biāo)簽庫(kù)",使用一套標(biāo)準(zhǔn)的標(biāo)簽庫(kù),來(lái)極大的簡(jiǎn)化代碼的編寫(xiě),必須要配置EL來(lái)使用
使用樣例
1) 引入javax.servlet.jsp.jstl.jar和jstl-impl.jar兩個(gè)jar包
2) 在jsp頁(yè)面的頭頂加上標(biāo)準(zhǔn)標(biāo)簽庫(kù)指令:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
if語(yǔ)法
<c:if test="${requestScope.age gt 18}">
多個(gè)條件
<c:if test="${empty requestScope.gender && requestScope.age gt 18}">
性別為空,并且是成年人.
</c:if>
- **多個(gè)條件**
Filter 、Listener
Filter(過(guò)濾器)
分析請(qǐng)求,將請(qǐng)求發(fā)送給指定的資源或自己創(chuàng)建一個(gè)響應(yīng)返回。
在請(qǐng)求到達(dá)服務(wù)器前處理請(qǐng)求,設(shè)置頭請(qǐng)求信息,將請(qǐng)求封裝成符合規(guī)則的對(duì)象。
在響應(yīng)到達(dá)客戶(hù)端處理響應(yīng),將響應(yīng)封裝成符合規(guī)則的對(duì)象。
過(guò)濾器的用途:
認(rèn)證過(guò)濾
令牌過(guò)濾
登錄和審核過(guò)濾
圖像裝換過(guò)濾
數(shù)據(jù)壓縮過(guò)濾
編碼步驟:
編碼,實(shí)現(xiàn)Filter接口
部署,在web.xml配置
運(yùn)行測(cè)試
-
過(guò)濾器是一個(gè)用于攔截在數(shù)據(jù)源和數(shù)據(jù)目的地之間消息的一個(gè)對(duì)象。
Filter接口中的方法
init();
doFailter();
destroy();
Listener(監(jiān)聽(tīng)器)
當(dāng)服務(wù)器發(fā)生了某個(gè)事件(Event)時(shí),調(diào)用事件處理程序。
-
servletContext
- 實(shí)現(xiàn)的接口:servletContextListener-
ServletRequest
- 實(shí)現(xiàn)的接口:
ServletRequestListener
- 實(shí)現(xiàn)的接口:
-
HttpSession
- 實(shí)現(xiàn)的接口:
HttpSessionListener
- 實(shí)現(xiàn)的接口:
-
-
常用用途
統(tǒng)計(jì)在線人數(shù):
HttpSessionListener
加載初始化信息:servletContextListener
統(tǒng)計(jì)在線人數(shù)
實(shí)現(xiàn)訪問(wèn)監(jiān)控
Cookie 、Session
Cookie
使用步驟:
1. 創(chuàng)建Cookie對(duì)象,綁定數(shù)據(jù)
* new Cookie(String name, String value)
2. 發(fā)送Cookie對(duì)象
* response.addCookie(Cookie cookie)
3. 獲取Cookie,拿到數(shù)據(jù)
- Cookie[] request.getCookies()
-
概念:客戶(hù)端會(huì)話(huà)技術(shù),將數(shù)據(jù)保存到客戶(hù)端
-
特點(diǎn)
- cookie存儲(chǔ)數(shù)據(jù)在客戶(hù)端瀏覽器
- 瀏覽器對(duì)于單個(gè)cookie 的大小有限制(4kb) 以及 對(duì)同一個(gè)域名下的總cookie數(shù)量也有限制(20個(gè))
-
作用
作用:
1. cookie一般用于存出少量的不太敏感的數(shù)據(jù)
2. 在不登錄的情況下,完成服務(wù)器對(duì)客戶(hù)端的身份識(shí)別
-
Session
概念::服務(wù)器端會(huì)話(huà)技術(shù),在一次會(huì)話(huà)的多次請(qǐng)求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務(wù)器端的對(duì)象中。HttpSession
原理: Session的實(shí)現(xiàn)是依賴(lài)于Cookie的。
-
特點(diǎn):
- session用于存儲(chǔ)一次會(huì)話(huà)的多次請(qǐng)求的數(shù)據(jù),存在服務(wù)器端
- session可以存儲(chǔ)任意類(lèi)型,任意大小的數(shù)據(jù)
- session用于存儲(chǔ)一次會(huì)話(huà)的多次請(qǐng)求的數(shù)據(jù),存在服務(wù)器端
Session與cookie的區(qū)別
- session存儲(chǔ)數(shù)據(jù)在服務(wù)器端,Cookie在客戶(hù)端
2. session沒(méi)有數(shù)據(jù)大小限制,Cookie有
3. session數(shù)據(jù)安全,Cookie相對(duì)于不安全
