struts2动态调用+Servlet过滤器+struts2拦截器

2019-10-08 作者:网络时代   |   浏览(78)

过滤器与拦截器的区别

首先过滤器是基于servlet的基础上进行的操作,是属于全局的,可过滤到所有请求资源,包括.css等文件,而拦截器是基于struts2的,只能过滤到请求action的方法。

相同点,二者的实现都可看作是模块化的,可理解为是aop的一种策略。

eclipse环境下基于已构建struts2项目整合spring+hibernate

struts2动态调用+Servlet过滤器+struts2拦截器,struts2servlet

周末真的是懒到心慌。。。。。。

本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章:

1.struts2动态调用:

如果不配置动态调用,我们只能在一个action中调用一个默认excute()方法,每请求调用一个方法就需要编写一个action,这样就会加大开发的工作量,因此这是刚需。

eclipse环境下基于tomcat-7.0.82构建struts2项目

过滤器与拦截器的区别

首先过滤器是基于servlet的基础上进行的操作,是属于全局的,可过滤到所有请求资源,包括.css等文件,而拦截器是基于struts2的,只能过滤到请求action的方法。

相同点,二者的实现都可看作是模块化的,可理解为是aop的一种策略。

3.struts2拦截器

struts2拦截器是是其核心,拦截器可以让我们在action和result执行之前或者之后完成一些操作,比如权限验证,未登陆的用户不被允许访问某些资源等。

本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章:

基于已构建S2SH项目配置全注解方式简化配置文件

第一步:配置struts2动态调用

在struts.xml配置文件中的<struts></struts>节点内声明struts2支持动态调用、并规定匹配怎样的字符交给struts2进行处理,代码如下:

    <!-- 让struts2支持动态方法调用 以感叹号方式调用action中的多个方法 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />

    <!-- 所有匹配*.action、do的请求都由struts2处理 -->
    <constant name="struts.action.extension" value="action,do" />

第三步:配置struts2拦截器

struts2的拦截器接口有多个,根接口也包含初始化、执行拦截操作、销毁三个抽象方法,这里我们继承MethodFilterInterceptor抽象类,该类内部已经对初始化和销毁的方法进行了实现,因此只需要实现执行拦截操作的抽象方法即可,当然如果有初始化和销毁操作,我们这里也可以对其进行定义覆盖父类同名方法的实现,代码如下:

package wjt.com.test.interceptor;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

/**
 * 自定义方法拦截器
 * 
 * @author Together
 *
 */
public class MethodInterceptor extends MethodFilterInterceptor{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected String doIntercept(ActionInvocation arg0) throws Exception {
        System.err.println("拦截器生效...");
        String action=(String) ServletActionContext.getRequest().getSession().getAttribute("action");
        System.out.println("action:"+action);
        StringBuffer requstPath=ServletActionContext.getRequest().getRequestURL();
        System.out.println("requstPath:"+requstPath);
        System.err.println("拦截器结束...");
        return arg0.invoke();
    }

}

配置struts.xml文件,使拦截器生效,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
            "http://struts.apache.org/dtds/struts-2.3.dtd"><!-- 这里要和struts2版本号统一 -->

<struts>

    <!-- 告知Struts2运行时使用Spring来创建对象 -->
    <constant name="struts.objectFactory" value="spring" />

    <!-- 让struts2支持动态方法调用 以感叹号方式调用action中的多个方法 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />

    <!-- 所有匹配*.action、do的请求都由struts2处理 -->
    <constant name="struts.action.extension" value="action,do" />

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

        <interceptors>

            <!-- 先定义拦截器 -->
            <interceptor name="myInterceptor" class="wjt.com.test.interceptor.MethodInterceptor">
                <!-- 指定系统初始化给拦截器的参数 -->
                <!-- <param name="hello">吴静涛</param> -->
            </interceptor>

            <!-- 加到自己设置的拦截器栈里边去 -->
            <interceptor-stack name="myStack">
                <interceptor-ref name="myInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>

        </interceptors>

        <!-- 改变系统默认的拦截器,改成自己的默认拦截器,并且一个系统只能有一个默认的拦截器,这样这个拦截器栈会默认应用到所有的Action上去 -->
        <default-interceptor-ref name="myStack" />

    </package>

</struts>

配置action实现类,若使对action实现类的请求经过自定义拦截器的处理,需要我们对其添加@ParentPackage("default"),该注解添加到action类名上方,作为action的第一注解存在。

3.struts2拦截器

struts2拦截器是是其核心,拦截器可以让我们在action和result执行之前或者之后完成一些操作,比如权限验证,未登陆的用户不被允许访问某些资源等。

测试:

到这里题目所属三项配置就完毕了,启动项目并请求action后截图如下所示表示配置成功:

澳门新葡亰网址大全 1

澳门新葡亰网址大全 2

 

这里只给出简单配置,读者朋友最好还是在理解原理的前期下使用,本人还是刚毕业小白,对原理的理解还不够深,还没能达到陈述原理的水平,有不合理的地方还请大家指出。

http://www.bkjia.com/Javabc/1234953.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1234953.htmlTechArticlestruts2动态调用+Servlet过滤器+struts2拦截器,struts2servlet澳门新葡亰网址大全, 周末真的是懒到心慌。。。。。。 本文是在完整s2sh项目基础上添加的,不太了解s2...

eclipse环境下基于tomcat-7.0.82构建struts2项目

eclipse环境下基于已构建struts2项目整合spring+hibernate

首先简单说明一下为什么需要在s2sh项目中配置题目所述三项:

本文由澳门新葡亰网址大全发布于网络时代,转载请注明出处:struts2动态调用+Servlet过滤器+struts2拦截器

关键词: