一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

JSP學習文檔

 流楚丶格念 2022-01-14

文章目錄

1 JSP基礎

1.1 JSP簡介

JSP全稱是Java Server Page,它和Servlet一樣,也是sun公司推出的一套開發(fā)動態(tài)web資源的技術(shù),稱為JSP/Servlet規(guī)范。JSP的本質(zhì)其實就是一個Servlet。

1.2 JSP和HTML以及Servlet的適用場景

類別適用場景
HTML只能開發(fā)靜態(tài)資源,不能包含java代碼,無法添加動態(tài)數(shù)據(jù)。
Servlet寫java代碼,可以輸出頁面內(nèi)容,但是很不方便,開發(fā)效率極低。
JSP它包括了HTML的展示技術(shù),同時具備Servlet輸出動態(tài)資源的能力。但是不適合作為控制器來用。

1.3 JSP簡單入門

創(chuàng)建JavaWeb工程

在這里插入圖片描述

在index.jsp中填寫內(nèi)容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>JSP的入門</title>
  </head>
  <body>
      這是第一個JSP頁面
  </body>
</html>

部署項目

沿用會話管理工程的部署方式即可。

測試運行

在這里插入圖片描述

1.4 JSP說明

寫在之前: 明確JSP就是一個Servlet。是一個特殊的Servlet。

JSP的原理:

? 客戶端提交請求

? ——Tomcat服務器解析請求地址

? ——找到JSP頁面

? ——Tomcat將JSP頁面翻譯成Servlet的java文件

? ——將翻譯好的.java文件編譯成.class文件

? ——返回到客戶瀏覽器上。

1)執(zhí)行過程分析圖

在這里插入圖片描述

2)JSP的.java文件內(nèi)容分析(看不懂跳過,反jsp本質(zhì)就是servlet)

當我們打開index.jsp翻譯的java文件看到的就是public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase類的聲明,然后我們在Tomcat的源碼中找到類的聲明,如下圖:

在這里插入圖片描述

這張圖一出場,就表明我們寫的JSP它本質(zhì)就是一個HttpServlet了。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QFbZEkVG-1623675513407)(assets/jsp的本質(zhì)說明.png)]

同時,我們在index_jsp.java文件中找到了輸出頁面的代碼,并且在瀏覽器端查看源文件,看到的內(nèi)容是一樣的。這也就是說明,我們的瀏覽器上的內(nèi)容,在通過jsp展示時,本質(zhì)都是用out.write()輸出出來的。

講到這里,我們應該清楚的認識到,JSP它是一個特殊的Servlet,主要是用于展示動態(tài)數(shù)據(jù)。它展示的方式是用流把數(shù)據(jù)輸出出來,而我們在使用JSP時,涉及HTML的部分,都與HTML的用法一致,這部分稱為jsp中的模板元素,在開發(fā)過程中,先寫好這些模板元素,因為它們決定了頁面的外觀。

2 JSP應用

2.1 JSP語法

1)Java代碼塊

在jsp中,可以使用java腳本代碼。形式為:<% 此處寫java代碼 %>

但是,在實際開發(fā)中,極少使用此種形式編寫java代碼。同時需要注意的是:

<%
    在里面寫java程序腳本需要注意:這里面的內(nèi)容由tomcat負責翻譯,翻譯之后是service方法的成員變量
%>

示例:

<!--Java代碼塊-->
<% out.println("這是Java代碼塊");%>
<hr/>

2)JSP表達式

在jsp中,可以使用特定表達式語法,形式為:<%=表達式%>

jsp在翻譯完后是out.print(表達式內(nèi)容);

所以:<%out.print("當前時間);%><%="當前時間"%>是一樣的。

在實際開發(fā)中,這種表達式語法用的也很少使用。

示例:

<!--JSP表達式-->
<%="這是JSP表達式"%><br/>
就相當于<br/>
<%out.println("這是沒有JSP表達式輸出的");%>

3)JSP聲明

在JSP中也可以聲明一些變量,方法,靜態(tài)方法,形式為:<%! 聲明的內(nèi)容 %>

使用JSP聲明需要注意:

<%! 
    需要注意的是: 寫在里面的內(nèi)容將會被tomcat翻譯成全局的屬性或者類方法。
%>                                    

示例:

<!--JSP聲明-->
<%! String str = "聲明語法格式";%>
<%=str%>

4)JSP注釋

在使用JSP時,它有自己的注釋,形式為:<%–注釋–%>

需要注意的是:

? 在Jsp中可以使用html的注釋,但是只能注釋html元素,不能注釋java程序片段和表達式。同時,被html注釋部分會參與翻譯,并且會在瀏覽器上顯示

? jsp的注釋不僅可以注釋java程序片段,也可以注釋html元素,并且被jsp注釋的部分不會參與翻譯成.java文件,也不會在瀏覽器上顯示。

示例:

<%--JSP注釋--%>
<!--HTML注釋-->

5)語法的示例

JSP語法完整示例代碼

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>JSP語法</title>
</head>
<body>

<!--Java代碼塊-->
<% out.println("這是Java代碼塊");%>
<hr/>

<!--JSP表達式-->
<%="這是JSP表達式"%><br/>
就相當于<br/>
<%out.println("這是沒有JSP表達式輸出的");%>

<hr/>
<!--JSP聲明-->
<%! String str = "聲明語法格式";%>
<%=str%>

<hr/>

<%--JSP注釋--%>
<!--HTML注釋-->

</body>
</html>

JSP語法運行結(jié)果

2.2 JSP指令

1)page指令

  • language: 告知引擎,腳本使用的是java,默認是java,支持java。不寫也行。

  • extends:告知引擎,JSP對應的Servlet的父類是哪個,不需要寫,也不需要改。

  • import:告知引擎,導入哪些包(類)。

    注意:
    引擎會自動導入:java.lang.*,javax.servlet.*,javax.servlet.http.*,javax.servlet.jsp.*

    ?導入的形式: (用Eclipse:Alt+/ 自動導入)

    ?<%@page import=java.util.Date,java.util.UUID”%>
    
    或者:
    
    ?<%@page import=java.util.Date%>
    ?<%@page import=”java.util.UUID”%> 
    
  • session:告知引擎是否產(chǎn)生HttpSession對象,即是否在代碼中調(diào)用request.getSession()。默認是true。

  • buffer:JspWriter用于輸出JSP內(nèi)容到頁面上。告知引擎,設定他的緩存大小。默認8kb。

  • errorPage:告知引擎,當前頁面出現(xiàn)異常后,應該轉(zhuǎn)發(fā)到哪個頁面上(路徑寫法:/代表當前應用)

    小貼士:當在errorpage上使用了isErrorPage=true之后,ie8有時候不能正常顯示

    ? 配置全局錯誤頁面:web.xml

    <error-page>    
        <exception-type>java.lang.Exception</exception-type>                
        <location>/error.jsp</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    </error-page>                                 
    
    

    ?當使用了全局錯誤頁面,就無須再寫errorPage來實現(xiàn)轉(zhuǎn)到錯誤頁面,而是由服務器負責跳轉(zhuǎn)到錯誤頁面。

  • isErrorPage:告知引擎,是否抓住異常。如果該屬性為true,頁面中就可以使用exception對象,打印異常的詳細信息。默認值是false。

  • contentType:告知引擎,響應正文的MIME類型。contentType="text/html;charset=UTF-8"

    ?相當于response.setContentType("text/html;charset=UTF-8");

  • pageEncoding:告知引擎,翻譯jsp時(從磁盤上讀取jsp文件)所用的碼表。pageEncoding="UTF-8"相當于告知引擎用UTF-8讀取JSP

  • isELIgnored:告知引擎,是否忽略EL表達式,默認值是false,不忽略。

2)include指令

語法格式:<%@include file="" %>該指令是包含外部頁面。

屬性:file,以/開頭,就代表當前應用。

使用示例

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bNF3bYO5-1623675513409)(assets/靜態(tài)包含1.png)]

在編譯成的java servlet文件中是這樣的,也就是說,include.jsp 后續(xù) 代碼可以直接使用 included.jsp 中的 str變量。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sNEL9jBx-1623675513411)(assets/靜態(tài)包含2.png)]

3)taglib指令

語法格式:<%taglib uri="" prefix=""%>

作用:該指令用于引入外部標簽庫。html標簽和jsp標簽不用引入。

屬性:

  • uri:外部標簽的URI地址。

  • prefix:使用標簽時的前綴。

2.3 JSP細節(jié)

在這里插入圖片描述

1)九大隱式對象

什么是隱式對象呢?它指的是在jsp中,可以不聲明就直接使用的對象。

它只存在于jsp中,因為java類中的變量必須要先聲明再使用。

其實jsp中的隱式對象也并非是未聲明,只是它是在翻譯成.java文件時聲明的。所以我們在jsp中可以直接使用。

也就是說下面的對象在jsp中可以直接使用。

隱式對象名稱類型備注
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
sessionjavax.servlet.http.HttpSessionPage指令可以控制開關(guān)
applicationjavax.servlet.ServletContext
pageJava.lang.Object當前jsp對應的servlet引用實例
configjavax.servlet.ServletConfig
exceptionjava.lang.Throwablepage指令有開關(guān)
outjavax.servlet.jsp.JspWriter字符輸出流,相當于printwriter
pageContextjavax.servlet.jsp.PageContext很重要(下面單獨介紹)

2)PageContext對象

簡介

它是JSP獨有的對象,Servlet中沒有這個對象。本身也是一個域(作用范圍)對象,但是它可以操作其他3個域?qū)ο笾械膶傩?。而且還可以獲取其他8個隱式對象。

生命周期

它是一個局部變量,所以它的生命周期隨著JSP的創(chuàng)建而誕生,隨著JSP的結(jié)束而消失。每個JSP頁面都有一個獨立的PageContext。

常用方法

在這里插入圖片描述

在上圖中,同學們發(fā)現(xiàn)沒有頁面域操作的方法,其實是定義在了PageContext的父類JspContext中,如下圖所示:

在這里插入圖片描述

3)四大域?qū)ο?/h4>
域?qū)ο竺Q范圍級別備注
PageContext頁面范圍最小,只能在當前頁面用因范圍太小,開發(fā)中用的很少
ServletRequest請求范圍一次請求或當期請求轉(zhuǎn)發(fā)用當請求轉(zhuǎn)發(fā)之后,再次轉(zhuǎn)發(fā)時請求域丟失
HttpSession會話范圍多次請求數(shù)據(jù)共享時使用多次請求共享數(shù)據(jù),但不同的客戶端不能共享
ServletContext應用范圍最大,整個應用都可以使用盡量少用,如果對數(shù)據(jù)有修改需要做同步處理

4)四大域?qū)ο笞饔梅秶?/h4>

pageContext

作用范圍:當前jsp頁面;

作用:獲取九大內(nèi)置對象;

常用方法:getAttribute()、setAttribute()、removeAttribute()、findAttribute()

httpServletRequest

作用范圍:一次請求范圍內(nèi),轉(zhuǎn)發(fā)有效重定向失效;

作用:將servlet中的數(shù)據(jù)通過request對象帶到jsp頁面;

httpSession

作用范圍:存活時間內(nèi)(默認30分鐘),一次會話內(nèi)有效,轉(zhuǎn)發(fā)和重定向都有效;

servletContext

作用范圍:整個web應用;

在jsp的九大內(nèi)置對象中,servletContext對應application

2.4 JSP最佳實戰(zhàn)效果——MVC模型

  • M:model ,通常用于封裝數(shù)據(jù),封裝的是數(shù)據(jù)模型。

  • V:view ,通常用于展示數(shù)據(jù)。動態(tài)展示用jsp頁面,靜態(tài)數(shù)據(jù)展示用html。

  • C:controller ,通常用于處理請求和響應。一般指的是Servlet。

Servlet:擅長處理業(yè)務邏輯,不擅長輸出顯示界面。在web開發(fā)中多用于控制程序邏輯(流程)。所以我們稱之為:控制器。

JSP:擅長顯示界面,不擅長處理程序邏輯。在web開發(fā)中多用于展示動態(tài)界面。所以我們稱之為:視圖。

例如:

在這里插入圖片描述

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产av熟女一区二区三区蜜桃| 国产成人国产精品国产三级| 麻豆国产精品一区二区三区| 年轻女房东2中文字幕| 91久久精品在这里色伊人| 在线观看那种视频你懂的| 国产欧美一区二区另类精品| 91后入中出内射在线| 亚洲一二三四区免费视频| 国产精品一区二区三区黄色片| 国产内射一级二级三级| 日韩欧美国产亚洲一区| 偷拍偷窥女厕一区二区视频| 久久人妻人人澡人人妻| 91播色在线免费播放| 久久re6热在线视频| 欧美日韩一级aa大片| 国产精品成人一区二区三区夜夜夜 | 国产激情一区二区三区不卡| 午夜精品麻豆视频91| 精品国产一区二区欧美| 色婷婷在线精品国自产拍| 国产一区欧美一区二区| 男人的天堂的视频东京热| 人妻少妇系列中文字幕| 国产丝袜美女诱惑一区二区| 欧美精品一区二区三区白虎| 暴力三级a特黄在线观看| 婷婷色国产精品视频一区| 国产又爽又猛又粗又色对黄| 熟妇久久人妻中文字幕| 国产91人妻精品一区二区三区| 99久久精品视频一区二区| 国产精品自拍杆香蕉视频| 国产av天堂一区二区三区粉嫩| 黄色av尤物白丝在线播放网址| 国产日韩在线一二三区| 免费在线播放一区二区| 日韩专区欧美中文字幕| 亚洲国产精品av在线观看| 日韩欧美第一页在线观看|