2012-07-27 168 views
0

我正在爲網站的電子郵件驗證鏈接工作。當用戶註冊並完成填寫他們的個人數據(並通過所有檢查)時,他們會被髮送到一個jsp頁面,表明一封電子郵件已發送到他們作爲用戶名輸入的地址,並帶有一個點擊鏈接以驗證電子郵件地址。因此,這部分是一切都很好,我生成的鏈接(現在只是使用我的本地主機),它看起來像這樣的例子http://localhost:9999/javawork/msc/validate/?6FRQ8RAT&u=1s3w1Iih64egX01188HT。當他們點擊鏈接時,它會進入驗證文件夾中的jsp頁面index.jsp。在這一點上,我需要抓住整個URL並將其發送給一個函數,以確保URL格式正確(出於安全目的)。如果它通過並且格式正常,我需要在'?'後立即獲取8位數的代碼。還有'u'的價值。然後,我將這些值發送到一個函數,檢查它們是否與我們在數據庫中的匹配,如果他們這樣做,我用驗證日期更新數據庫記錄,以便我們知道他們已驗證了他們的電子郵件地址。有沒有一種簡單的方法來獲取URL中的URL

所以我的問題是第一,我如何抓住整個URL來檢查格式,第二,我如何抓住8位數的代碼和'u'的值?我一直在網上查找,所有示例都需要創建多個函數或類,並使用URL類。他們都希望我創建一個URL對象的實例並使用整個URL對其進行初始化。但它不是一個靜態URL,對於每一個註冊的用戶來說都不一樣,因爲它會生成一個隨機的8位數字代碼來檢查,而'u'的值是來自數據庫的被屏蔽的用戶ID。我不明白如何才能要求您初始化整個網址以獲取值,直到您從網址獲取值時才知道值是什麼。

是否有一種簡單的方法來獲取值和整個URL?即使我可以在'?'之後獲取所有內容,我知道基本URL,並且可以構建一個新的String來檢查格式化,如果我可以從'?'中獲得之後。請幫助那部分。謝謝。

+0

你正在編寫一個servlet來處理來自客戶端的請求或簡單的'.jsp'頁面嗎? – 2012-07-27 15:34:11

+0

只是一個jsp頁面。我已經有一個java類的函數來檢查數據庫的值。我只需要jsp頁面來獲取URL值,將它們傳遞給函數(返回一個布爾值),然後如果返回true,jsp頁面將顯示成功消息,如果返回false,則顯示失敗消息。 – kei23th 2012-07-27 15:35:44

回答

1

接口HTTPServletRequest包含一個方法getRequestURL,它返回一個StringBuffer,您可以使用該方法檢查整個URL的格式。 你可以得到它,在一個JSP頁面:

<%=request.getRequestURL()%> 

如果您使用的是您在上面指定的請求格式,那麼你的第二個問題:

我怎麼搶了8位數代碼和'u'的值?

可以通過操縱那個StringBuffer來在?和8位數字代碼的&。 或使用其他請求方法, ServletRequest.getParameter(java.lang.String name)

要抓住每一個參數,不過,我不能肯定它會怎麼收場處理8位代碼的未命名參數。讓我知道那是怎麼回事。

+0

這正是我所需要的。一旦我有了整個URL,我就可以將它分成'?'像你說的。非常感謝。 – kei23th 2012-07-27 16:35:50

+1

'<%= request.getRequestURL()%>'只讓我看到'?'但不是'?'或之後的anythnig。任何想法如何抓住查詢字符串參數呢? – kei23th 2012-07-27 17:31:15

+0

你說得很好,我的錯誤。我提供的第二種方法可以做到這一點。 [request.getParameterNames()](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html)將返回一個參數名稱的啓用,您可以使用[請求.getParameter(java.lang.String name)](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameter%28java.lang.String%29)遍歷每個參數並獲得它的值。 – OYRM 2012-07-27 17:52:29

0

不要將8位代碼視爲未命名參數。把它看作沒有價值的參數。

request.getParameterNames()將爲您提供8位代碼以及「u」。所以你可以這樣循環: String code =「」;

for(String paramName : request.getParameterNames()) { 
    if(!paramName.equalsIgnoreCase("u")) 
     code = paramName; 
} 
相關問題