Struts2.1* 过滤规则 与 Servlet 之间的微妙关系

学习Struts2也有一段时间了,今天用Servlet写了一个验证码,然后搬到Struts2中,惊奇地发现Servlet无法访问,出现404错误!后来折腾了半天,终于找出原因了。这也算我学习中的一个重大发现吧。写下来给大家分享一下:

   在李刚编写的《Struts2权威指南》一书中,他用的是Struts2.0*版本。而我在开发中用的是Struts2.1*版本的构包。其中有很大不同就是,新版本对servlet实现了过滤,而旧版本并未对其进行过滤!

   原来我的web.xml定义了一个strutsFilter过滤所有用户请求,如下:

 

<!-- 定义Struts2FilterDispathcerFilter -->

   <filter>

       <filter-name>struts2</filter-name>

       <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

   </filter>

 <!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->

   <filter-mapping>

       <filter-name>struts2</filter-name>

       <url-pattern>/*</url-pattern>

   </filter-mapping>

 

      再实现了一个servlet。这样是不能访问到这个Servlet的,因为struts将其拦截了。

为了能够实现servlet,我们可以如下的方式定义strutsFilter

 

<!-- 定义Struts2FilterDispathcerFilter -->

   <filter>

       <filter-name>struts2</filter-name>

       <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

   </filter>

<!-- FilterDispatcher用来初始化struts2并且处理.action.jspWEB请求。 -->

    <filter-mapping>

      <filter-name>struts2</filter-name>

      <url-pattern>*.action</url-pattern>

   </filter-mapping>

   <filter-mapping>

      <filter-name>struts2</filter-name>

      <url-pattern>*.jsp</url-pattern>

   </filter-mapping>

只需对过滤规则改一改,我们就能够解决在Strut2中出现的Servlet404错误.

    这让我思索了一个问题:我们的java的包,不断地在更新中,每一次更新也许都会做出很大的改动,我们作为一个程序爱好者,不断地跟上最前沿的技术是必不可少的,但是我们在追赶潮流的时候,不要迷失了方向。要主意每一个细节,追赶潮流是要付出代价的。我就是其中的一个。

    所以我们要时刻保持冷静的头脑,当用新的技术的时候,我们不能够死死地陷入旧的编程习惯的死胡同中,寻求更本就不可能出现的错误!而应该去发布新技术的网站去看看他们的最新文档,看看他们的原则,看看他们对哪些地方做出了改动。这样我们才能一路顺风地解决问题。

    我今天钻进了两个大的死胡同,一个是Servlet不能方位,另外一个就是AjaxJson插件两个版本中的很大程度上的不同。实际上对于Struts2.1*版本的Json插件已经与StrutsActionSupport相兼容了,而低版本的Json插件只是实现了StrutsAction接口。

   生活也是这样,我们要活到老,学到老!只有掌握最佳的方法,我们才能更有城府。

你可能感兴趣的:(Ajax,servlet,status2)