【问题标题】:SpringMVC url rewrite with tuckey UrlRewriteFilterSpringMVC url 用 tuckey UrlRewriteFilter 重写
【发布时间】:2014-12-10 03:18:53
【问题描述】:

如何在 SpringMVC 中使用 tuckey's UrlRewriteFilter 重写 url,如下所示:

来自

http://localhost:8080/demo/api.do?method=getUser&uid=1001

http://localhost:8080/demo/api/user/1001

控制器sn-ps:

@Controller
@RequestMapping("/api.do")
public class APIController {

    @RequestMapping(params = "method=getUser")
    public String methodName(HttpServletRequest request) {
        //CODE BLOCK
    }
}

【问题讨论】:

    标签: java spring-mvc url-rewriting restful-url tuckey-urlrewrite-filter


    【解决方案1】:

    如果您使用的是 maven,请添加依赖项

    <dependency>
        <groupId>org.tuckey</groupId>
        <artifactId>urlrewritefilter</artifactId>
        <version>4.0.3</version>
    </dependency>
    

    在您的 web.xml

    中启用过滤器
    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    

    将以下规则添加到WEB-INF/urlrewrite.xml

    <urlrewrite>
        <rule>
           <from>^/demo/api.do?method=getUser&amp;uid=(.*)$</from>
           <to>/demo/api/user/$1</to>
        </rule>
    </urlrewrite>
    

    【讨论】:

      【解决方案2】:

      您真的需要使用 URL 重写文件管理器吗?为什么不为这两种类型的 URL 定义两个方法并路由到单个方法来处理处理

      @RequestMapping(value = "/demo/api.do?"....)
      public void method1(){
        //...
        handler();
      }
      @RequestMapping(value = "/demo/api/user/{user-id}"....)
      public void method1(){
        //...
        handler();
      }
      
      private void handler(){
          //This method will have all the controller logic
      }
      

      【讨论】:

        【解决方案3】:

        在SpringMVC中,你可以简单地做到这一点

        @Controller
        @RequestMapping("/api")
        public class APIController {
        
            @RequestMapping("/user")
            public ModelAndView methodName(HttpServletRequest request) {
                //CODE BLOCK
        
                // to redirect other view 
                new ModelAndView("...your view page");
            }
        
            @RequestMapping("/user/{user_id}")
            @ResponseBody
            public String methodName(HttpServletRequest request) {
                //CODE BLOCK
            }
        }
        

        @ResponseBody 如果你只发送对象值

        你也可以发送user_id作为参数

        public String methodName(@RequestParam("user_id") String userid, Model model)
        

        您为视图解析器添加了Bean 的重要内容,这是基于注释的示例

        @Bean
        public UrlBasedViewResolver setupViewResolver() {
            UrlBasedViewResolver resolver = new UrlBasedViewResolver();
            resolver.setPrefix("/WEB-INF/pages/");        
            resolver.setSuffix(".jsp");    // what you used 
            resolver.setViewClass(JstlView.class);
            return resolver;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-10
          • 1970-01-01
          • 2012-02-24
          • 1970-01-01
          • 2012-01-14
          相关资源
          最近更新 更多