关于strut拦截action的路径和package的namespase的问题

触发action时在web.xml中配置的如下:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/marsor/*</url-pattern>
</filter-mapping>
那么触发action时的完整路径是:


http://address:port/programname/marsor/haha.action
但是一般在登录这个网址的时候会写入全路径:


http://address:port/programname/marsor/index.jsp   此处


的/marsor是jsp所在的真实目录,
这里就涉及一个技巧:当你输入全地址时


http://address:port/programname/marsor/index.jsp,在该jsp下面触


发action时直接写上action的名字就可以了,
因为服务器会记录http://address:port/programname/marsor/这段地址


,然后把触发的action直接加到后面,这就是目录名marsor和
<url-pattern>/marsor/*</url-pattern>这里配置的一样的技巧了
其实只要地址栏里面有http://address:port/programname/marsor/  那


么服务器就会拦截检测到/marsor的存在,那么就会直接定位到/marsor


后面的action。
所以当你触发:


http://address:port/programname/marsor/fadadfa/davadv/login.act


ion时 也可以触发成功,服务器会自动把/marsor后面的地址去掉而直接


定位到action
这就出问题了,如果要是在struts里面配置
<package name="userArticle" namespace="/user" extends="global">
那么触发时就要在action前面加上/user  全路径是:


http://address:port/programname/marsor/user/login.action
这就产生问题了,/marsor会自动过滤掉/user而直接定位到


login.action  但是struts又检测不到/user  所以触发总是失败的!
建议不要在package里面设置namaspace

你可能感兴趣的:(jsp,struts,服务器,action)