• Structs 2


    1  redirect、redirectaction和chain 的区别

    当使用type=“redirectAction” 或type=“redirect”提交到一个action并且需要传递一个参数时:

    使用type=“redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action”。

    Xml代码

    <action name="Login" class="steven.actions.LoginAction">

    <result name="success" type="redirectAction">User?u_id=${loginBean.u_id}</result>

    </action>

     

    使用type=“redirect”时,结果应是action配置名+后缀名

    Xml代码

    <action name="Login" class="steven.actions.LoginAction">

    <result name="success" type="redirect">User.action?u_id=${loginBean.u_id}</result>

    </action>

    redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。

    redirect-action:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。

    chain:action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失

     

    2 Structs2 流程

    3 Structs 拦截器

    structs2 拦截器是需要继承AbstractInterceptor 类,在xwork-core.jar 里面。

    代码如下:

    @Override
    	public String intercept(ActionInvocation ai) throws Exception {
    		Map session = ai.getInvocationContext().getSession(); 
    		Object action = ai.getAction();
    		String methodName = ai.getProxy().getMethod();
    		if(action instanceof UserAction && "login".equals(methodName)) {
    			return ai.invoke();
    		}
    		User user = (User)session.get(Constants.LOGIN_USER_SESSION);
    		if(user == null) {
    			return com.opensymphony.xwork2.Action.LOGIN;
    		} else {
    			ai.invoke();
    			return com.opensymphony.xwork2.Action.SUCCESS;
    		}
    	}

    这里的return login和success 会返回到配置文件定义的页面、

    配置文件:

    <interceptors>
    			<!-- 定义权限检查拦截器    -->
    			<interceptor name="loginInterceptor" class="com.scjx.sysmanage.interceptor.LoginInterceptor"/>
    			<!-- 定义一个包含权限检查的拦截器栈 -->
    			<interceptor-stack name="myDefaultStack">
    				<interceptor-ref name="defaultStack"></interceptor-ref>
    				<interceptor-ref name="loginInterceptor"></interceptor-ref>
    			</interceptor-stack>
    		</interceptors>
    		<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>	
     
    首先是定义了一个拦截器,然后定义了一个拦截器栈,最后再把拦截器栈注入到默认的拦截器。
    拦截器栈的执行顺序是 执行的时候是正着来,action 执行之后回来的时候是反着来。
     
    方法过滤拦截器MethodFilterInterceptor,是对某个方法进行拦截。
    <interceptor-ref name="myInterceptor3">
    
    <param name="includeMethods">execute</param>
    
    <param name="excludeMethods">execute</param>
    
    </interceptor-ref>

    其中includeMethods ,excludeMethods是固定写法: includeMethods?包含拦截那些方法,多个方法需要用”,”隔开;?excludeMehtods是排除拦截的那些方法;

    参考资料:http://www.open-open.com/lib/view/open1338339244354.html

     
     
  • 相关阅读:
    linux上部署javaWeb项目
    Android 调试native的crash和anr
    你怎么知道你的网站K
    Win 10开门人类智慧的世界领先
    Preference如何增加在activity生命周期监听器
    智能指针模板,要管理动态分配的内存
    两分钟找到一些注意事项
    javascript---在自由落体实现
    URAL 1934 Black Spot --- 最短的简单修改
    最简单的ADABOOST人脸检测程序。COPY执行,前提是你配置OpenCV周围环境
  • 原文地址:https://www.cnblogs.com/brucetie/p/3571933.html
Copyright © 2020-2023  润新知