• struts2.1.*中再实现了一个servlet的方法


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

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

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

    <!-- 定义Struts2的FilterDispathcer的Filter -->
        <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,我们可以如下的方式定义struts的Filter:

    <!-- 定义Struts2的FilterDispathcer的Filter -->
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>

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

        <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中出现的Servlet的404错误.

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

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

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

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

  • 相关阅读:
    这两年
    Ubuntu 14.04 更新 setuptools 至 19.2 版本
    leetcode 编译问题:Line x: member access within null pointer of type 'struct TreeNode'
    C++ 将 std::string 转换为 char*
    LeetCode in action
    Ubuntu下 fatal error: Python.h: No such file or directory 解决方法
    Mac OS X 清除DNS缓存
    Mac OS X 避免产生临时文件 .DS_Store
    Mac OS X 显示和隐藏文件
    解决 ln -s 软链接产生的Too many levels of symbolic links错误
  • 原文地址:https://www.cnblogs.com/chengJAVA/p/3594902.html
Copyright © 2020-2023  润新知