如何使用Struts2创建自定义URL?如www.twitter.com/goodyzain

时间:2014-05-21 10:16:42

标签: java jsp struts2 wildcard-mapping

我正在开展一个项目,我希望为每个用户提供唯一的URL。例如,

http://www.SocialNetwork.com/jhon , http://www.SocialNetwork.com/jasmine,

到目前为止,我能够实现这一目标:http://www.SocialNetwork.com/profiles/jasmine此处的个人资料是我的行动,我可以通过

获取用户名
<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> 

但我希望实现这样的目标,http://www.SocialNetwork.com/jasmine 只需域名然后用户名。

像twitter一样:

www.twitter.com/username

如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

如果要在通配符映射中使用命名模式,则应在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.ViewProfileAction bean具有属性username,方法execute返回SUCCESS结果。然后,您可以将配置为您的包的根命名空间"/"中的操作映射。

<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已映射到您的操作。

答案 1 :(得分:1)

试一试。它可能会奏效。使用 Freemarker USE $

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

它可能有用