当前位置: 首页 > 面试题库 >

Struts2通配符映射-更具体的一种由通用类处理

徐昕
2023-03-14
问题内容

我目前正在使用我的Struts2配置进行通配符测试,但我坚持使用这一配置。

    <action name="/*/*" class="checkBlogUrl" method="testing">
        <param name="blogSiteUrl">{1}</param>
        <param name="test">{2}</param>
        <result name="success">/WEB-INF/jsp/cmsPages/index.jsp</result>
    </action>

    <action name="/*/postPreview1" class="blogPostAction" method="test">
        <param name="blogSiteUrl">{1}</param>
        <result name="success">/WEB-INF/jsp/cmsPages/templatePicker.jsp</result>
    </action>

如果我访问,myurl.com/hello/hi我将被重定向到index.jsp

但是,如果我访问,myurl.com/hello/postPreview1我也会被重定向到index.jsp而不是templatePicker.jsp

我在这里做错什么了吗?该支柱通配符商务部说,最后一个将取胜

编辑:只是试图切换它们,它工作O_O。我在读文档吗?


问题答案:

您在操作名称中使用斜杠,该斜杠在通配符映射器中无法正常使用。正如我在链接的答案中所说的,这种情况下最好的模式匹配器是regex模式匹配器。

<constant name="struts.patternMatcher" value="regex"/>

请参阅高级通配符。

<action name="/{blogSiteUrl}/{test}" class="checkBlogUrl" method="testing">
    <result name="success">/WEB-INF/jsp/cmsPages/index.jsp</result>
</action>

<action name="/{blogSiteUrl}/postPreview1" class="blogPostAction" method="test">
    <result name="success">/WEB-INF/jsp/cmsPages/templatePicker.jsp</result>
</action>

关于通配符映射器的文档。让我们看一下示例 空白 应用程序:

<package name="example" namespace="/example" extends="default">

    <action name="HelloWorld" class="example.HelloWorld">
        <result>/WEB-INF/jsp/example/HelloWorld.jsp</result>
    </action>

    <action name="Login_*" method="{1}" class="example.Login">
        <result name="input">/WEB-INF/jsp/example/Login.jsp</result>
        <result type="redirectAction">Menu</result>
    </action>

    <action name="*" class="example.ExampleSupport">
        <result>/WEB-INF/jsp/example/{1}.jsp</result>
    </action>

    <!-- Add actions here -->
</package>

因此,URL将按以下顺序进行匹配:

  1. http://localhost:8080/example/HelloWorld
  2. http://localhost:8080/example/Login_input
  3. http://localhost:8080/example/Register

我要说的是,更具体的映射先于较不具体/常见的映射,它之所以会获胜,是因为它是按操作配置的顺序首先找到的。所有与有序配置不匹配的内容都将落入最后一个不太具体的映射。



 类似资料:
  • 问题内容: 我正在尝试创建一个通用类型,该通用类型保留已创建的自身版本的地图以供以后使用。实际上,这是一种单例模式,其中每种类型都有一个实例。到目前为止,我的代码是: 但是,我仍然不确定我是否“做对了”。感觉我应该能够指定该集合为(类-> FieldBinder)。IDE警告有关return语句的事实只会加强这种想法。 有没有更好的方法来解决这个问题? 注意:这个问题似乎密切相关,但是距离足够远,

  • 本文向大家介绍Struts2配置文件中使用通配符的方法(三种形式),包括了Struts2配置文件中使用通配符的方法(三种形式)的使用技巧和注意事项,需要的朋友参考一下 Struts2简介 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Stru

  • Java在Map接口中提供了通用支持。 语法 (Syntax) Set<T> set = new HashSet<T>(); 哪里 set - Set Interface的对象。 T - 在set声明期间传递的泛型类型参数。 描述 (Description) T是传递给通用接口Set及其实现类HashSet的类型参数。 例子 (Example) 使用您选择的任何编辑器创建以下Java程序。 pa

  • 我有这个json字符串: 当我用Jackson将其转换为映射[字符串,对象]时,开始日期的类型是字符串,我如何告诉Jackson将其转换为日期时间类型?

  • 问题内容: 我正在使用这些div进行样式设置,但是我还需要唯一的标识符1,2,3,4等。因此,我将其添加为另一个类。 有没有办法只上一堂课。我尝试在此CSS中使用通配符,但没有用。 问题答案: 您需要的称为属性选择器。以下是使用您的html结构的示例: 可以代替或添加任何元素,也可以代替或添加指定元素的任何属性。 —以“ tocolor-”开头。 —包含直接在空格字符后出现的子字符串“ tocol

  • 问题内容: 我想拥有一个Class对象,但是我想强迫它代表的任何类扩展A类并实现接口B。 我可以: 要么: 但我不能两者都做。有没有办法做到这一点? 问题答案: 实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样: 请参见sun.com上的泛型教程,特别是页面底部的“ 绑定类型参数”部分。实际上,如果需要,你可以列出多个接口,并& InterfaceName根