JSP 簡(jiǎn)介 什么是Java Server Pages? JSP全稱(chēng)Java Server Pages,是一種動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。它使用JSP標(biāo)簽在HTML網(wǎng)頁(yè)中插入Java代碼。標(biāo)簽通常以<%開(kāi)頭以%>結(jié)束。 它是一種Java servlet,主要用于實(shí)現(xiàn)Java" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢(xún) 在線咨詢(xún)
15158846557 在線咨詢(xún)
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > JSP詳解

JSP詳解

時(shí)間:2023-05-30 21:03:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-05-30 21:03:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

JSP詳解:【43】

JSP 簡(jiǎn)介

什么是Java Server Pages?

JSP全稱(chēng)Java Server Pages,是一種動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。它使用JSP標(biāo)簽在HTML網(wǎng)頁(yè)中插入Java代碼。標(biāo)簽通常以<%開(kāi)頭以%>結(jié)束。 它是一種Java servlet,主要用于實(shí)現(xiàn)Java web應(yīng)用程序的用戶(hù)界面部分。

特點(diǎn):

  1. 本質(zhì)上還是 Servlet
  2. 跨平臺(tái),一次編寫(xiě)處處運(yùn)行
  3. 組件跨平臺(tái)
  4. 健壯性和安全性
Jsp 的訪問(wèn)原理:

瀏覽器發(fā)起請(qǐng)求,請(qǐng)求 JSP,請(qǐng)求被 Tomcat 服務(wù)器接收,執(zhí)行JspServlet 將請(qǐng)求的 JSP 文件轉(zhuǎn)義成為對(duì)應(yīng)的 java 文件(也是Servlet),然后執(zhí)行轉(zhuǎn)義好的 java 文件。

詳解在另一篇文章

page指令

作用:設(shè)置jsp轉(zhuǎn)譯的時(shí)候的一些配置信息。

<%@page language="java"%><%-- 聲明轉(zhuǎn)譯的語(yǔ)言 --%><%@page import="java.util.*,java.lang.*"%><%-- 聲明轉(zhuǎn)譯時(shí)導(dǎo)入的java包文件--%><%@page pageEncoding="utf-8"%><%-- 設(shè)置jsp的數(shù)據(jù)保存的編碼格式--%><%@page contentType="text/html; charset=utf-8"%><%-- 設(shè)置數(shù)據(jù)的響應(yīng)編碼格式--%><%@page session="false"%><%-- 設(shè)置session的狀態(tài),默認(rèn)為true,也就轉(zhuǎn)譯的servlet文件中默認(rèn)session是開(kāi)啟的,使用false關(guān)閉--%><%@page isErrorPage="true"%><%-- 默認(rèn)為false ture表示開(kāi)啟exception異常對(duì)象的使用--%><%@page errorPage="error.jsp"%><%-- 設(shè)置當(dāng)jsp運(yùn)行出現(xiàn)異常錯(cuò)誤時(shí)跳轉(zhuǎn)指定的頁(yè)面--%>下表列出了page指令的相關(guān)屬性

jsp的局部代碼塊和全局代碼塊和java腳本

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%-- 局部代碼塊 聲明方式:<% java代碼 %> 特點(diǎn):使用局部代碼塊聲明的java代碼會(huì)被原樣轉(zhuǎn)譯到_jspService方法中。也就是局部代碼。--%><% int a=123; System.out.println(a); test();%><%-- 全局代碼塊 聲明方式:<%! 聲明全局java代碼%> 特點(diǎn):全局代碼塊中聲明的java代碼,在被轉(zhuǎn)譯時(shí),會(huì)轉(zhuǎn)譯成jsp對(duì)應(yīng)的java文件的全局的代碼。 作用:聲明方法和全局變量等 注意:使用全局代碼塊聲明方法,使用局部代碼塊調(diào)用方法。 --%><%! int b=456; public void test(){ System.out.print("全局代碼塊聲明"); }%><%-- java腳本段、表達(dá)式 聲明方式:<%=變量名或者方法名()%> 作用:將java代碼的運(yùn)算結(jié)果數(shù)據(jù)或者其他數(shù)據(jù)響應(yīng)給瀏覽器 注意:在該表達(dá)式中不能使用分號(hào)結(jié)尾 --%><i><%=a%></i><b>jsp代碼塊學(xué)習(xí)</b>今天天氣真好,適合學(xué)習(xí)

jsp注釋

<html> <head> <style type="text/css"> /* 我是css注釋 */ </style> <script type="text/javascript"> //我是js注釋 </script> </head> <% //int a=3;java注釋 int b=456; %> <body> <!--我是HTML注釋 --> <!-- <i>hhh</i> --> <b>HTML注釋</b> </body> </html>

靜態(tài)引入和動(dòng)態(tài)引入

問(wèn)題:發(fā)現(xiàn),不同的jsp頁(yè)面會(huì)使用相同的資源。如果將資源在每個(gè)jsp頁(yè)面都單獨(dú)聲明則會(huì)造成代碼的冗余量過(guò)高,不易于代碼的維護(hù)和升級(jí)。

解決:使用靜態(tài)引入和動(dòng)態(tài)引入的方式

靜態(tài)引入:<%@include file="要引入的資源的相對(duì)路徑"%>

特點(diǎn):被引入的jsp文件和原有jsp文件被轉(zhuǎn)譯成一個(gè)java文件使用。

注意:靜態(tài)引入的相關(guān)jsp文件中不能聲明同名變量。

動(dòng)態(tài)引入:<jsp:include page="static.jsp"></jsp:include>

特點(diǎn):被引入的文件會(huì)被單獨(dú)轉(zhuǎn)譯,原有jsp文件會(huì)調(diào)用被引入的jsp文件。

注意:動(dòng)態(tài)引入的相關(guān)jsp文件中可以聲明同名變量。

作用:實(shí)現(xiàn)了不同jsp之間的資源共享。

轉(zhuǎn)發(fā):forward標(biāo)簽

問(wèn)題:不同的jsp在處理請(qǐng)求時(shí),有可能會(huì)將當(dāng)前的請(qǐng)求轉(zhuǎn)發(fā)給另外的jsp進(jìn)行處理。

解決:使用forward動(dòng)作指令

使用:<jsp:forward page="要轉(zhuǎn)發(fā)的jsp的相對(duì)路徑"></jsp:forward>

特點(diǎn):從當(dāng)前jsp跳轉(zhuǎn)另外一個(gè)jsp頁(yè)面。

注意: forward標(biāo)簽中除了<jsp:param value="" name=""/>子標(biāo)簽以外不能出現(xiàn)其他內(nèi)容,否則會(huì)報(bào)錯(cuò)。

<html> <head> </head> <body> <h3>forward轉(zhuǎn)發(fā)標(biāo)簽學(xué)習(xí)</h3> <hr /> <% int a=1; if(a>2){ %> <b>歡迎訪問(wèn)本網(wǎng)站</b> <% }else{ %> <!--轉(zhuǎn)發(fā)其他jsp頁(yè)面 --> <jsp:forward page="common.jsp"> <jsp:param value="zhangsan" name="uname"/> </jsp:forward> <%} %> </body></html>


九種隱含對(duì)象

JSP頁(yè)面中不須做任何聲明就可以直接使用的對(duì)象,JSP中共9種隱含對(duì)象,分別是:


pageContext:頁(yè)面上下文對(duì)象,此對(duì)象封存了另外8個(gè)對(duì)象。(作用域:當(dāng)前jsp頁(yè)面)

注意:一個(gè)jsp頁(yè)面一個(gè)pageContext對(duì)象。pageContext對(duì)象每次請(qǐng)求都會(huì)重新創(chuàng)建。

request:封存了請(qǐng)求相關(guān)數(shù)據(jù),由服務(wù)器創(chuàng)建

session: 解決了同一個(gè)用戶(hù)不同請(qǐng)求之間的數(shù)據(jù)共享問(wèn)題

application:ServletContext對(duì)象,解決了不同用戶(hù)之間的數(shù)據(jù)共享問(wèn)題

out:響應(yīng)數(shù)據(jù)的對(duì)象,交于response對(duì)象,out對(duì)象底層使用了緩沖區(qū)。out對(duì)象的效率高于response

response:響應(yīng)對(duì)象,設(shè)置編碼格式

page:代表當(dāng)前被執(zhí)行的jsp轉(zhuǎn)譯的java文件的對(duì)象

config:ServletConfig對(duì)象,使用此對(duì)象完成資源的初始化。

exception:jsp頁(yè)面的異常對(duì)象,封存了異常信息。

注意:對(duì)象的名字必須是轉(zhuǎn)譯好的java文件中聲明的對(duì)象名。

四大作用域:


作用域是指變量使用的有效范圍。這個(gè)周期可以是當(dāng)前頁(yè)面的執(zhí)行時(shí)間,或是一次請(qǐng)求從創(chuàng)建到消亡的這段時(shí)間。
pageContext:當(dāng)前頁(yè)面作用域
pageContext相當(dāng)于Java中的this,它代表著當(dāng)前頁(yè)面作用域。在這個(gè)作用域中存放的屬性值,只能在當(dāng)前頁(yè)面中取出。
request: 從請(qǐng)求創(chuàng)建到請(qǐng)求消亡這段時(shí)間
瀏覽器從發(fā)起請(qǐng)求開(kāi)始,到服務(wù)器處理完成,返回響應(yīng)的這段時(shí)間。request作用域可以跨越多個(gè)頁(yè)面 。另外,還可以使用<jsp:forward>和<jsp:include>兩個(gè)方法轉(zhuǎn)向或包含另一個(gè)頁(yè)面, 這個(gè)時(shí)候request對(duì)象中保存的信息對(duì)另一個(gè)頁(yè)面也是有效的

session: 一段客戶(hù)端和服務(wù)器持續(xù)連接的時(shí)間
當(dāng)客戶(hù)端瀏覽器第一次向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器會(huì)為這個(gè)客戶(hù)端分配一定的內(nèi)存空間,這個(gè)客戶(hù)端能在其中存取數(shù)據(jù),任何客戶(hù)端都不能操作其他客戶(hù)端的內(nèi)存空間中的數(shù)據(jù),這塊內(nèi)存空間就稱(chēng)為session,它也是JSP的九大內(nèi)置對(duì)象之一。存放于session中的對(duì)象,將屬于session作用域,或者叫會(huì)話作用域
application:服務(wù)器開(kāi)始到服務(wù)器關(guān)閉為止
當(dāng)服務(wù)器開(kāi)啟時(shí),會(huì)創(chuàng)建一個(gè)公共內(nèi)存區(qū)域,任何客戶(hù)端都可以在這個(gè)公共內(nèi)存區(qū)域存取值,這個(gè)公共內(nèi)存區(qū)域,就稱(chēng)為application,它也是JSP的九大內(nèi)置對(duì)象之一

簡(jiǎn)述jsp與servlet的職責(zé)

Servlet用于處理業(yè)務(wù)邏輯,通過(guò)轉(zhuǎn)發(fā)或者重定向跳轉(zhuǎn)到j(luò)sp,Jsp用于展現(xiàn)頁(yè)面給用戶(hù),其中數(shù)據(jù)的流轉(zhuǎn)時(shí)如果使用轉(zhuǎn)發(fā)則使用request和session,如果使用重定向時(shí)則使用session(不同數(shù)據(jù)之間的數(shù)據(jù)共享),而不會(huì)使用ServletContext因?yàn)樗糜诓煌脩?hù)之間的數(shù)據(jù)共享

Servlet中轉(zhuǎn)發(fā)與重定向的相對(duì)路徑和絕對(duì)路徑

1、Servlet重定向jsp:resp.sendRedirect("jsp的相對(duì)路徑/servlet的別名");

2、Servlet請(qǐng)求轉(zhuǎn)發(fā)jsp:

req.getRequestDispatcher("jsp的相對(duì)路徑/servlet的別名").forward(req, resp);

注意:以上兩種寫(xiě)法其實(shí)都是相對(duì)路徑,相對(duì)路徑指的是從當(dāng)前請(qǐng)求路徑查找jsp所經(jīng)過(guò)的路 徑。

請(qǐng)求轉(zhuǎn)發(fā)和重定向的絕對(duì)路徑寫(xiě)法總結(jié):

1、重定向:在重定向中的路徑中第一個(gè)/表示服務(wù)器根目錄。

示例: resp.sendRedirect("/虛擬項(xiàng)目名/資源路徑");//重定向jsp頁(yè)面

2、請(qǐng)求轉(zhuǎn)發(fā):在請(qǐng)求轉(zhuǎn)發(fā)中第一個(gè)/表示項(xiàng)目根目錄

示例: req.getRequestDispatcher("/資源路徑").forward(req, resp);//請(qǐng)求轉(zhuǎn)發(fā)到j(luò)sp頁(yè)面

為什么請(qǐng)求轉(zhuǎn)發(fā)和重定向的路徑最好寫(xiě)成絕對(duì)路徑

如果寫(xiě)相對(duì)路徑,當(dāng)前servlet別名配的不是一個(gè)目錄,不會(huì)有問(wèn)題,但是是目錄的話則會(huì)出現(xiàn)問(wèn)題,而且當(dāng)servlet的路徑一旦發(fā)生更改,那么請(qǐng)求轉(zhuǎn)發(fā)和重定向都會(huì)發(fā)生問(wèn)題,所以建議寫(xiě)絕對(duì)路徑,絕對(duì)路徑直接從服務(wù)器根目錄或者從項(xiàng)目根目錄直接找資源,與servlet的路徑?jīng)]關(guān)系,不會(huì)出現(xiàn)資源找不到的情況。

Jsp中的絕對(duì)路徑和bathpath方式

問(wèn)題:在jsp頁(yè)面中進(jìn)行資源之間的跳轉(zhuǎn)時(shí),如果書(shū)寫(xiě)的是相對(duì)路徑這樣會(huì)造成如果當(dāng)前文件的路徑發(fā)生變更,從當(dāng)前路徑查找資源的相對(duì)路徑都要重新進(jìn)行書(shū)寫(xiě)。

解決:將相對(duì)路徑編程絕對(duì)路徑

使用: 在jsp中路徑中的第一個(gè)/表示服務(wù)器根目錄。

<a href="/虛擬項(xiàng)目名/資源路徑">訪問(wèn)關(guān)鍵字</a>

注意:在Myeclipse中創(chuàng)建的jsp頁(yè)面會(huì)自動(dòng)生成路徑處理代碼basePath

而basePath的值為當(dāng)前項(xiàng)目根目錄,并且在head標(biāo)簽中使用了<base href="<%=basePath%>">相當(dāng)于將當(dāng)前頁(yè)面的資源全部默認(rèn)定位為從項(xiàng)目根目錄開(kāi)始查找,我們就不需要寫(xiě)第一個(gè)/了

注意:basePath方式和添加/(斜杠)方式只能二選一。

如果配置了以下代碼,使用時(shí)則不能添加加/

String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";<base href="<%=basePath%>">











關(guān)鍵詞:

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉