程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP基本語法、3個編譯指令、7個動作指令、9個內置對象

JSP基本語法、3個編譯指令、7個動作指令、9個內置對象

編輯:關於JSP

JSP基本語法、3個編譯指令、7個動作指令、9個內置對象


一、jsp概述


JSP是java server page的縮寫,其本質是一個簡化的servlet,是一種動態網頁技術標准。jsp頁面是在HTML頁面中嵌入java程序段,使用jsp開發的應用程序可以跨平台。

二、jsp基本語法


2.1 jsp表達式

jsp表達式用於向頁面輸出信息,語法格式如下:

<%= 表達式 %>

如:<%= 5+6 %>
<%與=之間不能有空格,=與後面的表達式之間可以有空格。

2.2 jsp聲明標識

聲明標識用語在jsp頁面中定義全局的變量或者方法,通過聲明標識定義的變量和方法可以被整個jsp頁面訪問。語法格式如下:

<%!聲明變量或者方法的代碼%>

<%!String str = "test";%>
<%與!之間不能有空格,!與其後面的代碼之間可以有空格。

2.3 jsp代碼段

代碼片段就是嵌在jsp頁面中的java代碼或腳本代碼,會在頁面請求的處理期間被執行,java代碼可以實現定義變量、流程控制等功能;腳本代碼可以通過使用jsp內置對象在jsp頁面輸出內容、處理請求和響應、訪問session等,代碼片段的語法格式如下:

<% java代碼或者腳本代碼 %>

2.4 jsp注釋

2.4.1 HTML注釋

HTML注釋格式:

<code class=" hljs xml">    <!--{cke_protected}{C}%3C!%2D%2D%20%20html%E6%B3%A8%E9%87%8A%2D%2D%3E--></code>

html注釋不會顯示在網頁中,在浏覽器中查看源代碼的時候可以看到注釋信息。

2.4.2 代碼片段注釋

因為代碼片段即為java代碼或者腳本代碼,代碼片段的注釋和java語法一樣,單行注釋寫在//之後,多行注釋寫在/* */ 之間,文檔提示注釋寫在/***/之間。

//單行注釋

/*
  多行注釋第一行
  多行注釋第二行
*/

/**
  文檔注釋    
*/

2.4.3 隱藏注釋

html注釋在查看網頁源代碼的時候可以看到,所以嚴格來說這種注釋並不安全,jsp提供的隱藏注釋在浏覽器和查看源碼的時候都看不到,安全性更高。
隱藏注釋寫在<%–與%>之間:

<%--jsp注隱藏釋 --%>

2.4.4 動態注釋

在html注釋中嵌入jsp代碼片段可以構成動態的html注釋文本。
示例:

示例代碼

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*,java.util.ArrayList"%>

jsp基本語法

<%--jsp注隱藏釋 --%> <%!String str = "test"; //jsp聲明%> <% /** 文檔注釋 */ //單行注釋 /* 多行注釋1 多行注釋2 */ String hello = "hello world"; out.println(hello + "
"); for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { out.println(i + "*" + j + "=" + j * i + "    "); } out.println("
"); } out.println(str); %>

浏覽器訪問:
這裡寫圖片描述

三、jsp的3個編譯指令


jsp編譯指令是通知jsp引擎的消息,它不直接生成輸出,編譯指令有默認值。常見的編譯指令有3個:

page指令:該指令是針對當前頁面的指令。 include指令:用於指定包含另一個頁面。 taglib指令:用於定義和訪問自定義標簽。
編譯指令的語法格式如下:
<%@ 編譯指令名 屬性名1="屬性值" 屬性名2="屬性值" ...  %>

3.1 page指令

pag指令常用屬性

屬性 定義 language =“語言” 主要指定JSP 容器 要用什麼語言來編譯JSP頁。JSP 1.2 規范中指出,目前只可以使用Java 語言,不過未來不排除增加其他語言,如C、C++、Perl 等等。默認值為Java語言 extends = “基類名” 主要定義此JSP 網頁產生的Servlet 是繼承哪個父類 import= “包名” 定義此JSP 網頁可以使用哪些Java類庫 session=”true或false” 決定此JSP 網頁是否可以使用session 對象。默認值為true buffer=”none或size in kb” 決定輸出流(output stream) 是否有緩沖區。默認值為8KB 的緩沖區 autoFlush=”true 或false” 決定輸出流的緩沖區是否要自動清除,緩沖區滿了會產生異常(Exception)。默認值為true isThreadSafe=”true 或 false” 告訴JSP 容器,此JSP 網頁是否能同時處理多個請求。默認值為true,如果此值設為false, 轉義生成的Servlet會實現SingleThreadModel接口。 info =”text” 表示此JSP 網頁的相關信息 errorPage=”error_url” 表示如果發生異常錯誤時,網頁會被重新指向指定的URL isErrorPage=”true或false” 表示此JSP Page 是否為專門處理錯誤和異常的網頁 contentType = “ctinfo” 表示MIME 類型和JSP 網頁的編碼方式,其作用相當於HttpServletResponse接口的setContentType()方法

3.2 include指令

include指令可以將一個外部文件嵌入到當前jsp文件中,同時解析這個頁面中的jsp語句。include命令既可以包含jsp頁面也可以包含靜態文本。編譯指令語法如下:

<%@ include file="要導入的jsp頁面或文本文件" %>

如:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ include file="header.jsp"%> <%@ include file="text.txt"%> <%@ include file="footer.jsp"%>

使用include指令注意事項:
1.file名不能為依變量,下面的例子是錯誤的

<%! String url="header.jsp" %>
<%@ include="<%=url %>"

2.file名後面不能傳入參數,下面的例子是錯誤的

<%@ include file="header.jsp?username=abc" %>

3.file的路徑是相對於此jsp的路徑。

3.3 taglib指令

taglib指令用於引入一些特定的標簽庫,語法格式:

<%@ taglib prefix="tagPrefix" uri="tagLibraryURI" %>

如使用struts標簽庫:

<%@ taglib prefix="s" taglib="/struts-tags" %>

prefix=”tagPrefix “用於定制標記的前綴,jsp, jspx, java, javax, servlet, sun, 和sunw已被sun公司保留。uri=”tagLibraryURI”統一資源標記庫,制定一個特定的標記庫,可以是相對路徑,也可以是絕對路徑。

四、jsp的7個動作指令

4.1forward指令

forward指令用於將頁面轉發到另外的頁面,可以是html頁面、jsp頁面、容器中的servlet.
語法如下:

如果轉發的時候需要傳遞參數可以使用指令進行設置。
比如,訪問index.jsp頁面時自動轉發至login.jsp,需要把username和password傳遞過去:
index.jsp:

<code class=" hljs xml"><%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:forward page="login.jsp">
    <jsp:param value="yaopan" name="username">
    <jsp:param value="123456" name="password">
</jsp:param></jsp:param></jsp:forward>
<%--mac上按住comment鍵(windows下按住ctrl鍵),再點擊login.jsp  forword以下的代碼不會被執行 --%>
網站主頁</code>

在login.jsp中可以使用getParameter方法獲取傳入的參數值:

<%
  String name=request.getParameter("username");
  String pwd=request.getParameter("password");
  out.println(name);
  out.println("
");
  out.println(pwd);
%>

執行forword指令時用戶請求的地址沒有發生變化,頁面內容被forward目標替代。

4.2 include指令

include指令用於包含某個頁面,但不會導入被include頁面的編譯指令。可以通過param指令傳遞參數:
新建一個index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

body.jsp


4.3useBean、setProperty、getProperty指令

這三個指令與javaBean相關,useBean用於在jsp頁面中初始化一個Java實例;setProperty為javaBean實例的屬性賦值;getProperty屬性用於輸出javaBean實例的屬性。
如果jsp頁面中需要重復使用某段代碼,可以把這段代碼定義成java方法,然後多個jsp頁面調用該方法達到頁面復用的效果。
useBean的語法格式如下:

如:在ucas.ac.cn.jspstudy包下創建一個Student類,有name、age、stuId三個屬性和相應的setter和getter方法。在jsp頁面中創建javaBean實例:

<%--創建Student對象,對象名為stu1 --%>

setProperty方法用於為javaBean實例的屬性賦值:

<%--給stu1的name屬性賦值 --%>

<%--給stu1的age屬性賦值 --%>

getProperty用於輸出javaBean實例的屬性值:

<%--輸出stu1的name值 --%>

<%--輸出stu1的age值 --%>

4.4plugin指令

plugin主要用於下載服務器端的javaBean或applet到客戶端執行,現在很少使用。

4.5param指令

param指令用於設置參數值,該指令本身不能單獨使用,單獨的param指令沒有意義,配合以下三個指令使用:

jsp:include jsp:forward jsp:plugin

五、jsp腳本中的9個內置對象

5.1 application對象

jsp、servlet之間不能相互調用,為了解決jsp和servlet之間數據交換的問題,web服務器提供了四個對象,分別是application、session、request、page。放入application對象中的數據對整個Web應用有效,一旦jsp、servlet將數據放入application對象之中,該數據可以被該應用下其它jsp、servlet訪問。

5.2 config對象

config對象代表當前jsp配置信息,但jsp頁面通常無需配置,該對象在jsp頁面中較少使用,在servlet中使用較多。

5.3 exception對象

exception對象是Throwable的實例,代表jsp腳本中產生的錯誤和異常,是jsp頁面異常機制的一部分。把page指令的isErrowPage屬性設置為true時可以訪問exception內置對象。

5.4 out對象

out對象是javax.servlet.jsp.JspWriter的實例,代表jsp的輸出流,永於輸出內容形成html頁面。
out對象一些方法:

out.println():輸出完成後會換行,換行效果在頁面中不顯示只在源碼中顯示 out.print():輸出後不換行 out.getBufferSize() :輸出緩沖區大小 out.getRemaining() :輸出剩余緩沖區大小 out.clear():清空緩沖區,不將數據發送至客戶端 out.clearBuffer():將數據發送至客戶端,再清空緩沖區 out.flush():輸出緩沖區內容 out.close():關閉輸出流

5.5page對象

代表該頁面本身,通常沒有太大用處。

5.6 pageContext對象

代表頁面上下文,主要用於jsp之間的共享數據,使用pageContext對象可以訪問page、request、session、application范圍的變量。

5.7 request對象

request對象是jsp中的重要對象,每個對象封裝著一次用戶請求,並且所有對請求參數都被封裝在request對象中,request對象是獲取用戶請求參數的重要途徑。request對象的一些方法:

request.getMethod():獲取請求的方法名,如get,post. request.getRequestURI():獲取請求資源名.如請求訪問:/jspstudy/08/request.jsp request.getProtocol():獲取請求使用的協議.如:HTTP/1.1 request.getServerName():獲取請求使用的服務器,如:localhost. request.getServerPort():獲取請求使用的服務器端口,如:8080 request.getRemoteAddr():獲取客戶端的ip地址. request.getRemoteHost():獲取客戶端主機. request.getParameter():獲取傳遞過來的參數值. request.getParameterValues():請求參數有多個值時,該方法返回多個值組成的數組. request.setAttribute():

測試代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

輸出:

請求方法名:POST
請求的資源:/jspstudy/08/request.jsp
請求使用的協議:HTTP/1.1
請求使用的服務器:localhost
請求使用的服務器端口:8080
客戶端的IP地址:0:0:0:0:0:0:0:1
客戶端主機:0:0:0:0:0:0:0:1
表單提交過來的值:test

5.8 response對象

response對象用於服務器對客戶端的響應,大部分時候使用out對象向頁面輸出,但是out對象時JspWriter對象的實例,JapWriter時Writer的字類,Writer是字符流,因此out對象無法輸出非字符內容。jsp頁面需要輸出圖片、pdf文檔、excel等非字符對象時需要使用response作為響應輸出.response還可以用於重定向,向客戶端增加cookie.

5.9 session對象

session對象代表一次用戶會話,一次用戶會話的含義是:從客戶端連接服務器開始,到客戶端與服務器斷開為止,這個過程就是一次會話。
session通常用於跟蹤用戶的會話信息,如判斷用戶是否登錄,購物車中跟蹤用戶購買的商品。
session范圍的屬性可以在多個頁面點跳轉之間共享,一旦關閉浏覽器,session結束,session范圍內的屬性就會全部丟失。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved