我是一名Java后臺(tái)學(xué)習(xí)者,但是后臺(tái)程序員也需要掌握一定的前端技術(shù)。雖然說現(xiàn)在前端基本上是react、vue、angular三分天下,但是作為一名Java程序員,如果說不會(huì)jsp,那未免有點(diǎn)說不過去。接下來就了解一下jsp技術(shù)。
jsp是一種動(dòng)態(tài)網(wǎng)頁技術(shù),全稱是java server pages,常見的動(dòng)態(tài)網(wǎng)頁技術(shù)還有asp和php。jsp可以近似的理解為java+html,但是jsp的實(shí)質(zhì)就是servlet,也就是java類。我們知道在servlet中可以通過 out.write("<h1>hello</h1>")
來寫頁面,但是每次都要 out.write()
,太麻煩了,結(jié)構(gòu)也不清晰,難以維護(hù)。而jsp就彌補(bǔ)了這些缺點(diǎn),可以直接在jsp文件中使用html的標(biāo)簽,運(yùn)行時(shí)通過jsp引擎把jsp轉(zhuǎn)譯成了servlet。
新建一個(gè)web項(xiàng)目,然后new jsp file:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>hello jsp</h1>
</body>
</html>
把項(xiàng)目部署到tomcat服務(wù)器上,然后運(yùn)行。在瀏覽器中訪問:
work\Catalina\localhost\ROOT\org\apache\jsp
目錄下就會(huì)有index.jsp對(duì)應(yīng)的Java文件和編譯后的class文件。JSP語法分為三種類型:
1、編譯器指令:
include:用來導(dǎo)入文件的,分靜態(tài)導(dǎo)入和動(dòng)態(tài)導(dǎo)入。
靜態(tài)導(dǎo)入: <%@includefile="include.jsp"%>
比如在index.jsp中用上面的代碼導(dǎo)入include.jsp,這是源碼級(jí)的導(dǎo)入,jsp引擎轉(zhuǎn)譯后,只會(huì)生成一個(gè).java文件,也就是說include.jsp轉(zhuǎn)譯后的java代碼是在index.java中,并不會(huì)生成include.java,也就是兩個(gè)類合并成一個(gè)類。
動(dòng)態(tài)導(dǎo)入: <jsp:includepage="include.jsp"/>
動(dòng)態(tài)導(dǎo)入與靜態(tài)導(dǎo)入不同,jsp引擎轉(zhuǎn)譯后會(huì)生成兩個(gè)類,在index.jsp中導(dǎo)入include.jsp,就相當(dāng)于是在index.java中調(diào)用include.java類。
注意:靜態(tài)導(dǎo)入因?yàn)檗D(zhuǎn)譯后源碼都在同一個(gè)java文件中,所以可以在index.jsp中直接調(diào)用include.jsp中定義的內(nèi)容,而動(dòng)態(tài)導(dǎo)入則不能。
page: <%@page contentType="text/html;charset=UTF-8"language="java"%>
在轉(zhuǎn)譯后的servlet中其實(shí)就是 response.setContentType("text/html; charset=UTF-8");
。當(dāng)然page指令的屬性還有好多,像import、errorPage等,相信通過這個(gè)例子大家就可以體會(huì)到page指令在轉(zhuǎn)譯后的servlet中對(duì)應(yīng)的是什么。
taglib:用來引入標(biāo)簽庫
2、腳本語法:
注釋:<%-- ... -->
聲明:<%! ... %>
<%!
int aa = 4;
%>
這就是聲明,轉(zhuǎn)譯后就是java類的成員變量。所以聲明就是用來定義類的成員變量和成員方法的,用得并不多。
表達(dá)式:<% =... %>
<%
int dd = 3;
%>
<%=dd%>
那么在頁面會(huì)直接輸出3,在轉(zhuǎn)譯后的java文件中就是 out.print(dd);
。java腳本段:<% ... %>
<%
int dd = 3;
%>
也就是在<% %>之間就可以寫java代碼。
3、動(dòng)作語法:
< jsp:forward>:用來做轉(zhuǎn)發(fā)的,看下面的例子: index.jsp:
<jsp:forward page="hello.jsp">
<jsp:param name="a" value="hello"/>
</jsp:forward>
hello.jsp:
<%
out.print(request.getParameter("a"));
%>
訪問index.jsp頁面,就會(huì)轉(zhuǎn)發(fā)到hello.jsp,在頁面中就會(huì)輸出hello。
所謂內(nèi)置對(duì)象,就是jsp已經(jīng)給我們提供了的對(duì)象。因?yàn)閖sp轉(zhuǎn)譯后就是servlet,而servlet中是已經(jīng)定義了一些對(duì)象的。jsp有9大內(nèi)置對(duì)象,接下來就看看這九大內(nèi)置對(duì)象。
1、request:就是HttpServletRequest的對(duì)象,代表來自客戶端的請(qǐng)求,關(guān)于它的方法用得較多的是getParameter、getParameterNames、getAttribute、setAttribute等方法。
2、response:就是HttpServletResponse的對(duì)象,代表客戶端的響應(yīng),也就是可以通過response對(duì)象來組織發(fā)送到客戶端的數(shù)據(jù)。
3、out:像客戶端輸出內(nèi)容的對(duì)象。
4、session:表示客戶端與服務(wù)器的一次會(huì)話,用戶瀏覽某個(gè)網(wǎng)站時(shí)從進(jìn)入到關(guān)閉所經(jīng)過的時(shí)間session實(shí)際上是一個(gè)特定的時(shí)間概念。在服務(wù)器中一個(gè)用戶對(duì)應(yīng)一個(gè)session。當(dāng)一個(gè)用戶訪問一個(gè)服務(wù)器時(shí),可能會(huì)在不同頁面之間切換,服務(wù)器應(yīng)當(dāng)通過某種方法知道這是同一個(gè)對(duì)象,這就用到了session。
5、application:實(shí)現(xiàn)用戶間的數(shù)據(jù)共享,可存放全局變量。開始于服務(wù)器的啟動(dòng),終止于服務(wù)器的關(guān)閉。常用方法是setAttribute和getAttribute。
6、pageContext:頁面上下文對(duì)象,封裝了當(dāng)前jsp頁面的運(yùn)行信息。也就是說,如果需要當(dāng)前頁面的信息傳到其他頁面,只需要傳pageContext即可,通過pageContext就可以獲得request、session等九個(gè)對(duì)象的信息。
7、config:提供一些配置信息,一般用不到。
8、page:代表正在運(yùn)行的由jsp文件產(chǎn)生的類對(duì)象,一般不建議使用。
9、exception:代表了jsp文件運(yùn)行時(shí)產(chǎn)生的異常對(duì)象,也用得很少。
本文簡單的介紹了jsp基礎(chǔ)語法以及九大內(nèi)置對(duì)象,特別注意如果開發(fā)工具用的是idea,那么需要添加servlet-api和jsp-api兩個(gè)jar包,否則可能導(dǎo)致內(nèi)置對(duì)象的某些方法無法調(diào)用。jsp的本質(zhì)是servlet,所以學(xué)習(xí)的時(shí)候應(yīng)該先學(xué)servlet,再來學(xué)jsp就好理解了。
聯(lián)系客服