zoukankan      html  css  js  c++  java
  • 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

     
     
  • 相关阅读:
    【解压缩命令】 -费元星
    【虚拟机取得该虚拟机的所有权失败】--费元星
    solr 常见的问题整理 -费元星
    oracle 建立一个视图,然后授权其他用户访问
    虚拟机安装win7 64位-完美解决-费元星
    solr 学习
    CentOS安装JDK1.7
    Nginx+Tomcat多站点访问默认主页问题-狒狒完美解决-Q9715234
    pip 安装时提示uvloop/loop.c:20:10: fatal error: Python.h解决
    MySQL锁总结
  • 原文地址:https://www.cnblogs.com/brucetie/p/3571933.html
Copyright © 2011-2022 走看看