JSP詳解(一):頁面構成、EL表示式
阿新 • • 發佈:2019-01-01
什麼是JSP?
- JSP:Java Server Pages,其根本是一個簡化的Servlet設計,它實現了在Java中使用HTML標籤
- Jsp是一種動態網頁技術標準,也是JEE標準
- 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屬性:指定jsp
getServletInfo
的值 - 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}
,不指定域,則會從小域到大域依次查詢。