jsp知識點html
jsp是一種服務端動態頁面技術的組件規範,jsp是一個以」.jsp」爲後綴的文件,由HTML和少許java代碼組成,JSP會被容器轉換成一個Servlet類,而後執行。java
轉譯成Servlet時,成爲Servlet中的service()方法的out.write語句。web
JSP指令編程
page指令:用於導包、設置頁面屬性。數組
<%@page import =」java.util.」 %>瀏覽器
include指令:在JSP頁面轉換成Servlet時,可以將其餘文件包含進來。能夠包含JSP文件也能夠是靜態HTML文件。緩存
<%@ include file=」url」 %> <%@include file=」footer.html」%>tomcat
JSP容器自動建立對象,能夠直接使用,簡化了對HTTP的請求和響應。安全
隱含對象 類型 說明服務器
request HttpServletRequest 請求信息
response HttpServletResponse 響應信息
out JSPWriter 輸出的數據流
session HttpSession 會話
application ServletContext 全局上下文對象
pageContext PageContext JSP頁面上下文
page Object JSP頁面自己
config ServletConfig Servlet配置對象
exception Throwable 捕獲網頁異常
轉發:一個Web組件(Servlet/jsp)將未完成的處理經過容器轉發給另一個Web組件繼續完成。
轉發的實現:
1綁定數據到request對象
2得到轉發器
3轉發
①綁定數據到request對象
request.setAttribute(String name,Object obj);
讀取綁定值
Object request.getAttribute(String name);
綁定名對應的值不存在,則返回null。
②得到轉發器
RequestDispatcher rd=request.getRequestDispatcher(String uri);
uri爲轉發的目的地,即將未完成的處理繼續下去的另外一個組件,好比一個JSP文件
③實現轉發
rd.forward(request,response);
②③合併:
request.getRequestDospatcher(uri).forward(request,response);
路徑:
連接地址<a href=」url」> </a>
表單提交<form action=」url」>
重定向response.sendRedirect(url);
轉發 request.getRequestDispatcher(url);
絕對路徑爲固定地址,相對路徑以」/」開頭 「../」退至上一級目錄
獲取應用的實際部署名稱String request.getContextPath();
狀態管理
將客戶端與服務器之間的屢次交互(一次請求,一次響應)看成一個總體來看,將屢次交互涉及的數據保存下來即狀態管理。狀態指定的是數據,管理指的是屢次交互時對數據的修改。
狀態管理常見的兩種模式爲Cookie技術和Session技術
Cookie技術把狀態保存在客戶端,稱爲客戶端狀態管理技術。
Session技術把狀態保存在服務器端,稱爲服務器狀態管理技術。
Cookie
瀏覽器向Web服務器發送請求時,服務器會將少許的數據以set-Cookie消息頭的方式發送給瀏覽器,瀏覽器將這些數據保存下來,當瀏覽器再次訪問服務器時,會將這些數據以Cookie消息頭的方式發送給服務器。能夠起到緩存和用戶識別的做用。
建立Cookie:
Cookie c= new Cookie(String name,String value);
response.addCookie(c);
name用於區分不一樣Cookie,value則是Cookie的值。
獲取全部Cookie:
Cookie [] request.getCookies();//該方法有可能返回null
獲取一個Cookie對象的名稱或值:
String Cookie.getName();
String Cookie.getValue();
修改Cookie的值:
setValue(String newValue);
添加描述:
setComment(String purpose);
getComment()方法能夠在Cookie發送前獲取描述信息。
設置Cookie有效期:
經過setMaxAge(int seconds)方法,設置Cookie的保存時間,seconds單位是秒,精度不高。
沒有設置有效期,則默認爲-1,瀏覽器關閉就刪除Cookie
設置爲0,則表示通知瀏覽器當即刪除這個Cookie
設置Cookie的做用範圍和域:
setPatch(String uri); uri設置網頁路徑有效範圍。
setDomain(String patten);方法使Cookie做用於其餘網站(不一樣域名)
Cookie的限制:
Cookie能夠被用戶禁止。
Cookie會將狀態保存在瀏覽器端,不安全。對敏感數據須要加密後再使用Cookie來保存。
Cookie只能保存少許的數據,大約4KB左右
Cookie的個數是有限制的
Cookie只能保存字符串
Session(會話)
瀏覽器訪問Web服務器時,服務器會爲每個瀏覽器在服務器端的內存中分配空間,單首創建一個Session對象,該對象有一個Id屬性,其值惟一,通常稱爲SessionId,而且服務器會將這個SessionId(使用Cookie的方式)發送給瀏覽器;瀏覽器再次訪問服務時,會將SessionId發送給服務器,服務器能夠依據SessionId查找到對應Session對象。
Session獲取:
HttpSession s=request.getSession(boolean flag);
當flag爲true時,先查看請求中又沒有SessionId,若是沒有SessionId,服務器建立一個Session對象;若是有SessionId,依據SessionId查找對應Session對象,找到則返回,找不到則建立一個新的Session對象,因此flag爲true時,必定能獲得一個Session對象。
當flag爲false時,沒有SessionId及有SessionId但沒有找到Session對象,均返回null;找到則返回
HttpSession s=request.getSession();
無論有沒有找到都會返回一個Session對象.
使用Session綁定對象:
void Session.setAttribute(String name ,Object obj);
後去綁定對象:
Object Session.getAttribute(String name);
//須要進行數據類型轉換,且必須和咱們存入數據類型相同
移除綁定對象:
void Session.removeAttribute(String name);
刪除Session對象:
Session.invalidate()
實現Session驗證:
1.先綁定數據,綁定用戶信息到Session中。
2.獲取取綁定的數據,若是沒有,則返回登陸頁面。
這樣實現登陸驗證,來保證安全性。
Session超時
Web服務器會將空閒時間過長的Session對象刪除,以節省服務器內存空間資源
web服務器缺省的超時時間限制通常爲30分鐘。
經過tomcat中conf/web.xml文件設置Session刪除時限:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
經過編程的方式修改:
void session.setMaxInactiveInterval(int seconds);
瀏覽器禁用Cookie後能夠經過重寫URL的方法把SessionId傳遞給瀏覽器。
URL重寫:
response.encodeURL(String url);
在重定向中URL重寫:
response.encodeRedirectURL(String url);
Session的優缺點:
優勢
安全(狀態保存在服務器端)
Session可以保存的數據類型更豐富,Cookie只能保存字符串
Session可以保存更多的數據,Cookie大約保存4K
缺點
Session將狀態保存在服務器端,佔用服務器內存,若是用戶量過大,會嚴重影響服務器的性能。
驗證碼驗證的流程:
1請求帶有驗證碼的頁面時:
經過img標籤的src屬性獲取驗證碼圖片
服務器端生成隨機字符串,並繪製
服務器端將生成的隨機字符串綁定到session中
2提交表單及填寫的驗證碼內容時:
處理程序將session中綁定的正確的驗證碼字符串取出來
獲取表單提交時填寫的驗證碼內容
比較二者,根據結果作出判斷
過濾器
過濾器是用來攔截Servlet容器的請求和響應過程、以便查看、提取或以某種方式操做正在客戶機和服務器之間交換的數據。
過濾器用來封住一些Web組件的功能。
過濾器的建立:
編寫一個java類實現Filte接口(Filter、FilterChain、FilterConfig)
該接口中包含三個必須實現的方法
void init(FilterConfig filterConfig);
//完成過濾器的初始化,值執行一次
void doFilter( ServletRequest request,
ServletResponse response,
FilterChain chain);
//容器調用doFilter方法處理請求
void destroy()
//容器刪除過濾器實例以前調用該方法
過濾器的部署
修改web.xml文件,增長註冊過濾器的節點
<filter>
<filter-name>filter1</filter-name>
<filter-class>web.xxxServlet</Servlet-class>
<init-param>
<param-name>illegalStr</param-name>
<param-value>xxx</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/xxx</url-pattern>
</filter-mapping>
<init-param>配置init()參數
用String config.getInitParamter(「illgalStr」)能夠讀取web.xml中的初始化參數
過濾器的優先級,若是多個過濾器都知足過濾條件,則容器依據</filter-mapping>
的前後順序來調用各個過濾器。
監聽器
Servlet規範中定義的一種特殊的組件,用來監聽Servlet容器產生的時間並進行處理.
監聽事件分爲兩類:生命週期相關事件、綁定數據相關事件。
生命週期相關事件
容器建立或者銷燬request,session,ServletContext時產生的事件。
ServletRequestListener接口
requestDestroyed(ServletRequestEvent sre);
requestInitialized(ServletRequestEvent sre);
HttpSessionListener接口
sessionCreated(HttpSessionEvent se);
sessionDestroyed(HttpSessionEvent se);
ServletContextListener接口
contextDestroyed(ServletContextEvent sce);
contextInitialized(ServletContextEvent sce);
綁定數據相關事件
調用了request,session,ServletContext的setAttribute、removeAttribute方法時產生的事件
ServletResquestAttributeListener接口
attributeAdded(ServletRequestAttributeEvent srae);
attributeRemoved(ServletRequestAttributeEvent srae);
attributeReplaced(ServletRequestAttributeEvent srae);
HttpSessionAttributeListener接口
ServletContextAttributeListener接口
註冊監聽器
在web.xml文件中。增長一下節點:
<listener>
<listener-class>web.CouListener</listerner-class>
</listener>
統計在線人數,利用HttpSessionLisener
EL表達式
El表達式的做用可分爲如下幾類
1訪問bean屬性
2輸出簡單的運算結果
3獲取請求參數
使用EL表達式訪問bean屬性
方式一:${對象名.屬性名}
方式二:${對象名[「屬性名」]}
EL表達式能夠指定對象的查找範圍。
例${sessionScope.user.name}
一旦指定了查找範圍,那麼在該範圍找不到指定的綁定對象時,不會再去其餘區域查找。
使用EL表達式在JSP中進行運算
1.算術運算符有五個:+、-、*或$、/或div、%或mod
2.關係運算符有六個:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3.邏輯運算符有三個:&&或and、||或or、!或not
4.其它運算符有三個:Empty運算符(檢查變量是否爲null)、條件運算符、()運算符
使用EL表達式獲取請求參數值
${param.username} 等價於request.getParameter(「username」)
${paramValues.city} 等價於request.getParameterValues(「city」)
JSTL
JSTL是jsp標準標籤庫
JSTL的使用:
使用taglib指令導入要使用的jsp標籤
<%@taglib uri=」」 prefix=」」%>
uri:JSP標籤的命名空間 prefix:命名空間的前綴
核心標籤-if標籤
<c:if test=」」 var=」」 scope=」」></c:if>
當test屬性爲true時,執行標籤內容。test屬性能夠用EL表達式賦值。
var屬性:指定一個綁定名稱
scope屬性:指定綁定的範圍(page,request,session,application)
注:var和scope要配合使用
核心標籤-choose標籤
語法<c:choose>
<c:when test=」」> </c:when>
<c:otherwise> </c:otherwise>
</c:choose>
when表示一個處理分支,當test屬性爲true時,會執行該分支。
otherwise表示例外,能夠出現0次或1次
核心標籤-forEach標籤
用來遍歷集合和數組
語法:<c:forEach var=」」 item=」」></c:forEach>
items屬性:指定要遍歷的集合,通常使用EL表達式複製
var屬性:指定一個綁定名稱,容器每次從集合中取一個對象,而後綁定到pageContext對象上
varStatus屬性:指定一個綁定名稱,綁定值是是一個由容器建立的對象,該對象封裝了當前迭代的狀態。
index返回正在被迭代對象的下標,下標從0開始
count返回時第幾回迭代,從1開始
JSTL應用
使用JSTL時,JSP頁面中部會再出現以下內容
<% = %>
<% %>
替換形式
${ }
<c:xxx >