#
var k=window.open("about:blank", targetName, "resizable=yes,scrollbars=yes,menubar=0,location=0,personalbar=0,left=0,top=0");
if(k){
k.focus();
form.submit();
}
if(k == null){
alert("Sorry,your browser blocked the pop window,please press the 'Ctrl' button or remove the block pop window function!");
}
下面這段代碼將把image調(diào)整的height和width都適合制定大小。
<img src="xxxx" border="0" onload="resizeimage(this,170,50);"/>
<script language='javascript'>
function resizeimage(img,maxHeight,maxWidth)
{
var w=img.width,h=img.height;
if (h>maxHeight)
{
img.height=maxHeight;
img.width=(maxHeight/h)*w;
w=img.width;
h=img.height;
}
if (w>maxWidth)
{
img.width=maxWidth;
img.height=(maxWidth/w)*h;
}
}
</script>
十進(jìn)制轉(zhuǎn)成十六進(jìn)制:
Integer.toHexString(int i)
十進(jìn)制轉(zhuǎn)成八進(jìn)制
Integer.toOctalString(int i)oBin
十進(jìn)制轉(zhuǎn)成二進(jìn)制
Integer.taryString(int i)
十六進(jìn)制轉(zhuǎn)成十進(jìn)制
Integer.valueOf("FFFF",16).toString()
八進(jìn)制轉(zhuǎn)成十進(jìn)制
Integer.valueOf("876",8).toString()
二進(jìn)制轉(zhuǎn)十進(jìn)制
Integer.valueOf("0101",2).toString()
ron命令:循環(huán)執(zhí)行某一命令。at命令只能執(zhí)行一次,雖然都是計(jì)劃任務(wù)的命令,這是這兩個(gè)命令的區(qū)別
。
用戶cron:用戶自己加的
組 cron:系統(tǒng)默認(rèn)就有的
#ls /etc/crontab //顯示crontab命令路徑
#cat /etc/crontab //查看系統(tǒng)crontab
* * * * * 用戶名 可執(zhí)行命令
下面是每個(gè)位置的表示意義和取值范圍
名稱 * * * * * 用戶名 可執(zhí)行命令
表示 分鐘 小時(shí) 日期 月份 星期
取值范圍 0-59 0-23 1-31 1-12 0-6
* * * * * //代表每分鐘
1 * * * * //代表每小時(shí)第1分鐘
02 12 * * * //代表每天12點(diǎn)第2分鐘(每天12:02)
0-59/2 * * * * //代表每2分鐘執(zhí)行一次任務(wù)
#which 命令名稱:查看命令所在目錄路徑。
#which date //查看date命令所在目錄路徑
/bin/date
#crontab -e //編輯crontab命令,-e(edit)代表編輯
* * * * * /bin/date >>/root/66.txt //每分鐘向/root/66.txt寫入一次當(dāng)前系統(tǒng)時(shí)間
#crontab -l //顯示用戶計(jì)劃任務(wù)
#crontab -r //刪除用戶計(jì)劃任務(wù)
注意:#crontab -r命令,在哪個(gè)用戶下,刪除的就是哪個(gè)用戶的計(jì)劃任務(wù),還需要注意的是該命令是刪除
所有用戶的所有計(jì)劃任務(wù)。還有普通用戶不能刪除root的計(jì)劃任務(wù)的權(quán)限。
普通用戶進(jìn)行crontab命令計(jì)劃任務(wù)操作
例:#su - text //切換到普通用戶text
$crontab -e //在text普通用戶中進(jìn)行crontab命令計(jì)劃任務(wù)編輯
* * * * * /bin/date >>/home/text/33.txt //每分鐘向/home/text/33.txt寫入一次當(dāng)前系統(tǒng)時(shí)間
cat /home/text/33.txt //顯示/home/text/33.txt文件內(nèi)容
#crontab -u 用戶名 -e //在root用戶中給普通用戶加計(jì)劃任務(wù)編輯操作
#which crontab //查看crontab命令位置
說(shuō)明:which命令是查看命令所在位置,which會(huì)在$PATH里找,在普通用戶里不好用。
ll /usr/bin/crontab //查看crontab命令權(quán)限
cat /etc/crontab //顯示/etc/crontab文件內(nèi)容
小例子
#cd /home/aaa //進(jìn)入普通用戶aaa家(home)目錄里
#vi 1.txt //建立1.txt文件
/sbin/init 6 //對(duì)1.txt文件進(jìn)行操作,寫入/sbin/init 6(重啟操作),然后wq(保存退出)
#chmod 755 1.txt //把1.txt文件權(quán)限改成可執(zhí)行文件
#run-parts aaa //執(zhí)行該操作機(jī)器將重啟(注意:執(zhí)行該操作只能在/home/aaa目錄外執(zhí)行才有效)
#cd /var/spool/cron //建立的計(jì)劃任務(wù)都存放在/var/spool/cron目錄里
#ls //顯示可以執(zhí)行crontab命令的用戶
#cat 用戶名 //并可以用cat命令顯示用戶crontab命令的內(nèi)容
#cat test //顯示test用戶計(jì)劃任務(wù)內(nèi)容
源自:http://tdhome.hlw.cn/show.php?clg_cuid=2&id=528
注意:定義完任務(wù)后可以通過(guò)以下方式啟動(dòng)任務(wù)
[root@node db_backup]# /etc/init.d/crond stop
Stopping crond: [ OK ]
[root@node db_backup]# /etc/init.d/crond start
Starting crond: [ OK ]
使用`date +%y%m%d`
Example: mkdir `date +%y%m%d`
tar cfvz /tmp/bak.`date +%y%m%d`.tar.gz /etc
ymdHM代表年月日時(shí)分,可以通過(guò)date --hlep查看哪些字母代表什么
注意:`這個(gè)符號(hào)是鍵盤上~,而不是'.
apache version:2.0.59
tomcat version:5.5.x
前言:
域名解析的作用:域名解析只能解析到ip地址,是不能夠綁定到固定ip的,幫定ip的工作由web服務(wù)器來(lái)做。
一、
需注意的幾點(diǎn)事項(xiàng):
1.apache和tomcat的結(jié)合都是通過(guò)mod_jk來(lái)實(shí)現(xiàn)的。這個(gè)文件可以在apache的網(wǎng)站上下的到,本文用的mod_jk的地址為http://ossavant.org/apache/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.24/i386/mod_jk-1.2.24-httpd-2.0.59.so這里需要注意的是:(1) mod_jk的版本號(hào)一定要和apache的版本號(hào)一致. (2) mod_jk有64位和32位之分,所以要根據(jù)機(jī)器的配置來(lái)決定選擇哪個(gè)。
二、安裝apache,注意一定要支持DSO,在安裝時(shí)加個(gè)參數(shù)--enable-so就可以使apache支持dso??梢酝ㄟ^(guò)
[root@localhost bin]# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
(說(shuō)明:看到mod_so.c這個(gè)模塊,就說(shuō)明能支持DSO
三、安裝tomcat,正常安裝即可
安裝完tomcat和apache之后先分別測(cè)似一下,保證都正常能用了,再往下進(jìn)行。
四、整和apache與tomcat(具體參考apache的官方網(wǎng)站)
1〉把剛才下的mod_jk考到apache2/modules文件夾下
2〉在tomcat的conf里創(chuàng)建一個(gè)文件workers.properties,并添加如下內(nèi)容
workers.tomcat_home=/usr/local/apache-tomcat-5.5.23
workers.java_home=/usr
ps=\
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
3〉在apache2/conf的httpd.conf里加入如下一段話
LoadModule jk_module modules/mod_jk-1.2.24-httpd-2.0.59.so
JkWorkersFile "/usr/local/apache-tomcat-5.5.23/conf/workers.properties" //指向剛才那個(gè)文件
JkLogFile "/usr/local/apache-tomcat-5.5.23/logs/mod_jk2.log"
JkLogLevel info
五、配置虛擬主機(jī)
在httpd.conf下加入如下:
<VirtualHost *:80>
ServerName www.91yjs.com
ServerAlias 91yjs.com
DocumentRoot /usr/local/apache-tomcat-5.5.23/webapps/ROOT
DirectoryIndex index.html index.htm index.jsp
JkMount /servlet/* ajp13
JkMount /*.jsp ajp13
JkMount /*.do ajp13
</VirtualHost>
配置完后,進(jìn)入apache的bin下執(zhí)行 ./httpd -t
出現(xiàn)Syntax OK說(shuō)明,你的配置沒有錯(cuò)誤,重新啟動(dòng)apache,應(yīng)該可以了。
附錄:
停止apache:./apachectl stop
啟動(dòng)apache:./apachectl graceful
參考:
在一個(gè)比較完整的應(yīng)用系統(tǒng)里,經(jīng)常需要有一些配置文件。簡(jiǎn)單的屬性使用。properties文件即可,但要配置一些復(fù)雜對(duì)象,則應(yīng)該考慮使用xml文件。一般用來(lái)讀取xml文件的工具包有DOM、SAX和JDOM等,但用過(guò)的人都知道,它們屬于比較底層的API,寫起來(lái)代碼量很大,而且如果修改了xml文件的格式,代碼也要做大幅度的改動(dòng)。Jakarta Commons項(xiàng)目里的Digester包,可以輕松實(shí)現(xiàn)xml文件到Java對(duì)象的轉(zhuǎn)換,看下面這個(gè)例子。
在一個(gè)項(xiàng)目里,需要提供一些統(tǒng)計(jì)圖,但圖的內(nèi)容暫時(shí)未能確定。所以我決定讓圖可以配置,所有定義保存在一個(gè)名為charts.xml(或國(guó)際化后的文件名如charts_zh_CN.xml,這里只考慮缺省語(yǔ)言)的文件內(nèi),下面是該文件的部分內(nèi)容:
false true Bar 時(shí)間 數(shù)據(jù) 500 360 select count(c), c.department.name from edu.pku.pub. aims.model.business. Client c group by c.department |
可以看出,我為每個(gè)圖定義了id、title、legendVisible等等屬性,這些屬性的意義都很明顯,它們將影響統(tǒng)計(jì)圖的數(shù)據(jù)和在頁(yè)面中的表現(xiàn)。在程序里,我需要把這個(gè)文件里的定義讀到一個(gè)注冊(cè)表類ChartRegistry里,該注冊(cè)表維護(hù)一個(gè)java.util.List類型的registry變量,其中每個(gè)元素是一個(gè)ChartConfig類。現(xiàn)在Digester該顯示它的價(jià)值了。
為了方便使用Digester,我們讓ChartConfig也具有統(tǒng)計(jì)圖的每個(gè)屬性(id、title、legendVisible等等),名稱與charts.xml里的元素的屬性(子元素)一一對(duì)應(yīng),并且都具有g(shù)etter和setter方法,也就是說(shuō),ChartConfig是一個(gè)bean類。在ChartRegistry類里定義一個(gè)deregister()方法,它的作用是用Digester讀入并解析指定的xml文件,代碼如下;還有一個(gè)register()方法用來(lái)把ChartConfig對(duì)象加到registry里。
public void deregister(URL url) throws IOException,SAXException{ InputStream is = new FileInputStream(url.getFile()); Digester digester = new Digester(); digester.push(this); digester.setValidating(false); digester.addObjectCreate("charts/chart", ChartConfig.class); digester.addSetProperties("charts/chart"); digester.addBeanPropertySetter("charts/chart/legendVisible"); digester.addBeanPropertySetter("charts/chart/toolTipsVisible"); digester.addBeanPropertySetter("charts/chart/title"); digester.addBeanPropertySetter("charts/chart/type"); digester.addBeanPropertySetter("charts/chart/labelx"); digester.addBeanPropertySetter("charts/chart/labely"); digester.addBeanPropertySetter("charts/chart/width"); digester.addBeanPropertySetter("charts/chart/height"); digester.addBeanPropertySetter("charts/chart/hql"); digester.addBeanPropertySetter("charts/chart/description"); digester.addSetNext("charts/chart","register"); digester.parse(is); Collections.sort(registry); }
|
基本上來(lái)說(shuō),Digester和SAX解析xml的過(guò)程很像,它的原理就是制定一些規(guī)則,在遍歷每個(gè)節(jié)點(diǎn)時(shí)檢查是否有匹配的規(guī)則,如果有就執(zhí)行對(duì)應(yīng)的操作。例如,上面的代碼中,“digester.addObjectCreate("charts/chart", ChartConfig.class);”這一句的作用是告訴Digester:如果遇到匹配“charts/chart”形式的節(jié)點(diǎn),就執(zhí)行一個(gè)“對(duì)象創(chuàng)建”操作,創(chuàng)建什么對(duì)象呢,應(yīng)該創(chuàng)建Class為“ChartConfig.class”的對(duì)象;類似的,addSetProperties()是告訴Digester將指定節(jié)點(diǎn)的屬性全部映射到對(duì)象的屬性,在這個(gè)例子里指的就是id屬性;addBeanPropertySetter()是將子節(jié)點(diǎn)轉(zhuǎn)換為對(duì)象的屬性,這個(gè)方法還可以有第二個(gè)參數(shù),當(dāng)對(duì)象的屬性名和子節(jié)點(diǎn)的名字不一樣時(shí)用來(lái)指定對(duì)象的屬性名;addSetNext()是說(shuō)在遇到匹配節(jié)點(diǎn)后,對(duì)當(dāng)前對(duì)象的父對(duì)象執(zhí)行一個(gè)方法,參數(shù)是當(dāng)前參數(shù),對(duì)這個(gè)例子來(lái)說(shuō)就是執(zhí)行ChartConfig.register(ChartConfig)方法。因此這樣構(gòu)造得到的Digester會(huì)把charts.xml里的每個(gè)元素轉(zhuǎn)換為一個(gè)ChartConfig對(duì)象,并register到ChartRegistry里。
順利得到了ChartRegister對(duì)象,我就可以在程序里根據(jù)它的內(nèi)容構(gòu)造統(tǒng)計(jì)圖了(統(tǒng)計(jì)圖一般使用jfreechart來(lái)生成,這里就不贅述了)。與Digester具有類似功能的工具包其實(shí)還有不少,例如Caster、Jato等等,我沒有實(shí)際使用過(guò)它們,但因?yàn)槲覍?duì)用過(guò)的Jakarta其他項(xiàng)目都很滿意(例如BeanUtils、HttpClient,品牌效應(yīng)?),所以一開始就選擇了Digester:簡(jiǎn)單方便。
from :http://java.chinaitlab.com/WebServices/715609.html
在一個(gè)java的socket連接中,用ObjectInputStream 和ObjectOutputStream可以很輕松的實(shí)現(xiàn)對(duì)Object的發(fā)送,但是如果沒有建立socket連接,如何用udp包來(lái)發(fā)送Object對(duì)象呢?
想想我們用udp發(fā)送數(shù)據(jù)的時(shí)候可以發(fā)送些什么呢?
DatagramPacket里面可以裝些什么呢? byte[]
對(duì),就是byte[], 那么我們要發(fā)送java對(duì)象的話就是想辦法把一個(gè)Object轉(zhuǎn)成byte[],然后再發(fā)送到目的地址,然后在接受方把byte轉(zhuǎn)成Object就可以了。 如何把一個(gè)Object轉(zhuǎn)化成byte[]呢?我們可以利用ByteArrayOutputStream 這個(gè)類 相信到這里,有些朋友已經(jīng)知道了怎么做了。 還是貼點(diǎn)代碼吧!^_^
|
public void SendInfo(int code, Object obj){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = null; try{ oos = new ObjectOutputStream(baos); oos.writeInt(code); oos.writeObject(obj); oos.flush(); byte arr[] = baos.toByteArray(); if(arr == null)return; SendDataToClient(arr); if(baos != null)baos.close(); if(oos != null)oos.close(); }catch(Exception e){ FuncForServer.WriteErrMsg( "Exception in Sending data to server.", e); } } 其中SendDataToClient(arr);就不用我說(shuō)了吧 然后接受方接受到了這個(gè)包后呢? 接收到的數(shù)組組成對(duì)象: ByteArrayInputStream bais = new ByteArrayInputStream(dataq); ObjectInputStream ois = null; byte arr[] = null; ois = new ObjectInputStream(bais); Object obj = ois.readObject(); obj就到了,呵呵! |