如果我的問題沒有任何意義,我很抱歉。所以這裏是我的:2頁,A.jsf
和B.jsf
。當我按下A.jsf
中的按鈕時,代碼將設置object
的值並重定向到B.jsf
。包含B.jsf
將取決於我在A.jsf
中設置哪個對象(取決於我點擊哪個按鈕)。因此,我不想讓用戶在網絡瀏覽器防止用戶向頁面發出GET請求
http://myhost:myport/myproject/B.jsf
鍵入這一點,並直接到達B.jsf
。所以,沒有GET請求到B.jsf
,只有POST。如果我看到GET請求B.jsf
,我重定向到A.jsf
。我覺得解決方案在web.xml
之內。
順便說一句,我使用Netbean 6.8和Java EE 6
編輯 這裏是解決方案。由於BalusC
MyFilter.java
package org.xdrawings.filter;
public class MyFilter implements Filter{
private FilterConfig filterConfig = null;
public void destroy(){}
public void init(FilterConfig filterConfig){
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse) response;
if("GET".equals(req.getMethod()) && "/B.jsf".equals(req.getServletPath())){
res.sendRedirect("A.jsf");
}else {
chain.doFilter(request, response);
}
}
}
在
然後我web.xml
<filter>
<filter-name>My Filter</filter-name>
<filter-class>org.xdrawings.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>My Filter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
All credits go to BalusC
令我驚訝的是,您對Web開發瞭解多少。你的第一種方法很好。但是,我也想學習第二種方法,因爲我總是聽到有人創建過濾器,但不知道它是什麼。所以你好像在這裏創建一個自定義的'Filter',並告訴項目通過'web.xml'使用該過濾器,對嗎?讓我試試看,然後回到你身邊。非常感謝你 – 2010-08-19 23:50:27
我實現你的第二種方法,但我有幾個問題,你可以看看我的更新後的帖子,看看我的實現。 – 2010-08-20 00:26:10
過濾器可以映射到'/ *'的'',或者更具體的'* .jsf',甚至更具體的'/ b.jsf'(然後刪除'if'塊中的不必要的檢查)。 ''是可選的。如果您定義了任何,則可以通過['FilterConfig#getInitParameter()'](http://download.oracle.com/javaee/5/api/javax/servlet/FilterConfig.html#getInitParameter%28java.lang .String%29)在'init()'方法內部,然後你可以將它指定爲實例變量,並在'doFilter()'邏輯中進一步使用它。例如。一串逗號分隔的頁面名稱等等。 –
BalusC
2010-08-20 00:29:14