Java EE 極簡教程(三):為什么要用 JSP?

一、Servlet 與 JSP

Servlet 通常使用字符串拼接的方式動態(tài)生成 html,大量的 html 內(nèi)容使代碼難以維護、可讀性差。

感受一下,簡單地加一個 table 得醬寫:



都快看不出來是 Java 代碼了。

后來,大佬們想,既然能在 Java 中寫 html,能不能在 html 中寫 Java 呢?

于是 JSP(JavaServer Pages) 誕生了。

JSP 是基于 Servlet API 的,所以擁有 Servlet 擁有的一系列好處,可以實現(xiàn)各種功能,同時可以很方便地編寫或修改網(wǎng)頁,不用面對大量的 println 語句,但是,什么事情都要把握一個度,在 html 中混入大量、復(fù)雜的業(yè)務(wù)邏輯也是不可取的。

一種雙劍合璧、揚長避短的方法是把 Servlet 當成 Controller 層,用于處理瀏覽器請求,并調(diào)用核心業(yè)務(wù)邏輯(Model)。而 JSP 則用作 View 層,負責(zé)動態(tài)地把處理結(jié)果輸出到 html 中去。

Model、View、Controller,沒錯,這就是我們所說的 MVC 模式啦!這里先不贅述,以后會有一篇文章專門介紹 MVC 。

二、JSP 簡介

JSP 是如何實現(xiàn)這種功能的呢?

通過分析源碼,我們發(fā)現(xiàn),JSP 被服務(wù)器 “轉(zhuǎn)譯” 成了 Servlet。

我們知道,在服務(wù)器中部署 Servlet,需要先把 Servlet 編譯成 .class 文件,所以添加或修改 Servlet 需要重啟服務(wù)器才能生效。而 JSP 的轉(zhuǎn)譯與編譯均由服務(wù)完成,服務(wù)器如果設(shè)置了 JSP 監(jiān)視,則不需重啟就可以應(yīng)用新增或修改的 JSP。

下面動手來個實踐。

本部分內(nèi)容來自 How2J 的 JSP 教程

test.jsp

在 web 目錄下新建一個文件 test.jsp
(Tomcat 的 web 根目錄為 /webapps/ROOT)

<%@page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*"%>
 
hello,jsp
 
<br>
 
<%=new Date().toLocaleString()%>

訪問 localhost/test.jsp,可以看到運行結(jié)果


1 代碼分析

Page 指令

<%@page contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" import="java.util.*"%>

<%@page ... %> 是 JSP 的 Page 指令,為瀏覽器提供當前頁面的使用說明,與 html 的頭對應(yīng)。等價的 XML 格式為

<jsp:directive.page contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8" import="java.util.*"/>

JSP 表達式

JSP 表達式的語法格式為:<%= 表達式 %>,JSP表達式會先被轉(zhuǎn)化為 String,然后插入到表達式出現(xiàn)的地方。

<%=new Date().toLocaleString()%>

本行代碼輸出當前的時間。

表達式可以出現(xiàn)在文本行中,而不一定是 html 標簽??梢允褂萌魏畏?Java 語言規(guī)范的表達式。

JSP 執(zhí)行過程

test.jsp 的執(zhí)行過程為:

  1. test.jsp 被轉(zhuǎn)譯為 test_jsp.java(該類繼承自 HttpJspBase,而 HttpJspBase 繼承自 HttpServlet)
  2. test_jsp.java 被編譯成 hello_jsp.class
  3. 執(zhí)行 hello_jsp.class,生成 html
  4. 通過 HTTP 協(xié)議把 html 響應(yīng)返回給瀏覽器

2 頁面元素

除了上面提到的指令表達式,JSP 還有以下幾種頁面元素:

靜態(tài)內(nèi)容

即 html/css/javascript 等內(nèi)容

Scriptlet

<% %> 之間,可以寫任何 Java 代碼

聲明

<% ! %> 之間可以聲明字段或方法,但是不建議這么做。

動作

<jsp:include page="Filename"> 在 JSP 頁面中包含另一個頁面。

注釋

<%-- jsp代碼 --%>

3 其它細節(jié)

其它細節(jié)方面的內(nèi)容感興趣的小伙伴可以自行去了解,還是那句話,編程最重要的是動手去做,不擼個幾百萬行代碼怎么好意思說自己室程序員呢?

Servlet 和 JSP 實際上是各有千秋,我們應(yīng)該如何揚長避短呢?且聽下回分解——

「Java EE 極簡教程(四):MVC 模式」

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,662評論 18 399
  • 一、JSP基礎(chǔ) 1.1什么是JSP JSP(Java ServerPage)是Java服務(wù)器端動態(tài)頁面技術(shù)。是su...
    晨星資源閱讀 1,267評論 0 6
  • JSP總結(jié)(經(jīng)典) day1 JSP 定義: 1)Java Server Page, Java EE 組件,本...
    91數(shù)據(jù)閱讀 3,640評論 0 13
  • 域名是方便網(wǎng)絡(luò)計算機地址識記的一種技術(shù)機制,簡單地說就相當于是記錄在DNS服務(wù)器上的IP與域名的對應(yīng)表。一般網(wǎng)絡(luò)管...
    iLester閱讀 3,576評論 0 3
  • 不經(jīng)意眼間,你來到我們身邊已經(jīng)有365天。日歷已經(jīng)撕掉了滿滿的一本,歡樂也記載了滿滿的一年。馬上你就要滿周...
    寂寞江湖閱讀 1,852評論 0 6

友情鏈接更多精彩內(nèi)容