JSP中為了方便用戶開發(fā)提供了2類注釋

顯式注釋:繼承了HTML風(fēng)格&#34;<!--注釋-->&#34;隱式注釋Java風(fēng)" />

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

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 2018-5-7 JSP_Web_MVC開發(fā)(5)-JSP語(yǔ)法

2018-5-7 JSP_Web_MVC開發(fā)(5)-JSP語(yǔ)法

時(shí)間:2023-05-25 02:42:02 | 來源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-05-25 02:42:02 來源:網(wǎng)站運(yùn)營(yíng)

2018-5-7 JSP_Web_MVC開發(fā)(5)-JSP語(yǔ)法:【注釋】

JSP中為了方便用戶開發(fā)提供了2類注釋

  1. Java風(fēng)格注釋://和/*...*/
  2. JSP特有的注釋:<%--注釋--%>
例 觀察注釋

<% //此處編寫的是JAVA程序 /*用戶看不見的注釋*/%><!--This is a visiable comment--><%-- 此類注釋為JSP所獨(dú)有--%>此處一定要注意:日后編寫JSP時(shí)候"<%--注釋--%>"很常見。




【三種Scriptlet】

Scriptlet指的是腳本小程序。JSP就是指在HTML頁(yè)面中要嵌入多個(gè)Java程序,嵌入Java程序的語(yǔ)句塊稱為Scriptlet。

Scriptlet分為3種類型:

1.第一種Scriptlet:<%!%>

使用此種Scriptlet可以在一個(gè)JSP頁(yè)面之中定義類,全局變量、全局常量、方法

例 在JSP中定義類

<%! class Person{ private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; } public String toString(){ return "name="+this.name+",age="+this.age; } }%><% out.println(new Person("Tom",20));%>不過一般而言不會(huì)在JSP中定義類,此類操作只是一個(gè)介紹。

提示:嚴(yán)格來說,此處定義的類如果還原成Java語(yǔ)言,那么就表示定義的是一個(gè)內(nèi)部類。

例 定義方法

<%! public int add(int x,int y){ return x+y; }%><% out.println(add(20,10));%>提示:此時(shí)定義的方法,就相當(dāng)于在類中定義的普通方法。

例 定義全局常量、全部變量

<%! public static final String MESSAGE="Hello World"; public int x=10;//全局變量%><% out.println(MESSAGE); out.println(x++);%>此時(shí)的x就相當(dāng)于全局變量,只會(huì)定義一次。

提示:此時(shí)定義的操作就好比定義類中的屬性一樣。

通過以上的分析可以發(fā)現(xiàn),使用<%!%>定義的結(jié)構(gòu)就相當(dāng)于定義的是類中的結(jié)構(gòu)一樣,而包含此部分代碼的部分就好比一個(gè)對(duì)象,只不過我們不去參與對(duì)象的實(shí)例化操作,而直接使用對(duì)象。

總結(jié)

如果將來使用<%!%>定義結(jié)構(gòu),使用最多的就是用它定義全局常量




2.第二種Scriptlet:<%%>

使用<%%>定義,可以編寫語(yǔ)句,可以定義局部變量。類似Java的方法。

例 定義局部變量

<% int x=10; out.println(x ++);%>此時(shí)定義的是一個(gè)局部變量,局部變量每次調(diào)用的時(shí)候都會(huì)重復(fù)的聲明,所以JSP刷新顯示內(nèi)容是不會(huì)改變的,永遠(yuǎn)是10。

例 編寫語(yǔ)句

<% out.println("<table border=/"1/">"); for(int x=1;x<9;x++){ out.println("<tr>"); for(int y=1;y<=x;y++){ out.println("<td>"+x+"*"+y+"="+x*y+"</td>"); } out.println("</tr>"); } out.println("</table>");%>今后JSP開發(fā)中,使用最多的都是“<%%>”,所有的語(yǔ)句幾乎都在此處。




3.第三種Scriptlet<%=%>

此種Scriptlet的主要功能是進(jìn)行變量或常量?jī)?nèi)容輸出。

例 觀察使用

<%! public static final String MESSAGE="Hello World";%><% int num=10;%><h1><%=MESSAGE%></h1><h1><%="World"%></h1><h1><%=num%></h1>此時(shí)功能和out.println()類似。

疑問?現(xiàn)在輸出有2種方式,使用哪種呢?

發(fā)現(xiàn)out.println()可以輸出,使用<%=%>也可以輸出。

一般而言在進(jìn)行輸出的時(shí)候,重點(diǎn)輸出的是程序的計(jì)算結(jié)果(是變量,而不是HTML),所有的HTML輸出最終都會(huì)變?yōu)閛ut.println()完成,在使用的時(shí)候往往就不會(huì)再通過out.println()輸出HTML代碼,所有的HTML代碼直接編寫,只在需要輸出Java程序的地方使用“<%=%>”。

例 利用<%=%>輸出頁(yè)面

<table border="1"><% for(int x=1;x<9;x++){%> <tr><% for(int y=1;y<=x;y++){%> <td><%=x%> * <%=y%> = <%=x*y%> </td><% }%> </tr><% } %></table>此時(shí)代碼實(shí)現(xiàn)了HTML代碼與JAVA程序的分離,唯一的缺點(diǎn)是增加了許多Scriptlet代碼塊。

今后開發(fā)請(qǐng)不要使用out.pringtln(),全部使用<%=%>代替。




【page指令】

page指令提供的選項(xiàng)非常多,隨著時(shí)間推移和開發(fā)的標(biāo)準(zhǔn)化,重點(diǎn)的選項(xiàng)就只有2個(gè)了:解決顯示亂碼和導(dǎo)包。

1.解決顯示編碼問題

如果在頁(yè)面之中直接編寫中文,顯示的時(shí)候會(huì)出現(xiàn)亂碼,這是因?yàn)闉g覽器中默認(rèn)使用的編碼是ISO8859-1,如果用戶沒有指定編碼,那么就采用默認(rèn)的方式處理。

編碼設(shè)置可以用pageEncoding屬性來完成。

例 設(shè)置編碼

<%@page pageEncoding="GBK" language="java"%><h1>這是測(cè)試頁(yè)面</h1>page指令之中還有l(wèi)anguage屬性,表示操作的語(yǔ)言?,F(xiàn)在有且只有Java。

請(qǐng)注意:編碼一定只能設(shè)置一次。




2.設(shè)置MIME類型

除了以上方式設(shè)置編碼之外,也可以采用MIME類型設(shè)置編碼,不過此類方式比較少見了。

例 解決亂碼

<%@page contentType="text/HTML;charset=GBK"%><h1>這是測(cè)試頁(yè)面</h1>如果contentType寫錯(cuò)了,就會(huì)出現(xiàn)下載框(這種情況以前經(jīng)常會(huì)遇到)。

MIME是Internet媒體訪問標(biāo)準(zhǔn),指的是程序的處理方式是什么。

打開conf/web.xml觀察里面支持的MIME類型,在其中可以發(fā)現(xiàn)多種文件的處理形式,例如:word

<mime-mapping> <extension>doc</extension> <mime-type>application/msword</mime-type></mime-mapping>以上word的處理形式是 “application/msword”。

<%@page pageEncoding="GBK" contentType="application/msword"%>此時(shí)頁(yè)面就會(huì)按照word風(fēng)格運(yùn)行,如果使用的是IE會(huì)自動(dòng)彈出下載提示,可以把結(jié)果以word形式下載保存。

除了這種風(fēng)格之外,還有可能使用CSS(text/css),javascript(application/javascript)。

問題:我們發(fā)現(xiàn)網(wǎng)頁(yè)后綴可以使*.htm可以是*.html,從專業(yè)的角度解釋,這2種文件處理的MIME是完全相同的。

<mime-mapping> <extension>htm</extension> <mime-type>text/html</mime-type></mime-mapping><mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type></mime-mapping>可以發(fā)現(xiàn),web.xml文件中htm和html后綴處理的MIME是完全相同的。




3.導(dǎo)包操作

程序開發(fā)過程中一定會(huì)有導(dǎo)包操作,如果要想在JSP程序中導(dǎo)入包,那么只能使用page指令中的import完成。同時(shí),import是page指令中唯一一個(gè)可以多次出現(xiàn)的選項(xiàng)。

例 導(dǎo)包操作

<%@page pageEncoding="GBK" %><%@page import="java.io.*,java.net.*"%><%@page import="java.util.*"%><%@page import="java.text.*"%><h1><%=new SimpleDateFormat("yyyy-MM-dd").format(new Date())%></h1>既然頁(yè)面可以導(dǎo)入開發(fā)包,那么也一定可以導(dǎo)入sql包,進(jìn)行數(shù)據(jù)庫(kù)的連接操作。下面實(shí)現(xiàn)數(shù)據(jù)讀取。

<%@page pageEncoding="GBK"%><%@page import="java.sql.*"%><%!//定義數(shù)據(jù)庫(kù)連接的常量信息 public static final String DBURL="jdbc:sqlserver://1.25.13.8:1433;DatabaseName=test"; public static final String DBDRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver"; public static final String DBUSER="test"; public static final String DBPASSWORD="test";%><% //定義所需要的對(duì)象 Connection conn; PreparedStatement pstmt; ResultSet rs;%><%//進(jìn)行數(shù)據(jù)庫(kù)連接操作 String sql=" select swname,swdescription,swtype from [QND_White] "; Class.forName(DBDRIVER); conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD); pstmt=conn.prepareStatement(sql); rs=pstmt.executeQuery();%><center><table border="1" width="90%"> <tr> <td>名稱</td> <td>描述</td> <td>類型</td> </tr><%//讀取數(shù)據(jù) while(rs.next()){ String swname=rs.getString(1); String swdescription=rs.getString(2); String swtype=rs.getString(3);%> <tr> <td><%=swname%></td> <td><%=swdescription%></td> <td><%=swtype%></td> </tr><% }%></table></center><% //關(guān)閉數(shù)據(jù)庫(kù)連接 conn.close();%>今后可以利用JSP程序直接與數(shù)據(jù)庫(kù)進(jìn)行交互。




【include-導(dǎo)入(包含)指令】

一般項(xiàng)目之中,每個(gè)頁(yè)面基本都會(huì)由如下的結(jié)構(gòu)組成:

一般而言,每個(gè)頁(yè)面之中的工具條,頭部信息、尾部信息的代碼都是固定的,所以開發(fā)上就有2種做法:

很明顯,使用第二種做法更加適合于代碼的維護(hù),在JSP之中就提供有2種包含的指令:靜態(tài)導(dǎo)入<%@include%>、動(dòng)態(tài)導(dǎo)入<jsp:include>。




1.靜態(tài)包含<%@include%>

此類語(yǔ)法是靜態(tài)包含的操作,可以包含任何的文件信息,

<%@include file="路徑"%>為了方便,下面首先建立3個(gè)文件。

<h1>content.htm</h1><h1>content.jsp</h1><h1>content.inc</h1>例 實(shí)現(xiàn)導(dǎo)入操作

<%@ page pageEncoding="GBK"%><%@include file="content.jsp"%><%@include file="content.htm"%><%@include file="content.inc"%>執(zhí)行后發(fā)現(xiàn)所有內(nèi)容會(huì)合在一起顯示。




2.動(dòng)態(tài)導(dǎo)入<jsp:include>

此類語(yǔ)法形式與HTML元素(標(biāo)簽)很相似,被統(tǒng)一稱為標(biāo)簽指令。標(biāo)簽指令有一個(gè)最大的特征:標(biāo)簽必須完結(jié)。

動(dòng)態(tài)導(dǎo)入指令可以區(qū)分導(dǎo)入的資源是靜態(tài)文件還是動(dòng)態(tài)文件(*.jsp),所以語(yǔ)法也分為2種:

<jsp:include page="路徑"> <jsp:param name="參數(shù)名稱" value="參數(shù)內(nèi)容"/> <jsp:param name="參數(shù)名稱" value="參數(shù)內(nèi)容"/> ......</jsp:include>例 導(dǎo)入靜態(tài)文件--與<%@include%>相同

<%@ page pageEncoding="GBK"%><jsp:include page="content.jsp"/><jsp:include page="content.htm"/><jsp:include page="content.inc"/>此時(shí)的效果與之前靜態(tài)導(dǎo)入完全相同,沒有任何區(qū)別。但是使用<jsp:include>導(dǎo)入文件時(shí),如果導(dǎo)入的時(shí)動(dòng)態(tài)文件,那么可以傳遞參數(shù),所有的參數(shù)都使用request.getParameter()進(jìn)行接收。

例 定義一個(gè)可以接收參數(shù)的導(dǎo)入頁(yè)-param.jsp

<%@ page pageEncoding="GBK"%><h1>傳遞參數(shù)<%=request.getParameter("username")%></h1><h1>傳遞參數(shù)<%=request.getParameter("password")%></h1>本頁(yè)面規(guī)定好了所需要傳遞的參數(shù)內(nèi)容,后面進(jìn)行導(dǎo)入操作。

例 定義導(dǎo)入頁(yè)面--include_demo.jsp

<%@ page pageEncoding="GBK"%><h1>Hello World!</h1><jsp:include page="param.jsp"> <jsp:param name="username" value="Tom"/> <jsp:param name="password" value="123456"/></jsp:include>需要特別注意的是,這種標(biāo)簽指令類似HTML代碼,是不可能寫在Scriptlet之中的。如果現(xiàn)在要想傳遞一個(gè)變量的數(shù)據(jù)到被包含頁(yè)面,那么就只能夠利用表達(dá)式輸出了。

<%@ page pageEncoding="GBK"%><h1>Hello World!</h1><% String str="123456";%><jsp:include page="param.jsp"> <jsp:param name="username" value="Tom"/> <jsp:param name="password" value="<%=str%>"/></jsp:include>目前傳遞變量采用的是表達(dá)式輸出,以后會(huì)有其他形式。

面試題:靜態(tài)導(dǎo)入和動(dòng)態(tài)導(dǎo)入的區(qū)別

如果要想完成導(dǎo)入操作,有2類語(yǔ)法支持,實(shí)際之中使用哪種會(huì)更好呢?

下面做一個(gè)測(cè)試

例 定義個(gè)note.jsp頁(yè)面

<%@ page pageEncoding="GBK"%><% int num=10;%><h1>note.jsp,num=<%=num%></h1>例 使用靜態(tài)導(dǎo)入

<%@ page pageEncoding="GBK"%><%@include file="note.jsp"%><% int num=2;%><h1>包含頁(yè),num=<%=num%></h1>此時(shí)出現(xiàn)語(yǔ)法錯(cuò)誤,直接提示變量num重復(fù)(Duplicate local variable num)。

結(jié)論:靜態(tài)導(dǎo)入采用的是先導(dǎo)入然后處理的形式完成。

需要注意的是使用動(dòng)態(tài)導(dǎo)入本身也包含靜態(tài)導(dǎo)入的功能,但是其處理的效果不同:如果是靜態(tài)文件與之前的一樣,如果是動(dòng)態(tài)文件則采用先處理后導(dǎo)入結(jié)果。

例 使用動(dòng)態(tài)導(dǎo)入

<%@ page pageEncoding="GBK"%><jsp:include page="note.jsp"/><% int num=2;%><h1>包含頁(yè),num=<%=num%></h1>結(jié)果如下:

結(jié)論:

1.靜態(tài)導(dǎo)入語(yǔ)法

<%@include file="路徑"%>2.動(dòng)態(tài)導(dǎo)入語(yǔ)法

<jsp:include page="路徑"> <jsp:param name="參數(shù)名稱" value="參數(shù)內(nèi)容"/> <jsp:param name="參數(shù)名稱" value="參數(shù)內(nèi)容"/> ......</jsp:include>


【forward-跳轉(zhuǎn)指令】

由一個(gè)頁(yè)面轉(zhuǎn)到另外一個(gè)頁(yè)面的操作。跳轉(zhuǎn)指令也有2種方式

<jsp:forward page="路徑"> <jsp:param name="參數(shù)名稱" value="參數(shù)內(nèi)容"/> <jsp:param name="參數(shù)名稱" value="參數(shù)內(nèi)容"/> ......</jsp:forward>例 實(shí)現(xiàn)跳轉(zhuǎn)操作--跳轉(zhuǎn)到param.jsp頁(yè)

<%@page pageEncoding="GBK"%><h1>Hello World</h1><jsp:forward page="param.jsp"> <jsp:param name="username" value="Jacky"/> <jsp:param name="password" value="123456"/></jsp:forward>此時(shí)可以發(fā)現(xiàn)頁(yè)面的內(nèi)容實(shí)現(xiàn)了跳轉(zhuǎn),但是路徑?jīng)]有發(fā)生任何的改變,這種跳轉(zhuǎn)稱為服務(wù)器端跳轉(zhuǎn)

而改變路徑的跳轉(zhuǎn)就是客戶端跳轉(zhuǎn),例如:window.location。





關(guān)鍵詞:語(yǔ)法

74
73
25
news

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

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