1. 程式人生 > >JSP詳解(一):頁面構成、EL表示式

JSP詳解(一):頁面構成、EL表示式

什麼是JSP?

  1. JSP:Java Server Pages,其根本是一個簡化的Servlet設計,它實現了在Java中使用HTML標籤
  2. Jsp是一種動態網頁技術標準,也是JEE標準
  3. Jsp與Servlet一樣,是在伺服器端執行的

jsp就是servlet,servlet不是jsp

常見動態網站開發技術對比

  • Jsp:Java平臺,安全性高,適合做大型開發,企業級的web程式。適合做企業級web開發。電子銀行、網上證劵交易所,中國移動網上營業廳,中國鐵路線上訂票系統
  • Asp:.Net平臺,簡單易學。但是安全性以及跨平臺性較差。asp.net托拉拽視覺化開發,微軟配套軟體
  • Php:簡單、高效、成本低、開發週期短,適合中小型企業的Web應用程式開發。
    開發組合:LAMP(作業系統Linux+伺服器TomCat+資料庫MySql+PHP)

都是server page sp。

JSP頁面元素的構成

  • 靜態內容:html元素
  • 小指令碼:<% 在這之中的都是小指令碼 %>
  • 註釋:
除了html註釋(客戶端可見)外,
也有jsp註釋<%-- jsp【註釋】 --%>(客戶端不可見), 
jsp指令碼中的java註釋  總共三種註釋
  • 指令:
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
%>
  • 宣告
<%!
    //【宣告】(宣告函式和變數)
    String s ="zhangsan";
    int add(int x, int y){ //計算x+y的值
        return x+y;
    }
%>
  • 表示式
<!--【表示式】,不需要分號 -->
    你好,<%=s %><br>
    x+y=<%=add(10,5) %><br>

sample:

<!-- 這是【指令】page,控制文件型別、編碼、匯入java類等 -->
<%@page import="java.util.ArrayList"
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- pageEncoding jsp檔案本身的編碼 contentType charset伺服器傳送給客戶端時的內容編碼 --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>jsp頁面元素構成以及語法</title> </head> <body> <h1>jsp頁面元素的構成</h1> <ul> <li>靜態內容</li> <li>小指令碼</li> <li>註釋</li> <li>指令</li> <li>宣告</li> <li>表示式</li> </ul> <h3>靜態內容</h3> <p>靜態內容只html元素</p> <% // 在這之中的都是小指令碼 ,小指令碼的內容是java程式碼 %> <!-- html 註釋--> html註釋:客戶端可見(檢視原始碼)<br> <%-- jsp【註釋】 --%> JSP註釋:客戶端不可見<br> <% //jsp指令碼註釋(java註釋) /**/ %> <%! //【宣告】(宣告函式和變數) String s ="zhangsan"; int add(int x, int y){ //計算x+y的值 return x+y; } %><br> <!--【表示式】,不需要分號 --> 你好,<%=s %><br> x+y=<%=add(10,5) %><br> </body> </html>

指令

jsp指令有三種:

  • page指令
  • include指令
  • taglib指令

page指令

功能:用來描述頁面的一些屬性

  • language屬性:指定指令碼語言,只支援java
  • import屬性:匯入包的指令,唯一一個可以多次使用的屬性,匯入多包也可以用”,”分割包名

pageEncoding屬性和contentType屬性
都是設定編碼解碼方式,但是,pageEncoding是jsp頁面儲存到硬碟上,編碼的碼錶。而contentType代表伺服器給客戶端傳送jsp資料時,這個jsp的解碼錶,這兩個碼錶應該相同,否則可能會出現亂碼的情況。
注意:在設定其中一個屬性後,另一個屬性的值也會變為這個屬性的值,即伺服器自動將碼錶轉換一致。
這裡寫圖片描述

  • autoFlush屬性和buffer屬性:jsp向瀏覽器輸出內容,輸出過程中,當緩衝區滿了的時候,是否自動刷新出緩衝區中的資料。也可以使用buffer設定緩衝區的大小。具體檢視內建out物件。
<%@
    autoFlush="true" buffer="8kb"
%>
  • errorPage和isErrorPage:指定處理異常的頁面,是否處理異常,具體請檢視內建exception物件
如果出現異常,跳轉到isErrorPage頁面中
<%
    errorPage="/page/error.jsp"
%>
設定當前頁面為異常處理頁面,會獲得一個exception內建物件,用來接收異常。
<%
    isErrorPage="true"
%>

正確的異常處理方式

上面的方式雖然可以使用,但是太過於繁瑣了,我們可以在web.xml中根據http狀態碼設定轉向頁面。

<error-page>
    <error-code>404</error>
    <location>/page/error.jsp</location>
</error-page>

只要出現了404錯誤,就會跳轉到error.jsp頁面中去處理。

也可以根據異常作出相應的處理:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/page/error.jsp</location>
</error-page>

只要出現了java.lang.Exception就跳轉到error.jsp頁面

  • extends屬性:繼承屬性,指定一個父類,必須是Servlet
  • info屬性:指定jspgetServletInfo的值
  • isELIgnored屬性:EL表示式的開關,預設可以使用
  • session屬性:boolean,是否使用session物件,如果為false,不能直接使用session內建物件

include指令

靜態包含指令

  • file屬性:
<%@ include file="/page/child.jsp"%>

靜態包含原理:
這裡寫圖片描述

所以合併,處於同一個Java類,注意變數的宣告

作用:

  • 引入內容,合併頁面
  • 引入程式碼,呼叫被引入程式碼中的方法。

動態包含原理:
這裡寫圖片描述

taglib指令

匯入標籤指令

使用EL表示式,替代jsp表示式指令碼

用來代替<%= %>表示式指令碼的。

格式:&{表示式}

主要用於四個域中取出資料(application,request,session,page),即簡化getAttribute…等操作的。
比如,

<%
    request.setAttribute("name", "Feathers");
%>

name為:${requestScope.name} <!-- 即可取出request域中key為name的值 -->

注意:
如果這樣寫${name},不指定域,則會從小域到大域依次查詢。