struts2-----4

过滤器与拦截器的区别:

*相同点:都是起拦截作用

*不同点:

      *作用范围:

*过滤器:使用范围是J2EE范畴,任何一个web工程都可以使用过滤器

*拦截器:使用范围是struts2范畴,离不开struts2框架的

    *完成的功能:

*过滤器:拦截请求资源

*拦截器:完成其他所有功能

*执行顺序:

过滤器——>拦截器

 

 

http客户端-->web容器--web.xml文件--过滤器

       --->struts.xml--->拦截器--->action--service--dao--数据库

 

  

常见的拦截器有哪些?

       在哪里配置

              struts-default.xml文件

 

 

package  name=”struts-default”

 

 

        <interceptors>

            <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>

            <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>

            <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>

            <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>

            <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/>

            <interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor"/>

            <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor"/>

            <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor"/>

            <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>

            <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>

            <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

            <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>

            <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>

            <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

            <interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>

            <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

            <interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/>

            <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>

            <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>

            <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/>

            <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>

            <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>

            <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>

            <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>

            <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

            <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>

            <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor"/>

            <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor"/>

            <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor"/>

            <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor"/>

            <interceptor name="annotationWorkflow" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor"/>

            <interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor"/>

 

           

            <interceptor-stack name="basicStack">

                <interceptor-ref name="exception"/>

                <interceptor-ref name="servletConfig"/>

                <interceptor-ref name="prepare"/>

                <interceptor-ref name="checkbox"/>

                <interceptor-ref name="multiselect"/>

                <interceptor-ref name="actionMappingParams"/>

                <interceptor-ref name="params">

                    <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*param>

                interceptor-ref>

                <interceptor-ref name="conversionError"/>

            interceptor-stack>

 

           

            <interceptor-stack name="validationWorkflowStack">

                <interceptor-ref name="basicStack"/>

                <interceptor-ref name="validation"/>

                <interceptor-ref name="workflow"/>

            interceptor-stack>

 

           

            <interceptor-stack name="fileUploadStack">

                <interceptor-ref name="fileUpload"/>

                <interceptor-ref name="basicStack"/>

            interceptor-stack>

 

           

            <interceptor-stack name="modelDrivenStack">

                <interceptor-ref name="modelDriven"/>

                <interceptor-ref name="basicStack"/>

            interceptor-stack>

 

           

            <interceptor-stack name="chainStack">

                <interceptor-ref name="chain"/>

                <interceptor-ref name="basicStack"/>

            interceptor-stack>

 

           

            <interceptor-stack name="i18nStack">

                <interceptor-ref name="i18n"/>

                <interceptor-ref name="basicStack"/>

            interceptor-stack>

 

           

            <interceptor-stack name="paramsPrepareParamsStack">

                <interceptor-ref name="exception"/>

                <interceptor-ref name="alias"/>

                <interceptor-ref name="i18n"/>

                <interceptor-ref name="checkbox"/>

                <interceptor-ref name="multiselect"/>

                <interceptor-ref name="params">

                    <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*param>

                interceptor-ref>

                <interceptor-ref name="servletConfig"/>

                <interceptor-ref name="prepare"/>

                <interceptor-ref name="chain"/>

                <interceptor-ref name="modelDriven"/>

                <interceptor-ref name="fileUpload"/>

                <interceptor-ref name="staticParams"/>

                <interceptor-ref name="actionMappingParams"/>

                <interceptor-ref name="params">

                    <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*param>

                interceptor-ref>

                <interceptor-ref name="conversionError"/>

                <interceptor-ref name="validation">

                    <param name="excludeMethods">input,back,cancel,browseparam>

                interceptor-ref>

                <interceptor-ref name="workflow">

                    <param name="excludeMethods">input,back,cancel,browseparam>

                interceptor-ref>

            interceptor-stack>

 

           

            <interceptor-stack name="defaultStack">

                <interceptor-ref name="exception"/>

                <interceptor-ref name="alias"/>

                <interceptor-ref name="servletConfig"/>

                <interceptor-ref name="i18n"/>

                <interceptor-ref name="prepare"/>

                <interceptor-ref name="chain"/>

                <interceptor-ref name="scopedModelDriven"/>

                <interceptor-ref name="modelDriven"/>

                <interceptor-ref name="fileUpload"/>

                <interceptor-ref name="checkbox"/>

                <interceptor-ref name="multiselect"/>

                <interceptor-ref name="staticParams"/>

                <interceptor-ref name="actionMappingParams"/>

                <interceptor-ref name="params">

                    <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*param>

                interceptor-ref>

                <interceptor-ref name="conversionError"/>

                <interceptor-ref name="validation">

                    <param name="excludeMethods">input,back,cancel,browseparam>

                interceptor-ref>

                <interceptor-ref name="workflow">

                    <param name="excludeMethods">input,back,cancel,browseparam>

                interceptor-ref>

                <interceptor-ref name="debugging"/>

            interceptor-stack>

 

           

            <interceptor-stack name="completeStack">

                <interceptor-ref name="defaultStack"/>

            interceptor-stack>

 

           

            <interceptor-stack name="executeAndWaitStack">

                <interceptor-ref name="execAndWait">

                    <param name="excludeMethods">input,back,cancelparam>

                interceptor-ref>

                <interceptor-ref name="defaultStack"/>

                <interceptor-ref name="execAndWait">

                    <param name="excludeMethods">input,back,cancelparam>

                interceptor-ref>

            interceptor-stack>

 

       interceptors>

 

 

拦截器

 

 

拦截器栈   -->就是拦截器的集合

 

 

默认使用的拦截器栈  defualtStack

 

包含哪些拦截器:

 

拦截器都完成什么功能?

 

下面通过一个案例来理解struts2的拦截器    自定义的拦截器

 

操作:

    在action的一个方法中,要进行权限的控制。如果是admin用户登入,就执行该方法,如果不是admin用户登入,就不能执行该方法

 

 

假设 你只有完成登陆之后才能完成其它的操作

 

 

 

 

 

 

 

1、  intercept方法中的参数invocation是执行action的上下文,可以从

这里得到正在访问的actionOgnl值栈、请求路径、方法名称、命名空间

等信息。以帮助程序员在拦截器中做相应的处理工作

 

 

 

 

 

 

分析:

http://localhost:8080/struts_interceptor/csdn/UserAction_delete.action?msg=%E5%88%A0%E9%99%A4%E7%9A%84%E9%99%84%E5%8A%A0%E7%9A%84%E5%8F%82%E6%95%B0

 

 

 

先执行拦截器  再执行action

 

拦截器  /csdn/UserAction_delete.action

 

/csdn/UserAction_query.action

 

 

 

 

判断用户是否存在的拦截器 :

要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:

public class PermissionInterceptorimplements Interceptor {

  private static final long serialVersionUID = -5178310397732210602L;

  public void destroy() {

   }

  public void init() {

   }

  public String intercept(ActionInvocation invocation) throws Exception {

      System.out.println("进入拦截器");     

       if(session里存在用户){

              Stringresult = invocation.invoke();

       }else{

              return“logon”;

       }

       //System.out.println("返回值:"+ result);

       //returnresult;

    }

}

 

 

说明:

      

              

              

              

            

               

     

      

              /WEB-INF/page/hello.jsp

             

      

因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。

如果希望包下的所有action都使用自定义的拦截器,可以通过把拦截器定义为默认拦截器。注意:每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。

 

 

怎么样获取 作用域中复合对象的属性值:

 

在Action

    提供 次属性的 get方法

 

 

 

在页面中:

    <h4>欢迎${sessionScope.user.name}登陆后台管理h4>

          

                    采用的是EL的写法:

           <br/>

            ${user.name}//page---request--session--application<br/>

           

           ${user["name"]}:::${user["name"]}<br/>

           

           ${sessionScope['user'].name }::${sessionScope['user'].name }<br/>

          ${sessionScope.user["name"] }:: ${sessionScope.user["name"]}<br/>

           

           

           

          <br/>

          利用struts2标签取值:pagerequest  session application

                 #作用域:

          <br/>

          <s:property value="#session['user'].name"/>

          <br/>

          <s:property value="#session.user.name"/>

          <s:property value="#session.user['name']"/>

 

 

 

 

 

文件上传的时候,

   进行过滤文件上传的类型

   文件上传的大小

  

 

   <action name="FileAction_*"class="www.csdn.struts_upload_interceptor.action.FileAction"method="{1}">

            <interceptor-ref name="fileUpload">

               

                <param name="allowedTypes">image/jpeg,image/pjpeg,application/octet-stream,application/x-zip-compressedparam>

                <param name="maximumSize">5242880param>

            interceptor-ref>

              

            <interceptor-ref name="defaultStack"/>

            <result name="success">/index.jspresult>

       action>

 

这就是拦截器的使用案例一。

 

 

 

 

 

 

 

 

 

 

Struts2 验证机制

 

服务器端:

  1、对action中所有的方法都进行验证

 

手工编写代码:

@Override

    public void validate(){

       System.out.println("--------"+this.name+"=");

       if(("").equals(this.name)||this.name==null){

           this.addFieldError("name", "用户名不能为空");

       }

    }

 

如果 验证方法处理完 addFieldError中有错误信息,那么 就不进行处理业务方法。

 

2、 对action中 指定的方法进行验证

 

手工编写:validateXxx() Xxx是方法的名称 第一个字母大写。

 

通过struts2

  打印错误的信息

 

 

 

客户端处理

  Js脚本进行处理

 

 

基于XML配置方式实现

 

1、对action中所有的方法进行处理

 

要求 验证文件必须和action在同一个包中 例如:

 

并且 文件名必须ActionClassName-validation.xml.

 

 

 

介绍struts2里边验证器

在:包含这个包中有一个default.xml文件:内容如下:

 

 

使用方式:如下:

 

required 必填校验器

      性别不能为空!

 

requiredstring  必填字符串校验器

      true

      用户名不能为空!

 

stringlength:字符串长度校验器

       10

       2

       true

      

 

 

 

email:邮件地址校验器

       电子邮件地址无效

 

regex:正则表达式校验器

    

    手机号格式不正确!

 

 

int:整数校验器

       1

       150

       年龄必须在1-150之间

 

字段OGNL表达式校验器

      

             

              文件不能为空

      

 

 

2、对action中指定方法进行校验

 

  

 

采用ActionClassName-ActionName-validation.xml

即可。

 

 

 

注意事项:

 当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:

1。AconClassName-validation.xml

2。ActionClassName-ActionName-validation.xml

系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于action方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。

 

当action继承了另一个action,父类action的校验文件会先被搜索到。

 

假设UserAction继承BaseAction:

 

访问上面action,系统先搜索父类的校验文件:BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索子类的校验文件:UserAction-validation.xml, UserAction-user-validation.xml。应用于上面action的校验规则为这四个文件的总和。

 

 

 

案例:

   1、sturts2  转换器  Date

   2、拦截器

   3、拦截器的应用文件的上传应用

   4、校验处理。

 

你可能感兴趣的:(struts2-----4)