我正在开展一个项目,我希望为每个用户提供唯一的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
如何实现这一目标?
答案 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>
它可能有用