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

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>不变

分享到:
评论

相关推荐

    struts2 result配置详解

    Struts2 Result 配置详解 Struts2 框架中 Result 配置是一种非常重要的配置,它直接影响着应用程序的执行结果。Result 配置通常用于定义 Action 的执行结果,例如将结果.redirect 到一个新的 URL,或者将结果....

    struts2的struts.properties配置文件详解

    Struts2的Struts.properties配置文件详解 Struts2是一个基于MVC模式的Web应用程序框架,它提供了一个名为Struts.properties的配置文件,该文件用于配置Struts2的各种参数和设置。下面将对Struts.properties配置文件...

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

    在Struts2中,我们可以使用`CommonsFileUpload`库来处理上传的文件。首先,需要在`struts.xml`配置文件中启用`params interceptor`和`fileUpload interceptor`。这两个拦截器分别负责解析请求参数和处理文件上传。 ...

    Struts2各配置文件详解.doc

    在Struts2中,配置文件起着至关重要的作用,它们定义了框架的行为、拦截器、对象工厂、类型检测以及动作映射等关键组件。下面将详细解析Struts2的主要配置文件。 1)struts-default.xml 这是Struts2框架默认加载的...

    struts2和servlet的共存问题

    ### Struts2与Servlet共存问题详解 #### 一、问题背景 在Java Web开发中,Struts2框架因其简洁的MVC模式和强大的插件系统而被广泛使用。但在某些场景下,开发者可能需要同时使用Struts2和其他Servlet技术(如...

    struts2入门实例教程详解

    - 需要在`struts.xml`中配置Action,而不是像Struts1中的`struts-config.xml`。配置示例: ```xml &lt;package name="default" namespace="/" extends="struts-default"&gt; &lt;result name="positive"&gt;/WEB-INF/views...

    struts2核心配置文件

    ### Struts2核心配置文件详解 #### 一、概述 Struts2框架是Java Web开发领域内一个重要的轻量级框架,它简化了基于MVC(Model-View-Controller)设计模式的应用程序开发过程。在Struts2框架中,有两个核心配置文件...

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

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

    struts2参数配置

    本文将围绕Struts2中的关键配置进行深入探讨,旨在帮助开发者更好地理解和掌握Struts2的核心功能。 #### 二、Struts2核心配置 ##### 1. **ActionServlet配置** - **ActionServlet** 是Struts2的核心组件之一,...

    struts2配置过滤器

    本文将通过一个具体的示例来详细介绍如何在Struts2项目中配置过滤器。 #### 二、过滤器配置实例分析 ##### 2.1 web.xml配置解析 在给定的web.xml配置文件中,可以看到对`SessionInvalidate`过滤器进行了定义和...

    Struts2属性文件详解

    ### Struts2属性文件详解 #### struts.configuration 该属性用于指定加载Struts 2配置文件的配置文件管理器,默认值为`org.apache.struts2.config.DefaultConfiguration`,这是Struts 2默认的配置文件管理器。若...

    Struts配置文件详解

    在`web.xml`中,`&lt;init-param&gt;`子元素用于设置ActionServlet的初始化参数,例如配置`struts-config.xml`的路径,`param-name`设置为`config`,`param-value`则指向配置文件的路径。 此外,`web.xml`还用于配置欢迎...

    struts2配置详解文档

    - 在`struts.xml`文件中配置`HelloWorldAction`的映射关系。 - 指定处理方法及视图跳转路径。 5. **创建视图页面**: - 使用JSP或Freemarker等模板引擎创建视图页面。 - 显示登录表单,并根据登录结果展示不同...

    ·Struts2配置文件介绍 超级详细

    - **web.xml**:它是Web应用的部署描述符,负责配置Servlet容器如何加载Struts2的核心过滤器`StrutsPrepareAndExecuteFilter`。通过这个过滤器,Struts2能够拦截所有的HTTP请求,并将其转发到相应的Action处理。 - ...

    struts2框架详解

    Struts2框架详解 Struts2是Java Web开发中的一款广泛应用的开源MVC框架,它构建在Apache Struts 1的基础上,提供了更为强大的功能和更好的灵活性。Struts2旨在简化Web应用开发,通过将表现层与业务逻辑层解耦,提高...

    Struts2配置文件详解

    ### Struts2配置文件详解 #### 一、引言 Struts2是一个基于Java的开源Web应用程序框架,它简化了Web应用的开发过程并提高了代码的可维护性。`struts.xml`作为Struts2的核心配置文件,在项目中扮演着极其重要的角色...

    struts2常量详解

    本文将深入探讨Struts2中的常量配置,这些常量在框架的运行时扮演着至关重要的角色。 首先,我们要了解Struts2配置文件的层次结构。主要有以下几个核心配置文件: 1. **struts-default.xml**:这是Struts2核心库中...

Global site tag (gtag.js) - Google Analytics