日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

JavaWeb – JSP:概述和語法,內(nèi)置對象,JavaBean 組件,MVC(javaweb中jsp)

JavaWeb - JSP:概述和語法,內(nèi)置對象,JavaBean 組件,MVC(javaweb中jsp)

jsp 的概述

概念

JSP 是 Java Server Pages 的簡稱,跟 servlet 一樣可以動態(tài)生成 html 響應(yīng), JSP 文件命名為 xxx.jsp。

與 Servlet 不同,JSP 文件以 HTML 標(biāo)記為主,然后內(nèi)嵌 Java 代碼段,用于處理動態(tài)內(nèi)容。

示例

<%@ page import="java.util.Date" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>Hello Time</title> </head> <body> 現(xiàn)在的時間是:<%= new Date()%> </body></html>

JSP 與 Servlet 的關(guān)系

  • JSP 在靜態(tài) HTML 內(nèi)容中嵌入 Java 代碼,Java 代碼被動態(tài)執(zhí)行后生成 HTML 內(nèi)容;Servlet 在 Java 代碼中通過 HttpServletResponse 對象動態(tài)輸出 HTML 內(nèi)容。
  • JSP 經(jīng)編譯后就變成了 Servlet。JSP 的本質(zhì)就是 Servlet,JVM 只能識別 Java 的類,不能識別 JSP 的代碼,Web 容器將 JSP 的代碼編譯成 JVM 能夠識別的 Java 類。
  • JSP 更擅長表現(xiàn)于頁面顯示,servlet 更擅長于邏輯控制。
  • Web 瀏覽器發(fā)送 HTTP 請求到服務(wù)端,被 Servlet 獲取并進(jìn)行處理(例如參數(shù)解析、請求轉(zhuǎn)發(fā));Servlet 調(diào)用核心業(yè)務(wù)邏輯獲得處理結(jié)果;Servlet 將邏輯處理結(jié)果交給 JSP,動態(tài)輸出 HTML 內(nèi)容;動態(tài)生成的 HTML 內(nèi)容返回到瀏覽器顯示。

JSP 的語法

JSP 語法結(jié)構(gòu)

聲明區(qū),程序代碼區(qū),表達(dá)式,注釋,指令和動作,內(nèi)置對象

聲明區(qū)

基本語法:<%! %>

可以定義全局變量、方法、類。

<%! int i; public void setName(){ ... }%>

程序代碼區(qū)

基本語法:<% 程序代碼區(qū) %>

可以定義局部變量以及放入任何的Java程序代碼。

<% int j; for (int k=0; k<10; k ) { ... }%>

表達(dá)式

基本語法:<%= %>

可以輸出一個變量或一個具體內(nèi)容,但 = 后面必須是字符串變量或者可以被轉(zhuǎn)換成字符串的表達(dá)式。

不需要以 ; 結(jié)束,因為只有一行。

<%= "hello world" %><%= i 1 %>

注釋

注釋的內(nèi)容不會被執(zhí)行。

<!-- HTML 文件的注釋,瀏覽器可以查看到 --><%-- JSP 文件的注釋,瀏覽器看不到 --%><% // Java 語言中的單行注釋,瀏覽器看不到 /* Java 語言中的多行注釋, 瀏覽器看不到 */%>

指令和動作

指令格式:<%@指令 屬性=“屬性值” %>

指令的屬性可以設(shè)定多個。

JSP常用指令有:page、taglib、include。

page 指令

用于導(dǎo)包和設(shè)置一些頁面屬性,常用屬性如下:

  • import 導(dǎo)入相應(yīng)的包,惟一允許在同一文檔中多次出現(xiàn)的屬性
  • contentType 設(shè)置 Content-Type 響應(yīng)報頭,標(biāo)明即將發(fā)送到瀏覽器的文檔類型
  • pageEncoding 設(shè)置頁面的編碼
  • language 指定頁面使用的語言
  • session 控制頁面是否參與 HTTP 會話
  • errorPage 處理當(dāng)前頁面中拋出但未被捕獲的任何異常
  • isErrorPage 當(dāng)前頁是否可以作為其他頁面的錯誤處理頁面

taglib 指令

用來擴展 JSP 程序的標(biāo)簽元素,引入其他功能的標(biāo)簽庫文件。

<!-- prefix 屬性用于指定庫前綴 --><!-- uri 屬性用于指定庫的標(biāo)識 --> <%@taglib uri="tagLibary" prefix="prefix" %><!-- 引入第三方的標(biāo)簽庫 --><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

include 指令

用于引入另一個 JSP 程序或 HTML 文件等。

JSP 引擎會在 JSP 文件的轉(zhuǎn)換時期先把 ?le 屬性設(shè)定的文件包含進(jìn)來,然后開始執(zhí)行轉(zhuǎn)換及編譯的工作。

<%@include file="被包含的文件地址" %>

jsp:include

jsp:include 動作用于引入另一個 JSP 程序或 HTML 文件等。

執(zhí)行到 include 時,被 include 的文件才會被編譯。

如果 include 的是 jsp 文件,那它暫時不會被轉(zhuǎn)換成 Servlet 文件。

<jsp:include page="URLSpec" flush="true"/><jsp:include page="URLSpec" flush="true"> <jsp:param name="key" value="value"/></jsp:include>

include 指令和 jsp:include 動作的區(qū)別

include 指令是在 JSP 程序的轉(zhuǎn)換時期就將 ?le 屬性所指定的程序內(nèi)容嵌入再編譯執(zhí)行(靜態(tài)包含)。

jsp:include 動作在轉(zhuǎn)換時期是不會被編譯的,只有在客戶端請求時期被執(zhí)行到才會被動態(tài)的編譯載入(動態(tài)包含,推薦)。

jsp:forward

jsp:forward 動作用于在 JSP 中實現(xiàn)轉(zhuǎn)發(fā),將請求轉(zhuǎn)發(fā)到另一個指定的 JSP 程序或者 Servlet 中處理。

<jsp:forward page="urlSpec" flush="true"/><jsp:forward page="urlSpec"> <!-- 用于指定參數(shù)和其對應(yīng)的值 --> <jsp:param name="key" value="value"/></jsp:forward>

JSP 內(nèi)置對象

基本概念

在 JSP 程序中有 9 個內(nèi)置對象由容器為用戶進(jìn)行實例化,程序員可以不用定義就直接使用這些變量。

在 JSP 轉(zhuǎn)換成 Servlet 后,會自動追加這些變量的定義,使用內(nèi)置對象可以簡化 JSP 的開發(fā)。

out 內(nèi)置對象

該對象類型是 JSPWriter。

該對象是一個緩沖的輸出流,用來給客戶端輸出信息。

  • void println(String x) 向客戶端輸出各種類型數(shù)據(jù)
  • void newLine() 輸出一個換行符
  • void close() 關(guān)閉輸出流
  • int getBufferSize() 返回緩沖區(qū)的大小
  • int getRemaining() 返回緩沖區(qū)中未使用的字節(jié)數(shù)
  • void flush() 輸出緩沖區(qū)里的數(shù)據(jù)
  • void clearBuffer() 清除緩沖區(qū)里的數(shù)據(jù),同時把數(shù)據(jù)輸出到客戶端
  • void clear() 清除緩沖區(qū)里的數(shù)據(jù),但不把數(shù)據(jù)輸出到客戶端

request 內(nèi)置對象

該對象封裝的是調(diào)用 JSP 頁面的請求信息,它是 HttpServletRequest 接口的一個實例。

該對象的屬性值只在一個請求中保存。

  • String getMethod() 返回客戶端向服務(wù)器端傳送數(shù)據(jù)的方式
  • String getParameter(String name) 返回客戶端向服務(wù)器端傳送的參數(shù)值
  • String[] getParameterValues(String name) 獲得指定參數(shù)的所有值
  • String getRequestURI() 獲得請求地址
  • String getRemoteAddr() 返回發(fā)送請求的客戶端或最后一個代理的 IP 地址
  • int getRemotePort() 返回發(fā)送請求的客戶端或最后一個代理的端口號
  • String getServerName() 獲取服務(wù)器的名字
  • int getServerPort() 獲取服務(wù)器端的端口
  • void setAttribute(String name, Object o) 在此請求中存儲屬性。屬性在請求之間重置
  • Object getAttribute(String name) 將指定屬性的值作為對象返回,若不存在則返回空值

response 內(nèi)置對象

該對象作用是響應(yīng)信息,用于給客戶端輸出相應(yīng)的處理結(jié)果,它是 HttpServletResponse 接口的一個實例。

該對象經(jīng)常用于設(shè)置 HTTP 標(biāo)題,添加 cookie、設(shè)置響應(yīng)內(nèi)容的類型和狀態(tài)、發(fā)送 HTTP 重定向和編碼 URL。

  • void addCookie(Cookie cookie) 添加一個 Cookie 對象,用于在客戶端保存特定的信息
  • void addHeader(String name, String value) 添加 HTTP 頭信息,該 Header 信息將發(fā)送到客戶端
  • boolean containsHeader(String name) 判斷指定名字的 HTTP 文件頭是否存在
  • void sendRedirect(String location) 重定向 JSP 文件
  • void setContentType(String type) 設(shè)置類型與編碼方式

session 內(nèi)置對象

該對象表示瀏覽器和服務(wù)器之間的一次會話;一次會話可以包含多次請求,在多次請求之間可以借助 session 對象存儲信息,它是 HttpSession 類型的一個實例。

該對象的屬性值在一次會話范圍中保存,保存在服務(wù)器端,只要不關(guān)閉瀏覽器,默認(rèn)半個小時內(nèi)都可以訪問。

  • void setAttribute(String name, Object value) 使用指定的名稱將對象綁定到此會話
  • Object getAttribute(String name) 返回在此會話中用指定名稱綁定的對象,如果沒有對象在該名稱下綁定則返回空值

application 內(nèi)置對象

該對象代表全局上下文,是一個 web 程序的全局變量,它是 ServletContext 類型的一個實例。

該對象在整個服務(wù)器上保存數(shù)據(jù),所有用戶共享。

  • void setAttribute(String name, Object object) 將對象綁定到此 servlet 上下文中的給定屬性名
  • Object getAttribute(String name) 返回給定名稱的 servlet 容器屬性,若沒有該名稱的屬性返回 null

pageContext 內(nèi)置對象

該對象表示 JSP 頁面上下文,是 PageContext 類型的對象,可以使用這個對象來管理其他的隱含對象。

該對象只在一個頁面中保存數(shù)據(jù)。

  • void setAttribute(String name, Object value, int scope) 使用適當(dāng)?shù)淖饔糜蛟O(shè)置指定的名稱和值
  • Object getAttribute(String name, int scope) 返回指定作用域中名稱關(guān)聯(lián)的對象,若找不到則返回 null
  • ServletRequest getRequest() 獲取請求對象
  • ServletResponse getResponse() 獲取響應(yīng)對象
  • HttpSession getSession() 獲取會話對象
  • ServletCon?g getServletCon?g() 獲取配置對象
  • JspWriter getOut() 獲取輸出對象
  • Object getPage() 獲取頁面對象
  • Exception getException() 獲取異常對象

page 內(nèi)置對象

該對象的類型是 Object。

該對象是 JSP 頁面本身。

config 內(nèi)置對象

該對象的類型是 ServletCon?g。

該對象是 Servlet 配置對象。

exception 內(nèi)置對象

該對象是 Throwable 的實例,表示的是 JSP 的異常信息,作用是捕獲網(wǎng)頁異常。

如果要使用它,必須將跳轉(zhuǎn)的錯誤頁面(如 error.jsp)的 page 指令的 isErrorPage 屬性設(shè)置成 true。

單個頁面的處理方式:

<%@page errorPage="error.jsp" %>

在 web.xml 中配置統(tǒng)一的異常處理頁面:

<error-page> <exception-type>java.lang.Throwable</exception-type> <location>/error.jsp</location></error-page>

JavaBean 組件

基本概念

JavaBean 是使用 Java 語言開發(fā)的一個可重用的組件,在 JSP 開發(fā)中可以使用 JavaBean 減少重復(fù)代碼,使整個 JSP 代碼的開發(fā)更加簡潔。

JavaBean 本質(zhì)上就是 Java 類,通常要求如下:

  • 屬性 – 全部私有化,通過 get 和 set 方法進(jìn)行訪問。
  • 方法 – 必須是 public 關(guān)鍵字修飾。
  • 構(gòu)造器 – 必須有無參構(gòu)造方法。

使用方式

使用 jsp:useBean 的方式創(chuàng)建 javaBean 實例;保存范圍有 page|request|sessin|application,默認(rèn)為 page 范圍。

<jsp:useBean id="對象名" scope="保存范圍" class="包名.類名" />

使用 jsp:setProperty 的方式設(shè)置 javaBean 的屬性值。

<jsp:setProperty name="對象名" property="屬性名" value="屬性值" param="參數(shù)名"/>

使用 jsp:getProperty 的方式獲取 javaBean 的屬性值。

<jsp:getProperty name="對象名" property="屬性名"/>

保存范圍

JavaBean 的保存范圍有 page、request、session 以及 application,默認(rèn)是 page 范圍。

刪除方式

<% 內(nèi)置對象.removeAttribute(“JavaBean 的名字”); %>

MVC 設(shè)計模式

基本概念

MVC 是模型(Model)和視圖(View)以及控制器(Controller)的簡寫,是一種將數(shù)據(jù)、界面顯示和業(yè)務(wù)邏輯進(jìn)行分離的組織方式,這樣在改進(jìn)界面及用戶交互時,不需要重新編寫業(yè)務(wù)邏輯,從而提高了代碼的可維護(hù)性。

M:主要用于封裝業(yè)務(wù)數(shù)據(jù)的 JavaBean(Bean) 和 業(yè)務(wù)邏輯的 JavaBean(Service) 及訪問數(shù)據(jù)庫的 DAO 對象。

V:主要負(fù)責(zé)數(shù)據(jù)收集和數(shù)據(jù)展現(xiàn),通常由 JSP 文件完成。

C:主要負(fù)責(zé)流程控制和頁面跳轉(zhuǎn),通常由 Servlet 完成。

基本模型

  1. 瀏覽器發(fā)起請求;
  2. Servlet 接受處理請求,通過 JavaBean 封裝業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯;
  3. Servlet 通過 Dao 對象來訪問數(shù)據(jù)庫,數(shù)據(jù)庫把數(shù)據(jù)以 JavaBean 的形式發(fā)給 Servlet;
  4. Servlet 對數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯處理并將結(jié)果發(fā)給 JSP;
  5. JSP 動態(tài)輸出 HTML 頁面到瀏覽器。

想了解更多,歡迎關(guān)注我的微信公眾號:Renda_Zhang

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部
昆山市| 普陀区| 松原市| 文水县| 大邑县| 南郑县| 虎林市| 连山| 大厂| 玛曲县| 西乌珠穆沁旗| 奉化市| 崇阳县| 棋牌| 友谊县| 卓资县| 资阳市| 芒康县| 海晏县| 军事| 成安县| 邹平县| 金溪县| 银川市| 宽城| 丹巴县| 灵川县| 大英县| 重庆市| 揭东县| 淮阳县| 崇文区| 枞阳县| 和林格尔县| 皋兰县| 吉木萨尔县| 沙坪坝区| 大丰市| 宜兰县| 阿拉善盟| 扎囊县|