【问题标题】:How to create custom URL in Struts 2? Like www.twitter.com/goodyzain如何在 Struts 2 中创建自定义 URL?喜欢 www.twitter.com/goodyzain
【发布时间】:2014-07-09 22:10:46
【问题描述】:

我正在做一个项目,我想为每个用户提供唯一的 URL。

例如:

  • www.SocialNetwork.com/jhon
  • www.SocialNetwork.com/jasmine

到目前为止,我能够做到这一点:

  • www.SocialNetwork.com/profiles/jasmine

profiles 是我的操作,我可以通过该操作获取用户名

<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> 

但我想实现一些类似的东西:

  • www.SocialNetwork.com/jasmine

只需使用域名用户名

就像 Twitter 所做的那样:

  • www.twitter.com/username

如何做到这一点?

【问题讨论】:

  • 那么,如果您不想在动作名称前面加上profiles/,为什么还要在前面呢?
  • 我不需要将个人资料放在 URL 中...对于用户来说应该很简单...比如域名/用户名...简单的一个...
  • 所以从动作名称中删除它。
  • 你的意思是告诉... SocialNetwork/jasmine 但问题是 jasmine 是用户名...我没有任何操作类,因此我可以处理名称并重定向到他的个人资料页面.. .
  • 这样... 或者你能告诉我怎么做...??

标签: java jsp url struts2 wildcard-mapping


【解决方案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.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 映射到您的操作。

【讨论】:

  • 当我遵循相同的操作时,我得到了空操作映射。我做错什么了吗?
  • 对不起它为我工作,我错过了 web.xml 中的条目:(
【解决方案2】:

试试这个。它可能会起作用。使用 Freemarker 使用 $

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

它可能会起作用

【讨论】:

  • 它可以正常工作...我希望 URL 看起来像这样...SocialNetwork/jasmine 不像 SocialNetwork/profiles/jasmine 我不想在 url 中调用配置文件操作...跨度>
  • 所以不要使用配置文件。仅使用操作名称 =“${用户名}”。它会为你工作。
  • SocialNetwork 是域名,Jasmine 是用户名...Profiles 是操作名称...我不想让用户输入配置文件的操作名称...我只想让他们输入域名/用户名注意:在 URL 中没有调用动作名称
  • 我对你的问题投了赞成票。这是一个很好的问题。我会努力的。
  • 如何从登录表单调用这个动作?我试过像
    但它只是调用 .action 像 localhost:8080/CustomURL/.action
猜你喜欢
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2010-10-22
  • 1970-01-01
  • 2011-11-21
  • 2022-01-11
相关资源
最近更新 更多