`
kjj
  • 浏览: 171572 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

Struts2 convention plugins 使用中一个大BUG

阅读更多
最近准备试用struts2 的 convention 插件,其中自动映射url的功能很新奇,也省了不少事,不用到处写配置文件了,如果加上spring的announced 比原来更加方便
不过试用中发现一个问题,提请大家讨论,目前已被证明的确是一个bug
比如你在浏览器中键入一个url http://localhost/iweb/dwr/
这个url 是虚拟的,但不映射任何action ,struts2 会替你查找action ,如果找不到就会
引用

There is no Action mapped for action name dwr.


There is no Action mapped for action name dwr. - [unknown location]
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:177)
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory
。。。。。。


其实应该有一个配置,指明那些规则的url 不需要匹配action,可是目前没有发现

详见bug 讨论
https://issues.apache.org/struts/browse/WW-2969;jsessionid=694C1010E63EA0D2FA5434A1B5BEE14E?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel

作者也列出了几种解决的这种办法!
谁有更好的解决办法,请发出讨论之
分享到:
评论
12 楼 wen19851025 2009-10-30  
这个有两种解决方案:
1、在写SERVLET映射时加后缀,如
	 <servlet>
		<servlet-name>authImg</servlet-name>
		<servlet-class>com.advert.servlet.AuthImg</servlet-class>		
	</servlet>
	<servlet-mapping>
		<servlet-name>authImg</servlet-name>
		<url-pattern>/authimg.dhtml</url-pattern>
	</servlet-mapping>

访问路径:http://localhost:8080/authimg.dhtml

2、修改STRUTS.properties配置文件
   找到名称为struts.action.extension常量
   该常量是用来标识ACTION的后缀的可以用","号分隔设定多个后缀
   只要该值不要出现如",,"这要空后缀就行了
如:
正确的:
struts.action.extension=dhtml,do

错误的:
struts.action.extension=dhtml,do,,

11 楼 瀚愚 2009-04-19  
这东西是有点不爽
写个servlet,我用servelt的映射路径,它也要报个no Action mapped 的异常出来,搞得我以前写的servlet都没法用进来
10 楼 ithero 2009-04-19  
这玩意儿真是不爽,我用这个插件也出现这种问题,我的fckeditor所见即所得编辑器的路私/widgets/rich_editor/fckeditort
结果它来个 There is no Action mapped for action name widgets.
无语。弄得fckeditor的fckstyles.xml没法加载。而且这玩意儿还不支持伪静态的url写法就支持一个id的参数,越用越不爽。
9 楼 kjj 2009-02-07  
比原来麻烦不了多少,原来要写xml的,每个action 每个方法还不都得写!
8 楼 yb31 2009-02-07  
kjj 写道
yb31 写道
請問convention plugins支不支持一個action多個方法如
xxx_list.do   ->返回"list"則找xxx/list.jsp
xxx_edit.do   ->返回"edit"則找xxx/edit.jsp



可以通过action 注释配置这种情况,详情请看其文☭


每个方法都要注释配置那就比原来更麻烦了.是否能零配置默认支持的才好
7 楼 myyate 2009-02-06  
这个plugin没有用过,不过对于无效的url转到你自己指定的页面是可以实现的。
可以看看struts2的源代码,DefaultActionMapper的getMapping方法
    public ActionMapping getMapping(HttpServletRequest request,
            ConfigurationManager configManager) {
        ActionMapping mapping = new ActionMapping();
        String uri = getUri(request);

        int indexOfSemicolon = uri.indexOf(";");
        uri = (indexOfSemicolon > -1) ? uri.substring(0, indexOfSemicolon) : uri;

        uri = dropExtension(uri, mapping);
        if (uri == null) {
            return null;
        }

        parseNameAndNamespace(uri, mapping, configManager);

        handleSpecialParameters(request, mapping);

        if (mapping.getName() == null) {
            return null;
        }

        parseActionName(mapping);

        return mapping;
    }

它默认找不到就返回null,你可以重写ActionMapper的实现,当找不到时,自动返回一个默认的ActionMapping ,然后把默认的配置
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />

替换掉,这样到可以实现你的需求。
6 楼 kjj 2009-02-06  
yb31 写道
請問convention plugins支不支持一個action多個方法如
xxx_list.do   ->返回"list"則找xxx/list.jsp
xxx_edit.do   ->返回"edit"則找xxx/edit.jsp



可以通过action 注释配置这种情况,详情请看其文☭
5 楼 kjj 2009-02-06  
downpour 写道
kjj 写道
写过filter 不过考虑到升级的愿因,放弃filter了
可能是我没说明白,不是dwr后缀的请求,而是某种路径的请求,比如 /somepa/xss/
类似,现实项目中,某些url 需要访问,但不需要映射到action,如果使用了插件,他就试图给所有无后缀的url 都匹配


后缀我只是举个例子,你可以配置嘛,配成类似antPath风格的路径设置,然后在你的Filter里面去过滤啊。

写Filter和升级有什么关系?

哦,看来理解错了,我以为要继承原来的filter 呢!
4 楼 yb31 2009-02-06  
請問convention plugins支不支持一個action多個方法如
xxx_list.do   ->返回"list"則找xxx/list.jsp
xxx_edit.do   ->返回"edit"則找xxx/edit.jsp


3 楼 downpour 2009-02-06  
kjj 写道
写过filter 不过考虑到升级的愿因,放弃filter了
可能是我没说明白,不是dwr后缀的请求,而是某种路径的请求,比如 /somepa/xss/
类似,现实项目中,某些url 需要访问,但不需要映射到action,如果使用了插件,他就试图给所有无后缀的url 都匹配


后缀我只是举个例子,你可以配置嘛,配成类似antPath风格的路径设置,然后在你的Filter里面去过滤啊。

写Filter和升级有什么关系?
2 楼 kjj 2009-02-06  
写过filter 不过考虑到升级的愿因,放弃filter了
可能是我没说明白,不是dwr后缀的请求,而是某种路径的请求,比如 /somepa/xss/
类似,现实项目中,某些url 需要访问,但不需要映射到action,如果使用了插件,他就试图给所有无后缀的url 都匹配
1 楼 downpour 2009-02-06  
目前似乎没有什么很好的解决方案。其实也不算什么bug,只是一个plugin没有理由考虑其他plugin的情况,所以convention plugin仅仅支持无后缀的情况。

你可以自己写一个Filter,去覆盖plugin的Filter,并为你的dwr的请求设置一个.dwr这样的后缀,然后指定某些可配置的后缀,也走Struts2的Action,代码可以参考我的LightURL,我就是这么做的。

相关推荐

    STRUTS2 Convention零配置

    为了在项目中启用Convention插件,首先需要添加`struts2-convention-plugin`到项目的依赖中。对于Struts2.1.6版本来说,需要将`struts-Convention-plugin-2.1.6.jar`文件放置于项目的`WEB-INF/lib`目录下。 #### 2....

    Struts2 Convention Plugin中文文档 Annotion

    Struts2 Convention Plugin 是从 Struts2.1 版本开始引入的一个插件,它的主要目标是实现 Struts2 框架的零配置。通过约定优于配置的原则,开发者可以更加专注于业务逻辑,减少大量的 XML 配置工作。以下是 ...

    Struts-Convention实现零配置,可直接部署运行

    5. **部署**:在Struts-Convention模式下,一个简单的Struts2项目只需要包含必要的库文件、Action类和视图资源,无需struts.xml配置文件即可直接部署到服务器上运行。 在提供的项目中,可能包含了以下内容: - `...

    struts2的convention配置详解 很全

    总结起来,Struts2的Convention配置是一个强大的工具,它让开发者能够专注于业务逻辑,而非繁琐的配置。通过遵循约定并利用注解,你可以构建出结构清晰、易于维护的Java web应用。当然,理解并熟练掌握这些配置规则...

    Struts2插件convention

    在Struts2框架中,"Convention"插件是其核心组件之一,它引入了一种基于约定优于配置(Convention over Configuration)的开发模式,极大地简化了应用的配置过程。这种模式使得开发者无需编写大量的XML配置文件,...

    Struts2_Convention_Plugin中文文档

    Struts2 Convention Plugin是Apache Struts框架的一个重要插件,主要目标是简化MVC(Model-View-Controller)架构中的配置工作。这个插件引入了一种约定优于配置(Convention over Configuration)的理念,允许...

    struts2-convention-plugin-2.3.32.jar

    综上所述,"struts2-convention-plugin-2.3.32.jar"是Struts2框架中一个强大且实用的插件,它通过约定优于配置的方式提高了开发效率。然而,理解和掌握其工作原理以及如何有效地结合使用注解是成功运用此插件的关键...

    Struts2 convention

    Struts2 Convention插件是基于Apache Struts2框架的一个组件,它引入了一种约定优于配置(Convention over Configuration)的理念,简化了MVC应用的开发。这个插件在默认情况下可以根据类和方法的名字来自动映射URL...

    struts2采用convention-plugin实现零配置

    Struts2是一个流行的Java Web应用程序...Convention Plugin是Struts2的一个插件,它基于“约定优于配置”的原则,自动地为Action类和结果页面建立映射,从而极大地减少了手动配置的需求。通过自动探测和推理,Conventio

    struts2-convention-plugin-2.1.6.jar

    在Struts2的生态系统中,`struts2-convention-plugin`是一个重要的组件,其版本号为2.1.6,正如标题所示。这个插件引入了一种更加便捷的方式来配置应用,尤其是对于那些不喜欢或者不习惯手动编写繁琐的`struts.xml`...

    struts2的Convention插件说明书(中文版)

    Struts2的Convention插件是一种自动化配置工具,从2.1版本开始引入,旨在减少XML配置,实现Struts2应用的零配置或者最少配置。该插件通过一系列预定义的命名规则和约定,自动解析和映射Action、结果页面、拦截器等...

    简述STRUTS2_Convention零配置

    STRUTS2 Convention 零配置是Struts2框架中的一种高级特性,旨在简化应用程序的配置,让开发者能够更快地构建MVC应用。从Struts2.1版本开始,推荐使用Convention插件替代Codebehind插件,因为它更加自动化,几乎无需...

    struts2-convention-plugin-2.3.24.1

    struts2-convention-plugin-2.3.24.1

    struts2-convention-plugin-2.3.15.1.jar

    struts2-convention-plugin-2.3.15.1.jar

    struts2-Convention插件使用

    ### Struts2-Convention插件使用详解 #### 引言 自Struts2.1版本起,Convention插件被引入,旨在替代原有的Codebehind插件,实现框架内的零配置理念。这一插件的设计思想围绕着减少XML配置的依赖,通过代码结构与...

    struts2 convention plugin(插件) 测试项目

    Struts2 Convention Plugin是Apache Struts框架的一个重要组成部分,它为开发者提供了一种更为便捷的配置方式,使得在Struts2应用中实现MVC模式变得更加简单。这个测试项目旨在帮助我们理解和掌握如何在实际开发中...

Global site tag (gtag.js) - Google Analytics