Прошу прощения, если мой вопрос не имеет никакого смысла. Итак, вот что у меня есть: 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
EDIT Вот решение. Благодаря 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.xml', правильно? Позвольте мне попробовать, и я вернусь к вам. Большое спасибо man –
Я реализую ваш второй метод, но у меня есть пара вопросов, можете ли вы посмотреть мое обновленное сообщение, чтобы увидеть мою реализацию. –
Фильтр может быть отображен на '' '/ *' или более конкретном '* .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