使用<%! %>方式所聲明的變量為全局變量,即表示:若同時n 個用戶在執行此JSP網頁時,
將會共享此變量。因此筆者強烈建議讀者,千萬別使用<%! %>來聲明您的變量。
若要聲明變量時,請直接在<% %>之中聲明使用即可。
----------------------------------------------------------------------------------
有時候,我們想要讓網頁自己能自動更新,因此,須使用到Refresh 這個標頭。舉個例子,我
們告訴瀏覽器,每隔三分鐘,就重新加載此網頁:
response.setIntHeader("Refresh" , 180)
如果想要過十秒后,調用瀏覽器轉到
http://Server/Path 的網頁時,可用如下代碼:
response.setHeader("Refresh","10; URL=http://Server/Path" )
如果大家對HTML 語法還熟悉,則HTML 語法中也有類似的功能:
<META HTTP-EQUIV="Refresh" CONTENT=" 10; URL=http://Server/Path" >
上述兩種方法皆可以做到自動重新加載。
----------------------------------------------------------------------------------
jsp隱式對象
輸入輸出對象 out request response
作用域通訊對象 session application pagecontext
servlet對象 page config
錯誤對象 exception
----------------------------------------------------------------------------------
servlet:
request.setAttribute("articleComment",articleCommentArrayList);
RequestDispatcher dispatcher = request.getRequestDispatcher("pages/delcomment.jsp");
jsp:
ArrayList articletypeArrayList = (ArrayList)request.getAttribute("articleType");
----------------------------------------------------------------------------------
jsp標準動作
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:include
jsp:forword
jsp:parm
----------------------------------------------------------------------------------
<button name="but" onclick="document.form1.submit()">提交</button>
location.href="abc.htm"; 跳到另一頁 也可刷新本頁
----------------------------------------------------------------------------------
Core 主要
表達式操作:out ,set ,remove,catch等;
流程控制:if choose when otherwise
迭代操作:forEach forTokens
前提條件是用taglib 引入核心標簽庫
--------------------------------------------------------------------------------------
表達式操作
-------------------------------------------
<c:out>不可以不帶主體
<c:out value=需要顯示的內容 default=如果value的值為空,則顯示default的值 escapeXml是否轉換特殊字符,如設定為真,默認會將<,>,、等字符轉換成<等;
<c:out value ="<p>有特殊字符</p>">
<c:out value ="<p>有特殊字符</p> escapeXml="false" ">
<c:set>將變量存貯在JSP范圍內或javabean中
-------------------------------------------
<c:set>
可以帶主體也可以不帶
<c:set value="要存在變量中的值" var scope=默認page/>
<c:set var scope>主體中的內容存在變量中 </c:set>
<c:set value ="要存在對象中的值" target="javabean的對象" property="屬性名"/>
<c:set target="javabean的對象" property="屬性名">
主體中的內容存在對象中 </c:set>
<c:set var="num"> 1+1 </c:set>
-------------------------------------------
<c:remove var="要移出的變量名" scope可有可無> 如果不寫scope就會按照page->request->session->application的范圍順序依次刪除
-------------------------------------------
<c:catch>主要將可能發生的錯誤放在<c:catch>和</c:catch>之間
如果真的發生錯誤將把錯誤信息存貯在var中
<c:catch var="errorMessage">
<% String str="no number" ; int i=Integer.parseInt(str);%>
</catch>
${errorMessage}
-------------------------------------------
流程控制<c:if> <c:choose> <c:when> <c:otherwise>
--------------------------------------------------------------------------------------
<c:if test(必須有test屬性)="測試條件" var="用來存儲test后的結果">
當條件為真時,執行主體內容
</c:if>
<c:if test="{param.username}=='admin'" var="con" >
您好,admin
</c:if>
${con}
執行的時候在jsp的后面直接加上?username=admin
-------------------------------------------
<c:choose>本身只當作<c:when>和<c:otherwise>的父標簽
<c:choose></c:choose>主體內容為
1.空白
2.1或多個<c:when>
3.0個或1個<c:otherwise>,<c:when>必須在<c:otherwise>之前
<c:when test="必須的測試條件">
-------------------------------------------
<c:forEach>為循環控制,它可以將集合(Collection)中的成員按循序瀏覽一遍,當條件符合時,就會繼續;
var用于存放現在指到的成員;String
varstatus用來存放現在知道的相關成員的信息 String
例如:varstatus="a"
則a還有四個屬性,index,count,first和last
index:number 現在指到的成員的索引
count:number 總共指到的成員的總數
first:boolean 現在指到的成員是否是第一個成員
last:boolean 現在指到的成員是否為最后一個成員
items 被迭代的集合對象,包括:Arrays Collection Iterator Enumeration Map String
begin開始的位置int
end結束的位置int
step每次迭代的間隔數int
限定begin如果有必須大于0,end必須大于begin
step必須大于等于1
<%
String a[]= new String[3];
a[0]="hello ";
a[1]="this";
a[2]=" is a test";
request.setAttribute("att",a);
%>
<c:forEach items="${"att"}" var="items" varStatus="s">
${item}
item有效范圍在foreach中
index:${s.index}
count:${s.count}
first:${s.first}
last:${s.last}
</c:forEach>
不同的begin和end的設置輸出不一樣
-------------------------------------------
<c:forTokens>
</c:forTokens>用來瀏覽一字符串中所有的成員,其成員定義由定義符號來分隔
delims定義用來分隔字符串的字符
<c:forEach>也可以分隔字符串,但不能設定分隔符
<c:forEach items="a,b,c,d" var="item">
${item}
</c:forEach>
<c:forToken items="a,b,c,d" var="item" delims=",">
${item}
</c:forEach>
<c:forToken items="123-456-789" var="item" delims="-">
${item}
</c:forEach>
-------------------------------------------
此外,筆者還使用<c:set>來傳遞值給Core_import.jsp,這就是<c:param>無法做到的動作,
<c:param>只能從包含端拋給被包含端,但是在屬性范圍中,可以讓包含端也能得到被包含端傳來的
數據
-------------------------------------------
國際化與格式化標簽庫 I18N
重寫客戶端的區域設置
<fmt:setLocale value="語言與國家代碼" variant="瀏覽器變量" scope="page|request|session|application"/>
區域代碼 區域,語言
en 英文
en_US 英文(美國)
zh_TW 中文(臺灣)
zh_CN 中文(中國)
de_CH 瑞士,德國樣式
創建一個I18N本地化上下文,并將資源包加載到其中
<fmt:bundle basename="無擴展名的資源文件名">Body</fmt:bundle>
創建一個I18N本地化上下文,并存在范圍變量里
<fmt:setBundle basename="無擴展名的資源文件名" var="指定導出的范圍變量的名稱" scope="page|request|session|application"/>
給出資源包的輸出值
<fmt:message key="消息關鍵字"/>
格式化數字
<fmt:formatNumber value="要格式化的數字" type="格式類型" minFractionDigits="小數點后保留幾位"/>
格式化時間
<fmt:formatDate value=""/>
-------------------------------------------
JSTL中最重要的就是國際化格式(I18N)的支持,此功能可以對一個特定的語言請求作出合適的響應。
不同的國家有不同的數據顯示格式。如數字356987.589,在法國為356 987,589
在德國356.987,589 在美國356,987.589
I18N格式符主要包含:國際化,消息,數字日期格式化。
詳細分類:
國際化setLocale
requestEncoding:用來設定字符串編碼,功能和ServletRequest.setCharacterEncoding()相同
<fmt:setLocale value="一定要有value屬性,設定地區代碼。其中最少有兩個字符的語言代碼如zh ,en 然后再加上兩個字母的國家和地區代碼,用-或_連接" varitant="瀏覽器或供應商,如WIN,Mac" >
<%Date n= new Date();
request.setAttribute("d",n);
%>
<fmt:setLocale value="zh_CN"/><fmt:formatDate value=$bdxzdbb/>
--消息 bundle message param setBundle
抓取系統設定的語系資源,作為國際化信息.通過建立存放國際化信息的數據來源.建立propertie文件,并存儲在we-inf/classes目錄下
寫的時候必須依照key=value
MyResource.properties
str1=hello
str2=My name is Bunny
<fmt:bundle basename="basename" prefix="屬性的前綴">
basename是設定要使用的數據源,千萬不可有任何的文件類型即擴展名,如.class,或.properties
prefix是前置關鍵字,如當如下的propertites:
requestinfo.label.method=Method;
requestinfo.label.requesturi=URI;
requestinfo.label.protocol=Protocol;
我們就可以用以下方法打開
<fmt:bundle basename="MyResource" prefix="requestinfo.label.">
<fmt:message key="protocol"/>
<fmt:message key="method"/>
</fmt:bundle>
<fmt:message>會從指定的資源中把特定的關鍵字的值抓取出來。
<fmt:setbundle>設定默認的數據源
<fmt:setbundle basename="" var="存儲資源的名稱">
<fmt:setbundle>和<fmt:bundle>都可以和<fme:setLocale>搭配使用.多種語言源時,可以將文件名取成如書上例子所示的,當語言取成zh_TW時,它默認去找MyResource_zh_TW.properties作為數據源,如果設定的區域沒有符合的文件名,將會使用MyResource.properties 來作為數據源。
如是中文的資源文件,它的內容大部分是Unicode的符號,他們都代表一些中文字,在執行jsp時,會出現亂碼,無法正常顯示中文;
--------------------------------------------------------------------------------------
SQL標簽庫
1.設置數據源
<sql:setDataSource driver="驅動的名字'sun.jdbc.odbc.JdbcOdbcDriver'" url="jdbc:odbc:blog" var="conn"/>
2.用事務建表
<sql:transaction dataSource="${conn}">
<sql:update var="newTable">
sql語句來見表
</sql:update>
</sql:transaction>
3.插入記錄
<sql:update var="newRow" dataSource="${conn}">
insert into tablename values(?,?,?)
<sql:param value=""/>
<sql:param value=""/>
</sql:update>
4.查詢記錄
<sql:query var="rs" dataSource="${conn}">
select * from tablename
</sql:query>
5.用表格顯示記錄
<table border="1">
<tr>
<c:forEach var="columnName" items="${rs.columnNames}">
<th>
<c:out value="${columnName}"/>
</th>
</c:forEach>
</tr>
<c:forEach var="row" items="${rs.rowsByIndex}">
<tr>
<c:forEach var="column" items="${row}">
<td>
<c:out value="${column}"/>
</td>
</c:forEach>
</tr>
</c:forEach>
</table>
--------------------------------------------------------------------------------------
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test {
public static void main(String[] argv) {
//返回一個當前日期和時間的Calendar
Calendar curDate = Calendar.getInstance();
//返回今天夜里零時的Calendar(這里不明白看API)
Calendar tommorowDate = new GregorianCalendar(curDate
.get(Calendar.YEAR), curDate.get(Calendar.MONTH), curDate
.get(Calendar.DATE) + 1, 0, 0, 0);
//一天24小時當中,當前過了多少毫秒(用一天24小時的毫秒數減去一天剩余時間的毫秒數)
System.out.println((60*60*24*1000-(tommorowDate.getTimeInMillis() - curDate
.getTimeInMillis())));
}
}
--------------------------------------------------------------------------------------
轉換成時間
DateFormat format = new SimpleDateFormat("H:dd");
Date date = format.parse("8:00");
加上20分鐘,如果是減去20分鐘的話用-20
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, 20);
--------------------------------------------------------------------------------------
11.JSP中動態INCLUDE與靜態INCLUDE的區別?
動態INCLUDE用jsp:include動作實現
它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且可以帶參數
靜態INCLUDE用include偽碼實現,定不會檢查所含文件的變化,適用于包含靜態頁面
--------------------------------------------------------------------------------------
int i=100;
String binStr=Integer.toBinaryString(i);
String otcStr=Integer.toOctalString(i);
String hexStr=Integer.toHexString(i);
System.out.println(binStr);
System.out.println(otcStr);
System.out.println(hexStr);
--------------------------------------------------------------------------------------
Calendar date=Calendar.getInstance();
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
String name=format.format(date.getTime());
--------------------------------------------------------------------------------------
使用WEB容器捕獲異常進行處理,在web.xml文件頭部加上:
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/system_error.jsp</location>-----出錯后轉向system_error.jsp頁面
</error-page>
<error-page>
<error-code>404</error-code>
<location>/system_error.jsp</location>-----出錯后轉向system_error.jsp頁面
</error-page>
<error-page>
<error-code>400</error-code>
<location>/system_error.jsp</location>-----出錯后轉向system_error.jsp頁面
</error-page>
<error-page>
<error-code>500</error-code>
<location>/system_error.jsp</location>-----出錯后轉向system_error.jsp頁面
</error-page>
--------------------------------------------------------------------------------------
Java 運行 記事本
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("notepad");
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1535545