2011-10-06 174 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