最近在利用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
转载于:https://blog.51cto.com/duanruihaoren/470766