最近在利用struts2拦截器实现文字过滤功能是出现了如下异常:

     

java.lang.NullPointerException
 dr.interceptor.MyInterceptor.intercept(MyInterceptor.java:19)
 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
 org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
 org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
经过查询才知道,原来是因为在struts.xml配置自己定义的拦截器将默认的拦截器栈defaultStack覆盖,错误代码如下:

<struts>
 <package name="struts2" extends="struts-default">
  <interceptors>
   <interceptor name="myInterceptor" class="dr.interceptor.MyInterceptor"></interceptor>
  </interceptors>
  <action name="public" class="dr.action.PublicAction">
  
  
   <result name="success">/success.jsp</result>
  
   <interceptor-ref name="myInterceptor"/>
  
  </action>
 </package>
</struts>

解决的办法是在struts.xml文件中配置defaultStack,具体代码如下:

<struts>
 <package name="struts2" extends="struts-default">
  <interceptors>
   <interceptor name="myInterceptor" class="dr.interceptor.MyInterceptor"></interceptor>
  </interceptors>
  <action name="public" class="dr.action.PublicAction">
  
  
   <result name="success">/success.jsp</result>
  
   <interceptor-ref name="defaultStack"/>

   <interceptor-ref name="myInterceptor"/>

  
  </action>
 </package>
</struts>
并且配置defaultStack的代码必须放在配置自定义拦截器(myInterceptor)前面。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/duanruihaoren/archive/2011/01/01/6111788.aspx