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

配置視圖解析:

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