I am working on a project where I want to provide unique URL for each user.
For example:
www.SocialNetwork.com/jhonwww.SocialNetwork.com/jasmineSo far I'm able to achieve this:
www.SocialNetwork.com/profiles/jasminehere profiles is my action where I can get the user name by
<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>
but I want to achieve something like this:
www.SocialNetwork.com/jasmineJust use domain name and username.
Like Twitter does:
www.twitter.com/usernameHow to achieve this?
If you want to use named patterns in wildcard mapping then you should configure following in the struts.xml:
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex"/>
now assume com.example.actions.ViewProfileAction bean has a property username, and method execute that returns a SUCCESS result. Then you can map the action in the root namespace "/" configured to your package.
<action name="{username}" class="com.example.actions.ViewProfileAction">
<result>/WEB-INF/jsp/profile.jsp</result>
</action>
you can get the name in the JSP using OGNL
<s:property value="username"/>
Also note that you should deploy to the root context to have
your.domain.com/username mapped to your action.
Try this out. It may work. Use Freemarker USE $.
<action name="profiles/${username}" class="com.example.actions.ViewProfileAction">
<result name="input">/WEB-INF/jsp/profile.jsp</result>
</action>
It may work
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With