javascript
JAVA WEB篇3——JSP
JAVA WEB篇3——JSP
1、JSP是什么
-
JSP是Java Server Pages的簡稱,跟Servlet一樣可以動態生成HTML響應, JSP文件命名為 xxx.jsp
-
與Servlet不同,JSP文件以HTML標記為主,然后內嵌Java代碼段,用于處理動態內容
2、JSP與Servlet
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-39HZhKDf-1626687359596)(C:\Users\yoya\AppData\Roaming\Typora\typora-user-images\image-20210719162503916.png)]
3、JSP模塊概述
- 聲明區
- 程序代碼區
- 表達式
- 注釋
- 指令和動作
- 內置對象
4、JSP聲明區
可以定義全局變量、方法、類
<%!int i;public void setName(){… …} %>5、JSP程序代碼區
可以定義局部變量以及放入任何的Java程序代碼
<%int j;for (int k=0; k<10; k++) {… …} %>6、JSP表達式
可以輸出一個變量或一個具體內容,但=后面必須是字符串變量或者可以被轉換成字符串的表達式
不需要以;結束,只有一行
<%=“hello world”%> <%=i+1%>7、JSP注釋
格式: <!--… …--> HTML文件的注釋,瀏覽器可以查看到 <%--… …--%> JSP文件的注釋,瀏覽器看不到 <%//… …%> Java語言中的單行注釋,瀏覽器看不到 <%/*… …*/%> Java語言中的多行注釋,瀏覽器看不到 注釋的內容不會被執行8、JSP指令
指令格式: <%@指令 屬性=“屬性值” 屬性=“屬性值” %>
8.1、page指令
page指令用于導包和設置一些頁面屬性
import 導入相應的包,惟一允許在同一文檔中多次出現的屬性 contentType 設置Content-Type響應報頭,標明即將發送到瀏覽器的文檔類型 pageEncoding 設置頁面的編碼 language 指定頁面使用的語言 session 控制頁面是否參與HTTP會話 errorPage 處理當前頁面中拋出但未被捕獲的任何異常 isErrorPage 當前頁是否可以作為其他頁面的錯誤處理頁面8.2、taglib指令
taglib指令用來擴展JSP程序的標簽元素,引入其他功能的標簽庫文件
<!-- prefix屬性用于指定庫前綴 --> <!-- uri屬性用于指定庫的標識 --> <%@taglib uri=“tagLibary” prefix=“prefix”%>8.3、include指令
include指令用于引入另一個JSP程序或HTML文件
<%@include file=“被包含的文件地址%>9、JSP動作
9.1、jsp:include
- include指令是在JSP程序的轉換時期就將file屬性所指定的程序內容嵌入再編譯執行(靜態包含)
- include動作在轉換時期是不會被編譯的,只有在客戶端請求時期被執行到才會被動態的編譯載入 (動態包含,推薦)
9.2、jsp:forward
forward動作用于在JSP中實現轉發,將請求轉發到另一個指定的JSP程序或者Servlet中處理,轉發后可以用request來捕獲參數
<jsp:forward page=“urlSpec” flush=“true”/><jsp:forward page=“urlSpec”><!-- 用于指定參數和其對應的值 --><jsp:param name=“key” value=“value”/></jsp:forward>10、JSP內置對象
- 在JSP程序中有9個內置對象由容器為用戶進行實例化,程序員可以不用定義就直接使用這些變量
- 在JSP轉換成Servlet后,會自動追加這些變量的定義,使用內置對象可以簡化JSP的開發
| out | JSPWriter | 輸出流 |
| request | HttpServletRequest | 請求信息 |
| response | HttpServletResponse | 響應信息 |
| session | HttpSession | 會話 |
| application | ServletContext | 全局的上下文對象 |
| pageContext | PageContext | JSP頁面上下文 |
| page | Object | JSP頁面本身 |
| config | ServletConfig | Servlet配置對象 |
| exception | Throwable | 捕獲網頁異常 |
10.1、out
out內置對象是一個緩沖的輸出流,用來給客戶端輸出信息
| void println(String x) | 向客戶端輸出各種類型數據 |
| void newLine() | 輸出一個換行符 |
| void close() | 關閉輸出流 |
| int getBufferSize() | 返回緩沖區的大小 |
| int getRemaining() | 返回緩沖區中未使用的字節數 |
| void flush() | 輸出緩沖區里的數據 |
| void clearBuffer() | 清除緩沖區里的數據,同時把數據輸出到客戶端 |
| void clear() | 清除緩沖區里的數據,但不把數據輸出到客戶端 |
10.2、request
request對象封裝的是調用JSP頁面的請求信息,它是HttpServletRequest接口的一個實例,該對象的屬性值只在一個請求中保存。
| String getMethod() | 返回客戶端向服務器端傳送數據的方式 |
| String getParameter(String name) | 返回客戶端向服務器端傳送的參數值 |
| String[] getParameterValues( String name) | 獲得指定參數的所有值 |
| String getRequestURI() | 獲得請求地址 |
| String getRemoteAddr() | 返回發送請求的客戶端或最后一個代理的IP地址 |
| int getRemotePort() | 返回發送請求的客戶端或最后一個代理的端口號 |
| String getServerName() | 獲取服務器的名字 |
| int getServerPort() | 獲取服務器端的端口 |
| void setAttribute(String name,Object o) | 在此請求中存儲屬性。屬性在請求之間重置 |
| Object getAttribute(String name) | 將指定屬性的值作為對象返回,若不存在則返回空值 |
10.3、 response
response對象用于給客戶端相應輸出處理結果,它是HttpServletResponse接口的一個實例,經常用于設置HTTP標題,添加cookie、設置響應內容的類型和狀態、發送HTTP重定向和編碼 URL
| void addCookie(Cookie cookie) | 添加一個Cookie對象,用于在客戶端保存特定的信息 |
| void addHeader(String name, String value) | 添加HTTP頭信息,該Header信息將發送到客戶端 |
| boolean containsHeader(String name) | 判斷指定名字的HTTP文件頭是否存在 |
| void sendRedirect(String location) | 重定向JSP文件 |
| void setContentType(String type) | 設置類型與編碼方式 |
10.4、session
- session對象表示瀏覽器和服務器之間的一次會話,一次會話可以包含多次請求,在多次請求之間 可以借助session對象存儲信息,它是HttpSession類型的一個實例
- 該對象的屬性值在一次會話范圍中保存,保存在服務器端,只要不關閉瀏覽器,默認半個小時內都 可以訪問
| void setAttribute(String name, Object value) | 使用指定的名稱將對象綁定到此會話 |
| Object getAttribute(String name) | 返回在此會話中用指定名稱綁定的對象,如果沒有對象在該 名稱下綁定則返回空值 |
10.5、 application
application對象是一個web程序的全局變量,它是ServletContext類型的一個實例,在整個服務器上保存數據,所有用戶共享
| void setAttribute(String name, Object object) | 將對象綁定到此servlet上下文中的給定屬性名 |
| Object getAttribute(String name) | 返回給定名稱的 |
10.6、pageContext
pageContext對象是PageContext類型的對象,可以使用這個對象來管理其他的隱含對象。 只在一個頁面中保存數據。
| void setAttribute(String name, Object value, int scope) | 使用適當的作用域設置指定的名稱和值 |
| Object getAttribute(String name, int scope) | 返回指定作用域中名稱關聯的對象,若找不到 則返回null |
| ServletRequest getRequest() | 獲取請求對象 |
| ServletResponse getResponse() | 獲取響應對象 |
| HttpSession getSession() | 獲取會話對象 |
| ServletConfig getServletConfig() | 獲取配置對象 |
| JspWriter getOut() | 獲取輸出對象 |
| Object getPage() | 獲取頁面對象 |
| Exception getException() | 獲取異常對象 |
10.7、exception
exception 對象是Throwable的實例,表示的是JSP的異常信息,如果要使用它,必須將對應頁面page指令的isErrorPage屬性設置成true。
單頁處理
<%@page errorPage="error.jsp" %>統一處理
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location> </error-page>11、EL表達式
EL(Expression Language)表達式提供了在JSP中簡化表達式的方法,可以方便地訪問各種數據 并輸出
11.1、訪問內置對象的數據
<%=request.getAttribute(“ varName”)%> 用EL實現: ${ varName }11.2、訪問請求參數的數據
request.getParameter(name); request.getParameterValues(name); <!-- 獲取指定參數的數值 --> ${param.name} <!-- 獲取指定參數中指定下標的數值 --> ${paramValues.hobby[0]}11.3、訪問Bean對象的屬性
<% request.setAttribute(“prop”,“age”); %> <!-- 相當于表達式中寫一個變量 --> ${ user[prop] }11.4、訪問集合的屬性
<!-- student為ArrayList類型的對象 --> ${student[0].name}11.5、內置對象
| JSP | pageContext | PageContext處理當前頁面 |
| 作用域 | pageScope | 同頁面作用域屬性名稱和值有關的Map類 |
| requestScope | 同請求作用域屬性的名稱和值有關的Map類 | |
| sessionScope | 同會話作用域屬性的名稱和值有關的Map類 | |
| applicationScope | 同應用程序作用域屬性的名稱和值有關的Map類 | |
| 請求參數 | param | 根據名稱存儲請求參數的值的Map類 |
| paramValue | 把請求參數的所有值作為一個String數組來存儲的Map類 | |
| 請求頭 | header | 根據名稱存儲請求頭主要值的Map類 |
| headerValues | 把請求頭的所有值作為一個String數組來存儲的Map類 | |
| Cookie | cookie | 根據名稱存儲請求附帶的cookie的Map類 |
| 初始化參數 | initParam | 根據名稱存儲Web應用程序上下文初始化參數的Map類 |
11.6、運算符
| + | 加 | ${1+2} | 3 |
| - | 減 | ${2-1} | 1 |
| * | 乘 | ${2*3} | 6 |
| /或div | 除 | $ {16/5}或${16div5} | 3.2 |
| %或mod | 取余 | $ {16%5}或${16mod5} | 1 |
11.7、關系運算符
| ==或eq | 等于 | 1==2或{1==2}或1==2或{1 eq 2} | false |
| != 或ne | 不等于 | 2!=1或{2!=1}或2!=1或{1 ne 2} | true |
| < 或lt | 小于 | 2<3或{2<3}或2<3或{2 lt 3 } | true |
| >或 gt | 大于 | 16>5或{16>5}或16>5或{16 gt 5} | true |
| <=或le | 小于等于 | 16<=5或{16<=5}或16<=5或{16 le 5} | false |
| >=或ge | 大于等于 | 16>=5或{16>=5}或16>=5或{16 ge 5} | true |
11.8、邏輯運算符
| && 或 and | 與運算 | KaTeX parse error: Expected '}', got '&' at position 6: {true&?&true}或{true and true} | true |
| ||或or | 或運算 | true∥∥false或{true\|\|false}或true∥∥false或{true or false} | true |
| ! 或not | 非運算 | !true或{!true}或!true或{not true } | false |
11.9、條件運算符
${條件表達式? 語句1 : 語句2}11.10、驗證運算符
${empty 表達式} 返回布爾值判斷表達式是否為"空"值,null值、無元素的集合或數組、長度為零的String被認為是空值12、JSTL
JSTL( JSP Standard Tag Library ) 被稱為JSP標準標簽庫,開發人員可以利用這些標簽取代JSP頁面上的Java代碼,從而提高程序的可讀性,降低程序的維護難度
jstl 官網:https://tomcat.apache.org/download-taglibs.cgi
12.1、輸出標簽
<c:out></c:out> 用來將指定內容輸出的標簽12.2、設置標簽
<c:set></c:set> 用來設置屬性范圍值的標簽12.3、刪除標簽
<c:remove></c:remove> 用來刪除指定數據的標簽12.4、單條件判斷標簽
<c:if test =“EL條件表達式”> 滿足條件執行 </c:if >12.5、多條件判斷標簽
<c:choose ><c:when test =“EL表達式”>滿足條件執行</c:when>…<c:otherwise>不滿足上述when條件時執行</c:otherwise> </c:choose >12.6、循環標簽
<c:forEach var=“循環變量” items=“集合”> … </c:forEach>12.7、自定義標簽
待補
總結
以上是生活随笔為你收集整理的JAVA WEB篇3——JSP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring的bean不能注入的几种原因
- 下一篇: linux 运行python 看不到异常