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