JSP總結 靜態網頁 在網站設計中,純粹HTML(標準通用標記語言下的一個應用)格式的網頁通常被稱為“靜態網頁”,靜態網頁是標準的HTML文件,它的文件擴展名是.htm、.html 。靜態網頁是網站建設的基礎,早期的網站一般都是由靜態網頁製作的。靜態網頁是相對於動態網頁而言,是指沒有後臺資料庫、不含 ...
JSP總結
靜態網頁
在網站設計中,純粹HTML(標準通用標記語言下的一個應用)格式的網頁通常被稱為“靜態網頁”,靜態網頁是標準的HTML文件,它的文件擴展名是.htm、.html 。靜態網頁是網站建設的基礎,早期的網站一般都是由靜態網頁製作的。靜態網頁是相對於動態網頁而言,是指沒有後臺資料庫、不含程式和不可交互的網頁。
動態網頁
網頁文件里包含了程式代碼,通過後臺資料庫與WEB伺服器的信息交互,由後臺資料庫提供實時數據更新和數據查詢服務。動態網站體現在網頁一般是以asp,jsp,php,aspx等結束。
兩者區別
網頁製作使用的製作語言:靜態網頁使用語言:超文本標記語言(標準通用標記語言的一個應用); 動態網頁使用語言:超文本標記語言+ASP或超文本標記語言+PHP或超文本標記語言+JSP等。
程式是否在伺服器端運行,是重要標誌。在伺服器端運行的程式、網頁、組件,屬於動態網頁,它們會隨不同客戶、不同時間,返回不同的網頁, ASP、PHP、JSP、ASPnet、CGI等。運行於客戶端的程式、網頁、插件、組件,屬於靜態網頁,例如 html 頁、Flash、JavaScript、VBScript等等,它們是永遠不變的。
常用的動態網頁技術
ASP(Active Server Page)
ASP技術是基於.NET平臺的一種動態網頁技術。它有非常強大的後臺處理能力,但卻有一些安全性、穩定性、跨平臺性的問題。ASP只支持Windows平臺,對Linux、Unix不支持。
PHP(Hypertext Preprocessor)
PHP原始為Personal Home Page的縮寫,已經正式更名為(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP是HTML內嵌式的語言,這一點類似於ASP,並且PHP可以跨平臺。但PHP的資料庫介面不規範。但是對每種資料庫介面的開發都不同極大地加重了開發者的負擔,並且缺少企業級應用的支持。
JSP/Servlet(Java Server Page)
JSP技術在基於java的平臺上廣泛地使用,是進行Java web開發的一種核心組件。JSP頁面由HTML代碼和嵌入在其中的Java腳本組成。JSP可以一次編寫,到處運行。這一點JSP比PHP技術更有優勢,在不同的系統平臺上運行,代碼不用做任何修改。
什麼是JSP
JSP (Java Server Pages) 是java服務頁面,可以在HTML中嵌入Java腳本代碼。
JSP頁面元素:
靜態內容:HTML靜態文本
指 令:以"<%@" 開始,以"%>" 結束
小腳本:<%Java代碼%>
表達式:<%=Java表達式%>
聲明:<%! 方法%>
註釋 :<!-- 客戶端可以查看到-->,<%-- 客戶端不能查看到--%>
JSP(一) 三大指令
① page 指令
通過設置內部的多個屬性定義整個頁面的屬性
語法:
<%@ page 屬性1="屬性值" 屬性2="屬性值1,屬性值2"… 屬性n="屬性值n"%>
② include 指令(靜態包含)
將一些共性的內容寫入一個單獨的文件中,然後通過include指令引用該文件
include(靜態包含):這種會將兩個頁面編譯成一個class,裡面的資源可以共用。(先包含再編譯)
③ taglib 指令
在JSP頁面中導入JSTL標簽庫,替換JSP中的Java代碼片段
語法:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="別名"%>
JavaBean
JavaBean的優勢
解決代碼重覆編寫,減少代碼冗餘
功能區分明確
提高了代碼的維護性
JavaBean 分為: 數據Bean 和 業務Bean
數據Bean : 私有的屬性,預設的空構造,set、get方法 就是Java中的屬性類
業務Bean : 使用數據Bean。
JSP(二)七大動作
jsp動作(action)是指在運行期間的命令,常見的有:
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:include
jsp:forward
jsp:param
jsp:plugin
① include
include 動態包含(分別編譯):用jsp:include動作實現,它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。flush屬性: 用true ,表示頁面可刷新。預設為false;在使用include命令時除非該命令被執行到,否則它是不會被Tomcat等JSP Engine編譯。
語法: <jsp: include page="頁面路徑" flush="true" />
jsp:include(動態包含):這種會編譯成兩個獨立的class,裡面的資源無法共用。(先編譯再包含)
include(靜態包含):這種會將兩個頁面編譯成一個class,裡面的資源可以共用。(先包含再編譯)
靜態include和動態include的區別?
相同點:都會將頁面引入到另一個頁面中。
不同點:
靜態include會將引用的jsp文件和當前的jsp文件生成為一個class文件,所以jsp中的變數是可以互相訪問,兩個頁面中應儘量避免命名衝突。
動態include會生成兩個完全不同的class文件,所以jsp中的變數不可以互相訪問。
靜態包含不能傳參
適用場合:
靜態include不會檢查所含文件的變化,適用於包含靜態頁面,直接將內容先包含後處理。
動態include總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數,先編譯之後再進行處理。
② useBean
useBean動作(jsp頁面使用javaBean的第二種方式),作用域預設為page(本頁面有效)
語法: <jsp:useBean id="對象名" class="包名.類名" scope="作用範圍(page/request/application/session)"/>
scope屬性用於指定JavaBean實例對象所存儲的域範圍,其取值只能是page、request、session和application四個值中的一個,其預設值是page。
③ getProperty
getProperty動作(name為useBean動作中的id).從對象中取出屬性值:
語法: <jsp:getProperty name="javaBean對象" property="javaBean對象屬性名" />
④ setProperty
setProperty動作(name為useBean動作中的id):
為對象設置屬性值:
語法: <jsp:setProperty name="javaBean對象" property="javaBean對象屬性名" value="值"/>
⑤ param
param動作:傳遞參數,到達跳轉頁面可以通過 request.getParameter("參數名")方式取出參數值
語法: <jsp:include page="轉向頁面的url" >
<jsp:param name="參數名1" value="參數值1"></jsp:param>
<jsp:param name="參數名2" value="參數值2"></jsp:param>
</jsp:include>
或者:
<jsp:forward page="轉向頁面的url">
<jsp:param name="參數名1" value="參數值1"></jsp:param>
<jsp:param name="參數名2" value="參數值2"></jsp:param>
</jsp:forward>
⑥ forward 動作:轉發頁面
語法: <jsp:forward page="login.jsp" /> 相當於 request.getRequestDispatcher("轉發頁面").forward(request,response);
⑦ plugin
plugin動作:<jsp:plugin>:用於指定在客戶端運行的插件,不常用
JSP(三)九大內置對象
JSP內置對象是 Web容器創建的一組對象
JSP內置對象的名稱是JSP的保留字,JSP內置對象是可以直接在JSP頁面使用的對象,無需使用“new”,直接使用。
JSP中一共預先定義了9個這樣的對象,分別為:request、response、session、application、out、pagecontext、config、page、exception。
① request 對象 (作用域: 一次請求)
request 對象是 javax.servlet.httpServletRequest 類型的對象。 該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到伺服器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域為一次請求。
常用方法:
String getParameter(String name) 根據表單組件名稱獲取提交數據
String[] getParameterValues(String name) 獲取表單組件對應多個值時的請求數據
void setCharacterEncoding(String charset) 指定每個請求的編碼
RequestDispatcher getRequestDispatcher(String path) 返回一個RequestDispatcher對象,該對象的forward( )方法用於轉發請求
void setAttribute(String key,Object value) 設置鍵對應屬性值
Object getAttribute(String key) 獲取鍵對應屬性值
② response 對象
response 對象是 javax.servlet.http.httpServletResponse 類型的對象。response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。
常用方法:
void sendRedirect (String location) 將請求重新定位到一個不同的URL,即頁面重定向
頁面的轉發
轉發的作用:在多個頁面交互過程中實現請求數據的共用
轉發的實現:RequestDispatcher對象.forward()方法
重定向與轉發的區別
區別一:
重定向時瀏覽器上的網址改變
轉發是瀏覽器上的網址不變
區別二:
重定向實際上產生了兩次請求
轉發只一次請求
重定向:發送請求 -->伺服器運行-->響應請求,返回給瀏覽器一個新的地址與響應碼-->瀏覽器根據響應碼,判定該響應為重定向,自動發送一個新的請求給伺服器,請求地址為之前返回的地址-->伺服器運行-->響應請求給瀏覽器
轉發:發送請求 -->伺服器運行-->進行請求的重新設置,例如通過request.setAttribute(name,value)-->根據轉發的地址,獲取該地址的網頁-->響應請求給瀏覽器
區別三:
重定向時的網址可以是任何網址
轉發的網址必須是本站點的網址
轉發
轉發是在伺服器端發揮作用,通過forward()將提交信息在多個頁面間進行傳遞
客戶端瀏覽器的地址欄不會顯示出轉向後的地址
轉發可以傳遞參數
語法: request.getRequestDispatcher("轉髮網址").forward(request,response);
重定向
重定向是在客戶端發揮作用,通過請求新的地址實現頁面轉向
在地址欄中可以顯示轉向後的地址
重定向不能進行參數傳遞
語法: response.sendRedirect("重定向網址");
③ session 對象(作用域: 一次會話)
session 對象是 javax.servlet.http.HttpSession 類型的對象。session 對象是由伺服器自動創建的與用戶請求相關的對象。伺服器為每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。session對象內部使用Map類來保存數據,因此保存數據的格式為 “Key/value”。 session對象的value可以使複雜的對象類型,而不僅僅局限於字元串類型。
常用方法:
void setAttribute(String key,Object value) 以key/value的形式保存對象值
Object getAttribute(String key) 通過key獲取對象值
void invalidate() 設置session對象失效
String getId() 獲取sessionid
void setMaxInactiveInterval(int interval) 設定session的非活動時間
int getMaxInactiveInterval() 獲取session的有效非活動時間(以秒為單位)
void removeAttribute(String key) 從session中刪除指定名稱(key)所對應的對象
④ application 對象(作用域: 一次服務)
application 對象是 javax.servlet.ServletContext 類型的對象。application 對象可將信息保存在伺服器中,直到伺服器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命周期更長,類似於系統的“全局變數”。
常用方法:
void setAttribute(String key,Object value) 以key/value的形式保存對象值
Object getAttribute(String key) 通過key獲取對象值
void removeAttribute(String name) 根據屬性名稱刪除對應的屬性
String getRealPath(String path) 返回相對路徑的真實路徑
Enumeration getAttributeNames() 獲取所的屬性名稱
String getContextPath() 獲取當前Web應用程式的根目錄
String getInitParameter(String name) 根據初始化參數名稱,獲取初始化參數值
⑤ out 對象
out 對象是 javax.servlet.jsp.JspWriter 類型的對象。out 對象用於在Web瀏覽器內輸出信息,並且管理應用伺服器上的輸出緩衝區。在使用 out 對象輸出數據時,可以對數據緩衝區進行操作,及時清除緩衝區中的殘餘數據,為其他的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。
⑥ pageContext 對象
pageContext 對象是 javax.servlet.jsp.PageContext 類型的對象。pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。
常用方法:
void setAttribute(String key,Object value) 設置屬性值
Object getAttribute(String key) 獲取屬性值
void removeAttribute(String key) 移除指定屬性
pageContext 本身也是一個域對象,可以操作其他三個域對象(request,response,application)的數據
操作其他域對象的方法:
void setAttribute(String key,Object value,int Scope)
Object getAttribute(String key,int Scope)
void removeAttribute(String key,int Scope)
Scope:
PageContext.PAGE_SCOPE;
PageContext.REQUEST_SCOPE;
PageContext.SESSION_SCOPE;
PageContext.APPLICATION_SCOPE;
⑦ config 對象
config 對象是 javax.servlet.ServletConfig 類型的對象。config 對象的主要作用是取得伺服器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發者可以在web.xml 文件中為應用程式環境中的Servlet程式和JSP頁面提供初始化參數。
⑧ page 對象(作用域: 一個頁面)
page 對象是 java.lang.Object 類型的對象。page 對象代表JSP本身,只有在JSP頁面內才是合法的。 page隱含對象本質上包含當前 Servlet介面引用的變數,類似於Java編程中的 thi ⑨ exception 對象
exception 對象是 java.lang.Throwable 類型的對象。exception 對象的作用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該對象將無法編譯JSP文件。
常用方法:
String getMessage() 返回描述異常的消息
String toString() 返回關於異常的簡短描述消息
void printStackTrace() 顯示異常及其棧軌跡
Throwable FillInStackTrace() 重寫異常的執行棧軌跡
在頁面設置支持中文字元的字元集
亂碼處理方式一(以GET方式提交數據時)
<%
//讀取用戶名和密碼
String name = request.getParameter("name");
//對請求數據進行字元編碼
name = new String(name.getBytes("ISO-8859-1"), "utf-8");
%>
亂碼處理方式二(以POST方式提交數據時)
<%
//設置讀取請求信息的字元編碼為UTF-8
request.setCharacterEncoding("utf-8");
//讀取用戶名和密碼
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
%>
亂碼處理方式三(以GET方式提交數據時)
<!--在Tomcat目錄結構\conf\server.xml中設置字元集-->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
cookie的簡介
cookie是Web伺服器保存在客戶端的一系列文本信息
cookie的作用
對特定對象的追蹤
統計網頁瀏覽次數
簡化登錄
安全性能:容易信息泄露
在JSP中使用cookie
創建cookie對象
Cookie newCookie = new Cookie(String key,Object value);
寫入cookie
response.addCookie(newCookie);
讀取cookie
Cookie[] cookies = request.getCookies();
常用方法:
void setMaxAge(int expiry) 設置cookie的有效期,以秒為單位
void setValue(String value) 在cookie創建後,對cookie進行賦值
String getName() 獲取cookie的名稱
String getValue() 獲取cookie的值
String getMaxAge() 獲取cookie的有效時間,以秒為單位
Session和cookie的區別與聯繫
cookie是把用戶的數據寫在用戶本地瀏覽器上, 其他網站也可以掃描使用你的cookie,容易泄露自己網站用戶的隱私,而且一般瀏覽器對單個網站站點有cookie數量與大小的限制。
Session是把用戶的數據寫在用戶的獨占session上,存儲在伺服器上,一般只將session的id存儲在cookie中。但將數據存儲在伺服器對伺服器的成本會高。
session是由伺服器創建的,開發人員可以在伺服器上通過request對象的getsession方法得到session
一般情況,登錄信息等重要信息存儲在session中,其他信息存儲在cookie中
session的實現原理
伺服器會為每一個訪問伺服器的用戶創建一個session對象,並且把session對象的id保存在本地cookie上,只要用戶再次訪問伺服器時,帶著session的id,伺服器就會匹配用戶在伺服器上的session,根據session中的數據,還原用戶上次的瀏覽狀態或提供其他人性化服務。
cookie與session的對比
session
保存在伺服器端用戶信息
session中保存的是Object類型
隨會話的結束而將其存儲的數據銷毀
保存重要的信息
cookie
在客戶端保存用戶信息
cookie保存的是 String類型
cookie可以長期保存在客戶端
保存不重要的用戶信息
---------------------------------------------------------------JSP完結-----------------------------------------------------------