一尘不染

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

jsp

我正在一个项目中,我想为每个用户提供唯一的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/用户名

如何实现呢?


阅读 317

收藏
2020-06-08

共1个答案

一尘不染

如果要在通配符映射中使用命名模式,则应在中配置以下内容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具有一个property
usernameexecute返回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 映射到您的操作。

2020-06-08