為什么需要JSP?
與HTML相比:根據后臺的業務,可以動態輸出HTML,網頁內容是可以改變的。
與原生Servlet相比:不需要自己寫輸出語句resp.getWriter().write("");
所以,servlet也稱作動態網頁技術。但是使用servlet極大不利于網頁語言的編程,影響開發效率。
雖然servlet也可以寫網頁,但用java作為邏輯處理、請求處理更合適。
做處理之后的響應不太方便。
這時候會想,如果可以直接寫HTML代碼就好了——使用JSP,在保留servlet的優點的同時,可以像編寫HTML一樣,流暢的編寫網頁信息。可以在里面做業務邏輯判斷,可以直接寫HTML標簽,不需要寫輸出語句。
JSP學習
JSP 全名為Java Server Pages,中文名叫java 服務器頁面,其根本是一個簡化的Servlet 設計,它是由Sun Microsystems 公司倡導、許多公司參與一起建立的一種動態網頁技術標準。
特點:
本質上還是Servlet
跨平臺,一次編寫處處運行
組件(組件含義為核心內容)跨平臺
健壯性和安全性
Jsp 的訪問原理:
瀏覽器發起請求,請求JSP,請求被Tomcat 服務器接收,執行JspServlet 將請求的JSP 文件轉義成為對應的java 文件(也是Servlet),然后執行轉義好的java 文件。
Jsp 的語法和指令:
JSP 的page 指令
JSP 的taglib 指令
Jsp 的局部代碼塊
Jsp 的全局代碼塊
Jsp 的腳本端
Jsp 的注釋
Jsp 的靜態引入(JSP 的include 指令)
Jsp 的動態引入
頁面轉發(forword 標簽)
Jsp 的內置對象:
PageContext 對象
Request 對象
Session 對象
Application 對象
Response 對象
Out 對象
Page 對象
Exception 對象
Config 對象
使用:
JSP 負責頁面展現,Servlet 負責業務邏輯處理。
資源路徑總結:
Jsp 中路徑:
相對路徑:…/…/資源
絕對路徑:/虛擬項目名/資源路徑
<%@page language
="java" import="java.util.*,java.lang.*" pageEncoding
="utf-8" contentType
="text/html; charset=utf-8"%>
<%@page session
="true" %>
<%@page errorPage
="error.jsp" %>
<%@page isErrorPage
="true" %>
<%--Jsp的三種注釋 前端語言注釋:會被轉譯,也會被發送,但是不會被瀏覽器執行java語言注釋:會被轉譯,但是不會被servlet執行Jsp注釋:不會被轉譯。Jsp的page指令學習
<%@page 屬性名
="屬性值" 屬性名
="屬性值"...%
>language:聲明jsp要被轉譯的語言。
import:聲明轉譯的java文件要導入的包,不同的包使用逗號隔開。pageEncoding
:設置jsp文件的數據編碼格式。contentType
="text/html; charset=utf-8" 設置jsp數據響應給瀏覽器時,瀏覽器的解析和編碼格式。session
:設置轉譯的servlet中是否開啟session支持
,默認開啟,
true表示開啟。
false表示關閉。errorPage
:設置jsp運行錯誤跳轉的頁面
.extends:設置jsp轉譯的java文件要繼承的父類
(包名
+類名
)。 作用:配置jsp文件的轉譯相關的參數。Jsp的局部代碼塊:特點:局部代碼塊中聲明的java代碼會被原樣轉譯到jsp對應的servlet文件的_JspService方法中代碼塊中聲明的變量都是局部變量。使用:
<% java代碼
%>缺點:使用局部代碼塊在jsp中進行邏輯判斷,書寫麻煩,閱讀困難。開發:servlet進行請求邏輯處理,使用jsp進行頁面展現。Jsp的全局代碼塊:特點:聲明的java代碼作為全局代碼轉譯到對應的servlet類中。使用:
<%! 全局代碼
%>注意:全局代碼塊聲明的代碼,需要使用局部代碼塊調用。Jsp的腳本段語句:特點:幫助我們快速的獲取變量或者方法的返回值作為數據響應給瀏覽器。使用:
<%=變量名或者方法
%>注意:不要在變量名或者方法后使用分號。 位置:除jsp語法要求以外的任意位置。Jsp的靜態引入和動態引入:靜態引入
:<%@include file
="要引入的jsp文件的相對路徑" %>特點:會將引入的jsp文件和當前jsp文件轉譯成一個
java(Servlet
)文件使用。在網頁中也就顯示了合并后的顯示效果。注意:靜態引入的jsp文化不會單獨轉譯成
java(Servlet
)文件。當前文件和靜態引入的jsp文件中不能夠使用java代碼塊聲明同名變量。動態引入:
<jsp
:include page
="要引入的jsp文件的相對路徑"></jsp
:include
>特點:會將引入的jsp文件單獨轉譯,在當前文件轉譯好的java文件中調用引入的jsp文件的轉譯文件。在網頁中顯示合并后的顯示效果。注意:動態引入允許文件中聲明同名變量。jsp的轉發標簽
:優點:降低jsp代碼的冗余,便于維護升級。jsp的轉發標簽forward:使用:
<jsp
:forward page
="要轉發的jsp文件的相對路徑"></jsp
:forward
>特點:一次請求地址欄信息不改變。注意:在轉發標簽的兩個標簽中間除了寫
<jsp
:param name
="str" value
="aaa" />子標簽不會報錯,其他任意字符都會報錯。
<jsp
:param name
="str" value
="aaa" />name屬性為附帶的數據的鍵名value為附帶的數據內容注意:會將數據以?的形式拼接在轉發路徑的后面。jsp的九大內置對象
:內置對象:jsp文件在轉譯成其對應的Servlet文件的時候自動生成的并聲明的對象。我們在jsp頁面中直接使用即可。注意:內置對象在jsp頁面中使用,使用局部代碼塊或者腳本段語句來使用。不能夠在全局代碼塊中使用。內容:九個對象pageContext
:頁面上下文對象,封存了其他內置對象。封存了當前jsp的運行信息。注意:每個Jsp文件單獨擁有一個pageContext對象。作用域:當前頁面。request:封存當前請求數據的對象。由tomcat服務器創建。一次請求session
:此對象用來存儲用戶的不同請求的共享數據的。一次會話application:也就是ServletContext對象,一個項目只有一個。存儲用戶共享數據的對象,以及完成其他操作。項目內response
:響應對象,用來響應請求處理結果給瀏覽器的對象。設置響應頭,重定向。out
:響應對象,Jsp內部使用。帶有緩沖區的響應對象,效率高于response對象。page
:代表當前Jsp的對象。相當于java中的
this。exception:異常對象。存儲了當前運行的異常信息。注意:使用此對象需要在page指定中使用屬性isErrorPage
="true"開啟。config:也就是ServletConfig,主要是用來獲取web
.xml中的配置數據,完成一些初始化數據的讀取。四個作用域對象
:pageContext
:當前頁面
.解決了在當前頁面內的數據共享問題。獲取其他內置對象。request
:一次請求。一次請求的servlet的數據共享。通過請求轉發,將數據流轉給下一個servlet。session
:一次會話
.一個用戶的不同請求的數據共享。將數據從一次請求流轉給其他請求。application
:項目內
.不同用戶的數據共享問題。將數據從一個用戶流轉給其他用戶。作用:數據流轉Jsp的路徑:在jsp中資源路徑可以使用相對路徑完成跳轉,但是:問題一:資源的位置不可隨意更改。問題二:需要使用
../進行文件夾的跳出。使用比較麻煩。使用絕對路徑:
(必須會
)/虛擬項目名
/項目資源路徑例如:
<a href
="/jsp/jspPro.jsp">jspPro
.jsp
</a
><a href
="/jsp/a/a.jsp">a
.jsp
</a
><br
/>注意:在jsp中資源的第一個
/表示的是服務器根目錄,相當于
:localhost
:8080使用jsp中自帶的全局路徑聲明:
<%String path
= request
.getContextPath();String basePath
= request
.getScheme()+"://"+request
.getServerName()+":"+request
.getServerPort()+path
+"/";%><base href
="<%=basePath%>">作用:給資源前面添加項目路徑: http
://127.0.0.1:8080/虛擬項目名
/上
--%>
<html><head><title>jsp基本語法學習
</title
><meta charset
="utf-8"/></head
><body><h3>jsp基本語法學習
</h3
><hr
/><!-- 局部代碼塊
--><%String str
="jsp中使用邏輯校驗很難受";int a
=2;if(a
>3){%><b>jsp學習很簡單
</b
><%} else{%><i> <%=str
%></i
><%test();} %><!--全局代碼塊
--><%!int b
=5;public void test(){System
.out
.println("我是全局代碼塊聲明");}%><!--jsp的靜態引入
--><%@include file
="includeStatic.jsp" %><!-- jsp的動態引入
--><jsp
:include page
="includeActive.jsp"></jsp
:include
><!-- jsp的轉發forward標簽
--><%-- <jsp
:forward page
="forward.jsp"><jsp
:param value
="aaa" name
="str"/></jsp
:forward
> --%><!-- jsp的 九大內置對象學習
--><%String s
=request
.getParameter("str");request
.getAttribute("str");%><%=s
%><%%><!--Jsp的路徑
--><br
/><a href
="/jsp/a/a.jsp">a
.jsp
</a
><br
/><a href
="a/b/b.jsp">b
.jsp
</a
><br
/></body
>
</html
>
總結
以上是生活随笔為你收集整理的【Servlet】JSP学习-概念和运行原理的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。