參考了這篇the script is not working for any mvc framework中uri的回復,結合當前Uploadify的v2.1.4版,netbean 6.9.1下編寫調試。
● 新建grails工程,名為test,并把Uploadify-v2.1.4.zip解壓到web-app\uploadify目錄下。
● 新建grails控制器PictureController,代碼如下
package com.test class PictureController { def index = { redirect(action: "upload") } def upload = { } def savePicture = { def files = request.getFileMap(); def path = "c:/test/" + files.get("Filedata").getOriginalFilename(); files.get("Filedata").transferTo( new File(path)) render (view:'upload') } } |
● 新建grails視圖upload.gsp,代碼如下,注意粗體部分的上下文路徑
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>upload file sample</title> <link rel="stylesheet" href="/test/uploadify/uploadify.css" type="text/css" /> <script type="text/javascript" src="/test/uploadify/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="/test/uploadify/swfobject.js"></script> <script type="text/javascript" src="/test/uploadify/jquery.uploadify.v2.1.4.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $("#fileUpload").uploadify({ 'uploader': '/test/uploadify/uploadify.swf', 'cancelImg': '/test/uploadify/cancel.png', 'script': '/test/picture/savePicture', 'folder': 'files', 'multi': true, 'buttonText': 'add', 'displayData': 'speed', 'simUploadLimit': 2 }); }); </script> </head> <body> <hr width=100% size="1" color="" align="center"> <h2>Multiple File Upload</h2> <p>checkScript, buttonText, simulataneous upload limit</p> <div id="fileUpload">You have a problem with your javascript</div> <a href="javascript:$('#fileUpload').uploadifyUpload()">Start Upload</a> | <a href="javascript:$('#fileUpload').uploadifyClearQueue()">Clear Queue</a> <p></p> </body> </html> |
● 運行工程,訪問http://localhost:8080/test/picture/upload
公司安排研究耶魯CAS單點登錄的實現,并研究了一下它的代理協議,看了N多文檔和代碼,才大概明白是怎么回事。
為了方便有興趣的朋友學習,去掉了HTTPS的加密,源代碼、webapp包和配置文件都有。
本來打算針對這個寫篇文章,不想寫了。
另:
下載地址:
原帖地址:java開發的亂碼問題
第一,存文件必須以一種編碼存;讀文件也必須以一種編碼讀,如不特別設置,去系統默認的編碼,中文windows為GBK編碼。
從.java->.class過程是,先編寫.java文件并按莫種編碼方式保存,然后用javac方法編譯此文件,注意如.java沒按系統默認編碼保存則要帶encoding參數指明實際編碼,否則出錯,生成的.class文件存為系統默認編碼。
從.jsp->.java->.class,先存為某種編碼的.jsp文件,然后tomcat根據pageEncoding讀取并轉化為servlet存為系統默認編碼,然后同上面.java->.class過程。
第二,IDE的encoding為對系統下文件打開的解碼方式或保存的編碼方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,則eclipse會自動存為UTF-8方式,不管eclipse的encoding是什么,這也是eclipse的聰明之處。
第三,
pageEncoding="UTF-8"表示此文件的編碼方式,必須與此文件存儲方式一致(所以eclipse會首選根據它來存文件),tomcat根據這個來讀此.jsp文件并編譯為servlet。
contentType="text/html;charset=UTF-8"表示當瀏覽器得到此文件時以什么方式解碼。例如:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<head>
<title>test</title>
</head>
<body>
我是個好人
</body>
</html>
會產生亂碼,因為存為UTF-8的文件被解碼為iso8859-1,這樣 如有中文肯定出亂碼。
至此,頁面應為:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>中文問題</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</html>
第四,
request.setCharacterEncoding("UTF-8")是把提交內容的字符集設為UTF-8
response.setCharacterEncoding("UTF-8")可以把頁面中的<%@ page contentType="text/html;charset=iso8859-1"%>換為charset=UTF-8,是給告訴瀏覽器我這個文件的編碼方式。
第五,表單提交:無論何種表單提交都可以在后臺的java文件中通過String des = new String(s.getBytes("iso8859-1"),"UTF-8");來轉換成你想要的UTF-8編碼方式。但如果每處都加詞句太麻煩,故分post和get兩種方式區分提交(tomcat5以后分開處理,之前處理方式一樣,即都可以用request.setCharacterEncoding("UTF-8")方法處理,不過tomcat5以后get提交方法用此語句無效)。
1,post提交的數據:
程序加上org.springframework.web.filter.CharacterEncodingFilter過濾器.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
因為規范要求瀏覽器提交數據都要用utf8編碼,所以這里設置編碼方式為UTF8.
特別注意:
a,這個過濾器只是簡單的調用:request.setCharacterEncoding(this.encoding);
在這個語句之前不能調用任何的request.getParameter()方法,否則會設置tomcat的缺省字符集為"ISO-8859-1",并且使setCharacterEncoding的調用失效.所以在這個過濾器之前的過濾器中不能有對getParameter這類方法的調用,比較安全的做法就是把這個過濾器盡量靠前放.
b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
這個value也設置tomcat的缺省字符集為"ISO-8859-1",使setCharacterEncoding的調用失效.可能其他的value也有這個問題,我沒有測試過.
如果要觀察http請求參數,可以考慮用過濾器或者其他工具,例如ethereal(http://www.ethereal.com/)
2,get提交的數據:
兩種情況:
a,如果從地址欄直接輸入漢字,則一般編碼為"GBK",需要用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出
b,如果是頁面超連接連接中帶的漢字,則編碼根據頁面編碼的不同而不同,如果頁面的
content="text/html; charset=utf-8",則在tomcat/conf/server.xml中的配置文件中:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" />
加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正確內容.
如果content="text/html; charset=GBK",需用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出,其他情況類似.
總結:
1,所有頁面使用utf8編碼,
2,服務器加上過濾器,
3,server.xml中不要使用
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
4,server.xml文件加上useBodyEncodingForURI="true"
這樣應該可以搞定大多數前臺的中文問題.至于地址欄輸入中文,不支持也罷,一般的程序很少要求
從這里輸入.
第六,連接數據庫
1、mysql配置文件:
修改mysql在windowsmy.ini里default-character-set=utf-8
2、mysql里數據庫和表也都設為utf8_unicode_ci
3、數據庫連結:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,關鍵就在于此:此句中間是'&'不是'&'這是因為數據庫連結時,在.jsp和.java文件中應該用&號,而XML文件中需要用&
原帖:http://chenyaqiong81081.blog.163.com/blog/static/44622594200791235256255/
一、Runtime.getRuntime().exec()執行命令情況:
Runtime.getRuntime().exec("cmd /c your command")//2000
Runtime.getRuntime().exec("command /c your command")//98
Runtime.getRuntime().exec("sh/ your command")//linux
二、執行.sh文件的情況:
1、把命令寫成a.sh ;執行命令的時候
Process child = Runtime.getRuntime().exec("bash a.sh,null,new File("http://usr/local/mysql/bin/"));
child.waitFor();
........
2、Process child = Runtime.getRuntime().
exec(new String[] {"/bin/sh","-c","mysqldump -u root -p7788919 axtic_cg" },
null,
new File("/usr/local/mysql/bin/"));
child.waitFor();
注:waitFor()等待操作完成
命令:DIR,列文件、目錄
增加參數:/-C
參數說明:DIR列文件、目錄時顯示的文件大小,其數值以千為單位進行分隔,使用此參數即“DIR/-C”將取消顯示中的分隔符,以滿足部分人的視覺習慣。
增加參數:/Q
參數說明:Windows是多用戶操作系統,使用此參數即“DIR /Q”列文件、目錄時,將顯示出文件、目錄的用戶屬性。
增加參數:/T:C、/T:A、/T:W
參數說明:使用此參數即“DIR/T:C”、“DIR/T:A”、“DIR/T:W”分別顯示文件、目錄的創建時間、上次訪問時間和上次修改時間。
增加參數:/X
參數說明:使用此參數即“DIR/X”列文件、目錄時,會對長文件名同時顯示“8.3”格式的文件名。
命令:CD,改變目錄
增加參數:/D
參數說明:此參數的作用是快速改變當前目錄,比如當前目錄是C:\Windows,使用命令“CD/D E:\Tools”可快速切換到E:\Tools目錄下。注:只有在Win XP的“運行”文本框中輸入“CMD”得到的DOS窗口中才能使用此參數。
命令:MD,建立目錄
功能說明:此命令并未增加參數,但是增強了功能,它可一次建立多級子目錄, 例如使用命令“MD AA\BB\CC\DD”將一次性創建AA、BB、CC、DD四級子目錄。而在老版本的DOS中,若不存在AA子目錄,便無法直接建立AA下的BB等深層子目錄。
命令:RD,刪除目錄
增加參數:/S
參數說明:使用此參數即“RD/S”用于刪除目錄樹,即刪除目錄及目錄下的所有子目錄和文件,相當于以前版本中的DELTREE命令。
增加參數:/Q
參數說明:使用上面的/S參數刪除目錄樹時,系統會要求用戶確認是否真的要刪除。若同時使用/Q參數即“RD/S /Q”,在進行刪除操作時將取消確認,相當于DELTREE命令的/Y參數。
命令:DEL,刪除文件或目錄
增加參數:/F
參數說明:使用此參數即“DEL/F”可刪除只讀文件。
增加參數:/S、/Q
參數說明:使用此參數即“DEL/S”作用與“RD/S”完全相同,即刪除目錄及目錄下的所有子目錄和文件。同時使用參數/Q,可取消刪除操作時的系統確認。
增加參數:/A
參數說明:刪除指定屬性或指定屬性以外的文件,/AR、/AH、/AS、/AA分別表示刪除只讀、隱藏、系統、存檔文件,/A-R、/A-H、/A-S、/A-A表示刪除除只讀、隱藏、系統、存檔以外的文件。例如“DEL/AR *.*”表示刪除當前目錄下所有只讀文件,“DEL/A-S *.*”表示刪除當前目錄下除系統文件以外的所有文件。
命令:ATTRIB,更改文件或目錄的屬性
增加參數:/D
參數說明:在Win XP中我們不能把文件或文件夾設置為系統屬性,只能設為只讀、隱藏或存檔屬性。而帶參數/D使用ATTRIB命令可以對文件的所有屬性進行設定,設定時必須與參數/S同時使用。例如“ATTRIB /S /D +S D:\Study”,作用是將D:\Study文件夾設置為系統文件夾。
命令:Format,格式化磁盤
增加參數:/FS:filessystem
參數說明:按指定文件系統類型(FAT、FAT32、NTFS)格式化磁盤,例如“Format /FS:NTFS”。
命令:DATE、TIME,顯示系統日期和時間
增加參數:/T
參數說明:使用此參數即“DATE/T”、“TIME/T”將只顯示當前日期和時間,而不必輸入新日期和時間
Win2000/XP應用之奇技酷招
每個Windows用戶都希望Windows的啟動速度越快越好,不過,如果你想讓Windows啟動速度更快些,還要掌握一些加速Windows啟動的獨門秘技!
1.不容忽視的磁盤IDE通道
Windows XP中有一個非常影響啟動速度的設置,那就是磁盤IDE通道。一般來說,Windows XP用戶不需要安裝主板的IDE驅動或補丁程序,ULTRA DMA功能就已經打開了。也正因為如此,絕大多數用戶會讓IDE通道處于自動狀態,但這會導致Windows XP啟動變慢——因為主板可以連接四個IDE設備,但大多數電腦只有兩個IDE設備,即硬盤和光驅。少數人可能有單硬盤、雙光驅(DVD和刻錄機)或雙硬盤、單光驅,即便這樣也只有三個IDE設備,所以一般都有1~2個IDE通道處于空閑狀態。此時,你應該把并不存在的IDE設備設置為“無”,而不是“自動檢測”。
提示:設置IDE通道的方法是:單擊“開始→控制面板”,雙擊“系統”,切換到“硬件”選項卡,單擊“設備管理器”,再雙擊“IDE ATA/ATAPI控制器”。雙擊下面的“主要IDE通道”或“次要IDE通道”。我們可以看到,“設備0”下面的“設備類型”不可選,表明該IDE通道目前已被使用。“設備1”下面的“設備類型”可選,如果你近期內不再添加新的IDE設備,可以將“設備類型”設置為“無”。
2.禁用服務和啟用Power User
Windows 2000/XP的啟動速度要比Windows 9x/Me慢,眾多的服務是重要因素之一,因此普通用戶禁用一些無用的服務,對啟動速度也有很大幫助:
alerter (用戶不在局域網并且不需要管理警報)
clipbook (用戶不需要查看遠程剪貼簿的剪貼頁面)
distributed link tracking client (用戶不使用NTFS分區并且沒有連入局域網)
distributed transaction coordinator (不需要同時處理多個數據庫或文件系統)
fax service (不需要發送或接收傳真)
ftp publishing service(你的電腦不做為FTP服務器使用)
iis admin service (你的電腦不做為Web服務器使用)
另外,建議大家創建一個Power User用戶,平時用它來登錄Windows 2000/XP,因為相比管理員身份,它啟動的服務更少同時也更加安全。
3.及時清理日志文件
Windows 2000/XP的日志文件比較容易被用戶忽視。其實當我們每次開關機、運行程序、系統報錯時,這些信息都會被記錄下來,保存在日志文件中。但日志文件會隨著時間的增長越來越大,從而影響了系統啟動速度。我們可以自己指定日志文件的大小及處理方式:
進入“開始→設置→控制面板→管理工具”,雙擊“事件查看器”或是單擊“開始→運行”,輸入“eventvwr.msc”后回車,即可打開“事件查看器”,在右側窗口中可看到應用程序日志、安全日志和系統日志。在任意一種日志上面右擊并選擇“屬性”,就可以在如圖所示的對話框中為日志文件設定最大值,還可以選擇當日志滿了以后的處理方式——一般來說讓它自動覆蓋一段時間以前的舊日志,這樣日志文件就永遠不會超出指定大小。單擊“篩選器”選項卡可以指定需要寫入日志文件的事件類型。
設置“系統日志”的屬性
4.借花獻佛加快Windows 2000 啟動
Windows XP相比Windows 2000在很多方面進行了優化改進,因而啟動速度更快,那么能不能讓Windows 2000也可以享受這樣的好處呢?其實,只要找到Windows XP相應語言版本文件,然后替換Windows 2000的相應文件即可。這兩個文件為NTLDR、NTDETECT.COM,它們都在系統分區的根目錄下。當然,為了防止Windows 2000出錯,建議用戶在替換這兩個文件前備份Windows 2000原有的同名文件。
5.讓藍色滾動條只滾動一圈
這是一個適用于Windows XP的秘技。打開“注冊表編輯器”,依次展開[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters]分支,然后雙擊右側窗口中的DWORD值“EnablePrefetcher”,將其值由“3” 改為“1”。退出注冊表編輯器并重啟電腦,你會發現進入Windows XP時藍色滾動條的滾動時間明顯減少了!
Java解壓多重zip壓縮包
-- org.apache.commons.compress.archivers.zip.ZipFile結合ZipArchiveInputStream來實現
針對前一篇文章《Java打多重zip壓縮包-- ByteArrayOutputStream結合org.apache.commons.compress來實現》打包后的zip文件如何解壓的問題。
部分代碼如下:
File f = new
File("c:/test.zip"); ZipFile zf = new ZipFile(f,
"gbk"); File folder = new
File("c:/test"); if (!folder.exists()) { folder.mkdirs(); }
for
(Enumeration<ZipArchiveEntry> files = zf.getEntries();
files.hasMoreElements();) {
ZipArchiveEntry zae =
files.nextElement(); String zipname =
zae.getName(); if
(zipname.endsWith(".zip")) { String
innerzip = StringUtils.removeEnd(zipname, ".zip"); File
innerfolder = new File(folder + File.separator + innerzip); if
(!innerfolder.exists()) {
innerfolder.mkdirs(); }
ZipArchiveInputStream zais = new ZipArchiveInputStream(zf.getInputStream(zae),
"GBK", true);
FileOutputStream fos = null;
ZipArchiveEntry innerzae = null; while
((innerzae = zais.getNextZipEntry()) != null) {
fos = new FileOutputStream(folder + File.separator + innerzip +
File.separator + innerzae.getName());
IOUtils.copy(zais, fos); }
zais.close();
fos.flush();
fos.close(); } else {
ZipArchiveEntry packinfo = zf.getEntry(zipname); String
filename = folder + File.separator + zipname;
FileOutputStream fos = new FileOutputStream(filename); InputStream
is = zf.getInputStream(packinfo);
IOUtils.copy(is, fos);
is.close();
fos.flush();
fos.close(); } }
zf.close(); |
解包后效果如下圖:
參考資料:
1、《Java打多重zip壓縮包 -- ByteArrayOutputStream結合org.apache.commons.compress來實現》
http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6
2、Apache Commons Compress
http://commons.apache.org/compress/
3、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_44cbjdbrfn
Java打多重zip壓縮包
-- ByteArrayOutputStream結合org.apache.commons.compress來實現
也就是很多個zip文件,但是打包的時候,部分要先集中到一個zip文件后,再寫入總的zip文件。
可以采用臨時文件夾的方式來解決,下面也是一種解決方法,部分代碼如下:
File f1 = new File("C:/boot.ini"); File f2 = new File("C:/NTDETECT.COM");
final ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
//changed @ 2009年7月21日8:37:41 //ArchiveOutputStream ostemp = new ArchiveStreamFactory().createArchiveOutputStream("zip", baos); ZipArchiveOutputStream ostemp = new ZipArchiveOutputStream(baos); ostemp.setEncoding("GBK");
ostemp.putArchiveEntry(new ZipArchiveEntry(f1.getName())); IOUtils.copy(new FileInputStream(f1), ostemp); ostemp.closeArchiveEntry();
ostemp.putArchiveEntry(new ZipArchiveEntry(f2.getName())); IOUtils.copy(new FileInputStream(f2), ostemp); ostemp.closeArchiveEntry();
ostemp.finish(); ostemp.close();
final OutputStream out = new FileOutputStream("c:/test.zip"); ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream("zip", out);
os.putArchiveEntry(new ZipArchiveEntry("打包.zip")); baos.writeTo(os); os.closeArchiveEntry();
baos.close();
os.finish(); os.close(); |
[changed @ 2009年7月21日8:37:41]
當初查資料時,就知道有個亂碼錯誤,自己從沒發現過,后來發現是因為winrar 3.8已經解決了這個問題。
但是為了和其他兼容,修改了代碼。
打包后效果如下圖:
參考資料:
1、Commons Compress
http://labs.xiaonei.com/apache-mirror/commons/compress/binaries/commons-compress-1.0-bin.tar.gz
2、java.io.ByteArrayOutputStream
http://java.sun.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html
3、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6
Apache Solr集成至Tomcat
原有系統已經開發,框架以SSH為基礎,頁面編碼GBK,數據庫為oracle,容器為tomcat6,需要整合全文檢索,下面只是一個簡單的整合測試。
1、嵌入Tomcat:
解壓 apache-solr-1.3.0.tgz,拷貝apache-solr-1.3.0\example\example-DIH\solr目錄到Tomcat的安裝目錄后,修改solr目錄中的solr.xml,屏蔽rss部分的配置,內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
<Context docBase="${catalina.home}/webapps/solr.war" debug="0" crossContext="true" > |
<Connector port="8983" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> |
2、配置DataImportHandler:
change @ 2009年7月1日10:19:57
主要修改Tomcat\solr\db\conf\db-data-config.xml、Tomcat\solr\db\conf\schema.xml、Tomcat\solr\db\conf\solrconfig.xml,三個配置文件:
<dataConfig> <dataSource driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:orcl" user="solr" password="solr" batchSize="50"/> <document name="contents" > <entity name="content" pk="ID" query="select * from CONTENT" deltaQuery="select ID from CONTENT where to_char(PUBTIME,'yyyy-mm-dd hh24:mi:ss') > '${dataimporter.last_index_time}'" transformer="ClobTransformer"> <field name="title" column="TITLE" /> <field column="CONTENT" clob="true"/> <field name="pubtime" column="PUBTIME" /> </entity> </document> </dataConfig> |
在types標簽最后,追加fieldtype,名稱為text_cjk,中日韓分詞分析器;
......
<fieldtype name="text_cjk" class="solr.TextField"> <analyzer class="org.apache.lucene.analysis.cjk.CJKAnalyzer"/> </fieldtype>
</types> |
屏蔽或清除<fields></fields>中的全部代碼,并添加如下內容:
<fields> <field name="id" type="slong" indexed="true" stored="true" required="true" /> <field name="title" type="text_cjk" indexed="true" stored="false"/> <field name="content" type="text_cjk" indexed="true" stored="true"/> <field name="pubtime" type="date" indexed="true" stored="true"/> <field name="searchtext" type="text_cjk" indexed="true" stored="false" multiValued="true"/> </fields> |
修改默認唯一索引為先前定義的id:
<uniqueKey>id</uniqueKey> |
修改默認搜索字段為先前定義的searchtext,并將要搜索的title和content都拷貝到searchtext中,方便統一檢索:
......
<defaultSearchField>searchtext</defaultSearchField> ......
<copyField source="title" dest="searchtext"/> <copyField source="content" dest="searchtext"/> ...... |
add @ 2009年7月1日10:19:57
修改<dataDir></dataDir>標簽中的檢索數據存放路徑。內容如下:
<dataDir>${catalina.home}/solr/db/data</dataDir> |
3、導入和查詢:
pubtime:[2007-11-16T00:00:00Z TO 2008-11-28T00:00:00Z] AND 工作; pubtime desc |
點擊搜索,測試。
4、xml解析:
一個簡單solr查詢結果的輔助搜索類,內容如下:
import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.List;
import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.io.SAXReader; import org.apache.commons.lang.time.DateUtils;
public class SolrUtils { private List<Node> docs = new ArrayList<Node>(); private Number numFound = 0; private Document doc; public List<Node> getDocs() { return docs; }
public Number getNumFound() { return numFound; } @SuppressWarnings("unchecked") public SolrUtils(String urlString) { doc = documentFromURL(urlString); if (doc != null ) { docs = (List<Node>)doc.selectNodes("/response/result/doc"); numFound = doc.numberValueOf("/response/result/@numFound"); } } public Document documentFromURL(String urlString){ try { SAXReader reader = new SAXReader(); URL url = new URL(urlString); doc = reader.read(url); return doc; } catch (Exception e) { e.printStackTrace(); } return null; }
public static String valueOf(Object obj, String name){ return valueOf(obj, "str", name); } public static Date dateValueOf(Object obj, String name){ String[] parsePatterns = new String[]{ "yyyy-MM-dd'T'HH:mm:ss'Z'", "yyyy-MM-dd'T'HH:mm:ss.S'Z'", "yyyy-MM-dd'T'HH:mm:ss.SS'Z'", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", }; try { return DateUtils.parseDate(valueOf(obj, "date", name), parsePatterns); } catch (Exception e) { e.printStackTrace(); } return null; } public static String valueOf(Object obj, String type, String name){ String path = "./" + type + "[@name='" + name + "']"; if (obj instanceof Node) { Node n = (Node)obj; return n.valueOf(path); } return ""; } public static Number numberValueOf(Object obj, String type, String name){ String path = "./" + type + "[@name='" + name + "']"; if (obj instanceof Node) { Node n = (Node)obj; return n.numberValueOf(path); } return null; } public static void main(String[] args) throws Exception { String url = "http://localhost:8983/solr/db/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on"; SolrUtils su = new SolrUtils(url); System.out.println(su.getNumFound()); System.out.println(su.getDocs().size()); for (Node doc : su.getDocs()) { System.out.println(valueOf(doc, "id")); System.out.println(valueOf(doc, "title")); System.out.println(dateValueOf(doc, "pubtime")); }
}
} |
參考資料:
1、Apache Solr 的新特性
http://www.ibm.com/developerworks/cn/java/j-solr-update/
2、Solr開發經驗[原]
http://www.jinsehupan.com/blog/?p=25
3、slf4j-jdk14-1.5.5.jar、slf4j-api-1.5.5.jar、solr-dataimporthandler-1.4-SNAPSHOT.jar
https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-jdk14-1.5.5.jar
https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-api-1.5.5.jar
4、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_37f4jv46gb
原帖:http://space.itpub.net/29987/viewspace-51921
有的時候我們看到多個異常的進程需要被kill掉,如果一個一個的去做的話,覺得實在是太慢,下面這里提供有兩種方法可以實現對有規律的結果做這個kill的動作。
1.
ps -ef | grep $1| awk '{print $2}' | xargs kill -9
2.
for i in `ps -ef|grep $1|awk '{print $2 }'`
do
kill -9 $i
done
另可以把ps語句再增加些參數如下:
ps -ef|grep java| grep -v grep| grep $1| awk '{print $2}'
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm... 閱讀全文