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)(採宣告方式,與程式獨立)
TomcatCatalinaHome/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的編碼來進行解碼。