【JSP】學習筆記
目錄
【JSP】學習筆記
二、JSP代碼使用小貼士
三、JSP指令與動作類型
四、Responce對象的redirect方法(sendRedirect函數)與forward指令方法的差別
五、session對象與application對象
六、servlet程式設計
一、JSP中主要的代碼形式
類型 | 代碼形式 |
JSP注釋 | <%-- --%> |
JSP表達式 | <%=變量/傳回值/表達式> |
JSP程式段 | <% Java代碼 %> |
JSP聲明變量、方法、類 | <% !代碼 %> |
JSP指令 | <% @指令類别 屬性值=" " .... %> |
二、JSP代碼使用小貼士
- JSP程式段不能定義函數。
- JSP表達式不能以";"結束。
- JSP表達式不能出現多條語句。
- JSP表達式中内容隻能為字元串類型。
三、JSP指令與動作類型
- JSP指令:page/include/taglib
- JSP動作:include/forward/useBean/setProperty/getProperty/plugin
四、Responce對象的redirect方法(sendRedirect函數)與forward指令方法的差別
- redirect方法屬于用戶端操作,會改變浏覽器的位址顯示;forward屬于伺服器端操作,不會改變浏覽器的位址顯示。
- redirect方法不能使目前頁面與目标頁面共享request中的資料,但forward方法可以共享。
- redirect方法可以重定向到目前應用程式的其他資源或其他應用程式的資源,如百度頁面;但forward方法隻能在同一個web應用程式的資源間轉發請求。
- redirect方法效率較低,forward方法效率較高。
五、session對象與application對象
1.session對象存儲在用戶端,可以實作“跨頁面保持”。

session原理圖(圖源于網絡,侵删)
2.application存儲在伺服器端,可以實作所有使用者共享對象。(狗頭)
application原理圖(圖源于網絡,侵删)
六、servlet程式設計
1.生命周期:init()初始化、service()調用get或post請求方法、destroy()消亡。
Servlet生命周期圖(圖源于網絡,侵删)
2.設定歡迎頁面
在web.xml中找到welcome-fle-list标簽下的welcome-file字段中設定即可。部署後,浏覽器位址欄的輸入方法可以有兩種。例如http://localhost:8888/Prj/cart3.jsp或http://localhost:8888/Prj/都可以進入同一個歡迎頁面。
3.在Servlet中讀取參數
- 全局參數(必須放在web.xml的最上面!)
<context-param>
<param-name>全局參數名稱</param-name>
<param-value>全局參數值</param-value>
</context-param>
擷取全局參數的方法如下:
ServletContext application = this.getSerletContext();
application.getInitParameter("參數名稱");
- 局部參數
<servlet>
<servlet-name>Servlet名稱</servlet-name>
<servlet-class>Servlet類路徑</servlet-class>
<init-param>
<param-name>局部參數名稱</param-name>
<param-value>局部參數值</param-value>
</init-param>
</servlet>
擷取局部參數的方法如下:
this.getInitParameter("參數名稱");
七、JavaBean
- 定義JavaBean
<jsp:useBean id="idName(執行個體名稱)" class="package.class" scope="page|session|..."></jsp:useBean>
- 設定JavaBean屬性
1.值的來源是String常量時,設定方法如下
<jsp:setProperty property="屬性名稱" name="對象名" param="常量" />
2.值的來源是request參數時,設定方法如下:
<jsp:setProperty property="屬性名稱" name="對象名" param="參數名" />
- 擷取JavaBean屬性
<jsp:getProperty property="屬性名稱" name="bean對象名" />
八、EL與JSTL
1.EL(作用于JSP表達式相同)
1.1基本運算符
EL的運算符"."與"[]"功能幾乎一緻,但有兩種情況隻能使用"[]"運算符:
- 當存取的資料的名稱中包含特殊字元(字母與數字元号以外的);
- 當動态取值時,如${sessionScope.對象名[param]},其中param是變量參數。
在使用關系運算符時,判斷兩個變量是否相等隻能采取第一種形式,不能采取另外兩種形式。
- ${ 變量1 == 變量2 }
- ${變量1} == ${變量2}
- ${ ${變量1} == ${變量2} }
empty運算符,即$ { empty A }隻有當A為null/不存在/空字元串/空數組時才會傳回true,其他情況傳回false。
1.2資料通路
JSP中存在四種作用域:pageScope、requestScope、sessionScope、applicationScope。使用方法是$ { XXXScpoe.對象}。
- 注意:當在不同作用域存在同名對象時,會按以下順序查找:pag=>request=>session==>application。
EL中定義了五個隐含對象,在資料通路時可以調用這些對象,包括pageContext/param/paramValues/cookie/initParam,調用方式如$ { cookie.對象名稱.屬性名稱 }
2.JSTL
2.1.JSTL标簽庫
JSTL | 推薦字首 | URI | 範例 |
---|---|---|---|
核心标簽庫 | c | http://java.sun.com/jsp/jstl/core | < c:out > |
I18N标簽庫 | fmt | http://java.sun.com/jsp/jstl/fmt | < fmt:formatDate> |
SQL标簽庫 | sql | http://java.sun.com/jsp/jstl/sql | < sql:query > |
XML标簽庫 | x | http://java.sun.com/jsp/jstl/xml | < x:forBach > |
函數标簽庫 | fn | http://java.sun.com/jsp/jstl/functions | < fnL:sqlit > |
注意:引入标簽庫時,需要在page指令之後加入taglib指令
2.2.核心标簽庫
2.2.1顯示資料:<c:out value="變量名" escapeXml="true"></c:out>,escapeXml屬性為false ,不會顯示HTML标簽。
2.2.2指派資料:<c:set value="變量值" scope="session" var="變量名"></c:set>
2.2.3删除變量:<c:remove var="變量名" scope="session" ></c:remove>
2.2.4流程控制
- 簡單條件
<c:if test = "${判斷條件}">..........</c:if>
- 複雜條件
<c:choose>
<c:when test="${條件1}">代碼段</c:when>
...
<c:when test="${條件n}">代碼段</c:when>
<c:otherwise>代碼段</c:otherwise>
</c:choose>
- 循環控制
<c:forEach var="元素名" items="集合名" begin="起始" end="結束" step="步長">
代碼段
</c:forEach>
九、AJAX
AJAX實作的核心代碼有五個步驟,執行個體如下 。
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<SCRIPT LANGUAGE="JavaScript">
function showInfo(){
var xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//步驟一:在IE中執行個體化Msxml2.XMLHTTP對象
xmlHttp.open("GET", "info.jsp", true);//步驟二:指定異步送出的目标和送出方式
xmlHttp.onreadystatechange=function() {//步驟三:指定xmlHttp狀态改變時的處理方法
if (xmlHttp.readyState==4) {//步驟四:編寫處理方法代碼
infoDiv.innerHTML = xmlHttp.responseText;
}
}
xmlHttp.send();//步驟五:送出請求
}
</SCRIPT>
</body>
</html>