1.jsp = html + java(使用特殊標(biāo)簽tag引入)的動(dòng)態(tài)資源的技術(shù)。
jsp就是servlet。雖然作用一樣,可是使用場(chǎng)景不一樣。
使用jsp開(kāi)發(fā)的web應(yīng)用是跨平臺(tái)的,既能夠在linux下運(yùn)行,也能在其他操作心痛運(yùn)行。
可以把jsp頁(yè)面想象為html頁(yè)面,它的地位相當(dāng)于html頁(yè)面。jsp在tomcat中當(dāng)做html訪問(wèn)。
Jsp特點(diǎn):
1))jsp運(yùn)行:
必須交給服務(wù)器運(yùn)行。
work目錄:tomcat服務(wù)器存放Jsp運(yùn)行時(shí)的臨時(shí)文件。
2)jsp既可以寫(xiě)html代碼也可以寫(xiě)java代碼
(html頁(yè)面不能寫(xiě)java代碼,而jsp頁(yè)面可以寫(xiě)java代碼)
2.jsp放在WebRoot下,servlet 放在src下面。
3.JSP(Java Server Page) 和 Servelet 是Java EE 的兩個(gè)基本成員。二者本質(zhì)相同,jsp最終也是要被編譯成Servlet之后才能運(yùn)行。
4.web應(yīng)用和web.xml文件

src文件夾:存放java源文件
WebRoot: Web應(yīng)用的根目錄
META-INF: 系統(tǒng)自動(dòng)生成,存放系統(tǒng)描述信息
WEB-INF:該目錄中內(nèi)容不能對(duì)外發(fā)布,里面的內(nèi)容,外部不能訪問(wèn)。
lib文件夾:存放以jar/zip形式表現(xiàn)的庫(kù)文件
web.xml:Web應(yīng)用的初始化配置文件。
5.jsp的四種基本語(yǔ)法
a. jsp注釋: <%-- 注釋內(nèi)容 --%>
b. jsp聲明: <%! 申明部分 %>
聲明部分可以使用private, public等訪問(wèn)控制符修飾,但是不能使用abstract。
c. 輸出jsp表達(dá)式: <%= 表達(dá)式 %>
d. jsp腳本: <% 腳本 %>
在腳本部分可以申明變量,但是不能使用訪問(wèn)控制符來(lái)修飾。
- jsp的7個(gè)動(dòng)作指令
1)forward
<jsp:forward page="result.jsp">
<jsp:param name="aa" value="bb" />
</jsp:forward>
使用forward指令后,瀏覽器地址不會(huì)發(fā)生變化,并且不會(huì)丟失請(qǐng)求的參數(shù)。
-
include
<jsp:include page="result.jsp">
<jsp:param name="aa" value="bb"/>
</jsp:include>
動(dòng)態(tài)Include導(dǎo)入和上面的靜態(tài)Include導(dǎo)入的方法不同之處:
- 靜態(tài)導(dǎo)入時(shí)將2個(gè)頁(yè)面融合為一個(gè)servlet
- 靜態(tài)導(dǎo)入時(shí)候編譯指令會(huì)起作用
- 動(dòng)態(tài)包含還可以增加額外的參數(shù)
include和forward很相似,區(qū)別在于Include是局部的引入
學(xué)習(xí)目標(biāo):
- 掌握B/S編程技能(html, js, jsp)
- OO思想(面向?qū)ο笏枷?編寫(xiě)后臺(tái)業(yè)務(wù)代碼
- 具備基本的調(diào)試B/S系統(tǒng)的能力
- 熟練掌握J(rèn)DBC和集合編寫(xiě)數(shù)據(jù)庫(kù)訪問(wèn)程序
掌握B/S開(kāi)發(fā)的基本概念:
- 動(dòng)態(tài)網(wǎng)頁(yè) vs 靜態(tài)網(wǎng)頁(yè)
- B/S程序 vs C/S程序
- B/S開(kāi)發(fā)設(shè)計(jì)的技術(shù)內(nèi)容
開(kāi)發(fā)jsp動(dòng)態(tài)網(wǎng)站的基本步驟:
1)掌握web系統(tǒng)的工作目錄
2)創(chuàng)建按web工程與html,js文件
3)實(shí)現(xiàn)web工程的部署與運(yùn)行
4)進(jìn)行web系統(tǒng)的調(diào)試與排錯(cuò)
部署Web項(xiàng)目
http://www.thinksaas.cn/topics/0/350/350000.html
Intellij IDEA 創(chuàng)建Web項(xiàng)目,并且在Tomcat中部署運(yùn)行。
6.語(yǔ)法
1)jsp的模板
jsp頁(yè)面中的html代碼就是jsp模板。
2)jsp的表達(dá)式
語(yǔ)法:<%= 變量或者表達(dá)式 %> 作用:可以向?yàn)g覽器輸出信息
表達(dá)式的原理就是翻譯成 `out.print("內(nèi)容")`,通過(guò)該方法向?yàn)g覽器寫(xiě)出內(nèi)容。表達(dá)式后面不需要加分號(hào)。
3)jsp的腳本
語(yǔ)法:<% java代碼 %>
作用:執(zhí)行Java代碼。穿插html代碼。
注意:a.原理吧腳本中Java代碼原封不動(dòng)拷貝到_jspService方法中執(zhí)行。
<!-- 穿插html代碼 -->
<% for (int i = 0; i < 5; i ++){%>
<h2>標(biāo)題<%= i %></h2>
<% } %>
4)jsp的聲明
語(yǔ)法:<%! 變量或者方法 %>
腳本中不能聲明方法。
jsp的聲明中不能重復(fù)定義翻譯好的一些方法。
注意:
變量翻譯成成員變量,方法翻譯成成員方法。
<!-- jsp聲明 -->
<%!
String name = "聊么人";
public String getName() {
return name;
}
%>
5)jsp的注釋
語(yǔ)法:<%-- jsp注釋 --%>
html的注釋不能注釋jsp的內(nèi)容,應(yīng)該用jsp注釋方法注釋。
6)jsp的指令:一共有三個(gè)指令。
a) include 指令:也叫靜態(tài)的包含指令。
語(yǔ)法:`<%@include file="common/header.jsp" %>`
作用:包含其他頁(yè)面。在當(dāng)前頁(yè)面包含其他頁(yè)面。
原理:把被包含的頁(yè)面(header.jsp)的內(nèi)容翻譯到包含頁(yè)面(index.jsp)中,合并成翻譯成一個(gè)java源文件,再編譯運(yùn)行。這種包含叫作靜態(tài)包含(袁愛(ài)民包含)。
如果使用靜態(tài)包含,被包含的頁(yè)面中就不需要再出現(xiàn)全局的html標(biāo)簽了。
b) page 指令
作用:告訴tomcat服務(wù)器如何翻譯jsp文件。
<%@ page contentType="text/html;charset=UTF-8" -->這個(gè)charset表示服務(wù)器發(fā)送瀏覽器的數(shù)據(jù)類型和內(nèi)容編碼
language="java" --> 告訴服務(wù)器使用什么動(dòng)態(tài)語(yǔ)言來(lái)翻譯jsp
pageEncoding="utf-8" --> 告訴服務(wù)器使用什么編碼翻譯jsp文件。
import="java.util.*" --> 告訴服務(wù)器java文件使用了什么包
buffer="8kb" --> 緩沖內(nèi)存大小
errorPage="error.jsp"
%>
c) taglib 指令
7.jsp的執(zhí)行過(guò)程
8.為什么Jsp就是servlet?
jsp翻譯的java文件,間接集成了HttpServlet這個(gè)類。
servlet生命周期:
1)構(gòu)造方法(第1次訪問(wèn)才要做的)
2)Init方法(第1次訪問(wèn)才要做的)
3)service方法
4)destroy方法
jsp的生命周期:
1)翻譯:jsp->java文件
2)編譯:java文件->class文件(servlet程序)
3)構(gòu)造方法
4)init方法
5)service方法
6)destroy方法

servlet的技術(shù)可以用在jsp技術(shù)中。
jsp的技術(shù)并不是全部適用于servlet程序。
9.異常相關(guān)的:
errorPage:指定當(dāng)前jsp頁(yè)面的錯(cuò)誤處理頁(yè)面。
isErrorPage:是否是錯(cuò)誤頁(yè)面
500.jsp
404.html
10.jsp的內(nèi)置對(duì)象(重點(diǎn))
內(nèi)置對(duì)象:
在jsp開(kāi)發(fā)中,會(huì)頻繁使用到一些對(duì)象:
HttpSession,ServletContext,HttpServletRequest.
如果我們每次要使用這些對(duì)象去,都去創(chuàng)建這些兌現(xiàn)干就顯得非常麻煩。
session可以直接使用。
在jsp頁(yè)面加載完畢之后就會(huì)自動(dòng)幫開(kāi)發(fā)者創(chuàng)建好這些對(duì)象,而開(kāi)發(fā)者只需要直接使用這些對(duì)象調(diào)用方法即可,這些創(chuàng)建好的對(duì)象就叫內(nèi)置對(duì)象。
JSP有9大內(nèi)置對(duì)象:
內(nèi)置對(duì)象名 類型
request HttpServletRequest
response HttpServletResponse
config ServletConfig
application ServletContext
session HttpSession
exception Throwable
page Object(this)
out JspWriter
pageContext PageContext
1)Out對(duì)象:
out對(duì)象類型,JspWriter類,相當(dāng)于帶緩存的PrintWriter.
jsp頁(yè)面的緩存機(jī)制:
什么情況緩存區(qū)內(nèi)容會(huì)向外寫(xiě)出:
1)緩存區(qū)滿了
2)刷新緩存區(qū)
3)關(guān)閉緩沖區(qū)
4)執(zhí)行完jsp頁(yè)面

PrintWriter一寫(xiě)就寫(xiě)到瀏覽器中了。
2)pageContext對(duì)象
pageContext對(duì)象的類型是PageContext,叫作jsp的上下文
1)可以獲取其他八個(gè)內(nèi)置對(duì)象
2)可以從四個(gè)域中獲取數(shù)據(jù):
pageContext.getAttribute("name", 域范圍常量)
3)自動(dòng)在四個(gè)域中搜索數(shù)據(jù)
jsp的四個(gè)域?qū)ο螅?/p>
pageContext: page域
request:request域
session:session域
application:context域
1)域?qū)ο笞饔茫?br>
保存數(shù)據(jù) 和 獲取數(shù)據(jù), 用于數(shù)據(jù)共享
2)域?qū)ο蠓椒ǎ?br>
setAttribute()
getAttribute()
removeAttribute()
3)域?qū)ο笞饔梅秶?br>
page域:只能在jsp頁(yè)面中使用
request域:只能在同一個(gè)請(qǐng)求中使用
session域:只能在同一個(gè)會(huì)話(session對(duì)象)中使用
context:只能在同一個(gè)web應(yīng)用中使用。
JSP 頁(yè)中 requestScope是什么意思?該怎么用?
表示變量的作用域,一共4種。pageScope: 表示變量只能在本頁(yè)面使用。requestScope:表示變量能在本次請(qǐng)求中使用。sessionScope:表示變量能在本次會(huì)話中使用。applicationScope:表示變量能在整個(gè)應(yīng)用程序中使用。
${requestScope.message}