什麼是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}
,不指定域,則會從小域到大域依次查找。