带有 .action 的 Struts2 URL

Posted

技术标签:

【中文标题】带有 .action 的 Struts2 URL【英文标题】:Struts2 URL with .action 【发布时间】:2010-12-24 08:41:55 【问题描述】:

我想要以下格式的网址

http://localhost/users/abc

而不是

http://localhost/users?name=abc

如何在 Struts2 中实现这一点?

【问题讨论】:

【参考方案1】:

您可以使用REST Plugin 或convention plugin(有关后续解决方案的更多详细信息,请参阅this blog post)。其他选项包括 servlet 过滤或 mod_rewrite。

【讨论】:

【参考方案2】:

您可以使用http://tuckey.org/urlrewrite/。

【讨论】:

【参考方案3】:

我们可以使用 struts2 来实现。您需要做的就是在操作名称中使用通配符。让我解释一下你的情况

http://localhost/users/Santhosh

这就是您想要的最终 URL。你会想要捕捉价值,即;行动支持中的“Santhosh”。

我假设您已准备好在末尾添加一个 struts2 后缀,即; “.action”或“.html”(我已将操作类扩展名自定义为 .html)。

只需在 struts.xml 文件中定义如下映射

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <constant name="struts.devMode" value="false" />
  <constant name="struts.action.extension" value="html" />
  <constant name="struts.enable.SlashesInActionNames" value="true"/>

  <action name="users/*" class="com.srm.action.UserAction" method="execute">
    <param name="userName">1</param>
    <result name="success" type="tiles">addEditCategory</result>
  </action>
</struts>

如果您观察到上述映射,“struts.enable.SlashesInActionNames”应设置为“true”以实现此目的。

这里是动作支持类

public class UserAction extends ActionSupport

  private static final long serialVersionUID = 1L;
  private String userName = null;

  public String execute() throws Exception
  
    System.out.println("Username: "+userName);
    return SUCCESS;
  

  public void setUserName(String userName)
  
    this.userName = userName;
  

  public String getUserName()
  
    return userName;
  

执行此程序后,您将在 userName 属性中填充“Santhosh”值。

【讨论】:

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

Struts2 的action里的方法不能带有参数

Struts2 更好的带有点的 URL

Struts2 + Spring Security 2.06:尝试在 Action 方法上使用 @Secured 时,Valuestack 为空

struts2上传文件的action怎么写

struts2 action怎么从页面取值传值

struts2 Action作用