Struts2 更好的带有点的 URL

Posted

技术标签:

【中文标题】Struts2 更好的带有点的 URL【英文标题】:Struts2 better URLs with dot inside 【发布时间】:2014-02-27 11:53:51 【问题描述】:

假设我们需要一个带有预定义用户名的登录表单。

所以如果用户访问 url:

//somehost:8080/myapp/auth/myusername

该操作应将myusername 作为输入参数。

我以http://www.struts2.info/blog/better-urls-with-struts2 为例进行了尝试,效果很好。

但如果myusername 包含点,例如:

//somehost:8080/myapp/auth/firstname.lastname 

,我收到 404 错误。

是否有任何简单的解决方案可以使用点作为 url 参数的一部分?

【问题讨论】:

你试过用引号括起来吗。 比如 //somehost:8080/myapp/auth/'firstname.lastname ' 不确定... 因为它认为您正在尝试获取扩展名为 .lastname 的操作,所以您需要为此编写规则 【参考方案1】:

struts.xml 中:

<constant name="struts.action.extension" value=""  />

web.xml 中:

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

未经测试,但应该可以工作

【讨论】:

@never: @AndreaLigios:空值对于struts.action.extension 来说并不是最好的。见***.com/q/12607075/1700321。 一个空设置对他/她的用例不起作用。另一种选择是使用自定义ActionMapper @AleksandrM 哇,2012 年 9 月...我错过了,+1。因此,如果我猜对了,"" 表示一切(包括静态资源),而"," 仅表示没有扩展的操作( 没有扩展的静态资源,不是标准但可能发生);添加"," 不适用于此用例,因为.lastname 将作为操作扩展受到威胁,并被过滤(正如@StevenBenitez 指出的那样)。然后,除非使用自定义的 ActionMapper,否则 OP 问题的唯一方法是使用 "" 并避免使用 struts2 来提供静态资源......这是对的吗?

以上是关于Struts2 更好的带有点的 URL的主要内容,如果未能解决你的问题,请参考以下文章

struts2的拦截器和spring的AOP哪个实现权限管理更好

带有 Struts2 的泽西 [重复]

带有 .action 的 Struts2 URL

使用带有struts2的spring social

带有 rest-plugin 的 Struts2:将 JSON 值映射到 ENUM

在带有 DOJO 插件的 Struts2 应用程序中使用 dijit 小部件有啥特殊要求吗?