2007年11月29日
關于LINUX權限-bash: ./startup.sh: Permission denied
在執行./startup.sh,或者./shutdown.sh的時候,爆出了Permission denied,
其實很簡單,就是今天在執行tomcat的時候,用戶沒有權限,而導致無法執行,
用命令chmod 修改一下bin目錄下的.sh權限就可以了
如chmod u+x *.sh
在此執行,OK了。
posted @ 2014-12-30 10:26 liujg 閱讀(289) | 評論 (0) | 編輯 收藏
最近在開發中遇到了表單提交前驗證的問題,用一個普通的button按鈕代替submit按鈕,在提交前觸發這個button的onclick事件,在其事件中觸發form的submit事件。問題出現了:以下是出現相關代碼:<form action="http://www.baidu.com/s?wd=this.form.submit%28%29%3B&cl=3" method="post" name="form1" onsubmit="return alert('已提交!'); return false;"> <table align="center" width="420px" cellPadding="2" cellSpacing="1" bgcolor="#A4B6D7" style="word-wrap:Break-word;"> <tr style="cursor: hand;background:#d7e3f6" > <td width="20%" align="right">條型碼</td> <td><input style="width:90%" type="text" name="GOODSNUM" size="30" maxlength="8" ></td> </tr> <tr> <td align="center" colspan="2"> <input type="button" name="save" value="保存" onclick="if((confirm('確定要提交嗎?'))) this.form.submit();"/> </td> </tr> </table> </form>
卻發現并沒有觸發form的onsubmit方法,而是直接提交了。奇怪了,難道沒有這種方式無法結合form的onsubmit方法嗎?仔細想了想,既然this.form表示form這個對象,那么肯定能獲取到form的屬性和方法的,就改成this.form.onsubmit(); 成功!我又查了查手冊,原來submit的方法是這樣解釋的: The submit method does not invoke the onsubmit event handler. Call the onsubmit event handler directly. When using Microsoft® Internet Explorer 5.5 and later, you can call the fireEvent method with a value of onsubmit in the sEvent parameter.
意思是說submit這個方法是不觸發onsubmit時間的,如果想要觸發它,需要調用fireEvent方法。嘗試一下:this.form.fireEvent('onsubmit');哈哈,果然也成功!不過這樣不是多此一舉嗎?呵呵!
就這個小問題也搞了我將近一個小時,不過為了以后不為這個問題煩惱,這也是值得的。this.form.submit(); //直接提交表單this.form.onsubmit(); //調用form的onsubmit方法this.form.fireEvent('onsubmit'); //同上, PS:又學到了fireEvent這個方法,
2.onsubmit()與submit() :
<sCript>funCtion fun(){ alert("form_submit");}</sCript>
<form onsubmit="fun()"><input type="submit" id="aaa" value="submit"> <!--能彈出form_submit--><input type="button" id="bbb" value="onCliCk_submit" onCliCk="doCument.forms[0].submit()"><!-- 表單會提交,但是不會運行fun() 原因是 onsubmit事件不能通過此種方式觸發(在IE環境)直接用腳本doCumetn.formName.submit()提交表單是不會觸發表單的onsubmit()事件的--> <input type="button" id="bb1" value="onCliCk_onsubmit" onCliCk="doCument.forms[0].onsubmit()">
<!--會觸發fun()參數--></form>
posted @ 2011-09-28 15:11 liujg 閱讀(346) | 評論 (0) | 編輯 收藏
service()是在javax.servlet.Servlet接口中定義的, 在 javax.servlet.GenericServlet 中實現了這個接口, 而 doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實現的, javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子類. 所有可以這樣理解, 其實所有的請求均首先由 service() 進行處理, 而在 javax.servlet.http.HttpServlet 的 service() 方法中, 主要做的事情就是判斷請求類型是 Get 還是 Post, 然后調用對應的 doGet/doPost 執行.
doGet:處理GET請求 doPost:處理POST請求 doPut:處理PUT請求 doDelete:處理DELETE請求 doHead:處理HEAD請求 doOptions:處理OPTIONS請求 doTrace:處理TRACE請求 通常情況下,在開發基于HTTP的servlet時,開發者只需要關心doGet和doPost方法,其它的方法需要開發者非常的熟悉HTTP編程,因此這些方法被認為是高級方法。 而通常情況下,我們實現的servlet都是從HttpServlet擴展而來。 doPut和doDelete方法允許開發者支持HTTP/1.1的對應特性; doHead是一個已經實現的方法,它將執行doGet但是僅僅向客戶端返回doGet應該向客戶端返回的頭部的內容; doOptions方法自動的返回servlet所直接支持的HTTP方法信息; doTrace方法返回TRACE請求中的所有頭部信息。 對于那些僅僅支持HTTP/1.0的容器而言,只有doGet, doHead 和 doPost方法被使用,因為HTTP/1.
posted @ 2011-05-24 23:58 liujg 閱讀(479) | 評論 (0) | 編輯 收藏
這是我總結的一些基本用法,可能對初用者會有幫助,獨樂樂不如眾樂樂,是吧!
說明:以下黑色為vi和vim均有的一般功能,而紅色為Vim(Vi Improved)所特有功能。Vim一般的Unix和Linux下均有安裝。 ? 三種狀態 Command: 任何輸入都會作為編輯命令,而不會出現在屏幕上,任何輸入都引起立即反映 Insert: 任何輸入的數據都置于編輯寄存器,按ESC,可跳回command方式 Escape: 以“:”或者“/”為前導的指令,出現在屏幕的最下一行,任何輸入都被當成特別指令。 ? 離開vi :q! 離開vi,并放棄剛在緩沖區內編輯的內容。 :wq 將緩沖區內的資料寫入磁盤中,并離開vi。 :x 同wq。 (注意—— :X 是文件加密,一定要與:x存盤退出相區別) ? 進入輸入模式 a (append) 由游標之后加入資料。 A 由該行之末加入資料。 i (insert) 由游標之前加入資料。 I 由該行之首加入資料。 o (open) 新增一行於該行之下供輸入資料之用。 O 新增一行於該行之上供輸入資料之用。 ? 刪除與修改 x 刪除游標所在該字元。 X 刪除游標所在之前一字元。 r 用接於此指令之后的字元取代(replace)游標所在字元。如:ra將游標所在字元以 a 取代之。 R 進入取代狀態,直到《ESC》為止。 s 刪除游標所在之字元,并進入輸入模式直到《ESC》。 S 刪除游標所在之該行資料,并進入輸入模式直到《ESC》。 ? 光標的移動 m<a-z> 設置書簽<a-z> ‘<a-z> 移至書簽<a-z>處 0 移至該行之首 $ 移至該行之末。 e 移動到下個字的最後一個字母 w 移動到下個字的第一個字母。 b 移動到上個字的第一個字母。 ^ 移至該行的第一個字元處。 H 移至視窗的第一行。 M 移至視窗的中間那行。 L 移至視窗的最后一行。 G 移至該文件的最后一行。 + 移至下一列的第一個字元處。 - 移至上一列的第一個字元處。 :n 移至該文件的第 n 列。 n+ 移至游標所在位置之后的第 n 列。 n- 移至游標所在位置之前的第 n 列。 <Ctrl><g> 顯示該行之行號、文件名稱、文件中最末行之行號、游標所在行號占總行號之百分比。
(Vim) 光標移動基本用法小解: (這只要組合上邊的功能就可以明白了,不用再一一講解了吧!) ge b w e ← ← ---→ --→ This is-a line, with special/separated/words (and some more). ←- ←-- -----------------→ ---→ GE B W E
? 視窗的移動 <Ctrl><f> 視窗往下卷一頁。 <Ctrl><b> 視窗往上卷一頁。 <Ctrl><d> 視窗往下卷半頁。 <Ctrl><u> 視窗往上卷半頁。 <Ctrl><e> 視窗往下卷一行。 <Ctrl><y> 視窗往上卷一行。 ? 剪切、復制、刪除 Operator + Scope = command ? Operator d 剪切 y 復制。 p 粘帖,與 d 和 y 配和使用??蓪⒆詈骴或y的資料放置於游標所在位置之行列下。 c 修改,類似delete與insert的組和。刪除一個字組、句子等之資料,并插入新建資料。 ? Scope e 由游標所在位置至該字串的最后一個字元。 w 由游標所在位置至下一個字串的第一個字元。 b 由游標所在位置至前一個字串的第一個字元。 $ 由游標所在位置至該行的最后一個字元。 0 由游標所在位置至該行的第一個字元。 ? 整行動作 dd 刪除整行。 D 以行為單位,刪除游標后之所有字元。 cc 修改整行的內容。 yy 使游標所在該行復制到記憶體緩沖區。 ? 取消前一動作(Undo) u 恢復最后一個指令之前的結果。 U 恢復游標該行之所有改變。 (vim) u 可以多次撤消指令,一次撤消一個操作,直至本次操作開始為止。 (vim) Ctrl+r 可以恢復撤消前內容,按多次可恢復多次。 ? 查找與替換 /字串 往游標之后尋找該字串。 ?字串 往游標之前尋找該字串。 n 往下繼續尋找下一個相同的字串。 N 往上繼續尋找下一個相同的字串。 % 查找“(”,“)”,“{”,“}”的配對符。 s 搜尋某行列范圍。 g 搜尋整個編輯緩沖區的資料。 :1,$s/old/new/g 將文件中所有的『old』改成『new』。 :10,20s/^/ / 將第10行至第20行資料的最前面插入5個空白。 (vim) /字符串 后邊輸入查詢內容可保存至緩沖區中,可用↑↓進行以往內容選擇。 另外:將光標移動在選定單詞下方按*,則可以選中此單詞作為查詢字符,可以避免輸入一長串字符的麻煩。 ? (vim) 大小寫替換 首先用按v開啟選擇功能,然后用↑↓←→鍵來選定所要替換的字符,若是小寫變大寫,則按U;反之按u; 如果是選擇單詞,則可以在按v后,按w,最后按U/u,這樣就可以將字符隨意的改變大小寫了,而不用刪除后重新敲入。
? 資料的連接 J 句子的連接。將游標所在之下一行連接至游標該行的后面。 ? 環境的設定 :set all 可設置的環境變量列表 :set 環境變量的當前值 :set nu 設定資料的行號。 :set nonu 取消行號設定。 :set ai 自動內縮。 :set noai 取消自動內縮。 (vim) :set ruler 會在屏幕右下角顯示當前光標所處位置,并隨光移動而改變,占用屏幕空間較小,使用也比較方便,推薦使用。 :set hlsearch 在使用查找功能時,會高亮顯示所有匹配的內容。 :set nohlsearch 關閉此功能。 :set incsearch 使Vim在輸入字符串的過程中,光標就可定位顯示匹配點。 :set nowrapscan 關閉查找自動回環功能,即查找到文件結尾處,結束查找;默認狀態是自動回環
? ex指令 ? 讀寫資料 :10,20w test 將第10行至第20行的資料寫入test文件。 :10,20w>>test 將第10行至第20行的資料加在test文件之后。 :r test 將test文件的資料讀入編輯緩沖區的最后。 :e [filename] 編輯新的文件。 :e! [filename] 放棄當前修改的文件,編輯新的文件。 :sh 進入shell環境,使用exit退出,回到編輯器中。
:!cmd 運行命令cmd后,返回到編輯器中。 ? 刪除、復制及搬移 :10,20d 刪除第10行至第20行的資料。 :10d 刪除第10行的資料。 :%d 刪除整個編輯緩沖區。 :10,20co30 將第10行至第20行的資料復制至第30行之后。 :10,20mo30 將第10行至第20行的資料搬移至第30行之后。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jsufcz/archive/2009/02/11/3875956.aspx
posted @ 2011-05-03 14:25 liujg 閱讀(254) | 評論 (0) | 編輯 收藏
OERR: ORA-12519報錯 1、查詢數據庫當前的連接數: select count(*) from v$process; 2、查詢數據庫允許的最大連接數: select value from v$parameter where name = 'processes'; 3、修改數據庫允許的最大連接數: alter system set processes = 300 scope = spfile; 4、重啟數據庫: shutdown immediate; startup;
文章出處:飛諾網(www.firnow.com):http://dev.firnow.com/course/7_databases/oracle/oraclejs/20091103/181042.html
posted @ 2011-01-30 13:36 liujg 閱讀(562) | 評論 (0) | 編輯 收藏
定義:
用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象. //通過拷貝創建新的對象跟通過繼承創建有什么區別呢? Prototype 模式允許一個對象再創建另外一個可定制的對象,根本無需知道任何如何創建的
細節,工作原理是:通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象
通過請求原型對象拷貝它們自己來實施創建。
如何使用?
因為Java 中的提供clone()方法來實現對象的克隆(具體了解 clone()按這里),所以
Prototype 模式實現一下子變得很簡單.
以勺子為例:
public abstract class AbstractSpoon implements Cloneable {
String spoonName;
public void setSpoonName(String spoonName) {this.spoonName = spoonName;}
public String getSpoonName() {return this.spoonName;}
public Object clone()
{
Object object = null;
try { object = super.clone();
} catch (CloneNotSupportedException exception) {
System.err.println("AbstractSpoon is not Cloneable");
}
return object; }
有兩個具體實現(ConcretePrototype):
public class SoupSpoon extends AbstractSpoon
public SoupSpoon() {
setSpoonName("Soup Spoon");
public class SaladSpoon extends AbstractSpoon
public SaladSpoon()
{ setSpoonName("Salad Spoon");
調用 Prototype 模式很簡單:
AbstractSpoon spoon = new SoupSpoon();
AbstractSpoon spoon = new SaladSpoon();
posted @ 2007-11-29 16:23 liujg 閱讀(317) | 評論 (0) | 編輯 收藏
Powered by: BlogJava Copyright © liujg