什么是JSP
JSP全名為Java Server Pages,java服務器頁面。JSP是一種基于文本的程序,其特點就是HTML和Java代碼共同存在!
為什么需要JSPJSP是為了簡化Servlet的工作出現的替代品,Servlet輸出HTML非常困難,JSP就是替代Servlet輸出HTML的。
簡單使用一下JSP在idea下生成一個JSP,我們來看一下JSP長什么樣子看起來就像一個HTML頁面,前面也說了:JSP的特點就是HTML和Java代碼共同存在我們向瀏覽器輸出一句HelloWorld,至于<%%>這個東西,我先不解釋!JSP的工作原理在Tomcat博客中我提到過:Tomcat訪問任何的資源都是在訪問Servlet!,當然了,JSP也不例外!JSP本身就是一種Servlet。為什么我說JSP本身就是一種Servlet呢?其實JSP在第一次被訪問的時候會被編譯為HttpJspPage類(該類是HttpServlet的一個子類)剛才我簡單使用了一下JSP,它被編譯成了這么一個Servlet:編譯過程是這樣子的:瀏覽器第一次請求1.jsp時,Tomcat會將1.jsp轉化成1_jsp.java這么一個類,并將該文件編譯成class文件。編譯完畢后再運行class文件來響應瀏覽器的請求。以后訪問1.jsp就不再重新編譯jsp文件了,直接調用class文件來響應瀏覽器。當然了,如果Tomcat檢測到JSP頁面改動了的話,會重新編譯的。既然JSP是一個Servlet,那JSP頁面中的HTML排版標簽是怎么樣被發送到瀏覽器的?我們來看下上面1_jsp.java的源碼就知道了。原來就是用write()出去的罷了。說到底,JSP就是封裝了Servlet的java程序罷了。有人可能也會問:JSP頁面的代碼服務器是怎么執行的?再看回1_jsp.java文件,java代碼就直接在類中的rvice()中。String s = "HelloWorda";out.println(s);JSP比Servlet更方便更簡單的一個重要原因就是:內置了9個對象!內置對象有:out、ssion、respon、request、config、page、application、pageContext、exception,這幾個內置對象不在這里講。現在先知道一下即可!JSP生命周期
JSP也是Servlet,運行時只有一個實例,JSP初始化和銷毀時也會調用Servlet的init()和destroy()方法。另外,JSP還有自己初始化和銷毀的方法
JSP的語法JSP代碼可以分為兩部分:
模板數據:就是HTML代碼元素:JSP頁面中的java代碼、JSP指令、JSP標簽JSP腳本
JSP的腳本就是JSP頁面中的java代碼,也叫做scriptlet。JSP的腳本必須使用<%%>括起來,不然會被當成是模板數據的!JSP腳本有三種方式:<%%>【定義局部變量,編寫語句】<%!%>【定義類或方法,但是沒人這樣用!】<%=%>(也稱之為表達式輸出)【輸出各種類型的變量,int、double、String、Object等】如果過多地使用<%%>會導致代碼混亂,JSP還提供了一種scriptlet標簽,使用此標簽和<%%>有相同的功能,只不過它更美觀了一些<jsp:scriptlet> String s = "HelloWorld"; out.println(s);</jsp:scriptlet>
JSP注釋
<%--這是JSP注釋--%><%--%>//這是java的當行注釋///*這是java的多行注釋*//**/
JSP指令
JSP指令用來聲明JSP頁面的相關屬性,例如編碼方式、文檔類型等等
JSP指令的語法:
<%@指令 屬性名="值" %>
page指令
我在idea生成的JSP頁面就有page指令了。<%@ page contentType="text/html;chart=UTF-8" language="java" %>page指令常見屬性:language="java"extends="package.class"import="{package.class | package.*}, …"ssion="true | fal"buffer="none | 8kb | sizekb"autoFlush="true | fal"isThreadSafe="true | fal"info="text"errorPage="relative_url"isErrorPage="true | fal"contentType="mimeType ;chart=characterSet " | "text/html ; chart=ISO-8859-1"pageEncoding="characterSet | ISO-8859-1"isELIgnored="true | fal"一般地,在eclip或idea這些高級開發工具上開發,我們只需要在page指令中指定contentType="text/html;chart=UTF-8",就不會出現中文亂碼問題!當然了contentType 不僅僅可以指定以text/html的方式顯示,還可以使用其他的形式顯示出來。在conf/web.xml文件中可以查詢出來比如,我以doc形式顯示jsp的數據
<%@ page contentType="application/msword;chart=UTF-8" language="java" %><html><head> <title>簡單使用JSP</title></head><body> 1111</body></html>我們上網的時候,如果我們操作不當,或者服務器出錯了,頁面都是會出現友好提示的!這個也能通過page指令來實現跳轉到友好提示頁面上!page指令errorPage=和isErrorPage這兩個屬性,下面我們來看一下怎么使用!1.jsp出現了錯誤,通過page指令的errorPage屬性跳轉到error.jsp頁面上
<%@ page contentType="text/html;chart=UTF-8" language="java" errorPage="error.jsp" %><html><head> <title>該頁面出錯了!</title></head><body> <%--模擬頁面出錯了!!!--%> <% int result = 2 / 0; %> 你好呀</body></html>error.jsp頁面要通過page指令的isErrorPage屬性設置頁面就是錯誤頁面
<%@ page contentType="text/html;chart=UTF-8" language="java" isErrorPage="true" %><html> <head> <title>友好提示頁面</title> </head> <body> 服務器正忙著呢! </body></html>下面是效果:當然了,細心的朋友可以發現地址欄是沒有變化的,所以屬于是服務器跳轉。以上的做法是單個頁面設置的,如果我會有很多錯誤(JSP多的情況下,錯誤就會多),單個設置太麻煩了!我們可以在web.xml文件中全局設置錯誤頁,只要發生了404錯誤或者空指針異常的錯誤都會跳轉到error.jsp頁面上
<error-page> <error-code>404</error-code> <location>/error.jsp</location></error-page><error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/error.jsp</location></error-page>隨便輸個資源進行,會發生發404錯誤的,跳轉到錯誤頁面。下面是效果:
include指令
在講解request對象的時候,我們曾經使用過request.getRequestDispatcher(String url).include(request,respon)來對頁頭和頁尾面進行包含inclue指令也是做這樣的事情,我們來試驗一下吧!這是頁頭<%@ page contentType="text/html;chart=UTF-8" language="java" %><html> <head> <title>頁頭</title> </head> <body> 我是頁頭 <br> <br> <br> </body></html>這是頁尾
<%@ page contentType="text/html;chart=UTF-8" language="java" %><html><head> <title>頁尾</title></head><body>我是頁尾</body></html>在1.jsp中把頁頭和頁尾包含進來
<%@ page contentType="text/html;chart=UTF-8" language="java" %><html><head> <title>包含頁頭和頁尾進來</title></head><body><%@include file="head.jsp" %><%@include file="foot.jsp" %></body></html>訪問1.jspinclude指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!,看一下jsp的源代碼就知道了!jsp還提供另一種包含文件的方式:JSP行為---動態包含。jsp行為在下面會講到!
taglib指令
JSP支持標簽技術,要使用標簽技術就先得聲明標簽庫和標簽前綴。taglib指令就是用來指明JSP頁面內使用標簽庫技術。這里就不詳細說明了,等到學習JSP標簽的時候再使用吧!現在記住有這個指令即可。JSP行為
JSP行為(JSP Actions)是一組JSP內置的標簽,只書寫少量的標記代碼就能夠使用JSP提供豐富的功能,JSP行為是對常用的JSP功能的抽象和封裝。為什么我不把它直接稱為JSP標簽呢?我把這些JSP內置的標簽稱之為JSP行為,能夠和JSTL標簽區分開來。當然了,你也可以把它稱之為JSP標簽,你不要搞混就行了。我個人喜歡把這些JSP內置標簽稱之為JSP行為。
include行為
上面已經提及到了,include指令是靜態包含,include行為是動態包含。其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,respon)include行為語法是這個樣子的<jsp:include page=""/>我們先來使用一下把,在1.jsp頁面中也將頁頭和頁尾包含進來。
<%@ page contentType="text/html;chart=UTF-8" language="java" %><html><head> <title>包含頁頭和頁尾進來</title></head><body> <jsp:include page="head.jsp"/> <jsp:include page="foot.jsp"/></body></html>訪問1.jsp頁面看一下效果:使用jsp行為來包含文件,jsp源文件是這樣子的:jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)當然了,現在有靜態包含和動態包含,使用哪一個更好呢?答案是:動態包含。動態包含可以向被包含的頁面傳遞參數(用處不大),并且是分別處理包含頁面的(將被包含頁面編譯后得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】!模擬一下場景吧,現在我的頭頁面有個名為s的字符串變量
<%@ page contentType="text/html;chart=UTF-8" language="java" %><html> <head> <title>頁頭</title> </head> <body> <% String s = "zhongfucheng"; %> 我是頁頭呀 <br> <br> <br> </body></html>我的頁尾也有個名為s的字符串變量
<%@ page contentType="text/html;chart=UTF-8" language="java" %><html><head> <title>頁尾</title></head><body><% String s = "zhongfucheng";%>我是頁尾呀</body></html>現在我使用靜態包含看看會發生什么,出現異常了。出現異常的原因很簡單,就是同一個文件中有兩個相同的變量s使用動態包含就可以避免這種情況
param行為
當使用和行為引入或將請求轉發給其它資源時,可以使用行為向這個資源傳遞參數。forward行為
在講解request對象的時候,我們使用request.getRequestDispatcher(String url).forward(request,respon)進行跳轉。其實forward行為就是對其封裝!我們來看一下forward的語法:<jsp:forward page=""/>好的,我們來使用一下吧。訪問1.jsp頁面就跳轉到head.jsp頁面中
<%@ page contentType="text/html;chart=UTF-8" language="java" %><html><head> <title>訪問1.jsp就跳轉到head.jsp</title></head><body><jsp:forward page="head.jsp"/></body></html>看一下效果如果我要傳遞參數,就要在forward行為嵌套param行為在跳轉到head.jsp時傳入參數urname值為zhongfucheng
<jsp:forward page="head.jsp"> <jsp:param name="urname" value="zhongfucheng"/></jsp:forward>在head.jsp頁面中獲取到傳遞過來的參數
<% String ss = request.getParameter("urname");%>獲取到的參數是:<%=ss%>效果如下圖所示
directive行為
directive的中文意思就是指令。該行為就是替代指令<%@%>的語法的相當于<%@include file="" %>相當于<%@page %>相當于<%@taglib %>我們來試一下能不能用的<jsp:directive.include file="head.jsp"></jsp:directive.include><jsp:directive.include file="foot.jsp"></jsp:directive.include>看下效果,正常可以包含頁面:使用該指令可以讓JSP頁面更加美觀!使用scriptlet行為替代<%%>是同樣一個道理
javaBean行為
JSP還提供了操作javaBean對象的行為,在這里就不詳細說明了,后面會講到的!現在記住JSP提供了javaBean行為來操作簡單類即可!<jsp:uBean id=""/><jsp:tProperty name="" property=""/><jsp:getProperty name="" property=""/>
文章來源:https://dwz.cn/OtXvyvh3
作者:Java3y
本文發布于:2023-02-28 21:27:00,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/1677761517114277.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:jsp是什么(jsp是什么語言).doc
本文 PDF 下載地址:jsp是什么(jsp是什么語言).pdf
| 留言與評論(共有 0 條評論) |