A.jsf
和B.jsf
。当我在A.jsf
中按下按钮时,代码设置一个object
的值并重定向到B.jsf
。 B.jsf
的内容将取决于我在A.jsf
中设置的对象(这取决于我点击哪个按钮)。因此,我不想允许用户在web浏览器中键入此内容
http://myhost:myport/myproject/B.jsf
并直接进入B.jsf
。因此,不能向B.jsf
发送GET请求,只能发送POST请求。如果我看到对B.jsf
的GET请求,则会重定向到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>
所有功劳归于BalusC
Filter
,并通过web.xml
告诉项目使用该过滤器,对吗?让我试一下,然后再回复你。非常感谢! - Thang Pham<url-pattern>
的/*
上,或者更具体地是*.jsf
,甚至更具体地是/b.jsf
(然后在if
块中删除不必要的检查)。<init-param>
是可选的。 如果您定义了任何内容,则可以通过FilterConfig#getInitParameter()
方法在init()
方法中使用它,并将其分配为实例变量,以在doFilter()
逻辑中进一步使用,例如页面名称的逗号分隔字符串等。 - BalusCres.sendRedirect("/a.jsf");
实际上应该是res.sendRedirect("a.jsf");
。 - Thang Pham