JSP的基礎、指令、動作
JSP的基礎、指令、動作
jsp的簡介
靜態網頁:指沒有後臺數據庫、不含程式、不可互動的網頁。適用於不經常更改的網頁。
動態網頁:指顯示的內容不是固定的,是根據伺服器執行程式碼的結果來確定具體的顯示內容。
主要區別:是否會隨著時間,地點,使用者的選擇而改變。
JSP:( java server pages ) java 伺服器頁面,是一種伺服器指令碼語言,在伺服器執行,返回客戶端一個HTML檔案。
jsp的執行過程
- 當客戶端第一次請求一個jsp網頁時,伺服器就會將該jsp檔案變成java檔案(通常是一個servlet),再將java檔案編譯成class位元組碼檔案。java(servlet , class)的內容就是打印出一個HTML檔案,伺服器將該HTML檔案響應回給客戶端。客戶端再將HTML檔案顯示出來。
- 當客戶端非第一次請求jsp網頁時,伺服器直接執行class檔案,響應一個HTML檔案給客戶端。
所以,第一次請求時,花的時間比再次請求長。 - 當jsp檔案更改了,必須要重新編譯jsp檔案,也就是按第一次執行。
jsp的組成
JSP組成部分包括HTML、Java、JSP程式碼
HTML: 負責內容
Java: 負責行為
JSP: 負責行為
jsp的註釋
jsp的註釋:
<%-- 多行註釋內容 --%>
java的註釋:
<%/* 多行的註釋內容 */%>
<%// 單行的註釋內容 %>
html的註釋:
<!-- 多行註釋內容 -->
jsp、java的註釋在網頁中和瀏覽器的原始碼中都不會出現,因為它們沒有傳輸到客戶端,僅僅是給程式設計師讀的;html的註釋在網頁中不會出現,但在瀏覽器的原始碼視窗可以看得到。
jsp的常用指令碼元素
變數和方法的宣告
聲明後可以在本JSP頁面中的任何位置使用。(即全域性變數)
語法格式:
<%! 宣告變數和方法 %>
注意點
- 宣告必須以“ ; ”結尾。
- 變數和方法的命名規則與Java中的規則相同;
- 一個宣告僅在一個JSP頁面中有效;如果多個頁面想要用到該變數和方法,最好將他們寫成一個獨立的檔案,然後用
<%@include%>
或<jsp:include>
元素包含進來。
示例
<body> <%! String str = "JSP技術帶你走進動態網頁開發時代!"; //宣告變數 %> <%! String print(){ //宣告方法 return str; } %> <h1><%=print()%></h1> //表示式 </body>
表示式
將結果直接輸出在網頁中。
語法格式:
<%= 表示式 %>
注意點
- 表示式的結尾沒有分號。
適用場景
- 向網頁輸出內容。
- 生成動態的連結地址。
- 動態生成From表單處理頁面
示例
<body>
<%!
String name="百度";
String urlAddress="https://www.baidu.com";
%>
<p><a href="<%=urlAddress%>"><%=name%></a></p>
<form action="<%=urlAddress%>">
</form>
</body>
指令碼(java程式碼)
語法格式:
<% 指令碼語句 %>
在指令碼中也可以宣告變數和方法,但只可以在該<%
與%>
中可用。
jsp的常用指令元素
JSP指令元素的作用:用來提供整個JSP網頁的相關資訊,並用來設定JSP網頁的相關屬性。
JSP指令在客戶端是不可見的,被伺服器解釋並執行。
JSP指令包括include指令
、page指令
、taglib指令
。
- page指令:定義整個頁面的全域性屬性。
- include指令:包含一個程式碼或文字檔案,即在當前網頁中插入include指令指定的檔案。
- taglib指令:引入自定義的標籤或第三方的標籤庫。
page指令
page指令的主要屬性及語法
<%@page langueage="java" //指令碼語言
pageEncoding="UTF-8" //頁面所用編碼
extends="繼承父類名稱"
import="匯入的Java包或類的名稱"
session=“true/false" //是否參與HTTP會話
buffer="緩衝區大小" //設定out物件的緩衝區大小
autoflush="true/false" //是否自動重新整理
isThreadSafe="true/false" //是否執行緒安全
info="頁面資訊"
errorPage="發生錯誤時所轉向的頁面的相對地址" //當頁面錯誤時,跳轉的頁面
isErrorPage="true/false" //是否是錯誤處理頁面
contentType="" //MIME型別和字元編碼
isELIgnord="true/false" //是否忽略正則表示式
%>
pageEncoding
: jsp檔案自身的編碼,也就是 jsp --> java
contemtType
: 瀏覽器解析jsp的編碼,通常與pageEncoding
保持一致。
注意點
- 每個頁面中可以使用多個
<%@page%>指令
,且區分大小寫。 - 除了
import指令
外,其他的指令只可以使用一次。 - 一個JSP頁面中,如果需要同時匯入多個Java包,可以分開寫,也可以合起來寫。如:
<%@page import="java.util.Date"%>
<%@page import="java.io.*"%>
也可以寫成
<%@page import="java.util.Date,java.io.*"%>
include指令
可以將其他檔案靜態插入本JSP網頁中。
page指令的語法
<%@include file="filename"%>
jsp的動作元素
作用
用來控制JSP引擎的行為。
主要有以下幾個:
<jsp:include>
動態插入一個檔案
<jsp:forward> 跳轉
到一個新的頁面
<jsp:param>
子標籤
,傳遞引數,通常巢狀在include、forward動作元素中使用
<jsp:plugin>
連線客戶端的Applet或Bean外掛
<jsp:useBean>
使用JavaBean元件
<jsp:setProperty>
設定JavaBean的屬性值
<jsp:getProperty>
獲取JavaBean的屬性
值並輸出
<jsp:include>
動作
語法
<jsp:include page="檔名稱"/>或
<jsp:include page="檔名稱">其他內容</jsp:include>
注意:第1種語法,收尖括號前有一個反斜槓。
功能
當前網頁中動態
包含一個檔案,當執行到該動作元素處,才載入被包含檔案的位元組碼。
include指令
與include動作
的區別
include指令:是靜態插入檔案,先將檔案載入到當前的JSP頁面中,再一起編譯成位元組碼檔案,且不可以傳遞引數,僅僅是將兩個頁面放在一起。指令後接file
。
include動作:是動態插入檔案,先將兩個檔案分開編譯成位元組碼檔案,再將被載入檔案的位元組碼檔案載入到當前的JSP頁面中,可以通過引數傳遞屬性值。動作後接page
。
<jsp:forward>
動作
語法
<jsp:forward page="檔名稱"/>或
<jsp:forward page="檔名稱">其他內容</jsp:forward>
功能
從該動作的執行處停止
當前網頁的執行,轉向執行page指定的檔案
,但瀏覽器中的位址列的地址不會改變。
<jsp:param>
子標籤
語法
<%--包含動作-->
<jsp:include page="檔名稱">
<jsp:param name="變數名字1" value="變數值1"/>
<jsp:param name="變數名字2" value="變數值2"/>
...
</jsp:include>
<%--跳轉動作-->
<jsp:forward page="檔名稱">
<jsp:param name="變數名字1" value="變數值1"/>
<jsp:param name="變數名字2" value="變數值2"/>
...
</jsp:forward>
功能
將標籤中的變數值傳遞
給動態載入的檔案。
不可以獨立使用,只可作為include、forward的子標籤使用。
示例
傳遞引數的頁面————chuandi.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>傳遞引數頁面</title>
</head>
<body>
<h3>該頁面傳遞一個引數QQ,直線下是接受引數頁面的內容</h3>
<hr>
<jsp:include page="jieshou.jsp">
<jsp:param name="userName" value="QQ"/>
</jsp:include>
</body>
</html>
接受引數的頁面————jieshou.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>接受引數頁面</title>
</head>
<body>
<p>接受引數,並顯示結果頁面</p>
<% String str=request.getParameter("userName");%>
<font color="blue" size="12"><%=str%></font>你好,歡迎你訪問!
</body>
</html>
執行結果如下:
可見,傳遞引數頁面中包含了接受引數頁面;如果將傳遞引數頁面中的<jsp:include page="">
改成<jsp:forward page=""/>
,結果如下:
瀏覽器中的地址顯示的是傳遞引數的頁面,但內容顯示的是接受引數的頁面
。