带有.a​​ction的Struts2 URL

时间:2009-12-08 09:38:03

标签: java url-rewriting struts2 friendly-url

我想要以下格式的网址

http://localhost/users/abc

而不是

http://localhost/users?name=abc

如何在Struts2中实现这一目标?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我们可以使用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”值。