javascript
动态页面技术(JSP/EL/JSTL)
1 JSP技術
1.1 jsp腳本和注釋
jsp腳本:
??1)?<%java代碼%> ----- 內部的java代碼翻譯到service方法的內部
??2)?<%=java變量或表達式> ----- 會被翻譯成service方法內部out.print()
??3)?<%!java代碼%> ---- 會被翻譯成servlet的成員的內容
jsp注釋: 不同的注釋可見范圍是不同
??1)?Html注釋:<!-- 注釋內容 --> - - - 可見范圍 jsp源碼、翻譯后的servlet、頁面顯示html源碼
??2)?java注釋://單行注釋 ? /*多行注釋*/ ?--可見范圍 jsp源碼 翻譯后的servlet
??3)?jsp注釋:<%-- 注釋內容 --%> ----- 可見范圍 jsp源碼可見
1.2 jsp運行原理 ----- jsp本質就是servlet
??jsp在第一次被訪問時會被Web容器翻譯成servlet,再執行,如果不是第一次訪問就會到Tomcat的work目錄中找有沒有對應的servlet的java文件
??過程:
第一次訪問---->helloServlet.jsp---->helloServlet_jsp.java---->編譯運行
PS:被翻譯后的servlet在Tomcat的work目錄中可以找到
1.3 jsp指令(3個)
jsp的指令是指導jsp翻譯和運行的命令,jsp包括三大指令:
??1)?page指令 ---- 屬性最多的指令(實際開發中page指令默認)
屬性最多的一個指令,根據不同的屬性,指導整個頁面特性
格式:<%@ page 屬性名1= “屬性值1” 屬性名2= “屬性值2” …%>
常用屬性如下:
??language:jsp腳本中可以嵌入的語言種類
??pageEncoding:當前jsp文件的本身編碼----內部可以包含contentType
??contentType:response.setContentType(text/html;charset=UTF-8)
??session:是否jsp在翻譯時自動創建session
??import:導入java的包
??errorPage:當當前jsp頁面出錯后跳轉到哪個頁面,路徑填寫以webRoot為根目錄
??isErrorPage:當前頁面是否是一個處理錯誤的頁面
??2)?include指令
頁面包含(靜態包含)指令,可以將一個jsp頁面包含到另一個jsp頁面中
格式:<%@ include file=“被包含的文件地址”%>
??3)?taglib指令
在jsp頁面中引入標簽庫(jstl標簽庫、struts2標簽庫)
格式:<%@ taglib uri=“標簽庫地址” prefix=“前綴”%>
1.4 jsp內置/隱式對象(9個)
??jsp被翻譯成servlet之后,service方法中有9個對象定義并初始化完畢,我們在jsp 腳本中可以直接使用這9個對象
名稱 ?? ?類型 ?? ?描述
out ?? ?javax.servlet.jsp.JspWriter ?? ?用于頁面輸出
out.write:頁面輸出
out.print:也是頁面輸出,
只不過print是輸出變量或表達式,write一般輸出文本信息
request ?? ?javax.servlet.http.HttpServletRequest ?? ?得到用戶請求信息,
response ?? ?javax.servlet.http.HttpServletResponse ?? ?服務器向客戶端的回應信息
config ?? ?javax.servlet.ServletConfig ?? ?服務器配置,可以取得初始化參數
session ?? ?javax.servlet.http.HttpSession ?? ?用來保存用戶的信息
application ?? ?javax.servlet.ServletContext ?? ?所有用戶的共享信息
page ?? ?java.lang.Object ?? ?指當前頁面轉換后的Servlet類的實例
pageContext ?? ?javax.servlet.jsp.PageContext ?? ?JSP的頁面容器
exception ?? ?java.lang.Throwable ?? ?表示JSP頁面所發生的異常,在錯誤頁中才起作用
1.4.1 out對象
??out的類型:JspWriter
??out作用就是想客戶端輸出內容----out.write()
??out緩沖區默認8kb 可以設置成0 代表關閉out緩沖區 內容直接寫到respons緩沖器
1.4.2 pageContext對象
jsp頁面的上下文對象,作用如下:
page對象與pageContext對象不是一回事
??1)?pageContext是一個域對象,域作用范圍只是當前頁面
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)
pageContext可以向指定的其他域中存取數據
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
findAttribute(String name)
??----依次從pageContext域,request域,session域,application域中獲 取屬性,在某個域中獲取后將不在向后尋找
四大作用域的總結:
??page域:當前jsp頁面范圍
??request域:一次請求
??session域:一次會話
??application域:整個web應用
??2)?可以獲得其他8大隱式對象
例如: pageContext.getRequest()
???pageContext.getSession()
1.5 jsp標簽(動作)
??1)?頁面包含(動態包含):<jsp:include page=“被包含的頁面”/>
??2)?請求轉發:<jsp:forward page=“要轉發的資源” />
靜態包含與動態包含的區別?
靜態包含的話,兩個Jsp文件在tomcat的work目錄中會被編譯成一個Jsp類型的java文件。
動態包含的話,兩個Jsp文件在tomcat的work目錄下分別編譯成各自的jsp類型的java文件。
2 EL技術
2.1 EL 表達式概述
??EL(Express Lanuage)表達式可以嵌入在jsp頁面內部,減少jsp腳本的編寫,EL出現的目的是要替代jsp頁面中腳本的編寫。
2.2 EL從域中取出數據(EL最重要的作用)
jsp腳本:<%=request.getAttribute(name)%>
EL表達式替代上面的腳本:${requestScope.name}
EL最主要的作用是獲得四大域中的數據,格式${EL表達式}
EL獲得pageContext域中的值:${pageScope.key};
EL獲得request域中的值:${requestScope.key};
EL獲得session域中的值:${sessionScope.key};
EL獲得application域中的值:${applicationScope.key};
EL從四個域中獲得某個值${key};
??----同樣是依次從pageContext域,request域,session域,application域中獲取屬性,在某個域中獲取后將不在向后尋找
??1)?獲得普通字符串
??2)?獲得User對象的值
??3)?獲得List<User>的值
2.3 EL的內置對象11個
pageScope , requestScope , sessionScope , applicationScope ---- 獲取JSP中域中的數據
param , paramValues ---- 接收參數,相當于request.getParameter(),request.getParameterValues()
header , headerValues ---- 獲取請求頭信息,相當于request.getHeader(name)
initParam ---- 獲取全局初始化參數,相當于this.getServletContext().getInitParameter(name)
cookie ---- WEB開發中cookie,相當于request.getCookies()—cookie.getName()—cookie.getValue()
pageContext ---- WEB開發中的pageContext. pageContext可獲得其他八大對象
${pageContext.request.contextPath} 是獲得WEB應用的名稱
相當于
<%=pageContext.getRequest().getContextPath%> 但這句代碼不能實現
2.4 EL執行表達式
例如:
${1+1}
${empty user} ?? 判斷某個對象是否為空,是null返回true
${user==null?true:false} ?? 三元運算符
3 JSTL技術
3.1 JSTL概述
JSTL(JSP Standard Tag Library),JSP標準標簽庫,可以嵌入在jsp頁面中使用標簽的形式完成業務邏輯等功能。jstl出現的目的同el一樣也是要代替jsp頁面中的腳本代碼。JSTL標準標準標簽庫有5個子庫,但隨著發展,目前常使用的是他的核心庫
標簽庫 ?? ?標簽庫的URI ?? ?前綴
Core ?? ?http://java.sun.com/jsp/jstl/core ?? ?c
I18N ?? ?http://java.sun.com/jsp/jstl/fmt ?? ?fmt
SQL ?? ?http://java.sun.com/jsp/jstl/sql ?? ?sql
XML ?? ?http://java.sun.com/jsp/jstl/xml ?? ?x
Functions ?? ?http://java.sun.com/jsp/jstl/functions ?? ?fn
3.2 JSTL下載與導入
JSTL下載:
從Apache的網站下載JSTL的JAR包。進入 “http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”網址下載 JSTL的安裝包。jakarta-taglibs-standard-1.1.2.zip,然后將下載好的JSTL安裝包 進行解壓,此時,在lib目錄下可以看到兩個JAR文件,分別為jstl.jar和standard.jar。 其中,jstl.jar文件包含JSTL規范中定義的接口和相關類,standard.jar文件包含用于 實現JSTL的.class文件以及JSTL中5個標簽庫描述符文件(TLD)
在這里插入圖片描述
將兩個jar包導入我們工程的lib中
使用jsp的taglib指令導入核心標簽庫
在這里插入圖片描述
3.3 JSTL核心庫的常用標簽
??1)?<c:if test=””>標簽
其中test是返回boolean的條件
??2)?<c:forEach>標簽
使用方式有兩種組合形式:
在這里插入圖片描述
示例:
??1)?遍歷List<String>的值
??2)?遍歷List<User>的值
??3)?遍歷Map<String,String>的值
??4)?遍歷Map<String,User>的值
??5)?遍歷Map<User,Map<String,User>>的值
entry.key-----User
entry.value------List<String,User>
轉載于:https://www.cnblogs.com/sy130908/p/11602144.html
總結
以上是生活随笔為你收集整理的动态页面技术(JSP/EL/JSTL)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡自动还款为什么会逾期?可能是这几个
- 下一篇: 交通银行信用卡自动还款什么时候扣?不想逾