一、概述
JSP是一種建立在Servlet規范功能上的動態網頁技術,在網頁文件中嵌入Java代碼和JSP標記用於產生動態內容。
本文簡單介紹JSP的運行機制和JSP的語法。
二、JSP的運行機制
JSP文件在用戶第一次請求時,會被編譯成Servlet,再由這個Servlet處理用戶的請求。
JSP容器管理JSP頁面生命周期分為兩個階段:轉換階段和執行階段,當有一個對JSP頁面的客戶請求到來時,JSP容器將JSP頁面轉換為Servlet源文件,然后調用javac工具編譯源文件生成字節碼文件,接下來,Servlet容器加載轉換后的Servlet類,實例化一個對象處理客戶端的請求,請求處理完成后響應對象被JSP容器接收,容器將HTML格式的響應信息發送給客戶端。
三、JSP的語法
JSP頁面一般由元素和模板數據組成。元素是必須由JSP容器處理的部分,模板數據JSP容器不處理。
元素分為三種類型:指令元素、腳本元素和動作元素。
1 指令元素
主要用於為轉換Servlet階段提供整個JSP頁面的相關信息,指令不回產生任何輸出。
1.1 page指令:作用於整個JSP頁面,定義了與頁面相關的屬性,用於和JSP容器通信
page指令有15個屬性:
<%@ page
language="java" //指定在腳本元素中使用的腳本語言
import="com.test.Person" //指定在腳本環境下可以使用的類
extends="className" //指定JSP頁面轉換后的Servlet類從哪一個類繼承
session="true" //指定頁面是否參加到HTTP會話中,若為true則在JSP頁面中可以使用隱含的session對象
buffer="none" //指定out對象使用的緩沖區大小
autoFlush="true" //指定當緩沖區慢的時候,緩存的輸出是否應該自動刷新
isThreadSafe="true"//指定對JSP頁面的訪問是否是線程安全的
info="info_text" //指定頁面的相關信息
errorPage="error_url" //指定當JSP頁面發生異常時,將轉向哪一個錯誤處理頁面
isErrorPage="false" //指定當前的頁面是否是另一個頁面的錯誤處理頁面
contentType="text/html; charset=ISO-8859-1" //指定相應頁面的MIME類型和字符編碼
pageEncoding="ISO-8859-1" 指定頁面使用的字符編碼,如果設置了該屬性,則頁面使用該屬性指定字符集,沒有設置則使用contextType屬性指定的字符集
isErrorPage="false" //定義在JSP頁面中是否執行或忽略EL表達式
deferredSyntaxAllowedAsLiteral="false" //指示在JSP頁面的模板文本中是否允許出現字符序列
trimDirectiveWhitespaces="false" //指示模板中的空白怎么處理
%>
在包com.test包中新建一個Person類,在JSP中使用import引入該類即可使用:
<%@ page import="com.test.Person" %>
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
<%
Person p=new Person("xujian",25);
String name=p.getName();
String age=p.getAge()+"";
String info=name+":"+age;
out.write(info);
%>
</body>
</html>
1.2 include指令:用於在JSP頁面中靜態包含一個文件,可以是JSP頁面、HTML網頁、文本文件或一段Java代碼
<html>
<head>
<title></title>
</head>
<body>
<%@ include file="date.jsp" %>
</body>
</html>
1.3 taglib指令:允許頁面使用用戶定制的標簽
2 腳本元素
腳本元素包括三個部分:聲明、腳本端和表達式:
2.1 聲明:用於聲明在JSP頁面的腳本語言中使用的變量和方法
在JSP中有兩種聲明變量的方法,一種是在<%! %>內,一種是在<% %>內,它們是有區別的:聲明在<%! %>內的變量和方法是一個類內的變量和方法,也就是成員變量和成員方法。聲明在<%%>內的變量是一個方法的變量也就是局部變量。另外,如果在<% %>內添加一個method()方法那么該程序就會報錯,這樣聲明一個方法等於就是一個類里的方法里又聲明了個方法結果肯定是錯誤的。

2.2 腳本段:在請求處理期間要執行的Java代碼段
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
<%out.write("hello world!"); %>
</body>
</html>
在JSP容器轉換JSP頁面為Servlet類時,頁面中代碼段會按照出現的次序依次被轉換為_jspService()方法中的代碼。
2.3 表達式
表達式腳本元素是Java語言中完整的表達式,在請求處理時計算這些表達式,計算的結果將被轉換為字符串,插入到輸出流中。
<%@ page import="java.util.Date" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
現在的時間:<%= new Date().toLocaleString() %>
</body>
</html>
3 動作元素
動作元素為請求處理階段提供信息,有一個包含元素名的開始標簽,可以有屬性、可選的內容、與開始標簽匹配的結束標簽。一個標准動作是嵌入到JSP頁面的一個標簽,在頁面被轉換為Servlet期間,當JSP容器遇到這個標簽,就用預先定義的對應與該標簽的Java代碼來代替它。
JSP規范中定義了了20個標准的動作元素。
