# 1/16 JSP 觀念
###### tags: `JSP`
# 5-2 大綱
Predefine Variables 事先宣告變數名稱
# 5-3 JSP
可套用HTML&Java
開發者不須編譯,底層執行方式是servlet
靜態樣板html 動態內容jsp
# 5-4 JSP特性
元素
scipting(elements,directives,actions)
tag標記
Template=樣板文字
# 5-5 JSP翻譯與執行步驟
translation(翻譯) = (jsp)翻譯(java)實作jsp程式碼翻譯java程式碼->class
execution(編譯)=變成class黨
execution後才能跟客戶端服務

jsp fragment(片段) .jspf(片檔名)
# 9 實作
http://localhost:8080/JSPDemo/HelloUserServlet(?userName=aaa)
# 5-12.13.14 JSP的生命週期(Life Cycle)
用過jsp之後再次呼叫jsp已被servlet的記憶體紀錄 所以不會在編譯
list.jsp轉譯->list_jsp.java編譯->list_jsp.class載入->servle(實例化)
void _jspservice=doget,dopost


<%= xx.xx%>動態語法
# 5-19 JSP語法
Scripting(Declaration(宣告),Scriplet(程式敘述),Expression(運算式))
Directive elements(指示)(page網頁,include,taglib)
Action=JavaBean(模型)
Expression Language(EL)簡短程式
Custom Tag(客制化標籤)5-177頁
Comment(註解)
# 5-20 六大類jsp語法元素
Directive指示用在translation(翻譯)<%@ %>
Action(動作):執行階段<jsp:actionName />
Declaration(宣告)<%! %>
Scriptlet(程式碼)<% %>
Expression(運算式)<%= %>
Comment(註解)<%-- --%>

|二二|=方法
# 5-21 JSP語法例
<!-- -->HTML
<% /* */%>Java
<%=運算式%>運算式不要寫分號;
# 5-22.23.24.25 宣告元素(Declaration)
宣告定義變數與方法

string name
this.name=自己的欄位name

轉譯後

重新定義
jspInit(),jspDestroy()

servlet對應JspPage對應httpjsppage
httpservlet對應httpjsppage

<%! %>可宣告變數跟方法
<% %>(編譯的地方再方法裡面)不能宣告方法
(area.jsp)

(iterationTest.jsp)


# 5-26 JSP-Scriptlets
Scriptlets是嵌入(embedded)的java code
<%count++;%>
# 5-27 JSP-Expression
<%=count%>or<%=++count%>
Expression不需要寫分號;
Expression可以是Java Method的呼叫
(initTest.jsp)


# 5-28 JSP範例-visitorcounter.jsp


# 29 DayWish.jsp

Math.random<0.5 =小於亂數之間

# 30 ApplesAndOranges.jsp
```
<%
String format = request.getParameter("format");
if ((format != null) && (format.equals("excel"))) {
response.setContentType("application/vnd.ms-excel");//多媒體格式
}
%>
```
http://localhost:8080/JSPDemo/ApplesAndOranges.jsp(?format=excel)參數格式
https://zh.wikipedia.org/wiki/%E5%A4%9A%E7%94%A8%E9%80%94%E4%BA%92%E8%81%AF%E7%B6%B2%E9%83%B5%E4%BB%B6%E6%93%B4%E5%B1%95
# 5-31.32.33 Action
execution執行階段
用在request processing phase
flush="true"(立刻送出)
jsp:include就是Action的一種

jsp:plugin外掛
(copyright.jsp)

# 5-35.36 JSP的Directives
還沒到request階段


page include taglib(公用標籤 特殊語法 自首開頭代表哪個標籤的定義 taglib.tld定義哪個標籤)

# 5-37 Jsp Directives

# 5-38.39 指示元素-page


每個屬性標籤中間用空白隔開
# 5-40
jsp 預設啟動session
extends不要去啟動 內建有
buffer =(kilobytes)

# 5-41 指示元素-page

vnd廠商

# 5-42 指示元素-include

```
<%@ include file="copyright.jspf" %>
<jsp:include page="copyright2.jsp" flush="ture" />
```

file會合併
Action會各自產生


# 5-45 指示元素的統一設定

*.jsp副檔名做pattern
utf-8
16kb buffer
``<include-pattern>檔頭</include-pattern>``
``<include-coda>檔尾</include-coda>``

```
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
```
白皮書
# 5-47 Scriptlet元素
只要是Scriptlet的東西都會放到_jspService()

# 5-48.49 if敘述 迴圈範例


(conditionalTest1.jsp),(conditionalTest2.jsp)
1
2
# 5-50 禁用Scriptlet

(initializationOfVariables.jsp)

<%!%>->宣告放哪都不影響
<%%>會有順序問題 一定要宣告才能使用
(orderOfScriptlets.jsp)

# 5-51 運算式(Expression)元素
Expression=<%= %>

# 5-52.53 註解(Comment)元素

jsp(註解)->java(註解)->class(註解)->brower(註解)

(welcome.jsp)
# 5-54 引號與脫逸號(Escape)用法

(escapeSequence.jsp)
# 5-55 JSP錯誤狀況與處裡
JSP轉換為Servlet原始碼時
Servlet原始碼進行編譯時
Servlet載入容器進行服務但發生執行時期錯誤時
# 5-56.57 JSP轉換為Servle原始碼時

``
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" buffer="dsad8kb" %>
``

# 5-58.59 進行服務但發生執行時期錯誤時

