JSP/Servlet相關

 

1 簡介

JSP(Java Server Page)和Servlet是JavaEE規範的兩個基本成員,是JavaWeb開發的重點。html

JSP的本質是Servlet,當用戶向指定的Servlet發送請求時,Servlet利用輸出流動態的生成HTML頁面,包括每個靜態的HRML標籤和全部在HTMl頁面中出現的內容。java

 

JSP頁面內容由2個部分構成小程序

  • 靜態部分:標準的HTML標籤、靜態的頁面內容。
  • 動態部分:受Java程序控制的內容,有Java腳本動態生成。

 

工做原理

1. JSP文件必須在JSP服務器內運行。緩存

2. JSP文件必須生成Servlet才能執行。服務器

3. 每一個JSP頁面的第一個訪問者速度很慢,由於必須等JSP編譯生成Servlet。session

4. JSP頁面的訪問者無需安裝任何客戶端(包括Java環境),由於JSP頁面輸送到客戶端的是標準的HTML頁面。app

 

基本語法

JSP的基本語法與JAVA相似,如下爲特殊的幾個語法。jsp

 

3.1 註釋

<%-- JSP註釋部分,生成HTML後不顯示 --%>

<!-- 增長JSP註釋,生成HTML後顯示 -->

 

3.2 聲明部分

<%! 聲明部分 %>

 

<%-- 例子 --%>

<%!

    public int count = 0;

    

    public String Greet()

    {

        count++;

        return "Hello for " + count + " times!";

    }

%>
View Code

該聲明的部分所聲明的成員變量及成員方法會轉換成對於Servlet類的成員變量及成員方法。ide

當屢次進入包含該聲明部分的JSP頁面時,能夠發現count成員變量的值在持續改變。由於全部的客戶端共享了同一個Servlet類,即共享同一個成員變量及成員方法等。這些變量及方法只有在Servlet類銷燬後纔再也不保存。編碼

 

3.3 輸出表達式

<%= 表達式 %>

<%-- 例子 --%>

<%-- 將在頁面輸出3 --%>
<%= 1 + 2 %>

<%-- 將在頁面輸出1 --%>
<%!
    public int a = 1;
%>

<%= a %>
View Code

 

3.4 JSP腳本 

能夠利用<%%>中包含任何可執行的java代碼。而且全部可執行的Java代碼均可以利用JSP腳本嵌入HTML頁面之中。

<ul>
    <%
        for (int i = 0; i < 10; i++)
        {
    %>
        <li><p>這是第<%= i %>行</p></li>
    <%
        }
    %>
</ul>
View Code

須要注意的是,JSP腳本部分聲明的變量爲局部變量,不能使用publicprivate這些訪問控制符修飾,也不可以使用static修飾。

 

3.5 JSP的3個編譯指令 

  • page:該指令是針對當前頁面的指令
  • include:用於指定包含另外一個頁面
  • taglib:用於定義和訪問自定義標籤

使用以上編譯指令格式以下

<%@ 編譯指令名 屬性名="屬性值" %>

 

3.5.1 page指令 

page指令位於JSP頁面代碼頂端,一個JSP頁面可以使用多條page指令。

屬性名 屬性值 默認值
language 聲明當前JSP頁面使用腳本語言的種類 JAVA
extends 指定JSP頁面編譯所產生的JAVA類所基礎的父類
import 用來導入包 默認導入java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*
contentType 設定生成網頁的文件格式和編碼字符集 格式:text/html,字符集:ISO-8859-1
pageEncoding 生成網頁的編碼字符集
session 設定這個JSP頁面是否須要HTTPSession
buffer 指定輸出緩衝區的大小,可設置none 8KB
autoFlush 當輸出緩衝區即將溢出時,是否須要強制輸出緩衝區的內容,true爲正常輸出,false溢出時拋出溢出
info 設置該JSP程序的信息,可看做說明,調用getSerletInfo()可獲取
errorPage 指定錯誤處理頁面
isErrorPage 設定本JSP頁面是否爲錯誤處理程序,若該頁面已經是錯誤處理程序,則無需設置errorPage值

 

<%-- 例子 --%>

<%@ page contentType="text/html; charset=utf8" language="java" errorPage="">

<%@ page import="java.util.*" %>
View Code

 

3.5.2 include指令

該指令可使用在文件的任何位置。使用該指令,能夠將一個外部文件嵌入到當前的JSP文件中,同時解析這個頁面中的JSP語句。

include能夠包含靜態頁面,也能夠包含動態的JSP頁面。

若被嵌入文件常常須要改變,則建議使用<jsp:include>,由於它是動態的包含。

<%-- 例子 --%>
<%@ include file="exampleJSP" %>

<jsp:include file="exampleJSP">
View Code

 

3.6 JSP的7個動做指令

  • jsp:forward
  • jsp:param
  • jsp:include
  • jsp:plugin
  • jsp:useBean
  • jsp:setProperty
  • jsp:getProperty

 

3.6.1 forward指令

用於將頁面響應轉發到另外的頁面(靜態、動態或者Servlet)。

<%-- 例子 --%>

<%-- jsp 1.0 --%>
<jsp:forward page="">

<%-- jsp 1.1 及以上 --%>
<jsp:forward page="xxx.jsp">
    <jsp:param name="xx" value="xxx" />
</jsp:forward>
View Code

該指令轉發請求,但客戶端的請求參數不會改變,即用戶請求的地址不會改變。

 

3.6.2 include指令

該指令是一個動態include指令。

<%-- 例子 --%>
<jsp:inlcude page="xx.jsp" flush="true">
    <jsp:param name="xxxx" value="xxx" />
</jsp:include>
View Code

flush屬性用於指定輸出緩存是否轉移到被導入文件中。

true,則包含在其中。false,反之。

 

3.6.3 useBean、setProperty、getProperty

待更新

 

3.7 JSP腳本中的9個內置對象

待更新 

 

4 Servlet介紹

Servlet爲服務器端小程序,是運行在服務器端的程序,用於處理及響應客戶端的請求。

Servlet提供不一樣的方法用於響應客戶端請求。

  • doGet:響應客戶端Get請求。
  • doPost:響應客戶端POST請求。
  • doPut:響應客戶端的PUT請求。
  • doDelete:響應客戶端的DELETE請求。

另外兩個方法。

  • init(ServletConfig config):建立Servlet實例時,調用該方法的初始化Servlet資源。重寫該方法時,需首先調用super.init(config)
  • destroy():銷燬Servlet實例時,自動調用該方法的回收資源。

 

5 Filter介紹 

可看做「增強版「的Servlet,主要用於對用戶請求進行預處理,也能夠對HttpServletResponse進行後處理

做用

  • 在HttpServletRequest到達Servlet以前,攔截客戶的HttpServletRequest
  • 根據須要檢查HttpServletRequest,也能夠修改HttpServletRequest頭和數據。
  • 在HttpServletResponse到達客戶端以前,攔截HttpServletResponse
  • 根據須要檢查HttpServletResponse,也能夠修改HttpServletResponse頭和數據。

種類:用戶受權的Filter,日誌Filter,負責解碼的Filter,能改變XML內容的XSLT Filter等等。

三種基本方法

  • void init(FilterConfig config):用於完成初始化。
  • void destroy():用於Filter銷燬前,完成某些資源的回收。
  • void doFilter(ServletRequest request, ServletResponse response, FilterChain chain):實現過濾功能,對每一個請求及響應增長的額外處理。

5.1 Url Rewrite 

利用url rewrite可實現url的僞靜態。

 

6 Listener

經常使用的Web事件監聽器接口:

  • ServletContextListener:用於監聽Web應用的啓動和關閉。
  • ServletContextAttributeListener:用於監聽ServletContext範圍(application)內屬性的改變。
  • ServletRequestListener:用於監聽用戶請求。
  • ServletRequestAttributeListener:用於監聽ServletRequest範圍(request)內屬性的改變。
  • HttpSessionListener:用於監聽用戶session的開始和結束。
  • HttpSessionAttributeListener:用於監聽HttpSession範圍(session)內屬性的改變。
相關文章
相關標籤/搜索