| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jack7428
8年前发布

用Spring MVC优雅的实现301跳转

   <p> </p>    <h2>1. 问题</h2>    <p>Spring MVC里面实现302跳转很简单,只需要如下写就可以。</p>    <pre>  <code class="language-java">  @RequestMapping(value = "/", method = RequestMethod.GET)      public String redirect(){          return "redirect:/home";      }  </code></pre>    <p>那么如何处理301呢?查了很多资料,发现多数讲的是自己new 一个 RedirectView ,或者修改HttpResponse的header来实现。不但不好用,跟我们之前的风格也不一样,怎么办?</p>    <h2>2. 原理</h2>    <p>在Spring里,所有展示内容都是一个 View ,而 ViewResolver 则是决定使用哪个View进行处理的。处理的依据是viewName,处理的方式是依次调用所有的 ViewResolver ,直到返回不为null的结果为止。代码在 DispatcherServlet 中。</p>    <pre>  <code class="language-java">    protected View resolveViewName(String viewName, Map<String, Object> model, Locale locale,              HttpServletRequest request) throws Exception {            for (ViewResolver viewResolver : this.viewResolvers) {              View view = viewResolver.resolveViewName(viewName, locale);              if (view != null) {                  return view;              }          }          return null;      }  </code></pre>    <h2>3. 解决</h2>    <p>所以解决方式就很简单了。可以通过自定义一个前缀"redirectPermanent",以及一个对应的 RedirectViewResolver 来处理301问题。 <a href="/misc/goto?guid=4959672401678430800" rel="nofollow,noindex">https://gist.github.com/code4craft/144cdc94464a2f5228219b5fe2864232</a> 。前缀及语法可以自由定义。</p>    <pre>  <code class="language-java">  @RequestMapping(value = "/", method = RequestMethod.GET)      public String redirect(){          return "redirectPermanent:/home";      }  </code></pre>    <p>至此,完工!</p>    <p>来自: http://piaoniu.io/yong-spring-mvcyou-ya-de-shi-xian-301tiao-zhuan/</p>    
 本文由用户 jack7428 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1462497695415.html
Spring MVC Web框架