Struts2: перехватчик работает только один раз вместо двух - PullRequest
2 голосов
/ 15 сентября 2011

Я работаю над перехватчиками Struts2. Я читал, что перехватчики Struts2 похожи на фильтры, которые выполняются до выполнения класса Action и еще раз после обработки результата (исправьте меня, если я ошибаюсь), то есть два раза

Но когда я запустил приведенный ниже код, перехватчики выполняются только один раз. Пожалуйста, поправьте меня, если я допустил ошибку. Пожалуйста, смотрите мой код ниже:

Это файл My Struts.xml

<struts>
<constant name="struts.devMode" value="true" />
    <package name="test" extends="struts-default">
<interceptors>
 <interceptor name="loginkiran" class="vaannila.MyLoginInterCeptor" />
</interceptors>
        <action name="HelloWorld" class="vaannila.HelloWorld" method="kiran">
            <interceptor-ref name="loginkiran" />
            <result name="SUCCESS">/success.jsp</result>
        </action>
    </package>
</struts>

Это мой класс действий

public class HelloWorld
{
    public HelloWorld() {
    }
    public String kiran() {
        System.out.println("iNSIDE THE aCTION CLASS");
        return "SUCCESS";
    }
}

Это мой класс перехватчика

public class MyLoginInterCeptor implements Interceptor {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("Destroying Interceptor");

    }

    @Override
    public void init() {

    }

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {

        HttpServletRequest request = (HttpServletRequest) ActionContext
                .getContext().get(ServletActionContext.HTTP_REQUEST);

        System.out.println("iNSIDE THE iNTERCEPTOR");

        return invocation.invoke();

    }

}

Это мой файл JSP:

<html>
<body>
<%
System.out.println("iNSIde THE jsp");
%>
</body>
</html>

Выход для вышеприведенного кода такой:

iNSIDE THE iNTERCEPTOR
iNSIDE THE aCTION CLASS
iNSIde THE jsp

1 Ответ

3 голосов
/ 15 сентября 2011

Перехватчики не выполняются дважды (и не фильтры): перехватчики (и фильтры) Обтекание Действие (или сервлет / и т.д.)

public String intercept(ActionInvocation invocation) throws Exception {
    System.out.println("Before action invocation...");
    return invocation.invoke();
    System.out.println("After action invocation...");
}
...