`
ijavagos
  • 浏览: 1190787 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Struts2中配置Servlet详解

阅读更多

ServletfilterJ2EE开发中常用的技术,使用方便,配置简单,今天在struts2环境中使用ajax,需要用到一个普通servlet作为ajax的服务端,配置好之后部署运行起来,出现警告: Could not find action or result
There is no Action mapped for namespace / and action name Chk. - [unknown location]

上网查了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-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>Chk</servlet-name>
<servlet-class>com.thdx.action.Chk</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Chk</servlet-name>
<url-pattern>/Chk</url-pattern>
</servlet-mapping>

修改后

.........

<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping> //servlet中的<url-pattern>不变

.....

<servlet-mapping>
<servlet-name>Chk</servlet-name>
<url-pattern>/Chk.servlet</url-pattern>//点后面随便怎么写
</servlet-mapping>// struts2的filter中<url-pattern>不变

分享到:
评论

相关推荐

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    是否struts过滤器中提供的静态内容应该被浏览器缓存在头部属性中 struts.serve.static Whether the Struts filter should serve static content or not 是否struts过滤器应该提供静态内容 struts.tag....

    struts2配置详解

    Struts2 中的验证逻辑编写在 Action 中. 4、Struts1 中, Action 类必须继承 org.apache.struts.action.Action 类; Struts2 中任何一个 POJO 都可以是一个 Action 类. 5、Struts2 在页面里使用 OGNL 来显示各种对象...

    struts2自定义标签案例详解

    Struts2中实现自定义标签很简单,主要分为3步: 1.创建taglib文件(.tld),编写标签声明。 2.编写自定义标签类。 3.在页面中使用标签。 下面以一个自定义的分页标签为例,进行说明。 其实,开发自定义标签并不...

    Struts2之Servlet文件上传详解案例struts010

    参考博文:http://blog.csdn.net/u011638419/article/details/41642773

    JSP Struts配置文件详解

    描述:用于配置ActionServlet 数量:最多一个 属性: @bufferSize:指定上传文件的输入缓冲的大小.默认为4096 @className:指定当前控制器的配置类.默认为org.apache.struts.config.ControllerConfig @...

    Struts配置详解.doc

    Struts配置文件详解 web.xml、struts-cofig.xml以及struts-cofig.xml中各个标签的作用。 Struts应用采用两个基于XML的配置文件来配置,分别是web.xml和struts-cofig.xml文件.web.xml文件是配置所有web应用的,而...

    struts1之ActionServlet详解_动力节点Java学院整理

    主要介绍了struts1之ActionServlet详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Struts2属性文件详解

    Struts2属性文件详解 struts.configuration 该属性指定加载Struts 2配置文件的配置文件管理器.该属性的默认值是org.apache.Struts2.config.DefaultConfiguration, 这是Struts 2默认的配置文件管理器.如果需要实现...

    详解Struts2中Action访问Servlet API的几种方法

    详解Struts2中Action访问Servlet API的几种方法 在通常的web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能与JSP页面进行数据交互,所以通常都不会用到这两个对象。如果想在Struts2程序中用到...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 使用Hibernate快速实现持久层处理 12.1 ...

    Struts2入门教程(全新完整版)

    1.概述strust2中的拦截器 28 2.自定义拦截器 28 方式一,实现Interceptor接口。 28 方式二、继承AbstractInterceptor抽象类 29 方式三、继承MethodFilterInteceptor类 30 3.使用来MethodFilterInterceptor灵活拦截 ...

    struts面试题详解

    struts面试题详解,Struts1框架以ActionServlet作为核心控制器,整个应用由客户端请求驱动。

    Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)

    《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。第1篇为入门篇,内容包括Java Web开发概述等;第2篇...

    Java servlet过滤器配置详解

    开发中总结的通用过滤器配置,包括EncodingFilter类、jsp页面配置和web.xml文件的配置代码

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 使用Hibernate快速实现持久层处理 12.1 ...

    Struts详解---Struts的起源 Struts的流程 Struts框架 Struts2

    Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准 Struts2和Struts1的不同

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 使用Hibernate快速实现持久层处理 12.1 ...

    Struts2 Result 返回JSON对象详解

    主要讲解Struts2返回JSON对象的两种方式,讲的比较详细,希望能给大家做一个参考。

    轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发chap2

    本书是《轻量级J2EE企业应用实战》的第二版,同时还融合了《整合Struts+Hibernate+Spring应用开发详解》理论部分。实际上,本书凝结了前两本书的精华部分。 本书介绍了Java EE领域的三个开源框架:Struts 2、Spring...

Global site tag (gtag.js) - Google Analytics