2011-10-06 173 views
0

我有一個JSF 1.2登錄頁面(login.xhtml),它有兩個子窗體 - menuForm,loginForm。使用Java提交表單

使用瀏覽器,我可以通過單擊loginForm中的登錄按鈕從登錄頁導航到productList.xhtml頁面。

....

爲了允許谷歌爬蟲通過我的網頁需要登錄爬,我想測試形式的Java程序提交的登錄表單,看看我是否可以檢索productList的。 xhtml頁面。

的隱藏字段(從瀏覽器中查看源代碼)在login.xhtml頁包括以下內容: 用戶名密碼 自動滾屏 登錄表單 loginButton javax.faces.ViewState

我從提交的所有值上面(javax.faces.ViewState除外)在我的Java程序中,但我一直只收到我的迴應中的login.xhtml頁面。爲什麼是這樣?

我無法提交javax.faces.ViewState,因爲當從Java程序發生提交時,表單的服務器端沒有狀態。如何提交尚未具有視圖狀態的表單?

回答

1

爲了允許谷歌爬蟲通過我的網頁抓取需要登錄

的登錄需要一個會話(基本上是:一個cookie)。但是網絡爬蟲不維護會話(基本上:他們不維護cookie)。所以它在這裏結束。您必須刪除登錄表單並用普通鏈接替換所有導航命令鏈接,以便讓任何webcrawler索引您的頁面。

這就是爲什麼你想限制頁面可以被抓取的原因(因此:publicitly available)。爲什麼第一次登錄?


我從上面我的Java程序提交的所有值(除javax.faces.ViewState),但我不斷收到只有login.xhtml頁面回到我的迴應。爲什麼是這樣?

因爲您省略了視圖狀態字段。 JSF將不會處理表單提交。就部分而言,這是對CSRF攻擊的一種防範措施,對於其他部分來說,這是因爲JSF是一種基於狀態的基於組件的MVC框架。


我不能提交javax.faces.ViewState因爲在服務器端進行,當提交表單沒有狀態從Java程序發生。如何提交尚未具有視圖狀態的表單?

您需要任何維護會話(基本上是:從服務器發送的所有Cookie早在隨後的請求),或狀態保存方法web.xml設置爲client你還需要通過查看狀態隱藏字段以及表單提交請求。

+0

允許Google抓取我的受限網頁的主要原因是因爲這似乎是AdSense自2011年8月31日以來的新方式。到目前爲止,我的網站擁有約5600個公共頁面,每個用戶可能有約200個受限制的頁面,但Google Adsense以「僅限登錄」爲由拒絕我的申請。 – Stoodius

+1

好啊。或者只是不要在這些網頁上放置Google廣告,或者在有限的功能/權限/按鈕/等上製作這些網頁的公開版本,就像您在討論論壇和問答網站上看到的一樣。 – BalusC