Как создавать собственные URL-адреса с помощью Struts2? Например, www.twitter.com/goodyzain

Я работаю над проектом, в котором я хочу предоставить уникальный 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Просто доменное имя, а затем имя пользователя.

Как твиттер делает:

www.twitter.com/username

Как этого добиться?

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 боб имеет свойство usernameи метод execute который возвращает SUCCESS результат. Затем вы можете отобразить действие в корневом пространстве имен "/" настроен на ваш пакет.

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

вы можете получить имя в JSP, используя OGNL

<s:property value="username"/>

Также обратите внимание, что вы должны развернуть в корневой контекст, чтобы иметь

your.domain.com/username сопоставлены с вашими действиями.

Попробуйте это. Это может сработать. Используйте Freemarker USE $,

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

Может сработает

Другие вопросы по тегам