Servlet和filter是J2EE开发中常用的技术,使用方便,配置简单,今天在struts2环境中使用ajax,需要用到一个普通servlet作为ajax的服务端,配置好之后部署运行起来,出现警告:?Could not find action or result 上网查了servlet的规范才发现,servlet和filter中的url-pattern还是有一些文章在里面的,总结了一些东西,放出来供大家参考,以免遇到问题又要浪费时间。 ??? 一、servlet容器对url的匹配过程:当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如访问的是http://localhost/test/aaa.html,应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下: 1.???? 精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果访问的url为http://localhost/test?,这个时候容器就会先进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。 2.???? 最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。 3.???? 扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action 4.???? 如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。 根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。 ????? 对于filter,不会像servlet那样只匹配一个servlet,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter。Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同。 二、url-pattern详解 ????在web.xml文件中,以下语法用于定义映射: 1?、以”/’开头和以”/*”结尾的是用来做路径映射的。 2、?以前缀”*.”开头的是用来做扩展映射的。 3、? “/” 是用来定义default servlet映射的。 4、?剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action 所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。 三、解决Could not find action or result? There is no Action mapped for namespace / and action name Chk有两种偏门的办法:1、修改servlet的配置文件的<url-pattern> ,struts2的filter中<url-pattern>不变2、修改struts2的filter中<url-pattern>,servlet中的<url-pattern>不变 原配置文件: ?<filter> ?<filter-mapping> ? <servlet> ? <servlet-mapping> 修改后 ......... ???<filter-name>struts2</filter-name> 或 ..... <servlet-mapping>
There is no Action mapped for namespace / and action name Chk. - [unknown location]
??<filter-name>struts2</filter-name>
??<filter-class>
???org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
??</filter-class>
?</filter>
??<filter-name>struts2</filter-name>
??<url-pattern>/*</url-pattern>
?</filter-mapping>
??? <servlet-name>Chk</servlet-name>
??? <servlet-class>com.thdx.action.Chk</servlet-class>
? </servlet>
??? <servlet-name>Chk</servlet-name>
??? <url-pattern>/Chk</url-pattern>
? </servlet-mapping>
??<url-pattern>*.action</url-pattern>
?</filter-mapping>?? //servlet中的<url-pattern>不变
??? <servlet-name>Chk</servlet-name>
????<url-pattern>/Chk.servlet</url-pattern>//点后面随便怎么写
? </servlet-mapping>?// struts2的filter中<url-pattern>不变
详细解决方案
Struts2中配备Servlet详解
热度:84 发布时间:2012-11-03 10:57:43.0
相关解决方案
- struts2.xml的action中的result报错,该怎么处理
- (Struts2+JSON+Ajax) XMLHttpRequest ==500如何解决
- struts2 对象属性流入不进去, 报错:target is null for setProperty(null, "x" [Ljava.lang.Stri
- Struts2 <select>上拉框 回显有关问题
- struts2 添加和修改怎么在一个jsp页面实现
- struts2 查询输出的有关问题
- 零配置的有关问题(struts2+Hibernate)
- struts2 神奇有关问题,太神奇了!
- jsp servlet 读取图片!该如何处理
- Servlet 连接数据库(mongoDB)是用长连仍是短链比较好
- struts2 的<s:iterator>标签展示未完全初始化的数组出现奇怪的有关问题
- struts2 文件下传有关问题
- struts2+ajax请求失败,帮忙看一上
- struts2-json中诠注@JSON(deserialize=false)是什么用?不是阻止JSON反序列化成JAVA对象吗?求解
- struts2 循环累加属性值有关问题
- Servlet Session 购物车,该怎么解决
- struts2,hibernate,spring3 常用框架的API CHM版本,该怎么处理
- Servlet.service() for servlet [jsp] in context with path解决方案
- 关于jsp+servlet+JavaBean的有关问题
- struts2 将jsp回到到另一个jsp中
- servlet+jsp能够获取表单里的数据,在控制台能够打印出来,但是不能安插到mysql,求帮忙
- struts2 提交表单不能跳转页面有关问题!action已经执行,但是不能跳转到指定的页面
- Servlet Session 购物车解决办法
- struts2,hibernate,spring3 惯用框架的API CHM版本
- Struts2+Spring+JPA+FREEMARKER 登录程序异常
- struts2+Hibernate一个很奇怪的现象,该如何解决
- struts2 action中部分语句被直接跳过不执行. 请教这会是什么原因
- struts2+iReport 子表格 急需高手解决,已经困惑三天了!
- import cn.luxh.struts2.entity.Novel 急需的jar包是哪个
- struts2 hibernate 分页有关问题