【问题标题】:Struts2 better URLs with dot insideStruts2 更好的带有点的 URL
【发布时间】: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 的操作,所以您需要为此编写规则

标签: java url struts2 restful-url pretty-urls


【解决方案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 来说并不是最好的。见stackoverflow.com/q/12607075/1700321
  • 一个空设置对他/她的用例不起作用。另一种选择是使用自定义ActionMapper
  • @AleksandrM 哇,2012 年 9 月...我错过了,+1。因此,如果我猜对了,"" 表示一切(包括静态资源),而"," 仅表示没有扩展的操作( 没有扩展的静态资源,不是标准但可能发生);添加"," 不适用于此用例,因为.lastname 将作为操作扩展受到威胁,并被过滤(正如@StevenBenitez 指出的那样)。然后,除非使用自定义的 ActionMapper,否则 OP 问题的唯一方法是使用 "" 并避免使用 struts2 来提供静态资源......这是对的吗?
猜你喜欢
  • 2010-12-24
  • 2013-03-16
  • 2011-07-27
  • 1970-01-01
  • 2012-06-05
  • 2011-08-31
  • 2011-09-27
  • 2014-02-26
  • 2013-03-24
相关资源
最近更新 更多