一、什么是JSP
JSP全名為Java Server Pages,中文名叫java服務(wù)器頁(yè)面,其根本是一個(gè)簡(jiǎn)化的Servlet設(shè)計(jì),它是由Sun
Microsystems公司倡導(dǎo)、許多公司參與一起建立的一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn)。JSP技術(shù)有點(diǎn)類似ASP技術(shù),它是在傳統(tǒng)的網(wǎng)頁(yè)HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標(biāo)記(tag),從而形成JSP文件,后綴名為(*.jsp)。
用JSP開(kāi)發(fā)的Web應(yīng)用是跨平臺(tái)的,既能在Linux下運(yùn)行,也能在其他操作系統(tǒng)上運(yùn)行。
JSP將網(wǎng)頁(yè)邏輯(由java程序段和jap標(biāo)記執(zhí)行)與網(wǎng)頁(yè)設(shè)計(jì)和顯示(html標(biāo)簽)分離,與JavaServlet一樣,是在服務(wù)器端執(zhí)行的,就是在服務(wù)器端,JSP引擎解釋JSP標(biāo)識(shí)和腳本,生成所請(qǐng)求的內(nèi)容(生成內(nèi)容的邏輯被封裝在標(biāo)識(shí)和JavaBeans組件中,并且捆綁在腳本中,所有的腳本在服務(wù)器端運(yùn)行。),并且將結(jié)果以HTML(或者XML)頁(yè)面的形式(返回給客戶端的就是一個(gè)HTML文本)發(fā)送回瀏覽器,因此客戶端只要有瀏覽器就能瀏覽。
今天主要分享的三個(gè)問(wèn)題:
1:JSP與JavaScript區(qū)別?
1、JSP屬于java的組件,使用的是java語(yǔ)言,所以JSP與javascript的區(qū)別就是JAVA與JAVASCRIPT的區(qū)別。
2、JavaScript是一種動(dòng)態(tài)、弱類型、基于原型的語(yǔ)言,通過(guò)瀏覽器可以直接執(zhí)行;而Java(JSP)是面向?qū)ο蟮木幊陶Z(yǔ)言,必須先進(jìn)行編繹和連接等動(dòng)作才可執(zhí)行。
3、JavaScript編寫在HTML文件中,直接查看網(wǎng)頁(yè)的原始碼,就可以看到JavaScript程式,所以沒(méi)有保護(hù),任何人都可以透過(guò)HTML文件復(fù)制程式;而Java應(yīng)用在網(wǎng)頁(yè)的程式稱為Java
Applet(Applet是[小程序]的意思),是和HTML文件分開(kāi)的。
4、JavaScript的結(jié)構(gòu)較為自由松散,而Java和正統(tǒng)的編程語(yǔ)言一樣,結(jié)構(gòu)較為嚴(yán)謹(jǐn)。
5、JavaScript不具有讀寫檔案及網(wǎng)絡(luò)控制等功能,Java則提供了這些功能,但是JavaScript在網(wǎng)頁(yè)內(nèi)容的控制和互動(dòng)性方面,比較方便快捷的。
6、javascript多運(yùn)行于客戶端,而java多運(yùn)行于服務(wù)器端。
2:jsp內(nèi)置的對(duì)象有哪些?
1、request對(duì)象:該對(duì)象封裝了用戶提交的信息,通過(guò)調(diào)用該對(duì)象相應(yīng)的方法可以獲取封裝的信息,即使用該對(duì)象可以獲取用戶提交信息。它是HttpServletRequest的實(shí)例。實(shí)例:不必直接傳送參數(shù)到JavaBean,你可以藉由請(qǐng)求對(duì)象來(lái)取得參數(shù)的值:<%Stringname=request.getParameter("name"); out.println(name); %>。
2、response對(duì)象:對(duì)客戶的請(qǐng)求做出動(dòng)態(tài)的響應(yīng),向客戶端發(fā)送數(shù)據(jù)。
3、session對(duì)象
?(1)、什么是session:session對(duì)象是一個(gè)JSP內(nèi)置對(duì)象,它在第一個(gè)JSP頁(yè)面被裝載時(shí)自動(dòng)創(chuàng)建,完成會(huì)話期管理從一個(gè)客戶打開(kāi)瀏覽器并連接到服務(wù)器開(kāi)始,到客戶關(guān)閉瀏覽器離開(kāi)這個(gè)服務(wù)器結(jié)束,被稱為一個(gè)會(huì)話。當(dāng)一個(gè)客戶訪問(wèn)一個(gè)服務(wù)器時(shí),可能會(huì)在這個(gè)服務(wù)器的幾個(gè)頁(yè)面之間反復(fù)連接,反復(fù)刷新一個(gè)頁(yè)面,服務(wù)器應(yīng)當(dāng)通過(guò)某種辦法知道這是同一個(gè)客戶,這就需要session對(duì)象?! ? ? ? ? ? ? ? ??
(2)、session對(duì)象的ID:當(dāng)一個(gè)客戶首次訪問(wèn)服務(wù)器上的一個(gè)JSP頁(yè)面時(shí),JSP引擎產(chǎn)生一個(gè)session對(duì)象,同時(shí)分配一個(gè)String類型的ID號(hào),JSP引擎同時(shí)將這個(gè)ID號(hào)發(fā)送到客戶端,存放在Cookie中,這樣session對(duì)象和客戶之間就建立了一一對(duì)應(yīng)的關(guān)系。當(dāng)客戶再訪問(wèn)連接該服務(wù)器的其他頁(yè)面時(shí),不再分配給客戶新的session對(duì)象,直到客戶關(guān)閉瀏覽器后,服務(wù)器端該客戶的session對(duì)象才取消,并且和客戶的會(huì)話對(duì)應(yīng)關(guān)系消失。當(dāng)客戶重新打開(kāi)瀏覽器再連接到該服務(wù)器時(shí),服務(wù)器為該客戶再創(chuàng)建一個(gè)新的session對(duì)象。 ? ??
(3)、session對(duì)象存在一定時(shí)間過(guò)期問(wèn)題,所以存在session中的名值對(duì)會(huì)在一定時(shí)間后失去,可以通過(guò)更改session有效時(shí)間來(lái)避免這種情況。同時(shí)編程時(shí)盡量避免將大量有效信息存儲(chǔ)在session中,request是一個(gè)不錯(cuò)的替代對(duì)象。
4、application對(duì)象
(1)、什么是application: 服務(wù)器啟動(dòng)后就產(chǎn)生了這個(gè)application對(duì)象,當(dāng)客戶在所訪問(wèn)的網(wǎng)站的各個(gè)頁(yè)面之間瀏覽時(shí),這個(gè)application對(duì)象都是同一個(gè),直到服務(wù)器關(guān)閉。但是與session不同的是,所有客戶的application對(duì)象都是同一個(gè),即所有客戶共享這個(gè)內(nèi)置的application對(duì)象。
(2)、application對(duì)象常用方法:
A:public void setAttribute(String key,Object obj):將參數(shù)Object指定的對(duì)象obj添加到application對(duì)象中,并為添加的對(duì)象指定一個(gè)索引關(guān)鍵字。
B:public Object getAttribute(String key):獲取application對(duì)象中含有關(guān)鍵字的對(duì)象。
5、out對(duì)象:是一個(gè)輸出流,用來(lái)向客戶端輸出數(shù)據(jù)。out對(duì)象用于各種數(shù)據(jù)的輸出。在頁(yè)面中例如:<%out.print("'....'/>")%>
6、Page對(duì)象:就是指向當(dāng)前JSP頁(yè)面本身,有點(diǎn)象類中的this指針,它是java.lang.Object類的實(shí)例。JSP網(wǎng)頁(yè)本身,page對(duì)象是當(dāng)前JSP頁(yè)面轉(zhuǎn)換后的Servlet類的實(shí)例。從轉(zhuǎn)換后的Servlet類的代碼中,可以看到這種關(guān)系:Objectpage = this;在JSP頁(yè)面中,很少使用page對(duì)象。
7、config:jav jsp validator相關(guān)的錯(cuò)誤ax.servlet. ServletConfig 的實(shí)例,該實(shí)例代表該JSP 的配置信息。常用的方法有g(shù)etInitParameter(StringparamNarne)及getInitParameternarnes() 等方法。事實(shí)上, JSP頁(yè)面通常無(wú)須配置,也就不存在配置信息。因此,該對(duì)象更多地在Servlet中有效。很少會(huì)在jsp頁(yè)面中使用這個(gè)對(duì)象
8、exception:java.lang.Throwable的實(shí)例,該實(shí)例代表其他頁(yè)面中的異常和錯(cuò)誤。只有當(dāng)頁(yè)面是錯(cuò)誤處理頁(yè)面,即編譯指令page的isErrorPage
屬性為true時(shí),該對(duì)象才可以使用。常用的方法有g(shù)etMessage()和printStackTrace()等。
9、 pageContext:javax.servlet.jsp.PageContext的實(shí)例,網(wǎng)頁(yè)的屬性是在這里管理,該對(duì)象代表該JSP
頁(yè)面上下文,使用該對(duì)象可以訪問(wèn)頁(yè)面中的共享數(shù)據(jù)。常用的方法有g(shù)etServletContext()和getServletConfig()等。
//使用pageContext設(shè)置屬性,該屬性默認(rèn)在page 范圍內(nèi) pageContext. setAttribute("page" , "hello") ;
//使用request設(shè)置屬性,該屬性默認(rèn)在request 范圍內(nèi) request. setAttribute ("request" , "hello");
//使用pageContext將屬性設(shè)置在request范圍中 pageContext.setAttribute("request2" , "hello" ,
pageContext.REQUEST_SCOPE);
//使用session將屬性設(shè)置在session范圍中 session.setAttribute("session" , "hello");
//使用pageContext將屬性設(shè)置在session范圍中 pageContext.setAttribute("session2" , "hello" ,
pageContext.SESSION_SCOPE);
//使用application將屬性設(shè)置在application范圍中 application. setAttribute ("app" , "hello") ;
//使用pageContext將屬性設(shè)置在application 范圍中 pageContext.setAttribute("app2" , "hello" ,
pageContext.APPLICATION_SCOPE)?
3:與JSP相同的視圖有什么?
與jsp配置視圖一樣,也有著別的視圖解析
其中velocity就是一類,Velocity是一種Java模版引擎技術(shù),該項(xiàng)目由Apache提出,由另外一種引擎技術(shù)Webmacro引深而來(lái)。那什么是官方的Velocity定義呢?Apache對(duì)它的定義是:一種基于Java的模板引擎,但允許任何人使用簡(jiǎn)單而強(qiáng)大的模板語(yǔ)言來(lái)引用定義在Java代碼中的對(duì)象。
velocity與jsp有什么不同?
執(zhí)行方式不一樣: JSP是編譯執(zhí)行,Velocity是解釋執(zhí)行.如果JSP文件被修改了,對(duì)應(yīng)的java類就會(huì)重新編譯,而Velocity卻不需要,只是會(huì)重新生成一棵語(yǔ)法樹(shù).
執(zhí)行效率不同:理論上來(lái)說(shuō),編譯執(zhí)行的效率明顯好于解釋執(zhí)行,在JSP中方法調(diào)用是直接執(zhí)行的,而在velocity中使用反射執(zhí)行的,從這方面來(lái)講JSP效率會(huì)明顯好于Velocity.如果JSP中有大量的jstl或者其他標(biāo)簽的話,就不一定了.
需要的環(huán)境支持不同:JSP的執(zhí)行依賴Servlet環(huán)境,他需要ServletContext,request,response這些類.而渲染Velocity不需要其他環(huán)境的支持,所以說(shuō)velocity的應(yīng)用環(huán)境更廣.
如何配置velocity?
我們演示的是在springmvc中配置velocity,管理是使用maven
pom中引用jar包

配置視圖解析:

最后創(chuàng)建以.vm結(jié)尾的網(wǎng)頁(yè)即可使用模版語(yǔ)言
