|
2006年4月30日
struts2的s:iterator 可以遍歷 數(shù)據(jù)棧里面的任何數(shù)組,集合等等 以下幾個簡單的demo: s:iterator 標簽有3個屬性: value:被迭代的集合 id :指定集合里面的元素的id status 迭代元素的索引
1:jsp頁面定義元素寫法 數(shù)組或list
<s:iterator value="{'1','2','3','4','5'}" id='number'> <s:property value='number'/>A </s:iterator> 打印結(jié)果為: 1A2A3A4A5A
2:索引的用法 如果指定了status,每次的迭代數(shù)據(jù)都有IteratorStatus的實例,它有以下幾個方法 int getCount()返回當前迭代了幾個元素 int getIndex()返回當前元素索引 boolean isEven()當然的索引是否偶數(shù) boolean isFirst()當前是否第一個元素 boolean isLast() boolean isOdd()當前元素索引是否奇數(shù)
<s:iterator value="{'a','b','c'}" id='char' status='st'> <s:if test="#st.Even"> 現(xiàn)在的索引是奇數(shù)為:<s:property value='#st.index'/> </s:if> 當前元素值:<s:property value='char'/> </s:iterator> 3:遍歷map value可以直接定義為:
value="#{"1":"a","2":"b"}" 每個元素以都好隔開。元素之間的key和value 冒號隔開 value也可以是數(shù)據(jù)棧里面的java.util.Map對象 遍歷寫法如下:
<s:iterator value="map" id="id" status="st"> key : <s:property value='key'/> value:<s:property vlaue='value'/> </s:iterator> 當然key 和value 都可以使java 的 Object
3:遍歷數(shù)據(jù)棧.簡單的List類, List<Attr> class Attr{String attrName;String getAttrName(){return "123";}}
<s:iterator value="label" id="id"> <s:property value="#id.attrName" /> </s:iterator> 當然value 還可以寫成 value="%{label}" label可以有.操作 label的屬性List 可以寫成value="%{label.list}" 相當于:getLabel().getList();
4:遍歷2個list; List<AttrName> attrN {color,size,style} List<AttrValue> attrV {red,20,gay} 這2個list的元素是一一對應(yīng)的,一個attrN對應(yīng)一個attrV
< s:iterator value="%{attrN }" id="id" status="status"> index is : <s:property value='status.index'/> attrName is : <s:property value='id'/> or <s:property value='%{id}'/> attrName is : <s:property value='%{attrV[#status.index]}'/> </ s:iterator> 轉(zhuǎn)自: http://www.aygfsteel.com/Reg/archive/2009/11/20/303085.html
點擊“開始→運行”,在彈出的“運行”對話框中輸入“REGSVR32 /n /i:u shell32”(不含雙引號),然后回車,片刻后會彈出“shell32中的DllInstall成功”對話框,“顯示桌面”按鈕就可以完美歸來了
摘要: HTML字符實體(Character Entities),轉(zhuǎn)義字符串(Escape Sequence)
為什么要用轉(zhuǎn)義字符串?
HTML中<,>,&等有特殊含義(<,>,用于鏈接簽,&用于轉(zhuǎn)義),不能直接使用。這些符號是不顯示在我們最終看到的網(wǎng)頁里的,那如果我們希望在網(wǎng)頁中顯示這些符號,該怎么辦呢?
這就要說到HTML轉(zhuǎn)義字符串(Esca... 閱讀全文
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jazzlib.ZipEntry;
import net.sf.jazzlib.ZipOutputStream;
public class BatchDownload extends HttpServlet {
public BatchDownload() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename="+this.getZipFilename());
System.out.println("in BatchDownload................");
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
File[] files = new File[2];
files[0]=new File("c:/zip/文件A.doc");
files[1]=new File("c:/zip/文件B.doc");
zipFile(files, "", zos);
zos.flush();
zos.close();
}
private void zipFile(File[] subs, String baseName, ZipOutputStream zos) throws IOException {
for (int i=0;i<subs.length;i++) {
File f=subs[i];
zos.putNextEntry(new ZipEntry(baseName + f.getName()));
FileInputStream fis = new FileInputStream(f);
byte[] buffer = new byte[1024];
int r = 0;
while ((r = fis.read(buffer)) != -1) {
zos.write(buffer, 0, r);
}
fis.close();
}
}
private String getZipFilename(){
Date date=new Date();
String s=date.getTime()+".zip";
return s;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
將listener.ora中的(PROGRAM = extproc)這句注釋掉就可以了。去網(wǎng)上找過,extproc是一個擴展的程序調(diào)用接口協(xié)議, 連接和調(diào)用外部的操作系統(tǒng)程序或進程用時會用到。
轉(zhuǎn)自:http://blog.csdn.net/chenjuntj2007/archive/2009/07/04/4321640.aspx
//創(chuàng)建臨時表空間
create temporary tablespace test_temp
tempfile 'E:\oracle\product\10.2.0\oradata\testserver\test_temp01.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
//創(chuàng)建數(shù)據(jù)表空間
create tablespace test_data
logging
datafile 'E:\oracle\product\10.2.0\oradata\testserver\test_data01.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
//創(chuàng)建用戶并指定表空間
create user username identified by password
default tablespace test_data
temporary tablespace test_temp;
//給用戶授予權(quán)限
grant connect,resource to username;
//以后以該用戶登錄,創(chuàng)建的任何數(shù)據(jù)庫對象都屬于test_temp 和test_data表空間,這就不用在每創(chuàng)建一個對象給其指定表空間了。
轉(zhuǎn)載:http://virgos.javaeye.com/blog/337976
struts2+spring2.x+hibernate3.x 懶加載異常:org.hibernate.LazyInitializationException: failed to lazily initialize
Hibernate的Lazy初始化1:n關(guān)系時,必須保證是在同一個Session內(nèi)部使用這個關(guān)系集合,不然Hiernate將拋出異常:org.hibernate.LazyInitializationException: failed to lazily initialize of....
兩種處理方法:
一、設(shè)置lazy=false,此方法不再累述。
二、用OpenSessionInViewFilter過濾器,注意hibernateFilter過濾器和struts2過濾器在映射時的先后順序。同時要配置事物處理,否則會導(dǎo)致session處于只讀狀態(tài)而不能做修改、刪除的動作。
即在web.xml文件中如下配置:
<!-- Spring ApplicationContext配置文件的加載目錄。 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext.xml</param-value>
</context-param>
<!-- 解決延遲加載的問題 -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<!-- 繼承Struts2的FilterDispatcher類,具備GBK等編碼設(shè)定功能與struts2的action過濾功能。 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
com.iman.nrms.opm.web.common.FilterDispatcher
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Hibernate 允許對關(guān)聯(lián)對象、屬性進行延遲加載,但是必須保證延遲加載的操作限于同一個 Hibernate Session 范圍之內(nèi)進行。如果 Service 層返回一個啟用了延遲加載功能的領(lǐng)域?qū)ο蠼o Web 層,當 Web 層訪問到那些需要延遲加載的數(shù)據(jù)時,由于加載領(lǐng)域?qū)ο蟮?Hibernate Session 已經(jīng)關(guān)閉,這些導(dǎo)致延遲加載數(shù)據(jù)的訪問異常。而Spring為我們提供的OpenSessionInViewFilter過濾器為我們很好的解決了這個問題。OpenSessionInViewFilter的主要功能是使每個請求過程綁定一個 Hibernate Session,即使最初的事務(wù)已經(jīng)完成了,也可以在 Web 層進行延遲加載的操作。OpenSessionInViewFilter 過濾器將 Hibernate Session 綁定到請求線程中,它將自動被 Spring 的事務(wù)管理器探測到。所以 OpenSessionInViewFilter 適用于 Service 層使用HibernateTransactionManager 或 JtaTransactionManager 進行事務(wù)管理的環(huán)境,也可以用于非事務(wù)只讀的數(shù)據(jù)操作中。
request-->open session-->打開連接、開始事務(wù)-->持久操作-->渲染(關(guān)閉連接、session)-->response 其中一些過程省略了,不是很關(guān)心。
引自:http://blog.csdn.net/fhwbj/archive/2009/03/25/4022805.aspx
1、選擇Help -> Software Updates -> Find and Install...-> Search for new features to install ->New remote site...
Name: "Spket", Url: "http://www.spket.com/update/"下載完畢重啟 Eclipse
2、Window -> Preferences -> Spket -> JavaScript Profiles -> New ;
輸入“ExtJS”點擊OK;
選擇“ExtJS” 并點擊“Add Library”然后在下拉條中選取“ExtJS”;
選擇 “ExtJS”并點擊“Add File”,然后在你的./ext-2.x/source目錄中選取“ext.jsb” 文件;
3、設(shè)置新的ExtJS Profile,選中并點擊“JavaScript Profiles” 對話框右手邊的“Defalut”按鈕;
4、JS打開方式為 Window -> Preferences ->General-> Editors-> File...選擇JS 為 Spket JavaScript Editor(default)
半年前,報考了系統(tǒng)分析師,也沒怎么看書,只是抱著試試水有多深的想法去考的,結(jié)果既在我意料之中,也在我意料之外,得了個39/33/39,只差6/12/6分就可以通過了,尤其是論文,居然得了39分,看來還是有希望的,所以決定再次沖擊,并以此做為平臺,練習(xí)論文寫作,假如寫一篇論文就和寫一篇日記一樣手到擒來...........
SQL> select * from t1;
N1 V1 NID
---------- ---------- ----------
1 aa 61
2 aa 62
3 bb 83
4 aa 64
SQL> select exp(sum(ln(nid))) from t1 where v1='aa';
EXP(SUM(LN(NID)))
-----------------
242048
已用時間: 00: 00: 00.02
驗證一下:)
SQL> select 61*62*64 from dual;
61*62*64
----------
242048
已用時間: 00: 00: 00.00
先分組然后求積
SQL> select exp(sum(ln(nid))) from t1 group by v1;
EXP(SUM(LN(NID)))
-----------------
242048
83
oracle 這東東挺有意思.
轉(zhuǎn)自:http://blog.sina.com.cn/s/blog_54eeb5d901000ae5.html
Spring的依賴關(guān)系
|
依賴關(guān)系分組
|
JAR文件
|
說 明
|
ant
|
ant.jar, ant-junit.jar, ant-launcher.jar
|
Spring采用Apache Ant作為其構(gòu)建工具,還用來完成大量其它任務(wù)如文檔生成和測試執(zhí)行等。運行時Ant根本不起作用,因此發(fā)布應(yīng)用時無需包含該JAR文件。
|
aopalliance
|
aopalliance.jar
|
AOP Alliance(http://aopalliance.sourceforge.net/)是個聯(lián)合的開源協(xié)作組織,在多個項目間進行協(xié)作以期提供一套標準的AOP Java接口(interface)。 Spring AOP就是基于AOP Alliance標準API實現(xiàn)的。如果你打算使用Spring的AOP或基于AOP的任何特性,只需這個JAR文件。
|
axis
|
axis.jar, saaj.jar, wsdl4j.jar
|
Spring采用Apache Axis項目來支持Spring遠程調(diào)用里的JAXRPC功能。如果使用JAXRPC Remoting,那么只需要這些文件。
|
caucho
|
burlap-2.1.12.jar, hessian-2.1.12.jar
|
Spring遠程調(diào)用(remoting)對大量不同種類的協(xié)議包括Caucho的Burlap和Hessian提供了支持。要用哪個協(xié)議就包含這個分組里相應(yīng)的JAR文件。
|
cglib
|
cglib-full-2.0.2.jar
|
CGLIB用來生成動態(tài)代理類(dynamic proxy classes),供核心DI和AOP實現(xiàn)之用。由于大量Spring功能的實現(xiàn)都要用到CGLIB,因此你的應(yīng)用幾乎總需包含CGLIB。
|
cos
|
cos.jar
|
COS代表com.oreilly.servlet,是個實用類的集合,對Servlets和基于web的應(yīng)用很有用。Spring在兩個地方要用到COS:文件上傳處理和e-mail發(fā)送。不過在這兩種情形中,COS都只是實現(xiàn)選擇之一,因此只有選用COS而非其它實現(xiàn)方法時,才需包含cos.jar。
|
dom4j
|
dom4j.jar
|
使用Hibernate時dom4j不可或缺,因此如果你的應(yīng)用打算采用Hibernate實現(xiàn)ORM,就需要包含這個JAR文件。
|
easymock
|
easymock.jar, easymockclassextension.jar
|
Spring的測試套件用到了EasyMock,因此只有構(gòu)建和運行測試套件時才用到這個JAR,無需隨你的應(yīng)用一起發(fā)布。
|
freemarker
|
freemaker.jar
|
Spring提供了FreeMarker模板引擎的包裝類,還為把FreeMarker模板用作web應(yīng)用的視圖提供了支持。只要使用FreeMarker,就需要這個JAR文件。
|
hibernate
|
ehcache.jar, hibernate2.jar, odmg.jar
|
如果采用Spring的Hibernate集成和支持類,這些JAR文件不可或缺。如果使用其它ORM工具如iBATIS,則不需要這些JAR文件。如果使用Hibernate,則你的應(yīng)用還要包含CGLIB JAR文件。
|
hsqldb
|
hsqldb.jar
|
Spring的示例應(yīng)用使用了hsqldb.jar文件。
|
ibatis
|
ibatis-common.jar , ibatis-sqlmap.jar, ibatis-sqlmap-2.jar
|
使用Spring的iBATIS集成類時,這些文件不可或缺;如果使用JDBC或其它ORM工具如Hibernate或JDO,則你的應(yīng)用不需要這些文件。
|
itext
|
itext-1.02b.jar
|
Spring使用iText提供web層的PDF支持。只有你的web應(yīng)用需要生成PDF輸出時才需包含這個JAR文件。
|
j2ee
|
activation.jar, connector-api.jar, ejb.jar, jaxrpc.jar, jdbc2_0-stdext.jar, jms.jar, jstl.jar, jta.jar, mail.jar, servlet.jar, xml-apis.jar
|
如左側(cè)所示,J2EE相關(guān)的各種不同JAR文件數(shù)量相當可觀。如果你想要使用Spring郵件支持的JavaMail實現(xiàn),則需要activation.jar和mail.jar文件。要讓Hibernate使用JCA Connector則需connector-api.jar,使用Spring的EJB支持則需要ejb.jar,jms.jar用于Spring的JMS支持。對于web應(yīng)用,如果想要使用Spring JSTL支持則需要servlet.jar和jstl.jar。Spring遠程調(diào)用里的JAXRPC支持需要jaxrpc.jar文件,jta.jar用于JTA事務(wù)支持。剩下兩個JAR文件jdbc2_0-stdext.jar和xml-apis.jar分別用于JDBC和XML配置支持,不過只有你使用1.3版本的JVM時才需要它們。
|
jakarta
|
jakarta-commons commons-attributes-api.jar, commons-attributes-compiler.jar, commons-beanutils.jar, commons-collections.jar, commons-dbcp.jar, commons-digester.jar, commons-discovery.jar, commons-fileupload.jar, commons-lang.jar, commons-logging.jar, commons-pool.jar, commons- validator.jar
|
Spring使用了來自Jakarta Commons項目的大量組件。如果你想在應(yīng)用中使用源碼級元數(shù)據(jù)(metadata),就需要commons-attributes-api.jar,此外還需要commons-attributes-compiler.jar,以便將attributes編譯到應(yīng)用里。Struts要用到BeanUtils、Collections、Digester、Discovery,和Validator JAR文件,其中的Collections,Hibernate也會用到。使用DBCP連接池時,Spring JDBC支持要用到DBCP,Pooling則對有些示例應(yīng)用不可或缺。如果想使用相應(yīng)的Spring包裝類來處理web應(yīng)用的文件上傳,則需要FileUpload。最后,Spring處處用到了Logging,因此需在所有基于Spring的應(yīng)用里包含這個JAR文件。
|
jakarta-taglibs
|
standard.jar
|
這是Jakarta的JSTL實現(xiàn),一些Spring示例應(yīng)用使用了這個實現(xiàn)。
|
jboss
|
jboss-common-jdbc-wrapper.jar
|
運行在JBoss應(yīng)用服務(wù)器上的應(yīng)用使用Spring的JDBC類時,這個JAR文件不可或缺。
|
jdo
|
jdo.jar
|
提供Spring的JDO支持。
|
jdom
|
jdom.jar
|
在Spring里使用iBATIS 1.3時,JDOM不可或缺。本章介紹的iBATIS版本為2.0。
|
jotm
|
jotm.jar, xapool.jar
|
如果你打算配合Spring事務(wù)抽象層一起使用JOTM,jotm.jar文件不可或缺。如果打算在自己的應(yīng)用里將XAPool用于連接池(connection pooling),則只需xapool.jar。
|
junit
|
junit.jar
|
運行時根本不需要JUnit;它只用來構(gòu)建和運行測試套件。
|
log4j
|
log4j-1.2.8.jar
|
如果想要使用Spring配置log4j日志記錄,這個文件不可或缺。
|
poi
|
poi-2.5.jar
|
這個JAR可令Spring MVC框架支持Microsoft Excel輸出。
|
quartz
|
quartz.jar
|
Spring基于Quartz的調(diào)度支持需要該JAR。
|
regexp
|
Jakarta-oro-2.0.7.jar
|
使用正則表達式來指定AOP的切入點(pointcut)時需要這個JAR。第六章有更詳細的介紹。
|
struts
|
struts.jar
|
欲配合Spring使用Struts構(gòu)建web應(yīng)用,Struts JAR必不可少。
|
velocity
|
velocity-1.4.jar, velocity-tools-generic-1.1.jar
|
Spring提供了Velocity的包裝類使其支持DI,同時當你在應(yīng)用中使用Velocity時,還可減少需要編寫的代碼量。除此之外,Spring還提供了一些類,支持將Velocity用作web層里的視圖提供者(view provider)。只要使用了上述任意特性,都需在發(fā)布里包含Velocity JAR文件。
|
xdoclet
|
xjavadoc-1.0.jar
|
Commons Attributes用這個JAR解析源代碼文件,然后提取屬性信息。如果使用了Spring Commons Attributes支持,須包含該JAR文件。
|
<a target=_self href="javascript:goUrl()"> <span class="f14b"> <script type="text/javascript"> imgUrl1="/images/1.jpg"; imgtext1="ite" imgLink1=escape(" http://www.aygfsteel.com/linlin2005"); imgUrl2="/images/2.jpg"; imgtext2="ite" imgLink2=escape(" http://www.aygfsteel.com/linlin2005"); imgUrl3="/images/3.jpg"; imgtext3="ite" imgLink3=escape(" http://www.aygfsteel.com/linlin2005"); imgUrl4="/images/4.jpg"; imgtext4="ite" imgLink4=escape(" http://www.aygfsteel.com/linlin2005"); imgUrl5="/images/5.jpg"; imgtext5="ite" imgLink5=escape(" http://www.aygfsteel.com/linlin2005"); var focus_width=134 var focus_height=130 var text_height=30 var swf_height = focus_height+text_height var pics=imgUrl1+"|"+imgUrl2+"|"+imgUrl3+"|"+imgUrl4+"|"+imgUrl5 var links=imgLink1+"|"+imgLink2+"|"+imgLink3+"|"+imgLink4+"|"+imgLink5 var texts=imgtext1+"|"+imgtext2+"|"+imgtext3+"|"+imgtext4+"|"+imgtext5 document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6?0?0?0 width="'+ focus_width +'" height="'+ swf_height +'">'); document.write('<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="
http://www.webjx.com/js/focus.swf"><param name="quality" value="high"> <param name="bgcolor" value="#F0F0F0">'); document.write('<param name="menu" value="false"><param name=wmode value="opaque">'); document.write('<param name="FlashVars" value="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight=' +focus_height+'&textheight='+text_height+'">'); document.write('<embed src="pixviewer.swf" wmode="opaque" FlashVars="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight= '+focus_height+'&textheight='+text_height+'" menu="false" bgcolor="#F0F0F0" quality="high" width ="'+ focus_width +'" height="'+ focus_height +'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage=" </script> </span></a><span id=focustext class=f14b> </span>
有同事問到在程序中怎樣知道數(shù)據(jù)庫表中那些字段是主鍵。當時不知道,晚上回來看了看JDK的文檔。
在使用JDBC來查詢數(shù)據(jù)庫的時候,通常的步驟是:
1. 注冊驅(qū)動程序
2. 獲取數(shù)據(jù)庫連接
3. 執(zhí)行查詢語句
4. 關(guān)閉連接。
在獲得數(shù)據(jù)庫連接后,就可以通過getMetaData()方法來獲取DatabaseMetaData;然后通過DatabaseMetaData的getPrimaryKeys ()方法來獲取主鍵的信息。
下面是我做的示例程序,該程序在JBuilder2005+oracle8i下通過: import java.sql.*;
import javax.sql.*;
public class TestJDBC {
public TestJDBC() {
}
public static void main(String[] args) throws SQLException {
Connection con = null;
Statement st = null;
ResultSet rst = null;
try{
//注冊數(shù)據(jù)庫驅(qū)動程序
Class.forName("oracle.jdbc.driver.OracleDriver");
//獲取數(shù)據(jù)庫連接
con = DriverManager.getConnection("jdbc:oracle:thin:@10.60.203.80:1521:TestDB","123","123");
//獲取主鍵信息
rst = con.getMetaData().getPrimaryKeys(null,null,"USER");
//打印主鍵信息
if (!rst.isAfterLast()) {
rst.next();
System.out.println(rst.getString("TABLE_NAME") + " " +
rst.getString("COLUMN_NAME"));
}
}
catch (Exception e){
System.out.println(e.getLocalizedMessage());
}
finally{
try{
//關(guān)閉連接
if (rst != null)
rst.close();
if (con != null)
con.close();
}
catch (SQLException e){
throw e;
}
}
}
}
上面的程序中,在獲取主鍵信息的時候,語句
rst = con.getMetaData().getPrimaryKeys(null,null,"USER");
用來獲取主鍵信息。關(guān)于該函數(shù)的詳細信息,請參閱JDK的文檔。這里要說的是,在測試中發(fā)現(xiàn)第三個參數(shù)(數(shù)據(jù)庫表名)是大小寫敏感的,如果寫成user是查不到結(jié)果的。
引自:http://www.aygfsteel.com/afrag/
工作中需要在程序中彈出窗口,并且聲音報警。查了資料,發(fā)現(xiàn)很多都是在網(wǎng)頁中用的,在應(yīng)用程序中應(yīng)用的很少,解決問題之后,記錄下來。 private void play(String path){ try { FileInputStream sound_file=new FileInputStream(path);//獲得聲音文件 try { AudioStream AudioStream_sound=new AudioStream(sound_file); AudioData sound_data = AudioStream_sound.getData();//轉(zhuǎn)化的wav文件這句會報錯 ContinuousAudioDataStream sound_continue= new ContinuousAudioDataStream (sound_data);//循環(huán)播放 AudioPlayer.player.start(sound_continue);// Play audio. //System.out.println("Play music success!"); AudioPlayer.player.stop(sound_continue);// Stop audio. } catch (IOException e1) { // TODO Auto-generated catch block System.out.println("Play music fail!"); e1.printStackTrace(); } } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 注:1.這個程序段是應(yīng)用在應(yīng)用程序中,網(wǎng)頁中的聲音調(diào)用不適用。 2.聲音片段可以為au格式和wav格式,但是注意的是,如果是別的格式如mp3格式轉(zhuǎn)化過來的,則在AudioData sound_data = AudioStream_sound.getData();系統(tǒng)會報錯。 3.調(diào)用的時候,盡量用線程,這樣可以避免沖突。 引自: http://blog.sina.com.cn/u/53f7b6e401000a9w
<script language="Javascript"><!-- function document.oncontextmenu(){event.returnValue=false;}//屏蔽鼠標右鍵 function window.onhelp(){return false} //屏蔽F1幫助 function document.onkeydown() { if ((window.event.altKey)&& ((window.event.keyCode==37)|| //屏蔽 Alt+ 方向鍵 ← (window.event.keyCode==39))) //屏蔽 Alt+ 方向鍵 → { alert("不準你使用ALT+方向鍵前進或后退網(wǎng)頁!"); event.returnValue=false; } /* 注:這還不是真正地屏蔽 Alt+ 方向鍵, 因為 Alt+ 方向鍵彈出警告框時,按住 Alt 鍵不放, 用鼠標點掉警告框,這種屏蔽方法就失效了。以后若 有哪位高手有真正屏蔽 Alt 鍵的方法,請告知。*/
if ((event.keyCode==8) || //屏蔽退格刪除鍵 (event.keyCode==116)|| //屏蔽 F5 刷新鍵 (event.ctrlKey && event.keyCode==82)){ //Ctrl + R event.keyCode=0; event.returnValue=false; } if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11 if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽 Ctrl+n if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽 shift+F10 if (window.event.srcElement.tagName == "A" && window.event.shiftKey) window.event.returnValue = false; //屏蔽 shift 加鼠標左鍵新開一網(wǎng)頁 if ((window.event.altKey)&&(window.event.keyCode==115)) //屏蔽Alt+F4 { window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px"); return false; } } </script>
<script>
if (document.layers){
var larg=screen.availWidth-10;
var altez=screen.availHeight-20;}
else{
var larg=screen.availWidth+8;
var altez=screen.availHeight+7;}
self.resizeTo(larg,altez);
self.moveTo(-4,-4);
</script>
<script>
function sss(){
window.moveTo(-4,-4)
window.resizeTo(screen.availWidth+9,screen.availHeight+9)
}
</script>
<a href="#" onclick="sss()">最大化</a>
1 :連接池的必知概念 首先,我們還是老套的講講連接池的基本概念,概念理解清楚了,我們也知道后面是怎么回事了。 以前我們程序連接數(shù)據(jù)庫的時候,每一次連接數(shù)據(jù)庫都要一個連接,用完后再釋放。如果頻繁的數(shù)據(jù)庫操作,就會導(dǎo)致性能很低。連接池的出現(xiàn),為開發(fā)過程提供了一個很好的管理平臺。當程序中需要建立數(shù)據(jù)庫連接時,只須從內(nèi)存中取一個來用而不用新建。同樣,使用完畢后,只需放回內(nèi)存即可。而連接的建立、斷開都有連接池自身來管理。同時,我們還可以通過設(shè)置連接池的參數(shù)來控制連接池中的連接數(shù)、每個連接的最大使用次數(shù)等等。通過使用連接池,將大大提高程序效率,同時,我們可以通過其自身的管理機制來監(jiān)視數(shù)據(jù)庫連接的數(shù)量、使用情況等。 而Hibernate的出現(xiàn)把連接池的使用引入了一個新的利用方式,讓你充分享受配置化給開發(fā)帶來的便利。
2:Hibernate連接池的配置 在這里筆者簡單介紹一下Hibernate配置連接池的方式: 方式1:使用Hibernate自帶的連接池。 方式2:使用配置文件指定的數(shù)據(jù)庫連接池。 方式3:從容器中獲取得到連接池(如:Tomcat)
Hibernate無論采用哪種方式獲取連接池的連接,它對Java程序來說是獨立的。Hibernate對其采用了配置化處理,也就是當想改變獲取數(shù)據(jù)庫連接的方式時,只要修改Hibernate的配置文件就可以了,看看多方便,就是這么簡單,這足以讓你愛死Hibernate了。哈哈,讓我們正式來看看,Hibernate究竟是怎么做的! 注意:Hibernate配置文件有兩鐘格式一個是XML格式,一種是properties格式。本文采用的是主流的XML格式來分析!
(1)使用Hibernate自帶的連接池 Hibernate自帶的連接池性能不高,缺乏響應(yīng)大批量請求以及容錯能力,甚至還有BUG,在項目運用中不值得推薦。雖然缺點一羅筐,可也是Hibernate獲取連接池的一種方式,在這里筆者僅給出配置方法,以供參考,如下代碼所示:
………..
<hibernate-configuration>
<session-factory >
<!--JDBC驅(qū)動程序-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 連接數(shù)據(jù)庫的URL-->
<property name="connection.url">
jdbc:mysql://localhost:3306/feifei
</property>
<!--連接的登錄名-->
<property name="connection.username">root</property>
<!--登錄密碼-->
<property name="connection.password"></property>
<!--是否將運行期生成的SQL輸出到日志以供調(diào)試-->
<property name="show_sql">true</property>
<!--指定連接的語言-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--映射資源-->
<mapping resource="/xx/xx.hbm.xml" />
</session-factory>
</hibernate-configuration>
(2)使用配置文件指定的連接池 筆者在這里推薦當今穩(wěn)定而且主流的數(shù)據(jù)源,就是Hibernate支持的第三方連接池產(chǎn)品:C3P0,Proxool。隨著文章的深入,你會發(fā)現(xiàn)他們配置方法也有很大的不同。 先來介紹連接池C3P0配置,在寫入配置文件之前,用戶必須將c3p0-0.8.4.5.jar這個包放入classpath當中,下面給出其核心配置項其他的配置項可參見上面的方式1。
…………….
<property name="c3p0.min_size">5</property> <!—在連接池中可用數(shù)據(jù)庫連接的最小數(shù)目-->
<property name="c3p0.max_size">30</property> <!--在連接池中所有數(shù)據(jù)庫連接的最大數(shù)目-->
<property name="c3p0.time_out">1800</property> <!—設(shè)定數(shù)據(jù)庫連接的超時時間-->
<property name="c3p0.max_statement">50</property> <!—可以被緩存的PreparedStatement的最大數(shù)目-->
…………….
把上面的配置項添加到hibernate.cfg.xml中就可以了,看看是不是很簡單? 配置Proxool連接池,就沒有那么簡單了,稍有不同!筆者原先,也按照配置C3P0連接池的方法去配置Proxool,然后一個大大的錯誤向我“招手”了。無助之下,上網(wǎng)看看有沒有解決方法,就找到了一個筆者認為不錯的方法,推薦給大家。 由于Proxool連接池只管理自己產(chǎn)生的連接,Hibernate又需要管理它,怎么辦呢?所以我的做法是單獨的建立一個XML文件來管理連接池,又在Hibernate里面設(shè)置相關(guān)的項,讓Hibernate與Proxool關(guān)聯(lián)起來。 當然首先你要把proxool-0.8.3.jar這個包放入classpath,再建立一個ProxoolConf.xml文件,這個文件便于管理建議和 hibernate.cfg.xml文件放在一起。內(nèi)容如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>feifeiPool</alias> <!—連接池的別名可以隨便寫,但注意的是后面在hibernate部分要對應(yīng)-->
<!--proxool只能管理由自己產(chǎn)生的連接-->
<driver-url>jdbc:mysql://localhost:3306/feifei?useUnicode=true&characterEncoding=GBK</driver-url>
<driver-class> com.mysql.jdbc.Driver </driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value=""/>
</driver-properties>
<!-- proxool自動偵察各個連接狀態(tài)的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!--指因未有空閑連接可以分配而在隊列中等候的最大請求數(shù),超過這個請求數(shù)的用戶連接就不會被接受-->
<maximum-new-connections>20</maximum-new-connections>
<!-- 最少保持的空閑連接數(shù)-->
<prototype-count>5</prototype-count>
<!-- 允許最大連接數(shù),超過了這個連接,再有請求時,就排在隊列中等候,最大的等待請求數(shù)由maximum-new-connections決定-->
<maximum-connection-count>100</maximum-connection-count>
<!-- 最小連接數(shù)-->
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely>
然后需要在hibernate.cfg.xml中作配置,參考如下:
…………
<property name="proxool.pool_alias">feifeiPool</property> <!—這個名字要和上面XML文件中的別名要對應(yīng)啊-->
<property name="proxool.xml">ProxoolConf.xml</property> <!—這個你剛才上面建立的XML文件的名字-->
<property name="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
<!—定義Hibernate的-->
…………
和C3P0連接池不同,Proxool連接池配置有兩個步驟,請大家注意!至于c3p0,有評論說它的算法不是最優(yōu)的,proxool不少行家推薦使用,而且暫時來說,是負面評價是最少的一個。性能是上,筆者也推薦使用這個。 (3) 從容器中獲取得到連接池(如:Tomcat) 筆者以我們大家常用的Tomcat為例子來描述,Hibernate想要從Tomcat中獲取數(shù)據(jù)源,需要對Tomcat容器與Hibernate分別進行配置。 <1>在容器中配置數(shù)據(jù)源 配置容器的數(shù)據(jù)源,這里不多講,屬于服務(wù)器的配置范疇。假定已經(jīng)配好了一個JNDI名為“jdbc/feifei”的數(shù)據(jù)源。 <2>在hibernate.cfg.xml中指定使用這個名為“jdbc/feifei”的JNDI <property name=”hibernate.connection.datasource”>java:/comp/env/jdbc/feifei </property> <!—指定這個JNDI名字就可以了,而且必須是完整的,一定要注意哦!--> 本文的連接池方案分析就到此為止了。看完了,是不是很有想法?Hibernate配置連接池方面有這么多的方法提供給我們來選,選擇的余地多了,發(fā)揮的空間也大了。 3:編后語 連接池為我們開發(fā)帶來了極大的便利,它為我們開發(fā)者承擔了數(shù)據(jù)庫連接管理的壓力,讓我們從煩瑣的數(shù)據(jù)庫事務(wù)中解脫出來,專心研究業(yè)務(wù)邏輯實現(xiàn)業(yè)務(wù),是我們的一大福音。 本文分析的Hibernate連接池配置方案,為讀者提供了多種選擇。建議讀者也根據(jù)自己的實際情況來選取方案。文中肯定還有很多紕漏之處,還望大家斧正。講的不足的地方,以后有機會定當補全!
1.Hibernate默認連接池 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <!?JDBC驅(qū)動程序--> <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 連接數(shù)據(jù)庫的URL--> <property name="connection.url"> jdbc:mysql://localhost:3306/schoolproject </property> <property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">UTF-8</property>
<!--連接的登錄名--> <property name="connection.username">root</property>
<!?登錄密碼--> <property name="connection.password"></property>
<!--是否將運行期生成的SQL輸出到日志以供調(diào)試--> <property name="show_sql">true</property>
<!--指定連接的語言--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--映射Student這個資源--> <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />
</session-factory> </hibernate-configuration>
2.C3P0連接配置 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration> <session-factory > <!?JDBC驅(qū)動程序--> <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 連接數(shù)據(jù)庫的URL--> <property name="connection.url"> jdbc:mysql://localhost:3306/schoolproject </property>
<property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">UTF-8</property>
<!--連接的登錄名--> <property name="connection.username">root</property>
<!--登錄密碼--> <property name="connection.password"></property>
<!-- C3P0連接池設(shè)定-->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider </property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.timeout">120</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">120</property> <property name="hibernate.c3p0.acquire_increment">2</property>
<!--是否將運行期生成的SQL輸出到日志以供調(diào)試--> <property name="show_sql">true</property> <!--指定連接的語言--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--映射Student這個資源--> <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />
</session-factory> </hibernate-configuration>
3.proxool連接池
(1) 先寫proxool的配置文件,文件名:proxool.xml(一般放在與hibernate.cfg.xml文件在同一個目錄中)本例配置的是MYSQL數(shù)據(jù)庫,數(shù)據(jù)庫的名字為schoolproject <?xml version="1.0" encoding="UTF-8"?> <!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. --> <something-else-entirely> <proxool> <!--連接池的別名--> <alias>DBPool</alias> <!--proxool只能管理由自己產(chǎn)生的連接-->
<driver-url> jdbc:mysql://localhost:3306/schoolproject?useUnicode=true&characterEncoding=UTF8 </driver-url>
<!?JDBC驅(qū)動程序--> <driver-class>com.mysql.jdbc.Driver</driver-class> <driver-properties> <property name="user" value="root"/> <property name="password" value=""/> </driver-properties>
<!-- proxool自動偵察各個連接狀態(tài)的時間間隔(毫秒),偵察到空閑的連接就馬上回 收,超時的銷毀--> <house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空閑連接可以分配而在隊列中等候的最大請求數(shù),超過這個請求數(shù)的 用戶連接就不會被接受--> <maximum-new-connections>20</maximum-new-connections> <!-- 最少保持的空閑連接數(shù)--> <prototype-count>5</prototype-count>
<!-- 允許最大連接數(shù),超過了這個連接,再有請求時,就排在隊列中等候,最大的 等待請求數(shù)由maximum-new-connections決定--> <maximum-connection-count>100</maximum-connection-count>
<!-- 最小連接數(shù)--> <minimum-connection-count>10</minimum-connection-count>
</proxool> </something-else-entirely>
(2)配置hibernate.cfg.xml文件 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <property name="hibernate.connection.provider_class"> org.hibernate.connection.ProxoolConnectionProvider </property> <property name="hibernate.proxool.pool_alias">DBPool</property> <property name="hibernate.proxool.xml">proxoolconf.xml</property>
<!--是否將運行期生成的SQL輸出到日志以供調(diào)試--> <property name="show_sql">true</property> <!--指定連接的語言--> <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--映射Student這個資源--> <mapping resource="com/wqbi/model/pojo/student.hbm.xml" />
</session-factory> </hibernate-configuration> (1) hibernate.connection.provider_class定義Hibernate的連接加載類,這里Proxool連接池是用這個,不同的連接池有不同的加載類,可以查閱Hibernate文檔獲取相關(guān)信息
(2) hibernate.proxool.pool_alias這里就是用我們上面提到的連接池的別名
(3) hibernate.proxool.xml是向Hibernate聲明連接池的配置文件位置,可以用相對或絕對路徑,用相對路徑時要注意一定在要Path范圍內(nèi)!不然會拋出異常。
(4) dialect是聲明SQL語句的方言
(5) show_sql定義是否顯示Hibernate生成的SQL語言,一般在調(diào)試階段設(shè)為true,完成后再改成false,這樣有利于調(diào)試。
(6) <mapping >資源文件映射
4.JNDI連接池,數(shù)據(jù)源已經(jīng)由應(yīng)用服務(wù)配置好(如Web服務(wù)器),Hibernate需要做的只是通過JNDI名查找到此數(shù)據(jù)源。應(yīng)用服務(wù)器將連接池對外顯示為JNDI綁定數(shù)據(jù)源,它是javax.jdbc.Datasource類的一個實例。只要配置一個Hibernate文件,如: hibernate.connection.datasource=java:/comp/env/jdbc/schoolproject //JNDI名 hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory hibernate.transaction.manager_loopup_class = org.hibernate.transaction.JBossTransactionManagerLookup hibernate.dialect=org.hibernate.dialect.MySQLDialect
轉(zhuǎn)自: http://www.cublog.cn/u/27479/showart_218912.html
美特斯邦威:不加尋常班
特步: 加班, 死一般的感覺
百事:加班無極限
森馬:上什么公司,加什么班
腦白金:今年過節(jié)不加班,加班只加節(jié)假日
匯仁腎寶:他加我也加
李寧:加班, 一切皆有可能
旺旺: 你加,我加,大家加,加加
農(nóng)夫山泉:加了有點煩
好迪:大家加,才是真的加
白加黑:白天加白班,不瞌睡;晚上加晚班,睡不著
聯(lián)想:公司不加班,公司會怎么樣
娃哈哈:媽媽~~我也要加班!
清嘴:你知道加班的味道嗎?
安踏:我加班,我喜歡!
NIKE:Just 加 it!
鈣中鈣:現(xiàn)在的加班啊,它含金量高,加一天頂過去五天,實惠!你瞧我, 一口氣加了5天,不費勁!
bin>mysql -u root mysql> grant 權(quán)限1,權(quán)限2,…權(quán)限n on 數(shù)據(jù)庫名稱.表名稱 to 用戶名@用戶地址 identified by ‘連接口令’;
權(quán)限1,權(quán)限2,…權(quán)限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個權(quán)限。 當權(quán)限1,權(quán)限2,…權(quán)限n被all privileges或者all代替,表示賦予用戶全部權(quán)限。 當數(shù)據(jù)庫名稱.表名稱被*.*代替,表示賦予用戶操作服務(wù)器上所有數(shù)據(jù)庫所有表的權(quán)限。 用戶地址可以是localhost,也可以是ip地址、機器名字、域名。也可以用’%'表示從任何地址連接。 ‘連接口令’不能為空,否則創(chuàng)建失敗。
例如: mysql>grant select,insert,update,delete,create,drop on vtdc.employee to joe@10.163.225.87 identified by ‘123′; 給來自10.163.225.87的用戶joe分配可對數(shù)據(jù)庫vtdc的employee表進行select,insert,update,delete,create,drop等操作的權(quán)限,并設(shè)定口令為123。
mysql>grant all privileges on vtdc.* to joe@10.163.225.87 identified by ‘123′; 給來自10.163.225.87的用戶joe分配可對數(shù)據(jù)庫vtdc所有表進行所有操作的權(quán)限,并設(shè)定口令為123。
mysql>grant all privileges on *.* to joe@10.163.225.87 identified by ‘123′; 給來自10.163.225.87的用戶joe分配可對所有數(shù)據(jù)庫的所有表進行所有操作的權(quán)限,并設(shè)定口令為123。
mysql>grant all privileges on *.* to joe@localhost identified by ‘123′; 給本機用戶joe分配可對所有數(shù)據(jù)庫的所有表進行所有操作的權(quán)限,并設(shè)定口令為123。
1)swf從jsp讀數(shù)據(jù) a) 在flash中建一個動態(tài)文本框,一個button;文本框名字叫str,button上寫 on (release) { loadVariable("http://localhost:8080/demo/sentVar.jsp", "","get"); }//url相對,絕對路徑好像都可以b) 在sentVar.jsp中寫如下代碼: <%@ page contentType="text/html;charset=gb2312"%> <% String tmp="wowowo"; out.println("&str="+tmp);//這里一定要寫成"&str="的形式,&一定不能少,str的名字要與你a中建的相同,“= ”號也不能少; %> c)測試。click button ...yeah~(failed?its none of my business)  try again~~ ------------------------------------------------------------------- 2)swf向jsp寫數(shù)據(jù)這個簡單點。 c建一input textfield,起個名字str吧。一個button,上面寫: on (release) { getURL("showrs.jsp", "","get"); }b)showrs.jsp中寫: <%@ page contentType="text/html;charset=gb2312"%> <% String tem=request.getParameter("str"); out.println("str="+tem); %>everything is ok~enjoy... 引自: http://www.flashempire.net/showpost.php?p=892409
進入頁面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)"> 退出頁面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)"> x為效果持續(xù)的時間 y的取值為1-23:
0 矩形縮小 1 矩形擴大 2 圓形縮小 3 圓形擴大 4 下到上刷新 5 上到下刷新 6 左到右刷新 7 右到左刷新 8 豎百葉窗 9 橫百葉窗 10 錯位橫百葉窗 11 錯位豎百葉窗 12 點擴散 13 左右到中間刷新 14 中間到左右刷新 15 中間到上下 16 上下到中間 17 右下到左上 18 右上到左下 19 左上到右下 20 左下到右上 21 橫條 22 豎條 23 以上22種隨機選擇一種
我們經(jīng)常會用到db2 -tvf test.sql 來批量執(zhí)行test.sql文件中的所有語句,而tvf的具體含義是什么,請看一下介紹 db2命令行參數(shù):以下列出當前的db2命令行參數(shù)
db2 => list command options
命令行處理器選項設(shè)置
后端進程等待時間(秒) (DB2BQTIME) = 1 連接至后端的重試次數(shù) (DB2BQTRY) = 60 請求隊列等待時間(秒) (DB2RQTIME) = 5 輸入隊列等待時間(秒) (DB2IQTIME) = 5 命令選項 (DB2OPTIONS) =
選項 描述 當前設(shè)置 ------ ---------------------------------------- --------------- -a 顯示 SQLCA OFF -c 自動落實 OFF -e 顯示 SQLCODE/SQLSTATE OFF -f 讀取輸入文件 OFF -l 將命令記錄到歷史文件中 OFF -n 除去換行字符 OFF -o 顯示輸出 ON -p 顯示交互式輸入提示 ON -r 將輸出保存到報告文件 OFF -s 在命令出錯時停止執(zhí)行 OFF -t 設(shè)置語句終止符 OFF -v 回送當前命令 OFF -w 顯示 FETCH/SELECT 警告消息 ON -x 不打印列標題 OFF -z 將所有輸出保存到輸出文件 OFF
以下用來查看如何修改參數(shù):
db2 => ? options db2 [option ...] [db2-command | sql-statement | [? [phrase | message | sqlstate | class-code]]] 選項:-a, -c, -e{c|s}, -finfile, -lhistfile, -n, -o, -p, -rreport, -s, -t, -td;, -v, -w, -x, -zoutputfile。
選項 描述 缺省設(shè)置 ------ ---------------------------------------- --------------- -a 顯示 SQLCA OFF -c 自動落實 ON -e 顯示 SQLCODE/SQLSTATE OFF -f 讀取輸入文件 OFF -l 將命令記錄到歷史文件中 OFF -n 除去換行字符 OFF -o 顯示輸出 ON -p 顯示 db2 交互式提示 ON -r 將輸出報告保存到文件 OFF -s 在命令出錯時停止執(zhí)行 OFF -t 設(shè)置語句終止符 OFF -v 回送當前命令 OFF -w 顯示 FETCH/SELECT 警告消息 ON -x 不打印列標題 OFF -z 將所有輸出保存到輸出文件 OFF
注意: 使用 DB2OPTIONS 環(huán)境變量定制選項缺省值。 緊跟選項字母后的減號(-)使該選項關(guān)閉。 使用 UPDATE COMMAND OPTIONS 更改選項設(shè)置(以交互式或 文件輸入方式)。
如何修改,請輸入:
db2 => ? update command options
比如修改為不自動提交:
update command options using c off
在db2命令行提示符下,輸入?,就可以查看所有的CLP命令
輸入: ? command (clp命令名) 比如: ? connect
db2 => ? connect CONNECT [USER username [{USING password [NEW new-password CONFIRM confirm-password] | CHANGE PASSWORD}]]
CONNECT RESET
CONNECT TO database-alias [IN {SHARE MODE | EXCLUSIVE MODE [ON SINGLE DBPARTITIONNUM]}] [USER username [{USING password [NEW new-password CONFIRM confirm-password] | CHANGE PASSWORD}]]
方括號中的參數(shù)是可選參數(shù),尖括號中的內(nèi)容表示變量。
以下是常用的:
實例
db2start 啟動數(shù)據(jù)庫管理器實例。 db2stop 停止數(shù)據(jù)庫管理器實例。 get dbm cfg 返回數(shù)據(jù)庫管理器配置設(shè)置。 get dbm cfg show detail 顯示數(shù)據(jù)庫管理器參數(shù)的當前值和延遲值(從 V8 起)。 1update dbm cfg using 將數(shù)據(jù)庫管理器配置參數(shù) 更新為值 。 get instance 返回 DB2INSTANCE 環(huán)境變量的值。 list active databases 列出活動的數(shù)據(jù)庫和連接數(shù)。 list application [show detail] 返回關(guān)于當前連接的應(yīng)用程序的信息。 force application (h1 [,h2,..,hn]) 根據(jù)句柄號與特定應(yīng)用程序斷開連接。 force application all 斷開所有應(yīng)用程序與數(shù)據(jù)庫的連接。 attach to user using 以用戶 通過使用密碼 與標識為 的遠程實例連接。
數(shù)據(jù)庫
create database 創(chuàng)建名為 的數(shù)據(jù)庫。 activate database 顯式地激活數(shù)據(jù)庫。 deactivate database 顯式地使數(shù)據(jù)庫失效。 connect to [ [user ] using ] 根據(jù)需要,顯式地以用戶 和密碼 與數(shù)據(jù)庫 連接。 1update dbm cfg using 將數(shù)據(jù)庫管理器配置參數(shù) 更新為值 。 connect reset 斷開與當前數(shù)據(jù)庫的連接。 get db cfg show detail 顯示數(shù)據(jù)庫配置參數(shù)的當前值和延遲值(僅適用于 V8)。 get db cfg for 返回數(shù)據(jù)庫 的數(shù)據(jù)庫配置設(shè)置。 update db cfg for using 將數(shù)據(jù)庫 的數(shù)據(jù)庫配置參數(shù) 更新為值 。 list tables[for {user | all | system | schema }][show detail] 列出數(shù)據(jù)庫中的表。如果沒有指定任何參數(shù),則缺省情況是列出當前用戶的表。 describe table 顯示一個表或視圖的列信息。 list tablespaces [show detail] 顯示表空間的標識、名稱、類型、內(nèi)容和狀態(tài)。 list tablespace containers for [show detail] 顯示用 指定的表空間的容器信息。 quiesce tablespaces for table reset 將表空間的狀態(tài)復(fù)位成正常(normal)。
連接性
catalog [admin] node … 為協(xié)議 在節(jié)點目錄中創(chuàng)建一項。 list [admin] node directory 返回節(jié)點目錄的內(nèi)容。 catalog database … 為數(shù)據(jù)庫 在數(shù)據(jù)庫目錄中創(chuàng)建一項。 list database directory [on ] 返回數(shù)據(jù)庫目錄的內(nèi)容。
性能
get monitor switches 返回會話監(jiān)控開關(guān)的狀態(tài)。 update monitor switches using 為 設(shè)置會話監(jiān)控開關(guān)的狀態(tài)。 reset monitor all 復(fù)位性能監(jiān)控程序值。 get snapshot for dbm 返回實例級別的性能信息。 get snapshot for all on 為數(shù)據(jù)庫 在數(shù)據(jù)庫級別返回所有性能信息。 get snapshot for dynamic sql on 返回動態(tài) SQL 高速緩存的內(nèi)容。 runstats on table . 收集表 的統(tǒng)計信息。表名必須是用 全限定的。 reorgchk on table all 確定是否需要對表進行重組。這對于對所有表自動執(zhí)行 runstats 很有用。 reorg table 通過重構(gòu)行來消除“碎片”數(shù)據(jù)并壓縮信息,對表進行重組。
管理
export 將數(shù)據(jù)庫數(shù)據(jù)抽取到一個平面文件中。 import 通過使用 IMPORT 實用程序,將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫。 load query table [to local-message-file][nosummary | summaryonly] [showdelta] 返回 LOAD 實用程序的進度。 backup database [to ] 執(zhí)行數(shù)據(jù)庫備份。 restore database [from ] 執(zhí)行數(shù)據(jù)庫恢復(fù)。 get health snapshot for dbm 返回實例的正常快照信息(僅適用于 V8)。 get health snapshot for all on 返回數(shù)據(jù)庫 的所有正常快照(僅適用于 V8)。
管理服務(wù)器
get admin cfg 返回管理服務(wù)器的配置設(shè)置。 update admin cfg using 將管理服務(wù)器配置參數(shù) 更新為值 。
1、查看表空間的名稱及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;
2、查看表空間物理文件的名稱及大小 select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;
3、查看回滾段名稱及大小 select segment_name, tablespace_name, r.status, (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id = v.usn(+) order by segment_name ;
4、查看控制文件 select name from v$controlfile;
5、查看日志文件 select member from v$logfile;
6、查看表空間的使用情況 select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name;
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
7、查看數(shù)據(jù)庫庫對象 select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;
8、查看數(shù)據(jù)庫的版本 Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';
9、查看數(shù)據(jù)庫的創(chuàng)建日期和歸檔方式 Select Created, Log_Mode, Log_Mode From V$Database;
10、捕捉運行很久的SQL column username format a12 column opname format a16 column progress format a8
select username,sid,opname, round(sofar*100 / totalwork,0) || '%' as progress, time_remaining,sql_text from v$session_longops , v$sql where time_remaining <> 0 and sql_address = address and sql_hash_value = hash_value /
11、查看數(shù)據(jù)表的參數(shù)信息 SELECT partition_name, high_value, high_value_length, tablespace_name, pct_free, pct_used, ini_trans, max_trans, initial_extent, next_extent, min_extent, max_extent, pct_increase, FREELISTS, freelist_groups, LOGGING, BUFFER_POOL, num_rows, blocks, empty_blocks, avg_space, chain_cnt, avg_row_len, sample_size, last_analyzed FROM dba_tab_partitions --WHERE table_name = :tname AND table_owner = :towner ORDER BY partition_position
12、查看還沒提交的事務(wù) select * from v$locked_object; select * from v$transaction;
13、查找object為哪些進程所用 select p.spid, s.sid, s.serial# serial_num, s.username user_name, a.type object_type, s.osuser os_user_name, a.owner, a.object object_name, decode(sign(48 - command), 1, to_char(command), 'Action Code #' || to_char(command) ) action, p.program oracle_process, s.terminal terminal, s.program program, s.status session_status from v$session s, v$access a, v$process p where s.paddr = p.addr and s.type = 'USER' and a.sid = s.sid and a.object='SUBSCRIBER_ATTR' order by s.username, s.osuser
14、回滾段查看 select rownum, sys.dba_rollback_segs.segment_name Name, v$rollstat.extents Extents, v$rollstat.rssize Size_in_Bytes, v$rollstat.xacts XActs, v$rollstat.gets Gets, v$rollstat.waits Waits, v$rollstat.writes Writes, sys.dba_rollback_segs.status status from v$rollstat, sys.dba_rollback_segs, v$rollname where v$rollname.name(+) = sys.dba_rollback_segs.segment_name and v$rollstat.usn (+) = v$rollname.usn order by rownum
15、耗資源的進程(top session) select s.schemaname schema_name, decode(sign(48 - command), 1, to_char(command), 'Action Code #' || to_char(command) ) action, status session_status, s.osuser os_user_name, s.sid, p.spid , s.serial# serial_num, nvl(s.username, '[Oracle process]') user_name, s.terminal terminal, s.program program, st.value criteria_value from v$sesstat st, v$session s , v$process p where st.sid = s.sid and st.statistic# = to_number('38') and ('ALL' = 'ALL' or s.status = 'ALL') and p.addr = s.paddr order by st.value desc, p.spid asc, s.username asc, s.osuser asc
16、查看鎖(lock)情況 select /*+ RULE */ ls.osuser os_user_name, ls.username user_name, decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX', 'Transaction enqueue lock', 'UL', 'User supplied lock') lock_type, o.object_name object, decode(ls.lmode, 1, null, 2, 'Row Share', 3, 'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', null) lock_mode, o.owner, ls.sid, ls.serial# serial_num, ls.id1, ls.id2 from sys.dba_objects o, ( select s.osuser, s.username, l.type, l.lmode, s.sid, s.serial#, l.id1, l.id2 from v$session s, v$lock l where s.sid = l.sid ) ls where o.object_id = ls.id1 and o.owner <> 'SYS' order by o.owner, o.object_name
17、查看等待(wait)情況 SELECT v$waitstat.class, v$waitstat.count count, SUM(v$sysstat.value) sum_value FROM v$waitstat, v$sysstat WHERE v$sysstat.name IN ('db block gets', 'consistent gets') group by v$waitstat.class, v$waitstat.count
18、查看sga情況 SELECT NAME, BYTES FROM SYS.V_$SGASTAT ORDER BY NAME ASC
19、查看catched object SELECT owner, name, db_link, namespace, type, sharable_mem, loads, executions, locks, pins, kept FROM v$db_object_cache
20、查看V$SQLAREA SELECT SQL_TEXT, SHARABLE_MEM, PERSISTENT_MEM, RUNTIME_MEM, SORTS, VERSION_COUNT, LOADED_VERSIONS, OPEN_VERSIONS, USERS_OPENING, EXECUTIONS, USERS_EXECUTING, LOADS, FIRST_LOAD_TIME, INVALIDATIONS, PARSE_CALLS, DISK_READS, BUFFER_GETS, ROWS_PROCESSED FROM V$SQLAREA
21、查看object分類數(shù)量 select decode (o.type#,1,'INDEX' , 2,'TABLE' , 3 , 'CLUSTER' , 4, 'VIEW' , 5 , 'SYNONYM' , 6 , 'SEQUENCE' , 'OTHER' ) object_type , count(*) quantity from sys.obj$ o where o.type# > 1 group by decode (o.type#,1,'INDEX' , 2,'TABLE' , 3 , 'CLUSTER' , 4, 'VIEW' , 5 , 'SYNONYM' , 6 , 'SEQUENCE' , 'OTHER' ) union select 'COLUMN' , count(*) from sys.col$ union select 'DB LINK' , count(*) from
22、按用戶查看object種類 select u.name schema, sum(decode(o.type#, 1, 1, NULL)) indexes, sum(decode(o.type#, 2, 1, NULL)) tables, sum(decode(o.type#, 3, 1, NULL)) clusters, sum(decode(o.type#, 4, 1, NULL)) views, sum(decode(o.type#, 5, 1, NULL)) synonyms, sum(decode(o.type#, 6, 1, NULL)) sequences, sum(decode(o.type#, 1, NULL, 2, NULL, 3, NULL, 4, NULL, 5, NULL, 6, NULL, 1)) others from sys.obj$ o, sys.user$ u where o.type# >= 1 and u.user# = o.owner# and u.name <> 'PUBLIC' group by u.name order by sys.link$ union select 'CONSTRAINT' , count(*) from sys.con$
23、有關(guān)connection的相關(guān)信息 1)查看有哪些用戶連接 select s.osuser os_user_name, decode(sign(48 - command), 1, to_char(command), 'Action Code #' || to_char(command) ) action, p.program oracle_process, status session_status, s.terminal terminal, s.program program, s.username user_name, s.fixed_table_sequence activity_meter, '' query, 0 memory, 0 max_memory, 0 cpu_usage, s.sid, s.serial# serial_num from v$session s, v$process p where s.paddr=p.addr and s.type = 'USER' order by s.username, s.osuser 2)根據(jù)v.sid查看對應(yīng)連接的資源占用等情況 select n.name, v.value, n.class, n.statistic# from v$statname n, v$sesstat v where v.sid = 71 and v.statistic# = n.statistic# order by n.class, n.statistic# 3)根據(jù)sid查看對應(yīng)連接正在運行的sql select /*+ PUSH_SUBQ */ command_type, sql_text, sharable_mem, persistent_mem, runtime_mem, sorts, version_count, loaded_versions, open_versions, users_opening, executions, users_executing, loads, first_load_time, invalidations, parse_calls, disk_reads, buffer_gets, rows_processed, sysdate start_time, sysdate finish_time, '>' || address sql_address, 'N' status from v$sqlarea where address = (select sql_address from v$session where sid = 71)
24、查詢表空間使用情況select a.tablespace_name "表空間名稱", 100-round((nvl(b.bytes_free,0)/a.bytes_alloc)*100,2) "占用率(%)", round(a.bytes_alloc/1024/1024,2) "容量(M)", round(nvl(b.bytes_free,0)/1024/1024,2) "空閑(M)", round((a.bytes_alloc-nvl(b.bytes_free,0))/1024/1024,2) "使用(M)", Largest "最大擴展段(M)", to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "采樣時間" from (select f.tablespace_name, sum(f.bytes) bytes_alloc, sum(decode(f.autoextensible,'YES',f.maxbytes,'NO',f.bytes)) maxbytes from dba_data_files f group by tablespace_name) a, (select f.tablespace_name, sum(f.bytes) bytes_free from dba_free_space f group by tablespace_name) b, (select round(max(ff.length)*16/1024,2) Largest, ts.name tablespace_name from sys.fet$ ff, sys.file$ tf,sys.ts$ ts where ts.ts#=ff.ts# and ff.file#=tf.relfile# and ts.ts#=tf.ts# group by ts.name, tf.blocks) c where a.tablespace_name = b.tablespace_name and a.tablespace_name = c.tablespace_name
25、 查詢表空間的碎片程度 select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name having count(tablespace_name)>10;
alter tablespace name coalesce; alter table name deallocate unused;
create or replace view ts_blocks_v as select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space union all select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;
select * from ts_blocks_v;
select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space group by tablespace_name;
1.字符串函數(shù) 長度與分析用 datalength(Char_expr)返回字符串包含字符數(shù),但不包含后面的空格 substring(expression,start,length)不多說了,取子串 right(char_expr,int_expr)返回字符串右邊int_expr個字符
字符操作類 upper(char_expr)轉(zhuǎn)為大寫 lower(char_expr)轉(zhuǎn)為小寫 space(int_expr)生成int_expr個空格 replicate(char_expr,int_expr)復(fù)制字符串int_expr次 reverse(char_expr)反轉(zhuǎn)字符串 stuff(char_expr1,start,length,char_expr2)將字符串char_expr1中的從start開始的length個字符用char_expr2代替 ltrim(char_expr)rtrim(char_expr)取掉空格 ascii(char)char(ascii)兩函數(shù)對應(yīng),取ascii碼,根據(jù)ascii嗎取字符
字符串查找 charindex(char_expr,expression)返回char_expr的起始位置 patindex("pattern",expression)返回指定模式的起始位置,否則為0
2.數(shù)學(xué)函數(shù) abs(numeric_expr)求絕對值 ceiling(numeric_expr)取大于等于指定值的最小整數(shù) exp(float_expr)取指數(shù) floor(numeric_expr)小于等于指定值得最大整數(shù) pi()3.1415926......... power(numeric_expr,power)返回power次方 rand([int_expr])隨機數(shù)產(chǎn)生器 round(numeric_expr,int_expr)安int_expr規(guī)定的精度四舍五入 sign(int_expr)根據(jù)正數(shù),0,負數(shù),,返回 1,0,-1 sqrt(float_expr)平方根
3.日期函數(shù) getdate()返回日期 datename(datepart,date_expr)返回名稱如June datepart(datepart,date_expr)取日期一部份 datediff(datepart,date_expr1.dateexpr2)日期差 dateadd(datepart,number,date_expr)返回日期加上number
上述函數(shù)中datepart的 寫法取值和意義 yy1753-9999年份 qq1-4刻 mm1-12月 dy1-366日 dd1-31日 wk1-54周 dw1-7周幾 hh0-23小時 mi0-59分鐘 ss0-59秒 ms0-999毫秒
日期轉(zhuǎn)換 convert()
4.系統(tǒng)函數(shù) suser_name()用戶登錄名 user_name()用戶在數(shù)據(jù)庫中的名字 user用戶在數(shù)據(jù)庫中的名字 show_role()對當前用戶起作用的規(guī)則 db_name()數(shù)據(jù)庫名 object_name(obj_id)數(shù)據(jù)庫對象名 col_name(obj_id,col_id)列名 col_length(objname,colname)列長度 valid_name(char_expr)是否是有效標識符
1. JFrame對象一般可以直接向里面添加數(shù)據(jù),但是在設(shè)置背景顏色時得用:Container f = new JFrame(“test”).getContentPane();
2. pack()是設(shè)置窗體大小自適應(yīng)其內(nèi)組件,setSize()為設(shè)置其顯示的大小。
3. 默認關(guān)閉窗體JFrame時,是隱藏。要想真退出。請加入setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JFrame.EXIT_ON_CLOSE是一整形常量,值為3。
4. 加載GIF圖片: MediaTracker tracker = new MediaTracker(this); Image img = new ImageIcon (getClass().getResource(“test.gif”)).getImage(): Tracker.addImage(img,0): try{ ? tracker.waitForAll(); ?}catch(Exception e) {} 此后就可以對完整的gif進行操作了。
5. 光標移動到組件上給出提示:setToolTipText(”this is tip”);
6. JScrollPane可以通過setVerticalScrollBarPolicy(int policy) 和setHorizontalScrollBarPolicy(int policy)來選擇是否顯示滾動條。
7.彈出消息框:JOptionPane.showMessageDialog(btn,new String (“test”)); 彈出錯誤提示:JOptionPane.showMessageDialog(null,"錯誤信息","錯誤框標題",JOptionPane.ERROR_MESSAGE);
8. 文本輸入框右對齊:SetHorizontalAlignment(JTextField.RIGHT);
9.? 讀取JAR包內(nèi)資源,應(yīng)該使用:getClass().getResource();
10. 容器布局為空后——setLayout(null),其內(nèi)組件應(yīng)setBounds();
11.內(nèi)存回收:if(Runtime.getRuntime().freeMemory()<Runtime.getRuntime().totalMemory()/3) { ?System.gc(); }
12.? JFrame 窗口不可最大化:setResizable(false);
13. 應(yīng)用程序和applet小程序共存:直接把applet往jframe里面加就成應(yīng)用程序。
14. 讓窗口居中(屏幕)顯示:setLocationRelativeTo(null): 或者用: Toolkit kit = Toolkit.getDefaultToolkit(): Dimension screenSize = kit.getScreenSize(); f.setLocation((screenSize.Width-f.getWidth())/2, (screenSize.Height-f.getHeight())/2);
15. 選擇皮膚感官: try{ UIManager.setLookAndFeel ( "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); ??????????? SwingUtilities.updateComponentTreeUI(f); }
16. 密碼框可設(shè)setEchoChar(‘#’);或者密碼時 pwd = new String(password.getPassword());
17. 用JlayeredPane添加組件時候可以設(shè)置深度。
18. 區(qū)別單雙擊事件: if(e.getClickCount ==1) {}else if(e.getClickCount ==2){}
19. JAVA2D 中設(shè)置虛線: float [] dash = {2.0f,4.0f}; g2.setStroke( new BasicStroke(2.0f, BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,2.0f,dash,2.0f));
20. JAVA2D 中設(shè)置字體筆畫大小: Font cf = g.getFont(); Font newf = new Font(cf.getName(),cf.getStyle(),cf.getSize()+20); g.setFont(newf);
21.讓樹無圖標標簽 ((DefaultTreeCellRenderer)tree.getCellRenderer()).setOpenIcon(null); ((DefaultTreeCellRenderer)tree.getCellRenderer()).setClosedIcon(null); ((DefaultTreeCellRenderer)tree.getCellRenderer()).setDisabledIcon(null); ((DefaultTreeCellRenderer)tree.getCellRenderer()).setLeafIcon(null);
22.豎著顯示滑塊 new JSlider(SwingConstants.VERTICAL,min,max,initialValue);
23.通過標尺顯示滑塊 slider.setMajorTickSpacing(20); slider.setPaintTicks(true); slider.setPaintLabels(true);
24.讓滑塊自動對齊到標尺 slider.setSnapToTicks(true);
25.滑塊事件 addChangeListener ChangeListener -> stateChanged(ChangeEvent event)
26.滑塊標尺特殊化 HashtMap map = new HashMap(); map.put(new Integer(0),new JLabel("A")); slider.setLabel(map);
27.多選單選按鈕 JCheckBox 和 JRadioButton 其中單選放入ButtonGroup對象中。 判斷是否選中:isSelected() 獲取標簽用:getText(); 事件:ItemListener 方法:itemStateChanged(ItemEvent event)
28.讓樹一開始就全部展開 expandAll(tree,new TreePath(tree.getModel().getRoot())); 其中有: public void expandAll (JTree tree,TreePath path) { ??? tree.expandPath(path); ??? Obect parent = path.getLastPathComponent(); ??? TreeModel model = tree.getModel() ??? if(model ==null)return; ??? if(model.isLeaf(parent)) return; ??? int size = model.getChildCount(parent); ??? for(int i = 0 ;i<size;i++) ??? { ??????? Object child = model.getChild(parent,i); ??????? expandAll(tree,path.pathByAddingChild(child)); ??? } }
29.樹節(jié)點匹配: TreePath path = tree.getNextMatch(str,0,Positon.Bias.Forward); if(path !=null) { ??? tree.setSelectionPath(path); }
30.獲取樹節(jié)點
TreeSelectionListener->valueChanged(TreeSelectionEvent e) TreePath path = e.getPath(); String info = path.getLastPathComponent().toString(); 而這里獲取到是最后那個選擇節(jié)點,如成都。 JTree tree = (JTree)e.getSource(); TreePath tp= tree.getPathForLorLocation(e.getPoint().x,e.getPoint().y); 這個PATH是完整的節(jié)點名,比如:四川,成都
31.截屏程序核心: BufferedImage fullScreenImage = robot.createScreenCapture (new Rectangle ( ??????????????? Toolkit.getDefaultToolkit ().getScreenSize ())); ??????? ImageIcon icon = new ImageIcon (fullScreenImage); 利用 fullScreenImage.getSubimage(int x,int y,int w,int h)得到子圖象(其中的矩形范圍是鼠標拖動事件而得到) ImageIO.write (fullScreenImage.getSubimage(int x,int y,int w,int h),"png","out.png");
界面上:1.繼承JLabel 覆蓋起paint方法; ?? ?2.JPanel 從(JPanel)Dialog.getContentPane()來,JLabel 添加進JPanel; ?? ?3.Dialog設(shè)置為屏幕大小、不顯示邊框等飾物dialog.setUndecorated (true);(JFrame中其實也有這個方法。) ?? ?4.設(shè)置十字光標,dialog.setCursor (Cursor.getPredefinedCursor (Cursor.CROSSHAIR_CURSOR)); ??????? 5.設(shè)置為模態(tài) dialog.setModal (true);
轉(zhuǎn)自:http://www.aygfsteel.com/JAVA-HE/archive/2007/02/06/98338.aspx
用Acegi為你的Spring應(yīng)用加把鎖! [簡介] 對于一個典型的Web應(yīng)用,完善的認證和授權(quán)機制是必不可少的,在SpringFramework中,Juergen Hoeller提供的范例JPetStore給了一些這方面的介紹,但還遠遠不夠,Acegi是一個專門為SpringFramework提供安全機制的項目,全稱為Acegi Security System for Spring,當前版本為0.5.1,就其目前提供的功能,應(yīng)該可以滿足絕大多數(shù)應(yīng)用的需求。
本文的主要目的是希望能夠說明如何在基于Spring構(gòu)架的Web應(yīng)用中使用Acegi,而不是詳細介紹其中的每個接口、每個類。注意,即使對已經(jīng)存在的Spring應(yīng)用,通過下面介紹的步驟,也可以馬上享受到Acegi提供的認證和授權(quán)。
[基礎(chǔ)工作] 在你的Web應(yīng)用的lib中添加Acegi下載包中的acegi-security.jar
[web.xml] 實現(xiàn)認證和授權(quán)的最常用的方法是通過filter,Acegi亦是如此,通常Acegi需要在web.xml添加以下5個filter:
<filter> ? <filter-name>Acegi Channel Processing Filter</filter-name> ? <filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class> ? <init-param> ??? <param-name>targetClass</param-name> ??? <param-value>net.sf.acegisecurity.securechannel.ChannelProcessingFilter</param-value> ? </init-param> </filter> <filter> ? <filter-name>Acegi Authentication Processing Filter</filter-name> ? <filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class> ? <init-param> ??? <param-name>targetClass</param-name> ??? <param-value>net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter</param-value> ? </init-param> </filter> <filter> ? <filter-name>Acegi HTTP BASIC Authorization Filter</filter-name> ? <filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class> ? <init-param> ??? <param-name>targetClass</param-name> ??? <param-value>net.sf.acegisecurity.ui.basicauth.BasicProcessingFilter</param-value> ? </init-param> </filter> <filter> ? <filter-name>Acegi Security System for Spring Auto Integration Filter</filter-name> ? <filter-class>net.sf.acegisecurity.ui.AutoIntegrationFilter</filter-class> </filter> <filter> ? <filter-name>Acegi HTTP Request Security Filter</filter-name> ? <filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class> ? <init-param> ??? <param-name>targetClass</param-name> ??? <param-value>net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter</param-value> ? </init-param> </filter>
最先引起迷惑的是net.sf.acegisecurity.util.FilterToBeanProxy,Acegi自己的文檔上解釋是: “What? FilterToBeanProxy does is delegate the Filter's methods through to a bean which is obtained from the Spring application context. This enables the bean to benefit from the Spring application context lifecycle support and configuration flexibility.”,如希望深究的話,去看看源代碼應(yīng)該不難理解。
再下來就是添加filter-mapping了: <filter-mapping> ? <filter-name>Acegi Channel Processing Filter</filter-name> ? <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> ? <filter-name>Acegi Authentication Processing Filter</filter-name> ? <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> ? <filter-name>Acegi HTTP BASIC Authorization Filter</filter-name> ? <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> ? <filter-name>Acegi Security System for Spring Auto Integration Filter</filter-name> ? <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> ? <filter-name>Acegi HTTP Request Security Filter</filter-name> ? <url-pattern>/*</url-pattern> </filter-mapping>
這里,需要注意以下兩點: 1) 這幾個filter的順序是不能更改的,順序不對將無法正常工作; 2) 如果你的應(yīng)用不需要安全傳輸,如https,則將"Acegi Channel Processing Filter"相關(guān)內(nèi)容注釋掉即可; 3) 如果你的應(yīng)用不需要Spring提供的遠程訪問機制,如Hessian and Burlap,將"Acegi HTTP BASIC Authorization Filter"相關(guān)內(nèi)容注釋掉即可。
[applicationContext.xml] 接下來就是要添加applicationContext.xml中的內(nèi)容了,從剛才FilterToBeanFactory的解釋可以看出,真正的filter都 在Spring的applicationContext中管理:
1) 首先,你的數(shù)據(jù)庫中必須具有保存用戶名和密碼的table,Acegi要求table的schema必須如下:
CREATE TABLE users ( ??? username VARCHAR(50) NOT NULL PRIMARY KEY, ??? password VARCHAR(50) NOT NULL, ??? enabled BIT NOT NULL ); CREATE TABLE authorities ( ??? username VARCHAR(50) NOT NULL, ??? authority VARCHAR(50) NOT NULL ); CREATE UNIQUE INDEX ix_auth_username ON authorities ( username, authority ); ALTER TABLE authorities ADD CONSTRAINT fk_authorities_users foreign key (username) REFERENCES users (username);
2) 添加訪問你的數(shù)據(jù)庫的datasource和Acegi的jdbcDao,如下:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> ? <property name="driverClassName"><value>${jdbc.driverClassName}</value></property> ? <property name="url"><value>${jdbc.url}</value></property> ? <property name="username"><value>${jdbc.username}</value></property> ? <property name="password"><value>${jdbc.password}</value></property> </bean> <bean id="jdbcDaoImpl" class="net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl"> ? <property name="dataSource"><ref bean="dataSource"/></property> </bean>
3) 添加DaoAuthenticationProvider:
<bean id="daoAuthenticationProvider" class="net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider"> ? <property name="authenticationDao"><ref bean="authenticationDao"/></property> ? <property name="userCache"><ref bean="userCache"/></property> </bean>
<bean id="userCache" class="net.sf.acegisecurity.providers.dao.cache.EhCacheBasedUserCache"> ? <property name="minutesToIdle"><value>5</value></property> </bean>
如果你需要對密碼加密,則在daoAuthenticationProvider中加入:<property name="passwordEncoder"><ref bean="passwordEncoder"/></property>,Acegi提供了幾種加密方法,詳細情況可看包 net.sf.acegisecurity.providers.encoding
4) 添加authenticationManager:
<bean id="authenticationManager" class="net.sf.acegisecurity.providers.ProviderManager"> ? <property name="providers"> ??? <list> ????? <ref bean="daoAuthenticationProvider"/> ??? </list> ?? </property> </bean>
5) 添加accessDecisionManager:
<bean id="accessDecisionManager" class="net.sf.acegisecurity.vote.AffirmativeBased"> ? <property name="allowIfAllAbstainDecisions"> ??? <value>false</value> ? </property> ? <property name="decisionVoters"> ??? <list><ref bean="roleVoter"/></list> ? </property> </bean> <bean id="roleVoter" class="net.sf.acegisecurity.vote.RoleVoter"/>
6) 添加authenticationProcessingFilterEntryPoint:
<bean id="authenticationProcessingFilterEntryPoint" class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"> ? <property name="loginFormUrl"><value>/acegilogin.jsp</value></property> ? <property name="forceHttps"><value>false</value></property> </bean>
其中acegilogin.jsp是登陸頁面,一個最簡單的登錄頁面如下:
<%@ taglib prefix='c' uri='http://java.sun.com/jstl/core' %> <%@ page import="net.sf.acegisecurity.ui.AbstractProcessingFilter" %> <%@ page import="net.sf.acegisecurity.AuthenticationException" %> <html> ? <head> ??? <title>Login</title> ? </head>
? <body> ??? <h1>Login</h1> ??? <form action="<c:url value='j_acegi_security_check'/>" method="POST"> ????? <table> ??????? <tr><td>User:</td><td><input type='text' name='j_username'></td></tr> ??????? <tr><td>Password:</td><td><input type='password' name='j_password'></td></tr> ??????? <tr><td colspan='2'><input name="submit" type="submit"></td></tr> ??????? <tr><td colspan='2'><input name="reset" type="reset"></td></tr> ????? </table> ??? </form> ? </body> </html>
7) 添加filterInvocationInterceptor:
<bean id="filterInvocationInterceptor" class="net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor"> ? <property name="authenticationManager"> ??? <ref bean="authenticationManager"/> ? </property> ? <property name="accessDecisionManager"> ??? <ref bean="accessDecisionManager"/> ? </property> ? <property name="objectDefinitionSource"> ??? <value> ????? CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON ????? \A/sec/administrator.*\Z=ROLE_SUPERVISOR ????? \A/sec/user.*\Z=ROLE_TELLER ??? </value> ? </property> </bean>
這里請注意,要objectDefinitionSource中定義哪些頁面需要權(quán)限訪問,需要根據(jù)自己的應(yīng)用需求進行修改,我上面給出 的定義的意思是這樣的: ?a. CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON意思是在比較請求路徑時全部轉(zhuǎn)換為小寫 ?b. \A/sec/administrator.*\Z=ROLE_SUPERVISOR意思是只有權(quán)限為ROLE_SUPERVISOR才能訪問/sec/administrator*的頁面 ?c. \A/sec/user.*\Z=ROLE_TELLER意思是只有權(quán)限為ROLE_TELLER的用戶才能訪問/sec/user*的頁面
8) 添加securityEnforcementFilter:
<bean id="securityEnforcementFilter" class="net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter"> ? <property name="filterSecurityInterceptor"> ??? <ref bean="filterInvocationInterceptor"/> ? </property> ? <property name="authenticationEntryPoint"> ??? <ref bean="authenticationProcessingFilterEntryPoint"/> ? </property> </bean>
9) 添加authenticationProcessingFilter:
<bean id="authenticationProcessingFilter" class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> ? <property name="authenticationManager"> ??? <ref bean="authenticationManager"/> ? </property> ? <property name="authenticationFailureUrl"> ??? <value>/loginerror.jsp</value> ? </property> ? <property name="defaultTargetUrl"> ??? <value>/</value> ? </property> ? <property name="filterProcessesUrl"> ??? <value>/j_acegi_security_check</value> ? </property> </bean> 其中authenticationFailureUrl是認證失敗的頁面。
10) 如果需要一些頁面通過安全通道的話,添加下面的配置:
<bean id="channelProcessingFilter" class="net.sf.acegisecurity.securechannel.ChannelProcessingFilter"> ? <property name="channelDecisionManager"> ??? <ref bean="channelDecisionManager"/> ? </property> ? <property name="filterInvocationDefinitionSource"> ??? <value> ????? CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON ????? \A/sec/administrator.*\Z=REQUIRES_SECURE_CHANNEL ????? \A/acegilogin.jsp.*\Z=REQUIRES_SECURE_CHANNEL ????? \A/j_acegi_security_check.*\Z=REQUIRES_SECURE_CHANNEL ????? \A.*\Z=REQUIRES_INSECURE_CHANNEL ??? </value> ? </property> </bean>
<bean id="channelDecisionManager" class="net.sf.acegisecurity.securechannel.ChannelDecisionManagerImpl"> ? <property name="channelProcessors"> ??? <list> ????? <ref bean="secureChannelProcessor"/> ????? <ref bean="insecureChannelProcessor"/> ??? </list> ? </property> </bean> <bean id="secureChannelProcessor" class="net.sf.acegisecurity.securechannel.SecureChannelProcessor"/> <bean id="insecureChannelProcessor" class="net.sf.acegisecurity.securechannel.InsecureChannelProcessor"/>
[缺少了什么?] Acegi目前提供了兩種"secure object",分別對頁面和方法進行安全認證管理,我這里介紹的只是利用 FilterSecurityInterceptor對訪問頁面的權(quán)限控制,除此之外,Acegi還提供了另外一個Interceptor—— MethodSecurityInterceptor,它結(jié)合runAsManager可實現(xiàn)對對象中的方法的權(quán)限控制,使用方法可參看Acegi自帶的文檔 和contact范例。
[最后要說的] 本來以為只是說明如何使用Acegi而已,應(yīng)該非常簡單,但真正寫起來才發(fā)現(xiàn)想要條理清楚的理順所有需要的bean還是很 困難的,但愿我沒有遺漏太多東西,如果我的文章有什么遺漏或錯誤的話,還請參看Acegi自帶的quick-start范例,但請 注意,這個范例是不能直接拿來用的。
<SCRIPT> var imagepath="10cfeba177b.jpg" var imagewidth=200 //這兩行寫圖片的大小 var imageheight=300 var speed=2; var imageclick="index0.htm" //這里寫點擊圖片連接到的地址 var hideafter=0 var isie=0; if(window.navigator.appName=="Microsoft Internet Explorer"&&window.navigator.appVersion.substring(window.navigator.appVersion.indexOf("MSIE")+5,window.navigator.appVersion.indexOf("MSIE")+8)>=5.5) { isie=1; } else { isie=0; } if(isie){ var preloadit=new Image() preloadit.src=imagepath } function pop() { if(isie) { x=x+dx;y=y+dy; oPopup.show(x, y, imagewidth, imageheight); if(x+imagewidth+5>screen.width) dx=-dx; if(y+imageheight+5>screen.height) dy=-dy; if(x<0) dx=-dx; if(y<0) dy=-dy; startani=setTimeout("pop();",50); } } function dismisspopup(){ clearTimeout(startani) oPopup.hide() } function dowhat(){ if (imageclick=="dismiss") dismisspopup() else window.open(imageclick); } if(isie) { var x=0,y=0,dx=speed,dy=speed; var oPopup = window.createPopup(); var oPopupBody = oPopup.document.body; oPopupBody.style.cursor="hand" oPopupBody.innerHTML = '<IMG SRC="'+preloadit.src+'">'; oPopup.document.body.onmouseover=new Function("clearTimeout(startani)") oPopup.document.body.onmouseout=pop oPopup.document.body.onclick=dowhat pop(); if (hideafter>0) setTimeout("dismisspopup()",hideafter*1000) } </SCRIPT>
<table?? style="TABLE-LAYOUT:?? fixed"?? width="200"?? border="0"?? cellspacing="0"?? cellpadding="7"?? bgcolor="#f7f7f7">?? ? <tr>???? ? <td?? style="LEFT:?? 0px;?? WIDTH:?? 100%;?? WORD-WRAP:?? break-word">?? ? dffadfdaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasfdffadfdasf?? ? </font></td>?? ? </tr>?? ? </table>
tomcat---confi--server.xml中的 <Context path="" docBase="ROOT" debug="0"/> 其中path="工程名" docBase="工程路徑"
?
注意:如果所建項目是servlet2.4的,那么在web.xml中寫taglib就要加一個 <jsp-config>標記,如下所示: ? <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee?<display-name> ?TagStudy2 ?</display-name> ? ? <jsp-config> ?????? <taglib> ?????????? <taglib-uri>/hello</taglib-uri> ?????????? <taglib-location>/WEB-INF/HelloTag.tld</taglib-location> ????? </taglib> ?? </jsp-config> ?? ?<welcome-file-list> ??<welcome-file>default.jsp</welcome-file> ?</welcome-file-list> ? </web-app>
?
1 恐龍說:“遇到色狼,不慌不忙;遇到禽獸,慢慢享受……” 2 找不到恐龍,就用蜥蜴頂 3 關(guān)羽五綹長髯,風(fēng)度翩翩,手提青龍偃月刀,江湖人送綽號——刀郎。 4 男人與女人,終究也只是欲望的動物吧!真的可以因為愛而結(jié)合嗎?對不起,我也不知道。。 5 路邊的野花不要,踩。 6 吃飯與ml是第一生產(chǎn)力。 7 月經(jīng)不僅僅是女人的痛苦,也是男人的痛苦。 8 鴛鴛相抱何時了,鴦在一邊看熱鬧。 9 昨天,系花對我笑了一下,樂得我晚上直數(shù)羊,一只羊,兩只羊,三只羊…… 10 長大了娶唐僧做老公,能玩就玩一玩,不能玩就把他吃掉。 11 男人有沖動可能是愛你,也可能是不愛,但沒有沖動肯定是不愛! 12 站的更高,尿的更遠。 13 女,喜甜食,甚胖!該女有一癖好:痛恨螞蟻,見必殺之。問其故曰:這小東西,那么愛吃甜食,腰還那么細! 14 打破老婆終身制,實行小姨股份制。引入小姐競爭制,推廣情人合同制。 15 在一輛擁擠的公車上,一位女郎忽然叫了起來:別擠啦!別擠啦!把人家的奶都擠出來啦!(她拿著酸奶呢)。 16 我不在江湖,但江湖中有我的傳說。 17 我身在江湖,江湖里卻沒有我得傳說。 18 要是我灌水,就罵我“三個代表”沒學(xué)好吧。 19 如果回帖是一種美德,那我早就成為圣人了! 20 睡眠是一門藝術(shù)——誰也無法阻擋我追求藝術(shù)的腳步! 21 飯在鍋里,我在床上*^_^* 22 戀愛就是無數(shù)個飯局,結(jié)婚就是一個飯局。 23 走,MM,咱們化蝶去…… 24 愛護環(huán)境,人人有病。 25 愛——不是想出來的,愛——是做出來的!! 26 愛她,就請為她做無痛人流手術(shù)! 27 俺從不寫措字,但俺寫通假字! 28 避孕的效果:不成功,便成“人”。 29 勃起不是萬能的,但不能勃起卻是萬萬都不能的! 30 不要在一棵樹上吊死,在附近幾棵樹上多試試死幾次~ 31 不在課堂上沉睡,就在酒桌上埋醉。 32 長得真有創(chuàng)意,活得真有勇氣! 33 自從我變成了狗屎,就再也沒有人踩在我頭上了。 34 丑,但是丑的特別,也就是特別的丑! 35 穿別人的鞋,走自己的路,讓他們找去吧。 36 床上運動也可以減肥的,你們都不知道嗎? 37 此地禁止大小便,違者沒收工具。 38 讀書讀到抽筋處,文思方能如尿崩! 39 佛曰,色即是空,空即是色!今晚,偶想空一下 40 很多女明星不紅的原因是因為沒有張開腿*^_^* 41 花前月下,不如花錢“日”下!*^_^* 42 解釋就是掩飾,掩飾就是編故事! 43 精典之極就是精斑!!! 44 老天,你讓夏天和冬天同房了吧?生出這鬼天氣! 45 漏洞與補丁齊飛,藍屏共死機一色! 46 美女未抱身先走,常使色狼淚滿襟。。。。。。 47 內(nèi)練一口氣,外練一口屁。 48 男人靠的住,母豬能上樹! 49 男人偷腥時的智商僅次于愛因斯坦! 50 你的丑和你的臉沒有關(guān)系。。。。。。 51 .其實我是一個天才,可惜天妒英才! 52 人生不能像做菜、把所有的料都準備好才下鍋! 53 人生重要的不是所站的位置,而是所朝的方向! 54 人生自古誰無死,啊個拉屎不用紙! 55 如果跟導(dǎo)師講不清楚,那么就把他搞胡涂吧! 56 如果有一雙眼睛陪我一同哭泣,就值得我為生命受苦。 57 啥時硬件也可以COPY就好了! 58 生活TMD好玩,因為生活老TMD玩我! 59 所有刻骨銘心的愛都靈魂游離于床上的瞬間! 60 天塌下來你頂著,我墊著! 61 聽君一席話,省我十本書! 62 脫了衣服我是禽獸,穿上衣服我是衣冠禽獸! 63 為中華而努力讀書!一包中華好多錢啊~~~ 64 我的id是假冒的,大家不要相信我是騙子。 65 我媽常說,我們家要是沒有電話就不會這么窮。 66 我喜歡孩子,更喜歡造孩子的過程! 67 我在馬路邊丟了一分錢 ! 68 下雨了,別忘了打傘,濕身是小,淋病就麻煩啦*^_^* 69 修養(yǎng)的藝術(shù),其實就是說謊的藝術(shù)。 70 學(xué)海無涯,回頭是岸! 71 一時的沖動,子孫的危機! 72 我本非隨便的人,但如果你想隨便,那我就隨你的便好啦! 73 有事秘書干,沒事干秘書! 74 與時俱進,你我共赴高潮! 75 只要不下流,我們就是主流! 76 只有假貨是真的,別的都是假的! 77 E網(wǎng)情深牽手E網(wǎng)。走自己的路,讓別人打車去吧。 78 生,容易。活,容易。生活,不容易。 79 流氓不可怕,就怕流氓有文化。 80 做愛做的事,交配交的人。 81 生我之前誰是我,生我之后我是誰? 82 死亡教會人一切,如同考試之后公布的結(jié)果——雖然恍然大悟,但為時晚矣~! 83 不在放蕩中變壞,就在沉默中變態(tài)! 84 走過了年少,腳起了水泡 85 商女不知亡國恨、妓女不懂婚外情。 86 禽獸尚且有半點憐憫之心,而我一點也沒有,所以我不是禽獸。 87 所有的男人生來平等,結(jié)婚的除外。 88 鍛煉肌肉,防止挨揍! 89 看盡天下A片,心中自然無碼~ 90 如果恐龍是人,那人是什么? 91 比我有才的都沒我?guī)洠任規(guī)浀亩紱]我有才! 92 沒有激情的親吻,哪來床上的翻滾? 93 勿以坑小而不灌,勿以坑大而灌之。 94 懷揣兩塊,胸懷500萬! 95 解釋就系掩飾,掩飾等于無出色,無出色不如回家休息!!! 96 我真想親口管你爺爺叫聲:爹! 97 微機原理鬧危機,隨機過程隨機過,實變函數(shù)學(xué)十遍,匯編語言不會編! 98 如果沒有毛片,中國的性教育簡直就是一片空白! 99 男人在結(jié)婚前覺得適合自己的女人很少,結(jié)婚后覺得適合自己的女人很多。 100 人生本無緣,相見易更難,說句心里話,誰不愛錢啊。
小兔說:"我是兔娘養(yǎng)的!"? 小豬說:"我是豬娘養(yǎng)的!"? 小雞說:"我是雞娘養(yǎng)的!"? 小狗說:"你們聊,我先走了!" > > > > 0號陪練說:"外人叫我零陪,好聽!" > > 1號陪練說:"外人叫我一陪,也好聽!" > > 2號陪練說:"外人叫我二陪,也很好聽!" > > 3號陪練說:"你們聊,我們先走了!" > > > > 貓對我說:"我是你奶奶的貓,好聽!" > > 狗對我說:"我是你奶奶的狗,也好聽!" > > 魚對我說:"我是你奶奶的魚,也很好聽!" > > 熊說:"你們聊,我先走了!" > > > > 浪客說:"人們叫我浪人,好聽!" > > 武士說:"人們叫我武人,也好聽!" > > 高手說:"人們叫我高人,也很好聽!" > > 劍客說:"你們聊,我先走了!" > > > > 張靚穎說:"崇拜我的歌迷都說:偶的偶像叫穎" > > 何潔說:"崇拜我的歌迷都說:偶的偶像叫潔" > > 周筆暢說"崇拜我的歌迷都說:偶的偶像叫暢" > > 李宇春說:"你們聊,我先走了!" > > > > 高等數(shù)學(xué)老師說:這學(xué)期我教高數(shù), > > 大學(xué)物理老師說:這學(xué)期我教大物, > > 模擬電子老師說:這學(xué)期我教模電, > > 社會主義經(jīng)濟老師說:你們聊,我先走了。 > > > > 北京大學(xué)的說:我是北大的。 > > 天津大學(xué)的說:我是天大的。 > > 上海大學(xué)的說:我是上大的。 > > 廈門大學(xué)的說:你們聊,我先走了! > > > > 李宗仁將軍說:我這人,有仁! > > 傅作義將軍說:我這人,有義! > > 左權(quán)將軍說:我這人,有權(quán)! > > 霍去病將軍說:你們聊,我先走了! > > > > 美能達的用戶說:我們是美人! > > 佳能的用戶說:我們是佳人! > > 華光的用戶說:我們是華人! > > 尼康的用戶說:你們聊,我先走了! > > > > 老張家的門是柳木做的,老張說:我家的門是木門 > > 老李家的門是塑料做的,老李說:我家的門是塑門 > > 老王家的門是磚頭做的,老王說:我家的門是磚門 > > 老劉家的門是鋼做的,老劉說:你們聊,我先走了! > > > > 師范學(xué)院的學(xué)生說:我是"師院"的 > > 鐵道學(xué)院的學(xué)生說:我是"鐵院"的 > > 職業(yè)學(xué)院的學(xué)生說:我是"職院"的 > > 技術(shù)學(xué)院的學(xué)生說:你們聊,我先走了!
樓主的帖子實在是寫得太好了。文筆流暢,修辭得體,深得魏晉諸朝遺風(fēng),更將唐風(fēng)宋骨發(fā)揚得入木三分,能在有生之年看見樓主的這個帖子。實在是我三生之幸啊。看完樓主的這個帖子之后,我竟產(chǎn)生出一種無以名之的悲痛感--啊,這么好的帖子,如果將來我再也看不到了,那我該怎么辦?那我該怎么辦?直到我毫不猶豫地把樓主的這個帖子收藏了,我內(nèi)心的那種激動才逐漸平靜下來。可是我立刻想到,這么好的帖子,倘若別人看不到,那么不是浪費樓主的心血嗎?經(jīng)過痛苦的思想斗爭,我終于下定決心,犧牲小我,奉獻大我。我要拿出這帖子奉獻給世人賞閱,我要把這個帖子一直往上頂,往上頂!頂?shù)剿腥硕伎吹綖橹梗? 在遇到你之前,我對人世間是否有真正的圣人是懷疑的;而現(xiàn)在,我終于相信了!我曾經(jīng)忘情于兩漢的歌賦,我曾經(jīng)驚訝于李杜的詩才,我曾經(jīng)流連于宋元的詞曲。但現(xiàn)在,我才知道我有多么淺薄! 樓主,你的高尚情操太讓人感動了。在現(xiàn)在這樣一個物欲橫流的金錢社會里,竟然還能見到樓主這樣的性情中人,無疑是我這輩子最大的幸運。讓我深深感受到了人性的偉大。樓主的帖子,就好比黑暗中刺裂夜空的閃電,又好比撕開烏云的陽光,一瞬間就讓我如飲甘露,讓我明白了永恒的真理在這個世界上是真實存在著的。只有樓主這樣具備廣闊胸懷和完整知識體系的人,才能作為這真理的惟一引言者。看了樓主的帖子,我陷入了嚴肅的思考中。我認為,如果不把樓主的帖子頂上去,就是對真理的一種背叛,就是對謬論的極大妥協(xié)。因此,我決定義無返顧地頂了! ??? 說得好啊!我在XX社區(qū)打滾這么多年,所謂閱人無數(shù),就算沒有見過豬走路,也總明白豬肉是啥味道的。一看到樓主的氣勢,我就覺得樓主同在社區(qū)里灌水的那幫小混混有著本質(zhì)的差別!那憂郁的語調(diào),那熟悉的簽名,還有字里行間高屋建瓴的辭藻。沒用的,樓主,就算你怎么換馬甲都是沒有用的,你的億萬擁戴者早已經(jīng)把你認出來了,你一定就是傳說中的最強ID。自從社區(qū)改版之后,我就已經(jīng)心灰意冷,對社區(qū)也沒抱什么希望了,傳說已經(jīng)幻滅,神話已經(jīng)終結(jié),留在社區(qū)還有什么意思?沒想到,沒想到,今天可以再睹樓主的風(fēng)范,我激動得忍不住就在屏幕前流下了眼淚。是啊,只要在樓主的帶領(lǐng)下,社區(qū)就有希望了。我的內(nèi)心再一次沸騰了,我胸腔里的血再一次燃燒了。樓主的幾句話雖然簡單,卻概括扼要,一語道出了我們苦想多年仍不可解的幾個重大問題的根本。樓主就好比社區(qū)的明燈,樓主就好比社區(qū)的方向,樓主就好比社區(qū)的棟梁。有樓主在,社區(qū)的明天必將更好! ??? 大師的話真如“大音希聲掃陰翳”,猶如“撥開云霧見青天”,使我等網(wǎng)民看到了希望,看到了未來!晴天霹靂、醍醐灌頂或許不足以形容大師文章的萬一;巫山行云、長江流水更難以比擬大師的文才!黃鐘大呂,振聾發(fā)聵!你燭照天下,明見萬里;雨露蒼生,澤被萬方!透過你深邃的文字,我仿佛看到了你鷹視狼顧、龍行虎步的偉岸英姿;仿佛看到了你手執(zhí)如椽大筆、寫天下文章的智慧神態(tài);仿佛看見了你按劍四顧、指點江山的英武氣概! ??? 逐字逐句地看完這個帖子以后,我的心久久不能平靜,震撼啊!為什么會有如此好的帖子!我縱橫網(wǎng)絡(luò)BBS多年,自以為再也不會有任何帖子能打動我,沒想到今天看到了如此精妙絕倫的這樣一篇帖子!樓主,是你讓我深深地理解了“人外有人,天外有天”這句話。謝謝儂!在看完這帖子以后,我沒有立即回復(fù),因為我生怕我庸俗不堪的回復(fù)會玷污了這網(wǎng)上少有的帖子。但是我還是回復(fù)了,因為覺得如果不能在如此精彩的帖子后面留下自己的網(wǎng)名,那我死也不會瞑目的!能夠在如此精彩的帖子后面留下自己的網(wǎng)名是多么驕傲的一件事啊!樓主,請原諒我的自私!我知道無論用多么華麗的辭藻來形容樓主您帖子的精彩程度都是不夠的,都是虛偽的,所以我只想說一句:您的帖子太好看了!我愿意一輩子看下去!這篇帖子構(gòu)思新穎,題材獨具匠心,段落清晰,情節(jié)詭異,跌宕起伏,主線分明,引人入勝,平淡中顯示出不凡的文學(xué)功底,可謂是字字珠璣,句句經(jīng)典,是我輩應(yīng)當學(xué)習(xí)之典范。正所謂:“一馬奔騰,射雕引弓,天地都在我心中!”樓主真不愧為無厘界新一代的開山怪!本來我已經(jīng)對這個社區(qū)失望了,覺得這個社區(qū)沒有前途了,心里充滿了悲哀。但是看了你的這個帖子,又讓我對社區(qū)產(chǎn)生了希望。是你讓我的心里重新燃起希望之火,是你讓我的心死灰復(fù)燃,是你拯救了我一顆拔涼拔涼的心!本來我決定不在社區(qū)回任何帖子了,但是看了你的帖子,我告訴自己這個帖子是一定要回的!這是百年難得一見的好貼啊!蒼天有眼啊,讓我在有生之年得以觀得如此精彩絕倫的帖子! 好 好帖
很好帖
確實好帖
少見的好帖
真 *** 好帖
難得一見的好帖
千年等一回的好帖
好得不能再好的好帖
驚天地且泣鬼神的好帖
讓人閱畢擊掌三嘆的好帖
讓人佩服得五體投地的好帖
讓人奔走相告曰須閱讀的好帖
讓斑竹看后決定加精固頂?shù)暮锰?
讓人看后在各論壇紛紛轉(zhuǎn)貼的好帖
讓人看后連成人網(wǎng)站都沒興趣的好帖
讓人看完后就要往上頂往死里頂?shù)暮锰?
讓人不間斷地在各種場合重復(fù)引用的好帖
讓人一見面就問你看過某某好帖沒有的好帖
讓人半夜上廁所都要打開電腦再看一遍的好帖
讓個讀過后都下載在硬盤里詳細研究欣賞的好帖
讓人走路吃飯睡覺干什么事連做夢都夢到它的好帖
讓人翻譯成36種不同外語流傳國內(nèi)外世界各地的好帖
讓人紛紛唱道過年過節(jié)不送禮要送就送某某帖子的好帖
讓國家領(lǐng)導(dǎo)人命令將該帖刻在純金版上當國禮送人的好帖
讓網(wǎng)絡(luò)上紛紛冒出該帖的真人版卡通版搞笑版成人版的好帖
讓人在公共廁所里不再亂涂亂化而是紛紛對它引經(jīng)據(jù)典的好帖
讓某位想成名的少女向媒體說她與該帖作者發(fā)生過性關(guān)系的好帖
讓人根據(jù)它寫成小說又被不同導(dǎo)演拍成48個不同版本的電影的好帖
讓某名導(dǎo)演跟據(jù)此帖改拍的電影在奧斯卡上一連拿了11個獎項的好帖
讓人大代表們看完后聯(lián)名要求根據(jù)該帖的內(nèi)容對憲法做適當修改的好帖
讓人為了誰是它的原始作者紛紛地鬧上法院打官司要爭得它的版權(quán)的好帖
讓各大學(xué)府紛紛邀請該帖作者去就如何發(fā)表優(yōu)秀網(wǎng)絡(luò)文學(xué)為題目演講的好帖
讓人為了該帖而成立了各種學(xué)會來研究并為不同的理解爭得眼紅脖子粗的好帖
讓美國警察于今后逮捕人說你有權(quán)保持沉默還有權(quán)閱讀某某帖子要不要啊的好帖
讓本拉登躲在山洞里還命令他手下冒著被美軍發(fā)現(xiàn)的危險去上網(wǎng)下載來閱讀的好帖
讓薩達姆被捕時被發(fā)現(xiàn)他隨身攜帶的除了一把手槍之外還有的就是它的復(fù)印件的好帖
讓比爾蓋茨在懂事會上發(fā)給與會者人手一份該帖命令仔細閱讀后才討論其他事宜的好帖
讓諾貝兒獎理事會破天荒地因該帖的出現(xiàn)而開會討論一直決定今后設(shè)立最佳帖子獎的好帖
讓聯(lián)合國安理會決定將它譯成宇宙語由中國神州六號升空后不斷播放看有沒有外星人的好帖
讓人看完后ie鎖死連瑞星諾頓都沒法修復(fù)只好格式化硬盤重裝啟動后主頁顯示的還是它的好帖 真是好帖子啊 閣下 字跡工整, 文筆極佳, 才思敏捷, 過目不忘, 十年寒窗, 博學(xué)多才, 見多識廣, 才高八斗, 學(xué)富五車, 文武雙全, 雄韜偉略, 談吐不凡, 談笑風(fēng)聲, 高談闊論, 眉飛色舞, 運籌帷幄, 言簡意賅, 完美無缺, 一針見血, 遠見卓識, 義正詞嚴, 一氣呵成, 大顯神通, 出口成章, 出類拔萃, 出神入化, 萬古流芳, 一本正經(jīng), 一箭雙雕, 長篇大論, 功德無量, 力排眾議, 力挽狂瀾, 氣貫長虹, 氣勢磅礴, 氣吞山河, 堅韌不拔, 身體力行, 空前絕后, 視死如歸, 英姿煥發(fā), 奉公守法, 艱苦奮斗, 忠貞不渝, 舍己為人, 大公無私, 一塵不染, 一鳴驚人, 路過~~~~那分~~~~~閃人~~~~~~~~謝謝~~~~~~~~~~
這年頭,完美的人生就是住英國的房子,戴瑞士手表,拿美國工資,娶韓國女人,嫖俄羅斯女人,開德國轎車,喝法國紅酒,雇菲律賓女傭。
?
這年頭,苦干實干,做給天看;東混西混,一帆風(fēng)順;任勞任怨,永難如愿;會捧會獻,杰出貢獻;盡職盡責(zé),必遭指責(zé);推托栽贓,邀功領(lǐng)賞!
?
這年頭,男人的小康就是有一所像樣的小房,有一輛時尚的小車,有一筆吃喝的小鈔,有一位顧家的小太,有一門管用的小“炮”,有一群擦炮的小蜜!
?
這年頭,為官之道就是為領(lǐng)導(dǎo)干一百件好事也不如與領(lǐng)導(dǎo)一起干一件壞事,領(lǐng)導(dǎo)帶你一起干了一件壞事那肯定有一百件好事等著你!
?
這年頭,說河南人詐騙,廣東人笑了;說河南人造假,浙江人笑了;說河南人斤斤計較,上海人笑了;說河南人夸夸其談,北京人笑了;說河南人傻,諸葛亮笑了!
?
這年頭,河南人好生郁悶:好不容易有座山,卻是平頂山;好不容易有家酒店,卻是駐馬店;好不容易想結(jié)婚,自己卻洛了“陽”;好不容易找個老婆,卻被人家開了“封”!
?
這年頭,接聽電話聲音漸漸小對方是領(lǐng)導(dǎo),聲音漸漸大對方是部下,一聽就發(fā)燥對方撥錯號,笑得不停歇那是女同學(xué),半天哼一下老婆在訓(xùn)話,悄悄避開人對方是情人!
?
這年頭,當官也不容易:體質(zhì)弱的累死,心胸窄的氣死,智商低的悉死,膽量小的嚇死,酒量小的喝死,性欲差的羞死,性欲強的那可真是舒服死!
?
這年頭,教育好子女是生命延續(xù)的重要代表,理順好領(lǐng)導(dǎo)安排好部下是權(quán)力重要代表,辦好朋友的事是人生價值的重要代表!
?
這年頭,人有錢有時間有個好身體,絕品;人有錢無病無時間,珍品;人無錢無病有時間,上品;人無錢無病無時間,次品;人無錢無時間有脾氣,廢品!
?
這年頭,干部素質(zhì)要求你:心中有小平,袋中有文憑,對上能擺平,對下能鏟平,道德沒水平,金庫能填平,左手拿酒瓶,右手握藥瓶,家里有醋瓶,外面有花瓶!
?
這年頭,構(gòu)建和諧社會要注意在自然界不要和天斗,在國際社會不要和美國斗,在路上不要和軍車斗,在單位不要和領(lǐng)導(dǎo)斗,在家里不要和老婆斗!
?
這年頭,聽說要去打臺灣,一老紅軍把計獻:派三萬人馬足矣:派一萬小姐過去把他奶奶的國軍身體搞垮,派一萬河南老鄉(xiāng)過去把他娘的經(jīng)濟搞亂,派一萬領(lǐng)導(dǎo)干部過去把他媽的國庫折騰干!
?
這年頭,10類人做不了大官:1膽小,2話多,3錢少,4關(guān)系差,5酒量小,6才華橫溢,7學(xué)歷太高,8疾惡如仇,9性功能差,10有姿色不肯獻身。
?
這年頭,開展批評太難了:批評老婆她就亂跑,批評老公他就亂搞!批評上級就官位難保,批評同級就關(guān)系難搞,批評自己就自尋煩惱,批評下級就選票減少!
?
這年頭,老婆是家情人是花,工資給家獎金送花,病了回家好了看花,離不了的是家忘不了的是花,常回家看看別忘了澆花!
?
這年頭,女人對男人的基本配置是:身邊站個魁梧的,懷里摟個有功夫的,家里待個賺錢的,遠方有個思念的,夢里藏個初戀的,偶爾來個溫柔的,老了混個懂保健的。
?
這年頭,男人認為情人是手表越漂亮越好,小蜜是懷表越隱秘越好,小姐是電子表越新鮮越好,老婆是自動表不上弦照樣跑,各種表都想要只是時間要掌握好!
?
這年頭,結(jié)婚叫入網(wǎng),重婚叫一卡雙號,婚外戀叫呼叫轉(zhuǎn)移,情人多叫移動夢網(wǎng),離婚叫銷號,分居叫停機留號,女人再婚叫過戶。男人再婚叫補卡,互換叫聯(lián)通。
/** ?* <p>Title: 公式解析類</p> ?* <p>Description: 實現(xiàn)對包含“()”的表達式進行簡單的四則運算。</p> ?* <p>Copyright: Copyright (c) 2004</p> ?* <p>Company: </p> ?* @author leasion ?* @version 1.0 ?*/ /** * 原載于:http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=124&threadID=14861&tstart=90 * 修改者:lkz * 修改說明: *???? 1.增加對負數(shù)運算支持; *???? 2.增加對公式的檢查; *???? 3.增加對類似公式(A+B)+(C-D)的支持。 *???? 4.其它一些小的改動。 * */
import java.util.Vector;
?
public class FormulaParser { ??? private int leftBracket = 0;//左括號個數(shù) ??? private int rightBracket = 0;//右括號個數(shù) ??? private int startL = 0; ??? private int startR = 0; ??? private double answer = 0; ??? private String strValue=""; ??? private String leftNumber = "0"; ??? private String rightNumber = "0"; ??? public String Msg = ""; ??? private String formula=""; ??? private int[] sym = new int[4]; ??? private Vector list = new Vector();
?
??? public FormulaParser(String calRule){ ????? this.setFormula(calRule); ??? } ??? private int getLeftBracket(String calRule) { ??????? leftBracket = 0; ??????? startL = calRule.indexOf("("); ??????? if (startL != -1) { ??????????? calRule = calRule.substring(startL + 1, calRule.length()); ??????? } ??????? while (startL != -1) { ??????????? leftBracket++; ??????????? startL = calRule.indexOf("("); ??????????? calRule = calRule.substring(startL + 1, calRule.length()); ??????? } ??????? return leftBracket; ??? }
?
??? private void setLeftBracket(int leftBracket) { ??????? this.leftBracket = leftBracket; ??? } ??? public void setFormula(String calRule){ ????? formula=replaceSubtration(calRule.trim()); ????? formula="("+formula+")"; ??? } ??? /* ??? /*為了使公式中支持負數(shù),使用“`”表示減號,使用“-”表示負號 ??? */ ??? private String replaceSubtration(String vstr){ ????? String tmp=""; ????? String result=""; ????? int startS = vstr.indexOf("-"); ????? if (startS !=-1) { ??????? if (startS > 0) { ????????? tmp = vstr.substring(startS - 1, startS); ????????? if (!"+".equals(tmp) && !"-".equals(tmp) && !"*".equals(tmp) &&!"/".equals(tmp) && ???????????? !"(".equals(tmp)){ ??????????? result = result + vstr.substring(0, startS) + "`"; ????????? } ????????? else ??????????? result = result + vstr.substring(0, startS + 1); ??????? } ??????? else ????????? result = result + vstr.substring(0, startS + 1); ?????? vstr = vstr.substring(startS + 1); ????? } ????? while (startS != -1) { ??????? startS = vstr.indexOf("-"); ??????? if (startS > 0) { ????????? tmp = vstr.substring(startS - 1, startS); ????????? if (!"+".equals(tmp) && !"-".equals(tmp) && !"*".equals(tmp) &&!"/".equals(tmp) && ???????????? !"(".equals(tmp)) ??????????? result = result + vstr.substring(0, startS) + "`"; ????????? else ??????????? result = result + vstr.substring(0, startS + 1); ??????? } ??????? else ????????? result = result + vstr.substring(0, startS + 1); ????????? vstr = vstr.substring(startS + 1); ????? } ????? result+=vstr; ????? return result; ??? }
?
??? public String getFormula(){ ????? return formula.replace('`','-').substring(1,formula.length()-1); ??? }
?
??? private int getRightBracket(String calRule) { ??????? rightBracket = 0; ??????? startR = calRule.indexOf(")"); ??????? if (startR != -1) { ??????????? calRule = calRule.substring(startR + 1, calRule.length()); ??????? } ??????? while (startR != -1) { ??????????? rightBracket++; ??????????? startR = calRule.indexOf(")"); ??????????? calRule = calRule.substring(startR + 1, calRule.length()); ??????? } ??????? return rightBracket; ??? }
?
??? private void setRightBracket(int rightBracket) { ??????? this.rightBracket = rightBracket; ??? }
?
??? /* ??? /*對比左右括號個數(shù) ??? */ ??? private boolean compareToLR() { ??????? int lb = getLeftBracket(formula); ??????? int rb = getRightBracket(formula); ??????? boolean CTLR = false; ??????? if (lb == rb) { ??????????? Msg = ""; ??????????? CTLR = true; ??????? } else if (lb > rb) { ??????????? Msg = "左括弧的個數(shù)多于右括弧,請檢查!"; ??????????? CTLR = false; ??????? } else { ??????????? Msg = "左括弧的個數(shù)少于右括弧,請檢查!"; ??????????? CTLR = false; ??????? } ??????? return CTLR; ??? } ?? /* ?? /*檢查公式中是否存在非法字符如(+、-)等 ?? */ ?? private boolean checkFormula(){ ????? boolean isOk=true; ????? String[] bracket =new String[2]; ????? String[] sign=new String[4]; ????? bracket[0]="("; ????? bracket[1]=")"; ????? sign[0]="+"; ????? sign[1]="`"; ????? sign[2]="*"; ????? sign[3]="/"; ????? String vstr=""; ????? for(int i=0;i<bracket.length;i++){ ??????? for(int j=0;j<sign.length;j++){ ????????? if (i==0) ??????????? vstr=bracket[i]+sign[j]; ????????? else ??????????? vstr=sign[j]+bracket[i]; ????????? if (formula.indexOf(vstr)>0){ ??????????? Msg="公式中存在非法字符"+vstr; ??????????? isOk=false; ??????????? return isOk; ????????? } ??????? } ????? } ????? for(int i=0;i<sign.length;i++){ ??????? for(int j=0;j<sign.length;j++){ ????????? vstr=sign[i]+sign[j]; ????????? if (formula.indexOf(vstr)>0){ ????????????? Msg="公式中存在非法字符"+vstr; ????????????? isOk=false; ????????????? return isOk; ????????? } ??????? } ????? } ????? if (formula.indexOf("()")>0){ ??????? Msg="公式中存在非法字符()"; ??????? isOk=false; ????? } ????? return isOk; ??? } ?? public boolean checkValid(){ ???? if ((formula==null) || (formula.trim().length()<=0) ) { ?????? Msg="請設(shè)置屬性calRule!"; ?????? return false; ???? } ???? return (compareToLR()&&checkFormula()); ?? }
?
?? /* ? /*返回公式執(zhí)行結(jié)果 ??? return double ? */ ? public double getResult(){ ??? String formulaStr = "", calRule = ""; ??? double value = 0.0; ??? calRule = this.formula; ??? if (checkValid()) { ????? for (int i = 0; i < leftBracket; i++) { ??????? int iStart=calRule.lastIndexOf("(") + 1; ??????? formulaStr = calRule.substring(iStart, ?????????????????????????????????????? iStart+calRule.substring(iStart).indexOf(")")).trim(); ??????? symbolParse(formulaStr); ??????? value = parseString(); ??????? iStart=calRule.lastIndexOf("("); ??????? int iEnd=calRule.substring(iStart).indexOf(")")+1; ??????? calRule = calRule.substring(0,iStart).trim() + ??????????? value + ??????????? calRule.substring(iStart+iEnd, calRule.length()).trim(); ????? } ??? } ??? System.out.println(Msg); ??? double tmp = Math.pow(10, 10); ??? value = Math.round(value * tmp) / tmp; ??? return value; ?? } ??? public void FormulaStr(String calRule) { ??????? String formulaStr = ""; ??????? if (checkValid()) { ??????????? for (int i = 0; i < leftBracket; i++) { ??????????????? formulaStr = calRule.substring(calRule.lastIndexOf("(") + 1, calRule.indexOf(")")).trim(); ??????????????? symbolParse(formulaStr); ??????????????? double value = parseString(); ??????????????? strValue=String.valueOf(value); ??????????????? System.out.println("formulaStr=" + formulaStr); ??????????????? //formulaVal = Double.parseDouble(formulaStr); ??????????????? System.out.println("formulaVal=" + value); ??????????????? calRule = calRule.substring(0, calRule.lastIndexOf("(")).trim() + value + calRule.substring(calRule.indexOf(")") + 1, calRule.length()).trim(); ??????????????? System.out.println("calRule=" + calRule); ??????????? } ??????? } ??? }
?
??? /* ??? /*抽取最終括號內(nèi)數(shù)據(jù)到List ??? */ ??? private void symbolParse(String str) { ??????? list.clear(); ??????? for (int i = 0; i < 4; i++) { ??????????? compareMin(str); ??????????? while (sym[i] != -1) { ??????????????? String insStr = str.substring(0, sym[i]).trim(); ??????????????? list.add(insStr); ??????????????? insStr = str.substring(sym[i], sym[i] + 1).trim(); ??????????????? list.add(insStr); ??????????????? str = str.substring(sym[i] + 1, str.length()).trim(); ??????????????? compareMin(str); ??????????? } ??????? } ??????? if (sym[0] == -1 && sym[1] == -1 && sym[2] == -1 & sym[3] == -1) { ??????????? list.add(str); ??????? } ??? } ???? /* ??? /*循環(huán)比較賦SubString起始值 ??? */ ??? private void compareMin(String str) { ??????? int sps = str.indexOf("`");//減法subtration ??????? sym[0] = sps; ??????? int spa = str.indexOf("+");//加法addition ??????? sym[1] = spa; ??????? int spd = str.indexOf("/");//除法division ??????? sym[2] = spd; ??????? int spm = str.indexOf("*");//乘法multiplication ??????? sym[3] = spm; ??????? for (int i = 1; i < sym.length; i++) { ??????????? for (int j = 0; j < sym.length - i; j++) ??????????????? if (sym[j] > sym[j + 1]) { ??????????????????? int temp = sym[j]; ??????????????????? sym[j] = sym[j + 1]; ??????????????????? sym[j + 1] = temp; ??????????????? } ??????? } ??? }
?
??? private double parseString() ??????????? throws NumberFormatException, StringIndexOutOfBoundsException { ??????? try{ ????????? calculate(); ????????? return answer; ??????? }catch(Exception e){ ????????? Msg="錯誤:" + e.getMessage(); ????????? return 0.0; ??????? } ??? }
?
??? private void calculate() { ??????? /* ??????? /*處理除法 ??????? */ ??????? int spd = list.indexOf("/"); ??????? while (spd != -1) { ??????????? leftNumber = list.get(spd - 1).toString(); ??????????? rightNumber = list.get(spd + 1).toString(); ??????????? list.remove(spd - 1); ??????????? list.remove(spd - 1); ??????????? list.remove(spd - 1); ??????????? double ln = Double.valueOf(leftNumber).doubleValue(); ??????????? double rn = Double.valueOf(rightNumber).doubleValue(); ??????????? double answer = ln / rn; ??????????? list.add(spd - 1, String.valueOf(answer)); ??????????? spd = list.indexOf("/"); ??????? } ??????? /* ??????? /*處理乘法 ??????? */ ??????? int spm = list.indexOf("*"); ??????? while (spm != -1) { ??????????? leftNumber = list.get(spm - 1).toString(); ??????????? rightNumber = list.get(spm + 1).toString(); ??????????? list.remove(spm - 1); ??????????? list.remove(spm - 1); ??????????? list.remove(spm - 1); ??????????? double ln = Double.valueOf(leftNumber).doubleValue(); ??????????? double rn = Double.valueOf(rightNumber).doubleValue(); ??????????? double answer = ln * rn; ??????????? list.add(spm - 1, String.valueOf(answer)); ??????????? spm = list.indexOf("*"); ??????? } ??????? /* ??????? /*處理減法 ??????? */ ??????? int sps = list.indexOf("`"); ??????? while (sps != -1) { ??????????? leftNumber = list.get(sps - 1).toString(); ??????????? rightNumber = list.get(sps + 1).toString(); ??????????? list.remove(sps - 1); ??????????? list.remove(sps - 1); ??????????? list.remove(sps - 1); ??????????? double ln = Double.valueOf(leftNumber).doubleValue(); ??????????? double rn = Double.valueOf(rightNumber).doubleValue(); ??????????? double answer = ln - rn; ??????????? list.add(sps - 1, String.valueOf(answer)); ??????????? sps = list.indexOf("`"); ??????? } ??????? /* ??????? /*處理加法 ??????? */ ??????? int spa = list.indexOf("+"); ??????? while (spa != -1) { ??????????? leftNumber = list.get(spa - 1).toString(); ??????????? rightNumber = list.get(spa + 1).toString(); ??????????? list.remove(spa - 1); ??????????? list.remove(spa - 1); ??????????? list.remove(spa - 1); ??????????? double ln = Double.valueOf(leftNumber).doubleValue(); ??????????? double rn = Double.valueOf(rightNumber).doubleValue(); ??????????? double answer = ln + rn; ??????????? list.add(spa - 1, String.valueOf(answer)); ??????????? spa = list.indexOf("+"); ??????? } ??????? if (list.size() != 0) { ??????????? String result = list.get(0).toString(); ??????????? if (result == null || result.length() == 0) result = "0"; ??????????? answer = Double.parseDouble(list.get(0).toString()); ??????? } ??? } }
原文引自:http://blog.csdn.net/lkz912/archive/2004/12/31/236267.aspx
package hibernatedemo;
import hibernatedemo.person; import java.util.*;
import net.sf.hibernate.Query; import net.sf.hibernate.Session; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cfg.Configuration; import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
publicclass Test { publicstaticvoid main(String[] args)throwsException{ ? ?Configuration cfg = new Configuration().addClass(person.class); ? ?SessionFactory sessions = cfg.buildSessionFactory(); ? ?new SchemaExport(cfg).create(true, true); ? ?Session s = sessions.openSession(); ? ?Query q = s.createQuery("from person"); ? ?for(Iterator it = q.iterate();it.hasNext();){ ? ? ?person b = (person)it.next(); ? ? ?System.out.println("##name:"+b.getName()); ? ?} }
}
引自: http://www.aygfsteel.com/TrampEagle/articles/29972.html
用hibernate建表 把xxx.hbm.xml文件放在class所在位置。偶測試時,執(zhí)行正常,但未見數(shù)據(jù)庫中的表,不知道哪里出錯。 import?net.sf.hibernate.SessionFactory; import?net.sf.hibernate.cfg.Configuration; import?net.sf.hibernate.tool.hbm2ddl.SchemaExport; xxx?{ ????Configuration?conf=?new?Configuration().addClass( xxx.class); ????//第一次運行時用來在數(shù)據(jù)庫中創(chuàng)建表 ????//并且把sql語句輸出到txt文件用的 ????//以后的運行要去掉這一段,否則每次都新建表 ????Properties?prop?=?new?Properties(); ????//沒有設(shè)置hibernate.dialect時,執(zhí)行無法通過,還要找另外一種代替方法,否則這里跟數(shù)據(jù)庫類型綁定,不是一種好的實現(xiàn)方式 ????prop.setProperty("hibernate.dialect",?"net.sf.hibernate.dialect.MySQLDialect"  ; ????SchemaExport?dbExport=new?SchemaExport(conf,?prop); ????dbExport.setOutputFile("sql_out_lib\\sql.txt"  ; ????dbExport.create(true,?true); } dbExport.create(true,true);
?把這個語句的第二個參數(shù)true改成false,就可以生成sql語句了,變成下面的語句: ?dbExport.create(true,?false); ?不過無法直接執(zhí)行,還需要繼續(xù)摸索。 ?另外,發(fā)現(xiàn)這個時候不需要數(shù)據(jù)庫的連接,所以hibernate配置文件的連接池沒有設(shè)置也沒有關(guān)系。
引自:http://www.blogcn.com/user17/yu_qj/blog/6763871.html
轉(zhuǎn)貼:Andy.m?? 日期:2003-07-26?? 人氣:35 <script> function addRow(){ ??? ??? // 插入一行 ??? myNewRow = document.all.myTable.insertRow(); ??? var lenRow = document.all.myTable.rows.length; // 計算總行數(shù) ??? ??? if(lenRow > 1){??????? ??????? var point = myNewRow.rowIndex;??? // 計算當前行位置??? ??????? var lenCol = document.all.myTable.rows(0).cells.length; // 計算每行有幾列 ??????? ??????? // 插入lenCol個td ??????????? for (i=0; i < lenCol; i++) { ??????????????? document.all.myTable.rows(point).insertCell(); ??????????????? document.all.myTable.rows(point).cells(i).innerHTML =?????????????????????????????????????????????? parseFloat(document.all.myTable.rows(point-1).cells(i).innerHTML) + lenCol; ??????? } ??? }else if(lenRow == 1){ ??????? // 原來table是0行,初始化一行 ??????? for(i = 0; i < 10; i++){ ??????????? document.all.myTable.rows(0).insertCell(); ??????????? document.all.myTable.rows(0).cells(i).innerHTML = i; ??????? } ??? }??? }
function delRow(){ ??? document.all.myTable.deleteRow(); } </script> <a href="javascript: addRow()">增加一行</a> <a href="javascript: delRow()">減去一行</a> <table name=myTable border=1 id=myTable> </table>
<script? language="javascript">???
function? printsetup(){? //? 打印頁面設(shè)置? wb.execwb(8,1);? }? function? printpreview(){? //? 打印頁面預(yù)覽? ???????????????? wb.execwb(7,1);? ???????????????? }?
function? printit()? {? if? (confirm('確定打印嗎?')){?
wb.execwb(6,6)? }? }? </script>? <OBJECT? classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"???
height=0? id=wb? name=wb? width=0></OBJECT>? <input? class="ipt"? type=button? name=? button? _print? value="打印"??? onclick? ="? javascript? :printit();">? <input? class="ipt"? type=button??? name=button? _setup? value="打印頁面設(shè)置"???????????
onclick? ="? javascript? :? printsetup();">??? <input? class="ipt"? type=button??? name=button_show? value="打印預(yù)覽"???????????
onClick="javascript:printpreview();">
這年頭,大棚把季節(jié)搞亂,小姐把輩份搞亂,關(guān)系把程序搞亂,級別把能力搞亂,公安把秩序搞亂,金錢把官場搞亂,手機把家庭搞亂!這年頭,女人漂亮的不下廚房,下廚房的不溫柔,溫柔的沒主見,有主見的沒女人味,有女人味的亂花錢,不亂花錢的不時尚,時尚的不放心,放心的沒法看!這年頭,老婆像小靈通經(jīng)濟實惠但限本地使用,二奶像中國電信安全固定但帶不出門,小蜜像中國移動使用方便但話費太貴。情人像中國聯(lián)通優(yōu)雅新潮但常不在服務(wù)區(qū)!這年頭,一哥們說北京地鐵擁擠不堪他懷孕的老婆竟被擠流產(chǎn)了;昨天他問上海的地鐵是不是好些,上海的哥們說更糟:上個月他老婆乘地鐵竟然被擠懷孕了!這年頭,教授搖唇鼓舌,四處賺錢,越來越像商人;商人現(xiàn)身講壇,著書立說,越來越像教授。醫(yī)生見死不救,草菅人命,越來越像殺手;殺手出手麻利,不留后患,越來越像醫(yī)生。明星賣弄風(fēng)騷,給錢就上,越來越像妓女;妓女楚楚動人,明碼標價,越來越像明星。警察橫行霸道,欺軟怕硬,越來越像地痞;地痞各霸一方,敢做敢當,越來越像警察。這年頭,軍委領(lǐng)導(dǎo)說解放軍的工資如果翻四倍可以打美國,翻三倍可以打日本,翻兩倍可以打臺灣,翻一倍可以回家打老婆,目前的工資回家只能被老婆打!
?
Struts的Token(令牌)機制能夠很好的解決表單重復(fù)提交的問題,基本原理是:服務(wù)器端在處理到達的請求之前,會將請求中包含的令牌值與保存在當前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求后,且在答復(fù)發(fā)送給客戶端之前,將會產(chǎn)生一個新的令牌,該令牌除傳給客戶端以外,也會將用戶會話中保存的舊的令牌進行替換。這樣如果用戶回退到剛才的提交頁面并再次提交的話,客戶端傳過來的令牌就和服務(wù)器端的令牌不一致,從而有效地防止了重復(fù)提交的發(fā)生。 這時其實也就是兩點,第一:你需要在請求中有這個令牌值,請求中的令牌值如何保存,其實就和我們平時在頁面中保存一些信息是一樣的,通過隱藏字段來保存,保存的形式如: 〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae"〉,這個value是TokenProcessor類中的generateToken()獲得的,是根據(jù)當前用戶的session id和當前時間的long值來計算的。第二:在客戶端提交后,我們要根據(jù)判斷在請求中包含的值是否和服務(wù)器的令牌一致,因為服務(wù)器每次提交都會生成新的Token,所以,如果是重復(fù)提交,客戶端的Token值和服務(wù)器端的Token值就會不一致。下面就以在數(shù)據(jù)庫中插入一條數(shù)據(jù)來說明如何防止重復(fù)提交。 在Action中的add方法中,我們需要將Token值明確的要求保存在頁面中,只需增加一條語句:saveToken(request);,如下所示: public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) //前面的處理省略 saveToken(request); return mapping.findForward("add"); }在Action的insert方法中,我們根據(jù)表單中的Token值與服務(wù)器端的Token值比較,如下所示: public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) if (isTokenValid(request, true)) { // 表單不是重復(fù)提交 //這里是保存數(shù)據(jù)的代碼 } else { //表單重復(fù)提交 saveToken(request); //其它的處理代碼 } } 其實使用起來很簡單,舉個最簡單、最需要使用這個的例子: 一般控制重復(fù)提交主要是用在對數(shù)據(jù)庫操作的控制上,比如插入、更新、刪除等,由于更新、刪除一般都是通過id來操作(例如:updateXXXById, removeXXXById),所以這類操作控制的意義不是很大(不排除個別現(xiàn)象),重復(fù)提交的控制也就主要是在插入時的控制了。
先說一下,我們目前所做項目的情況: 目前的項目是用Struts+Spring+Ibatis,頁面用jstl,Struts復(fù)雜View層,Spring在Service層提供事務(wù)控制,Ibatis是用來代替JDBC,所有頁面的訪問都不是直接訪問jsp,而是訪問Structs的Action,再由Action來Forward到一個Jsp,所有針對數(shù)據(jù)庫的操作,比如取數(shù)據(jù)或修改數(shù)據(jù),都是在Action里面完成,所有的Action一般都繼承BaseDispatchAction,這個是自己建立的類,目的是為所有的Action做一些統(tǒng)一的控制,在Struts層,對于一個功能,我們一般分為兩個Action,一個Action里的功能是不需要調(diào)用Struts的驗證功能的(常見的方法名稱有add,edit,remove,view,list),另一個是需要調(diào)用Struts的驗證功能的(常見的方法名稱有insert,update)。
就拿論壇發(fā)貼來說吧,論壇發(fā)貼首先需要跳轉(zhuǎn)到一個頁面,你可以填寫帖子的主題和內(nèi)容,填寫完后,單擊“提交”,貼子就發(fā)表了,所以這里經(jīng)過兩個步驟: 1、轉(zhuǎn)到一個新增的頁面,在Action里我們一般稱為add,例如: public ActionForward add(ActionMapping mapping, ActionForm form, ????????????HttpServletRequest request, HttpServletResponse response) ????????????throws Exception { ????????//這一句是輸出調(diào)試信息,表示代碼執(zhí)行到這一段了 ????????log.debug(":: action - subject add");???? ???? ????????//your code here
?????? //這里保存Token值 ????????saveToken(request); ???????? ?????? //跳轉(zhuǎn)到add頁面,在Structs-config.xml里面定義,例如,跳轉(zhuǎn)到subjectAdd.jsp ????????return mapping.findForward("add"); ????} 2、在填寫標題和內(nèi)容后,選擇 提交 ,會提交到insert方法,在insert方法里判斷,是否重復(fù)提交了。 public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ if (isTokenValid(request, true)) { // 表單不是重復(fù)提交 //這里是保存數(shù)據(jù)的代碼 } else { //表單重復(fù)提交 saveToken(request); //其它的處理代碼 } } 下面更詳細一點(注意,下面所有的代碼使用全角括號): 1、你想發(fā)貼時,點擊“我要發(fā)貼”鏈接的代碼可以里這樣的: 〈html:link action="subject.do?method=add"〉我要發(fā)貼〈/html:link〉 subject.do 和 method 這些在struct-config.xml如何定義我就不說了,點擊鏈接后,會執(zhí)行subject.do的add方法,代碼如上面說的,跳轉(zhuǎn)到subjectAdd.jsp頁面。頁面的代碼大概如下: 〈html:form action="subjectForm.do?method=insert"〉 ??〈html:text property="title" /〉 ??〈html:textarea property="content" /〉 ??〈html:submit property="發(fā)表" /〉 ??〈html:reset property="重填" /〉 〈html:form〉 如果你在add方法里加了“saveToken(request);”這一句,那在subjectAdd.jsp生成的頁面上,會多一個隱藏字段,類似于這樣〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae"〉, 2、點擊發(fā)表后,表單提交到subjectForm.do里的insert方法后,你在insert方法里要將表單的數(shù)據(jù)插入到數(shù)據(jù)庫中,如果沒有進行重復(fù)提交的控制,那么每點擊一次瀏覽器的刷新按鈕,都會在數(shù)據(jù)庫中插入一條相同的記錄,增加下面的代碼,你就可以控制用戶的重復(fù)提交了。 if (isTokenValid(request, true)) { // 表單不是重復(fù)提交 //這里是保存數(shù)據(jù)的代碼 } else { //表單重復(fù)提交 saveToken(request); //其它的處理代碼 } 注意,你必須在add方法里使用了saveToken(request),你才能在insert里判斷,否則,你每次保存操作都是重復(fù)提交。 記住一點,Struts在你每次訪問Action的時候,都會產(chǎn)生一個令牌,保存在你的Session里面,如果你在Action里的函數(shù)里面,使用了saveToken(request);,那么這個令牌也會保存在這個Action所Forward到的jsp所生成的靜態(tài)頁面里。 如果你在你Action的方法里使用了isTokenValid,那么Struts會將你從你的request里面去獲取這個令牌值,然后和Session里的令牌值做比較,如果兩者相等,就不是重復(fù)提交,如果不相等,就是重復(fù)提交了。
由于我們項目的所有Action都是繼承自BaseDispatchAction這個類,所以我們基本上都是在這個類里面做了表單重復(fù)提交的控制,默認是控制add方法和insert方法,如果需要控制其它的方法,就自己手動寫上面這些代碼,否則是不需要手寫的,控制的代碼如下: public abstract class BaseDispatchAction extends BaseAction { protected ActionForward perform(ActionMapping mapping, ActionForm form, ????HttpServletRequest request, HttpServletResponse response) ????throws Exception { ????????String parameter = mapping.getParameter(); ????????String name = request.getParameter(parameter); if (null == name) { //如果沒有指定 method ,則默認為 list ????????????name = "list"; ????????}
????????if ("add".equals(name)) { ????????????if ("add".equals(name)) { ????????????????saveToken(request); ????????????} ????????} else if ("insert".equals(name)) { ????????????if (!isTokenValid(request, true)) { ????????????????resetToken(request); ????????????????saveError(request, new ActionMessage("error.repeatSubmit")); ????????????????log.error("重復(fù)提交!"); ????????????????return mapping.findForward("error"); ????????????} ????????} ????????return dispatchMethod2(mapping, form, request, response, name); ????} }
|