天天看點

過濾器和攔截器異同

 過濾器

package com.xy.filter;

import java.io.ioexception;

import javax.servlet.filter;

import javax.servlet.filterchain;

import javax.servlet.filterconfig;

import javax.servlet.servletexception;

import javax.servlet.servletrequest;

import javax.servlet.servletresponse;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

import javax.servlet.http.httpsession;

public class isloginfilter implements filter

{

    public void destroy()

    {

    }

    public void dofilter(servletrequest req, servletresponse resp, filterchain

                     chain)throws ioexception, servletexception

        httpservletrequest request = (httpservletrequest) req;

        httpservletresponse response = (httpservletresponse) resp;

        httpsession session = request.getsession();

        if (null == session.getattribute("uinfo"))

        {

            request.setattribute("msg", "您未登入或者離線時間過長,請重新登入");

            request.getrequestdispatcher("/tologinaction")

                                 .forward(request, response);

        }

        else

            chain.dofilter(request, response);

    public void init(filterconfig arg0) throws servletexception

}

login.jsp

<input type="hidden" value="${requestscope.msg}" id="msg" />

<script type="text/javascript">

var msg = document.getelementbyid("msg").value;

if ("" != msg) {

    alert(msg);

</script>

當然可以在js中直接擷取${requestscope.msg}。

web.xml

<filter>

    <filter-name>login</filter-name>

        <filter-class>com.xy.filter.isloginfilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>login</filter-name>

        <url-pattern>/logined/*</url-pattern>

    </filter-mapping>

</filter>

下面是攔截器

package com.xy.interceptor;

import org.apache.struts2.servletactioncontext;

import com.opensymphony.xwork2.actioninvocation;

import com.opensymphony.xwork2.interceptor.abstractinterceptor;

import com.xy.pojo.manager;

public class authinterceptor extends abstractinterceptor

    @override

    public string intercept(actioninvocation invocation) throws exception

        httpsession session = servletactioncontext.getrequest().getsession();

        servletactioncontext.getrequest()

                       .setattribute("loginmsg", "您未登入或者離線時間過長,請重新登入");

        manager login = (manager) session.getattribute("manager");

        if (login != null) return invocation.invoke();

        else return "mustlogin";

$(function (){

var loginmsg ='<s:property value="#request.loginmsg" escape="false"/>';

if(""!=loginmsg)

    alert(loginmsg);

});

struts.xml

<package name="default" namespace="/" extends="struts-default">

        <interceptors>

            <!-- 權限控制攔截器 -->

            <interceptor name="login"  class="com.xy.interceptor.authinterceptor"></interceptor>

            <!-- 定義一個包含權限控制的攔截器 -->

            <interceptor-stack name="mydefault">

                <interceptor-ref name="defaultstack"></interceptor-ref>

                <interceptor-ref name="login"></interceptor-ref>

            </interceptor-stack>

        </interceptors>

        <default-action-ref name="tomain"></default-action-ref>

        <!-- 定義全局處理結果 -->

        <global-results>

            <result name="mustlogin">/login.jsp</result>

        </global-results>

        <action name="tomain" class="com.xy.action.tomainaction">

            <result name="success">/main.jsp</result>

        </action>

        <action name="tologin" class="com.xy.action.tologinaction">

            <result>/login.jsp</result>

        <action name="loginverify" class="com.xy.action.loginverifyaction">

            <result name="success" type="chain">tomain</result>

            <result name="error">/login.jsp</result>

        <action name="stu_*" class="com.xy.action.studentaction"

            method="{1}">

            <interceptor-ref name="mydefault" />

            <result name="tomodify">/modify.jsp</result>

            <result name="toadd">/add.jsp</result>

</package>

繼續閱讀