zoukankan      html  css  js  c++  java
  • strut2 拦截器 使用

    拦截器是strut2里一个很振奋人心的应用。通过配置拦截器可以在action执行之前进行一些初始化或者是其他的操作,但是在action执行之后,返回结果就已经确定,结果是很难改变了(目前我还不知道怎么改变结果),只能获取结果值。

    如果想改变action中属性的值,就要在invoke之前进行改变。

    package org.sh.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts2.ServletActionContext;
    import org.apache.struts2.StrutsStatics;
    import org.sh.action.UserAction;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
    
    public class MyInterceptor extends MethodFilterInterceptor{
    
    	@Override
    	protected String doIntercept(ActionInvocation invocation) throws Exception {
    		//获取参数
    		ActionContext ac = invocation.getInvocationContext();
    		HttpServletRequest request = (HttpServletRequest)ac.get(StrutsStatics.HTTP_REQUEST);
    		String name = request.getParameter("name");
    		String pwd = "";
    		System.out.println("parm:"+name+"::"+pwd+";");
    		if(invocation.getAction() instanceof UserAction){
    			((UserAction)invocation.getAction()).getJsonResult().put("update", "error");
    		}
    		ServletActionContext.getRequest(); //同上面的request
    		String r = invocation.invoke();	
    		HttpServletResponse response = (HttpServletResponse) ac.get(StrutsStatics.HTTP_RESPONSE);
    		//注意 -----------------------------------
    		//下面的代码虽然可以改变action中属性的值,但是返回结果已经在invoke()时就已经确定了,
    		//不会再次使用action的值进行结果的生成,所以在这里改变是没有什么意义的
    		if(invocation.getAction() instanceof UserAction){ 
    			System.out.println("-------------------------------");
    			((UserAction)invocation.getAction()).setName("哈哈哈S");
    			((UserAction)invocation.getAction()).getJsonResult().put("upd", "success");
    		}
    		return r;
    	}
    
    }
    

    配置文件

    	<package name="mypackage" extends="json-default">
    	<interceptors>
    		<interceptor name="myInter" class="org.sh.interceptor.MyInterceptor"></interceptor>
    		<interceptor-stack name="mydefalut">						
    			<interceptor-ref name="defaultStack"></interceptor-ref>
    			<interceptor-ref name="myInter"></interceptor-ref>
    		</interceptor-stack>
    
    	</interceptors>
    		<action name="uact" class="org.sh.action.UserAction">
    			<result type="json" name="success" >
    				<param name="root">jsonBean</param>
    				<param name="excludeNullProperties">false</param>
    			</result>
    		<interceptor-ref name="mydefalut"></interceptor-ref>
    		</action>
    	</package>


  • 相关阅读:
    对于大流量网站怎样解决访问量的问题
    服务器中 配置phpstudy一键安装包
    [转]MySQLHelper类
    [转]C#连接操作mysql实例
    设计模式—观察者模式
    asp.net mvc 中的自定义验证(Custom Validation Attribute)
    软件行业名称缩写
    设计模式—原型模式
    设计模式—建造者模式
    添加asp.net mvc到现有的asp.net web form 应用程序
  • 原文地址:https://www.cnblogs.com/vvch/p/4027594.html
Copyright © 2011-2022 走看看