跳到主要內容

JSP(3)細談JSP語法

細談JSP語法

  • JSP語法

         JSP語法屬於內嵌式在HTML中,但是它會轉成Servlet Class檔,但是編譯器如何知道
         區分哪些是HTML語法,哪些是JSP語法。答案就是利用不同的標記去做辨識,基本  
         上web容器只認識 <% %>標籤內的語法並做轉換。以下會一一介紹這些語法的規範與
         應用。

JSP常用的語法整理
標記 說明 符號
註解
(Comment)
說明程式用,編譯器不會載入其內容 <%--  註解 --%>
宣告
(Declaration)
宣告變數名稱或是方法 <%! 宣告 %>
指令
(Directive)
載入JSP網頁之前需要使用載入的環境或是檔案 <%@ 指令%>
標記
(Scriptlet)
程式語法<% 程式碼 %>
運算式標記
(Expression)
運算式支援變數運算 <%=運算式%>


  • 註解:
    <%-- 註解 --%>編譯器看到這種標記,它會自動過濾掉不做編譯的動作,也不會再使用者   
    端看到註解內容。


  • 宣告:
     一般在此宣告的方法會在整個類別層級,提供該整個類別去做使用

    EX: <%! final String strHello="Hello,JSP">


  • 指令

    <%@ 指令 屬性="值" %>
EX :
<%@ page contentType="text/html;charset=ISO-8859-1" import="java." %>
<%@ page language="java" buffer="none" isThreadSafe="yes"  errorPage="/error.jsp" %>

屬性 說明
language JSP主要還是已支援java語言為主
<% page language="java"  %>
extends 使JSP可以繼承父類別的屬性或是方法
import JSP頁面上載入所需要的jar檔,提供後面方法使用。
<%@ page import = "java.util.*" %>
session value="true|false"如果為true就是能夠使JSP讀取到implicit session物件,預設為true
buffer value="none|10kb"指定緩衝區的容量,
autoFlush value="true| false" ,如果為true緩衝區會自動的flush,
isThreadSafe value="true|false",
errorPage 當發生錯誤時,可以導向到另外一個頁面。
<%@ page errorPage="error/myerror.jsp" %>
isErrorPage value="true|false",當發生錯誤時,是否會導向到另外一個JSP頁面做處理。
contentType value="text/html;charSet(網頁的字元集)=ISO-8859-1"

(1) info
利用info可以記載JSP文件的相關訊息,例如作者、版本以及版權宣告等等。
Ex: <%@ page info = "The web page , Copyright 1982 by Kevi Flynn." %>

(2)contextType屬性
設定Http回應的內容MIME,常設定有"text/html"、"text/xml"、"text/plain"等等,
Ex: <%@ page contextType= "text/html; charset=ISO-8859-1 "  %>

(3)pageEncoding
<%@ page pageEncoding="ISO-8859-1" %>

(4) extends
JSP轉譯為Servlet,希望該頁面可以繼承某個功能可以利用extends,如果使用HTTP協定需要實作javax.servlet.jsp.HttpJspPage介面,或是改用其他協定需要實作javax.servlet.jsp.JspPages介面

<%@ page extends="com.taglib.wdjsp.MyJspPage" %>

(5)import屬性
載入模組等於java import的敘述
Ex: <%@ page improt="java.util.list " %>

(6) buffer
控制緩衝區使用,緩衝區是可以保留前一個網頁的內容,不會因為錯誤或是意外而消失,建議使用<jsp:forward>或是errorPage屬性指定錯誤頁面時,都不要關閉緩衝區
<%@ page buffer="12Kb" %>
關閉緩衝處理: <%@ page buffer="none" %>

(7) autoFlush
當緩衝區已滿時,使否要將內容傳送出去頁面,預設為true,表示為送出頁面並清空。
<%@ page autoFlush = "true" %>
(8)isThreadSafe
是否可以安全處理多個用戶的請求,當你設定為false表示該JSP網頁不會讓多個執行緒去做處理,何時設為true或是false,當你連結資料庫,該頁面只可以被單一執行緒所去使用,所以該JSP頁面不可以同時處理多個要求,應將isThreadSafeˊ為false,但是若該資料連結可以做Connection Pooling時,表示後面的連結可以自動等待前面的回收後去做連結資料庫,所以isThreadSafeˊ為ture
  • include
         include指令用在我們可以載入其他檔案或是網頁(html、JSP),它在轉譯(translation
         time)階段就會將檔案做載入的動作。

     <%@ include file="header.html" %>
     <%@ include file="header.jsp" %>
屬性說明
file可以參考檔案或是URL做為載入的動作。
語法: file="檔案路徑"
  • taglib
        taglib為標記函式庫(tag library),它可以讓網頁開發者可以自訂自己的標記,當然SUN
        提供很標準的標記程式庫(JSTL,Java Standard Tag Library)。標記語法如下
        <%@ taglib prefix="標記" uri="標記程式庫.tld"  tagdir="標記目錄位址" %>


  • 宣告變數
<%! private int x=0 , y=0; private ......%>


  • JSP生命週期
執行JSP頁面 -> JSP容器初始化或是回收物件呼叫jspInit() ->  執行頁面 -> 回收JSP頁面jspDestory()
 這裡需要知道jspInit()和jspDestory()方法,


補充: uri一制性辨識子用來載入標記程式庫,TLD為XML的格式,用來定義標記的的結構。

(4)標記
     可以嵌入一般的java語法。
        

(5)運算式標記
       運算式標記格式;<%=expression %>
       運算式標記常用於顯示變數的值或是執行

隱含物件

隱含物件就是每個JSP的頁面,在web容器初始化時就會建立這些物件,所以不需要自行宣告,就可以使用。

物件名稱 類別或是介面 說明
page javax.servlet.jsp.HttpJspPage 表示該物件將JSP頁面可以轉換為Servlet的執行個體
config javax.servlet.ServletConfig JSP頁面可以轉換為Servlet的執行個體,該物件得ServletConfig的物件
request javax.servlet.http.HttpServletRequest 用戶端的物件的請求
response javax.servlet.http.HttpServletResponse 表示伺服器端的回應
out javax.servlet.jsp.JspWrite 表示為輸出串流
session javax.servlet.jsp.HttpSession 表示為seesion物件
application javax.servlet.ServletContext 長存在Web應用程式中,可以給所有JSP共用
pageContext javax.servlet.jsp.PageContext JSP的共同關聯資料
exception javax.lang.Throwable 代表沒有被截取一長


(1)page 物件



































留言

這個網誌中的熱門文章

GSON基礎教學

GSON 前言 JSON是很常見的資料交換格式,在JAVA領域常用處理JSON的函式庫:GSON、FastXML和JSON-B,本章節會以GSON為主,學習目標如下 JSON格式說明 GSON 套件函式 GSON: 物件轉換JSON字串 GSON: JSON字串轉換物件 JSON 格式說明 JSON全名為JavaScript Object Notation,它是一種輕量級的資料交換格式,會大為流行的理由,主要是他比傳統用xml更輕巧且容易處理, JSON表達方式物件會用大括弧{},陣列則是用中括號[]。 用JSON字串來表達Employee的物件內容,由JSON字串可以知道物件name、age、sex和salary屬性。 JSON表示員工資料方式: {“name”:”Jack Bryant”, “age”:18, “sex”:”M”,”salary”:3500.00} JSON陣列表示方式: 跟我們使用JAVA的陣列方式類似,內容值可以是數字’、文字、布林、陣列、物件、null等等。 範例: 字串: [“紅”、”橙”、”黃”、”綠”、”青”、”藍”、”紫”} 布林: [true, true, false, false, true, true] GSON 套件函式 Gson為google所發布的函式庫,主要將物件與json字串之間的轉換時方便使用。當我們將JAVA物件轉換成JSON字串稱為 序列化 ,JSON字串轉換至JAVA物件稱為 反序列化 。 GSON: 物件轉換JSON字串 有了JSON基本概念後,我們進入本章重點,首先我們需要建立員工類別(Employee),定義如下 物件 屬性 員工類別 Employee name 名字 age 年紀 sex 性別 salary 薪水 /** * name:員工類別 */ public class Employee implements Serializable { //constructor public Employee(String name, double salary){ this.name = name; this.sala

PHP與Python搭配

今天介紹如何利用php網頁呼叫目錄下的python程式工作或是資料交換,本人整理的方法有兩種 使用system()、exec()、shell_exec()呼叫程式 (1) string system ( string return_var ] ) 參考網址 官網解釋system()用來執行外部命令,返回為印出的結果,passthru()跟system()類似但是它不會返回結果。 範例1. 利用system執行ls指定並顯示在網頁上,無法使用變數保留ls的結果 檔案名稱: psystem.php $jsondata= system("ls -al", $result); 結果: (2) exec() : string exec ( string output [, int &$return_var ]] ) 參考網址 範例2. 利用exec執行python程式並可以回傳json格式給前端網頁做處理並顯示。我們ptopy.php就是可以看到callpy()為執行py的函式,它執行完pyEx01.py會將結果給$jsondata變數,做後面json解析。 檔案名稱: ptopy.php function callpy() { $jsondata= exec("/usr/bin/python pyEx01.py"); return $jsondata ; } $jsondata= callpy(); echo $jsondata ; echo " " ; $obj = json_decode($jsondata) ; echo "name:".$obj-> { 'name'} .',' ; echo "id:".$obj-> { 'id'} ; 檔案名稱: pyEx01.py import sys

Python AI-問題集

Python AI-問題集 問題集 Jupyter Notebook執行ipywidgets會出現kernel死掉的錯誤發生(The kernel appears to have died) 解決方法 (1) 根據log檔來判斷問題: 例如:log訊息出現OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized. (2) 根據問題關鍵字找出問題所在: 利用google查詢所遭遇到的問題,例如我把上面的問題上google查詢可以找到這篇的解法 https://blog.csdn.net/bingjianIT/article/details/86182096 (3)實作解法: 我實作下面解法後,就可以順利執行手寫辨識的程式. //在Python宣告時加入 import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" 參考 https://blog.csdn.net/bingjianIT/article/details/86182096