2014年9月8日 星期一

Linux的重要相關設定、指令、好用指令

重要路徑:
Tomcat:
(1)權限設置的位置(角色、使用者、密碼等):
/usr/share/tomcat6/conf/tomcat-users.xml

(2)部署war檔的地方:
/var/lib/tomcat6

Apache:
(1)部署網頁的地方(包括php):
/var/www/html

重要指令:
(1)重啟Apache:   /etc/init.d/httpd restart
(2)重啟MySQL:  /etc/init.d/mysqld restart
(3)重啟Tomcat:  /etc/init.d/tomcat6 restart
(4)進入MySQL: mysql -u root -p (root可改不同user名稱)
(5)新增使用者帳號:useradd 帳號名稱
(6)設定使用者的密碼:passwd 帳號名稱

重要設定:
(1)設定DNS(重開機後要重設)
進入 /etc/resolv.conf
vi /etc/resolv.conf
打入以下內容
nameserver 8.8.8.8
nameserver 8.8.4.4

(2) 第一次設定 root 密碼:
sudo passwd root

好用指令:
得到上次執行的命令或角本返回的狀態值 (0 為正常,非 0 為不正常,非 0 的狀態碼由角本作者自行決定意義)
echo $?

列出所有儲存裝置資訊,包括塊磁碟分區資訊等 (list block device):
lsblk
加上 -f 參數可列出一些其他資料,例如檔案格式 (FSTYPE),如值為空則代表還未格式化,尚不具有檔案系統。

格式化區塊成檔案系統
mkfs -t <檔案格式> <要被格式化的區塊>
範例:
mkfs -t xfs /dev/xvdf

備份檔案 rsync 指令,比 cp (複制) 更多功能的 rsync 指令,像是可以顯示多檔案進度、可判斷有異動的檔案才複制等功能
範例 (-P 等同於 --progress (可顯示進度)和 --partial (保留傳輸中斷的檔案以進行續傳)、
-a 等同於 --archive,為 archive mode,等同於使用了參數 -rlptgoD +  沒有 -H,-A,-X):
rsync -aP <來源路徑> <目標路徑>

在Centos 6下安裝phpMyAdmin及Tomcat

情境:
1.系統為Centos 6
2.已裝MySQL
3.已裝php
4.已裝php-mbstring

需求:
1.欲安裝phpMyAdmin
2.欲安裝Tomcat

解法過程:
一、欲安裝phpMyAdmin
        參考資料:CentOS 6.4 (64位元) 安裝 phpMyAdmin

(1).先下載 phpMyAdmin 的壓縮檔
wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.5.8.1/phpMyAdmin-3.5.8.1-all-languages.tar.gz

(2)對其進行解壓縮
tar -zxvf phpMyAdmin-3.5.8.1-all-languages.tar.gz

(3)將解壓縮後的 phpMyAdmin-3.5.8.1-all-languages 目錄移到 Apache 預設的網頁目錄下並重新命名為 phpMyAdmin
mv phpMyAdmin-3.5.8.1-all-languages /var/www/html/phpMyAdmin

(4)回到新放置的目綠位置
cd /var/www/html/phpMyAdmin
(5)複製範本設定檔 config.sample.inc.php 並重新命名為 config.inc.php
cp config.sample.inc.php config.inc.php
(6)進入 config.inc.php文件中修改認證操作方式
vi config.inc.php

將 $cfg['Servers'][$i]['auth_type'] = 'cookies'; 的 'cookies' 改成 'http' ,如下所示
$cfg['Servers'][$i]['auth_type'] = 'http';
(7)接著重新啟動Apache伺服器應該就能成功以localhost/phpMyAdmin為網址用瀏覽器登入phpMyAdmin了
service httpd restart

在Centos 6 下安裝遠端桌面

因為工作的關係,選用的VPS其系統改用Centos,因為在安裝遠端桌面時,跟Debian有一點不太一 樣,所以特做此紀錄,參考的資料來源為:CentOS 5/6 安裝 GNOME 與 KDE 桌面環境

在這裡,我選用KDE做為我的桌面,這裡要注意的是,Centos 6 與 Centos 5 在安裝KDE時用的包名稱上有些微的差異:

1.首先先使用以下指令安裝X windows
yum -y groupinstall 'X Window System'

2.再安裝KDE,在這邊為Centos 6版本,如果為Cemtos 5版本,指要把 'KDE Desktop' 改成 'KDE (K Desktop Environment)' 即可:
yum -y groupinstall 'KDE Desktop'  

3.安裝中文套件,不然用瀏覽器看中文網頁會變成亂碼
yum -y groupinstall "Chinese Support"

4.安裝vncserver,Centos6可安裝tigervnc-server
yum -y install tigervnc-server

5.配置KDE桌面,進入 /root/.vnc/xstartup 修改文件內容(補充:這裡如果找不到文件的話,要先打上 "vncserver" 再打上 "vncserver -kill :1" 來創建文件)
vi /root/.vnc/xstartup
並在最下面加上一行
exec /usr/bin/startkde &

這樣,遠端桌面就安裝成功了

補充:如果在使用yum安裝東西時發生了 Errno 14 Couldn't resolve host 的錯誤,表示DNS設定沒設好,可參考這篇yum 安裝時錯誤 Errno 14 Couldn't resolve host 解決辦法的解決辦法,在/etc/resolv.conf的文件中添加一行DNS的設定,如添加 8.8.8.8 (Google的DNS Server):
nameserver 8.8.8.8

2014年8月15日 星期五

網頁幾秒後自動跳轉的各種實現方法

網頁的自動跳轉有很多種方法,以下不定時更新各種實現方法:

1.html
純html可以直接在<head>的地方設置幾秒後自動跳轉,方法如下,在<head>的部份打下如下程式碼:
<meta http-equiv="refresh" content="5; url=XXX; charset=UTF-8">
其中5指的是5秒,可依情況自行更改,url為頁面自動跳轉時的目標頁面

2.Javascript
在Javascript中可以使用setTimeout,方法如下:
setTimeout('functionName( )',  XXX)
作用為XXX秒後執行名為functionName的函式

2014年8月6日 星期三

如何在html中的一個Form中使用多個按鈕進行不同動作,以JSP為例

有時我們會希望在同一個表單中(Form)建立多個按鈕來做出不同的行為,如新增、修改、刪除等不同的行為,這時我們就會用到多個按鈕,以下以JSP為例,設計name一樣,value不同的多個按鈕,form的action指向同一個Servlet,在Servlet中取得按鈕的value來知道要做什麼動作:

1.html中的程式碼如以下所示:
<form method="POST" action="XXX.do">
            <input type="submit" name="requestAction" value="新增" >
            <input type="submit" name="requestAction" value="修改" >
            <input type="submit" name="requestAction" value="刪除" >        
</form> 

2.url對應XXX.do的Servlet中的程式碼如下所示,利用名為requestAction的參數之值來判幾哪一個按鈕被按下了:
request.setCharacterEncoding("UTF-8"); //中文參數的解碼
String requestAction = request.getParameter("requestAction");
switch (requestAction) {
            case "新增":
                add();
                break;
            case "修改":
                modify();
                break;
            case "刪除":
                delete();
                break;               
        }
    }
p.s. 如果要在Java中以String型別做為switch的參數,需要使用JDK 7以上,以netBeans為例,可以以右鍵點擊專案,選擇 Properties-->Source,在下面的Source/Binary Format下拉選單中選擇JDK 7以的JDK即可

如何使用JSP的安全機制功能-以tomcat及netbeans為例

JSP的安全機制功能,可以很簡單地用宣告式的方法來進行設定,如以下步驟:

1.在Tomcat中設定Role(角色)、身份(User)與密碼(Password)(採宣告方式,與程式獨立)
在Tomcat的CatalinaHome/conf/tomcat-users.xml,<tomcat-users>的標籤中,設定<user>及<roles>的內容,如以下所示:
<role rolename="Manager"/>
<user username="Hugo" roles="Manager" password="12345"/>

</tomcat-users>

意涵為有一個角色為Manager,有一個身份為Hugo,其角色為Manager,密碼為12345

其中CatalinaHome的位置可以在netBeans中對Server按右鍵選擇Properties查得,如下圖所示:
2.之後在netBeans中打開web.xml,加入如以下標籤內容:

在JSP及Servlet之間傳送中文參數

在開發JSP、Servlet動態網頁時,常常會用到參數在頁面之間進行傳遞,例如在把一個JSP中的表單(Form)中的參數值傳給要處理的Servlet時,在Servlet端通常會使用如
request.getParameter("參數名值對中的名")

的指令去取傳進來的參數。在英文的環境下這些都是沒有問題的,不過如果現在要傳的參數值是中文時,就會發生得不到正確參數值的情況,遇到這種情況時,就必須要考慮到送收雙方的編碼一致問題,以下是兩種此問題發生的解法,分為參數傳送時是用GET還是POST,兩種情況的處理方式不相同,無法混用:

一、參數傳送是用GET時
假設送收雙方都決定要以UTF-8送收
1.送方因為是想要讓中文參數能利用URL傳遞,所以要進行遍碼,例如要傳送一個名為"requestAction"、值為"修改"的參數時,要用呼叫URLEncoder.encode()方法來進行參數的編碼,如下例所示

網址/request=<%= URLEncoder.encode("修改", "UTF-8")%>

2.收端要使用一樣的編碼來進行解碼,如下所示

String requestAction = new String(request.getParameter("requestAction").getBytes("ISO-8859-1"), "UTF-8");

上面程式碼的意思是將收到的參數從「ISO-8859-1」轉成「UTF-8」,如果伺服器的預設解碼不是「ISO-8859-1」的話要記得改成相應的編碼。
如果是Tomcat,可以在CatalinaHome/conf/server.xml中找到如下列字樣
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
此列表示預設編碼為「UTF-8」,如果沒有「URIEncoding="utf-8"」的話也可自己加入。
要注意的是如使用NetBeans的IDE來開發的話,它是用模擬的Tomcat Server來Run模擬結果的,所以這裡用的server.xml也是模擬的,可以在NetBeans中的Servers對Tomcat按右鍵選「Edit server.xml」來更改設置,如下圖:


二、參數傳送是用POST時
假設送收雙方都決定要以UTF-8送收
1.送方(通常為JSP)要設定用UTF-8送出資料,如加上以下程式碼(以JSP為例):
<%@page contentType="text/html" pageEncoding="UTF-8"%>

2.收方(通常為Servlet)要設定用UTF-8解碼接收的資料,如在取值之前加上以下程式碼(以Servlet為例):
 request.setCharacterEncoding("UTF-8"); //中文參數的解碼
解完碼後,再進行取值,如以下程式碼:
String requestParam = request.getParameter("gotParam");
這樣就可以正確地得到中文參數了

附錄:
在這篇Tomcat與UTF-8編碼中,有講到如何設定Tomcat可以對Get及Post的參數使用自訂如UTF-8的編碼來進行解碼。