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