jsp技術前言:一、簡介:二、hello world:三、jsp語法:四、九大內置對象:總結:

前言:

我是一名Java後臺學習者,但是後臺程序員也需要掌握一定的前端技術。雖然說現在前端基本上是react、vue、angular三分天下,但是作爲一名Java程序員,如果說不會jsp,那未免有點說不過去。接下來就瞭解一下jsp技術。

一、簡介:

jsp是一種動態網頁技術,全稱是java server pages,常見的動態網頁技術還有asp和php。jsp可以近似的理解爲java+html,但是jsp的實質就是servlet,也就是java類。我們知道在servlet中可以通過out.write("<h1>hello</h1>")來寫頁面,但是每次都要out.write(),太麻煩了,結構也不清晰,難以維護。而jsp就彌補了這些缺點,可以直接在jsp文件中使用html的標籤,運行時通過jsp引擎把jsp轉譯成了servlet。

二、hello world:

新建一個web項目,然後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>

把項目部署到tomcat服務器上,然後運行。在瀏覽器中訪問:

hello

剛說了jsp本質就是servlet,運行之後在tomcat的work\Catalina\localhost\ROOT\org\apache\jsp目錄下就會有index.jsp對應的Java文件和編譯後的class文件。

image.png

三、jsp語法:

JSP語法分爲三種類型: 1、編譯器指令: include:用來導入文件的,分靜態導入和動態導入。 靜態導入:<%@include file="include.jsp"%>       比如在index.jsp中用上面的代碼導入include.jsp,這是源碼級的導入,jsp引擎轉譯後,只會生成一個.java文件,也就是說include.jsp轉譯後的java代碼是在index.java中,並不會生成include.java,也就是兩個類合併成一個類。 動態導入:<jsp:include page="include.jsp"/>       動態導入與靜態導入不同,jsp引擎轉譯後會生成兩個類,在index.jsp中導入include.jsp,就相當於是在index.java中調用include.java類。 注意:靜態導入因爲轉譯後源碼都在同一個java文件中,所以可以在index.jsp中直接調用include.jsp中定義的內容,而動態導入則不能。 page:<%@ page contentType="text/html;charset=UTF-8" language="java"%>在轉譯後的servlet中其實就是response.setContentType("text/html; charset=UTF-8");。當然page指令的屬性還有好多,像import、errorPage等,相信通過這個例子大家就可以體會到page指令在轉譯後的servlet中對應的是什麼。

taglib:用來引入標籤庫

2、腳本語法: 註釋:<%-- ... --> 聲明:<%! ... %>

<%!
    int aa = 4;
%>

這就是聲明,轉譯後就是java類的成員變量。所以聲明就是用來定義類的成員變量和成員方法的,用得並不多。 表達式:<% =... %>

<%
    int dd = 3;
%>
<%=dd%>

那麼在頁面會直接輸出3,在轉譯後的java文件中就是out.print(dd);java腳本段:<% ... %>

<%
    int dd = 3;
%>

也就是在<% %>之間就可以寫java代碼。

3、動作語法: <jsp:forward>: 用來做轉發的,看下面的例子: index.jsp:

<jsp:forward page="hello.jsp">
    <jsp:param name="a" value="hello"/>
</jsp:forward>

hello.jsp:

<%
    out.print(request.getParameter("a"));
%>

訪問index.jsp頁面,就會轉發到hello.jsp,在頁面中就會輸出hello。

image.png

注意:寫在forward標籤之後的代碼不會再執行。 <jsp:include>就是動態導入,上面說過了,另外<jsp:plugin>,<jsp:getProperty>,<jsp:setProperty>和<jsp:useBean>都用得不多。

四、九大內置對象:

所謂內置對象,就是jsp已經給我們提供了的對象。因爲jsp轉譯後就是servlet,而servlet中是已經定義了一些對象的。jsp有9大內置對象,接下來就看看這九大內置對象。 1、request: 就是HttpServletRequest的對象,代表來自客戶端的請求,關於它的方法用得較多的是getParameter、getParameterNames、getAttribute、setAttribute等方法。

2、response: 就是HttpServletResponse的對象,代表客戶端的響應,也就是可以通過response對象來組織發送到客戶端的數據。

3、out: 像客戶端輸出內容的對象。

4、session: 表示客戶端與服務器的一次會話,用戶瀏覽某個網站時從進入到關閉所經過的時間session實際上是一個特定的時間概念。在服務器中一個用戶對應一個session。當一個用戶訪問一個服務器時,可能會在不同頁面之間切換,服務器應當通過某種方法知道這是同一個對象,這就用到了session。

5、application: 實現用戶間的數據共享,可存放全局變量。開始於服務器的啓動,終止於服務器的關閉。常用方法是setAttribute和getAttribute。

6、pageContext: 頁面上下文對象,封裝了當前jsp頁面的運行信息。也就是說,如果需要當前頁面的信息傳到其他頁面,只需要傳pageContext即可,通過pageContext就可以獲得request、session等九個對象的信息。

7、config: 提供一些配置信息,一般用不到。

8、page: 代表正在運行的由jsp文件產生的類對象,一般不建議使用。

9、exception: 代表了jsp文件運行時產生的異常對象,也用得很少。

總結:

本文簡單的介紹了jsp基礎語法以及九大內置對象,特別注意如果開發工具用的是idea,那麼需要添加servlet-api和jsp-api兩個jar包,否則可能導致內置對象的某些方法無法調用。jsp的本質是servlet,所以學習的時候應該先學servlet,再來學jsp就好理解了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章