我的資料

dr_lou發表於2007-03-20

 使用<%! %>方式所宣告的變數為全域性變數,即表示:若同時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是否轉換特殊字元,如設定為真,預設會將<,>,、等字元轉換成&lt等;
<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=${d}/>

--訊息     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"); 

相關文章