1. 程式人生 > 其它 >JSP的基礎、指令、動作

JSP的基礎、指令、動作

技術標籤:Web學習jsp

JSP的基礎、指令、動作

jsp的簡介

靜態網頁:指沒有後臺數據庫、不含程式、不可互動的網頁。適用於不經常更改的網頁。
動態網頁:指顯示的內容不是固定的,是根據伺服器執行程式碼的結果來確定具體的顯示內容。
主要區別:是否會隨著時間,地點,使用者的選擇而改變。
JSP:( java server pages ) java 伺服器頁面,是一種伺服器指令碼語言,在伺服器執行,返回客戶端一個HTML檔案。

jsp的執行過程

  1. 當客戶端第一次請求一個jsp網頁時,伺服器就會將該jsp檔案變成java檔案(通常是一個servlet),再將java檔案編譯成class位元組碼檔案。java(servlet , class)的內容就是打印出一個HTML檔案,伺服器將該HTML檔案響應回給客戶端。客戶端再將HTML檔案顯示出來。
  2. 當客戶端非第一次請求jsp網頁時,伺服器直接執行class檔案,響應一個HTML檔案給客戶端。
    所以,第一次請求時,花的時間比再次請求長。
  3. 當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=""/>,結果如下:
在這裡插入圖片描述

瀏覽器中的地址顯示的是傳遞引數的頁面,但內容顯示的是接受引數的頁面