6

我正在开发一个项目,我想为每个用户提供唯一的 URL。

例如:

  • www.SocialNetwork.com/jhon
  • www.SocialNetwork.com/jasmine

到目前为止,我能够做到这一点:

  • www.SocialNetwork.com/profiles/jasmine

profiles是我可以通过以下方式获取用户名的操作

<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.patternMatcher" value="namedVariable"/> 


<action name="profiles/{username}" class="com.example.actions.ViewProfileAction">
  <result name="input">/WEB-INF/jsp/profile.jsp</result>
</action> 

但我想实现这样的目标:

  • www.SocialNetwork.com/jasmine

只需使用域名用户名

就像推特一样:

  • www.twitter.com/username

如何做到这一点?

4

2 回答 2

3

如果要在通配符映射中使用命名模式,则应在以下配置struts.xml

<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex"/>

现在假设com.example.actions.ViewProfileActionbean 具有返回结果的属性username和方法。然后,您可以将配置的根命名空间中的操作映射到您的包。 executeSUCCESS"/"

<action name="{username}" class="com.example.actions.ViewProfileAction">
  <result>/WEB-INF/jsp/profile.jsp</result>
</action>

您可以使用 OGNL 在 JSP 中获取名称

<s:property value="username"/>

另请注意,您应该部署到根上下文以拥有

your.domain.com/username映射到您的操作。

于 2014-05-21T16:03:00.753 回答
1

试试这个。它可能会起作用。使用Freemarker使用$

<action name="profiles/${username}" class="com.example.actions.ViewProfileAction">
    <result name="input">/WEB-INF/jsp/profile.jsp</result>
</action> 

它可能有效

于 2014-05-21T11:11:59.730 回答