主要是由于页面的请求都被struts给拦截了,根本访问不了servlet,发现这个原因后本人是先直接在struts的配置文件中加上
<constant name="struts.action.extension" value="do,action"/> (请求的后缀要有.do或.action才到struts配置文件里找对应的action),运行站点,可以工作了。
web.xml里面的这个filter,他本质是一个过滤器,这里设置的内容就是我们要让这个过滤器过滤的内容
/*,我们的这个配置的意思是所有的链接地址都要经过struts2的过滤器的处理
struts.action.extension这个里面指定的扩展名,也就是说默认是action的我们才交给struts2控制器来处理,不是action扩展的我们不管(如图片、JS、CSS文件等)
追问
struts2过滤器对请求有什么作用。如果请求不是配置文件中的规定。struts2就不会去处理。但请求经过了过滤器这个步骤。此时过滤器有什么用。
追答
过滤器要经过一个判断,不然他不知道你的请求是否会符合规定, web.xml里面的过滤器配置只支持以下三种 ① 完全匹配 <url-pattern>/test/zhidao.action</url-pattern> ② 目录匹配 <url-pattern>/test/*</url-pattern> ③ 扩展名匹配 <url-pattern>*.action</url-pattern> 看着第三种也符合我们的需求是吧,但是这种的扩展性不好,比如我们现在有一个这样的需求: 1、.do,.action扩展名的都要是struts2的请求,我们使用struts.action.extension,就可以达到,但是只使用web.xml里面的配置很难达到 2、如果我们只使用了3的过滤器的配置,我们现在又有一个需求,我们只需要过滤URL为/action/开头的,而扩展名又是action的,怎么办?这个时候我们使用2的目录匹配,加上struts.action.extension,也可以达到需求了 楼主加点分吧,嘿嘿
追问
你说的我懂,但不是我问的。你再回答下我把分给你 当url-pattern配置为/*时,所有的请求都经过了struts2过滤器,但请求不是sturts配置文件中的访问方式(例如:action为后缀)那么此时struts2过滤器有什么作用, Struts tags are only usable when the request has passed through its servlet filter,i want to know like this. can you tell me another thing about that ?sorry, my computer can't use the Chinese = =!! 3q
追答
当url-pattern配置为/*时,所有的请求都经过了struts2过滤器,但请求不是sturts配置文件中的访问方式(例如:action为后缀)那么此时struts2过滤器有什么作用 ========== 没有作用,他就是来检查是否需要struts2进一步处理(是否是以action结尾的),如果不需要就不管了(如果不是action结尾的,就放行,交给容器如tomcat进一步处理)