【问题标题】:Is there a way to map an URL to another URL in Spring?有没有办法将一个 URL 映射到 Spring 中的另一个 URL?
【发布时间】:2010-12-23 04:08:40
【问题描述】:

在 Struts 1 中,您可以在 struts-config.xml 中拥有如下声明:

<action path="/first" forward="/second.do">

在 Spring 中是否也可以进行类似的操作,或者我可以仅将 URL 映射到控制器吗?我正在使用 Spring 2.5.x。

我当然可以将 URL 映射到与以下相同的控制器:

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <props>
      <prop key="/first.do">theController</prop>
      <prop key="/second.do">theController</prop>
      ...

或者也许使用org.springframework.web.servlet.mvc.ParameterizableViewController 并有类似的东西:

<bean id="theDummyController" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
     <property name="viewName" value="forward:second.do"/>
</bean>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    <props>
      <prop key="/first.do">theDummyController</prop>
      <prop key="/second.do">theController</prop>
      ...

我知道我可能会让事情变得复杂,我应该坚持使用简单的东西来完成工作,但我希望这更像是一种声明:“这个 URL 实际上是一个快捷方式(或别名)到另一个 URL”(不要问为什么...长篇大论...),ParameterizableViewController 以某种方式可见但不完全。

那么,这可能吗?

谢谢!

【问题讨论】:

    标签: java spring web-applications configuration


    【解决方案1】:

    我最终创建了一个单独的 URL 处理程序映射,将 URL 别名组合在一起。然后,我对包含的映射的所有内容进行了非常详细的描述,例如:

    <bean id="aliasUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <description>
        <![CDATA[
          The following URLs are in fact shortcuts (or aliases) 
          to other URLs etc etc (...I'll spare you the ugly part)
        ]]>
      </description>
      <property name="mappings">
        <props>
          <prop key="/first.do">theController</prop>
          ...
    
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <property name="mappings">
        <props>
          <prop key="/second.do">theController</prop>
          ...
    

    【讨论】:

      【解决方案2】:

      我对 Spring MVC 不够熟悉,不知道在那里做你想做的最简单的方法。但是,UrlRewriteFilter project 可以轻松设置将一个 url 转发到另一个 url 的规则。

      【讨论】:

        【解决方案3】:

        您可以通过实现HandlerInterceptor 轻松地制作一些内容,允许您指定“此 URL 实际上是另一个 URL 的快捷方式(或别名)”,并让您的实现包含一个属性,该属性是应该重定向的 URL 映射,或转发到其他 URL。

        在您的 XML 中,您只需为这个拦截器添加一个 bean,并配置它哪些 URL 应该重定向到什么,并将对拦截器的引用添加到 SimpleUrlHandlerMapping 的拦截器属性。

        【讨论】:

        • 我也在考虑添加一个拦截器来捕获一个 URL 并将其转发给另一个,然后返回 false 以中断执行链。但是处理程序映射不是必须为传入请求解析执行链吗?只有这样 DispatcherServlet 才会执行在返回链中找到的处理程序和拦截器。所以我必须将 URL 映射到“某物”,然后让拦截器处理其余部分。但是我将它映射到什么?
        • 我实际上不确定处理程序是否需要为每个 URL 进行映射,然后才能将其获取到拦截器,但如果需要:将 * 映射到 404 页面(未找到)和你应该很好......
        【解决方案4】:

        我会建议在 Spring 配置文件之外管理基于 URL 的规则吗?保持 Spring 配置文件干净并在外部重写/管理您的 URL。看看http://tuckey.org/urlrewrite/

        希望对你有帮助

        -弗洛林

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-23
          • 2013-12-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多