繁体   English   中英

使用Tuckey UrlRewriteFilter重写SpringMVC url

[英]SpringMVC url rewrite with tuckey UrlRewriteFilter

我如何使用Tuckey的UrlRewriteFilter重写SpringMVC中的url,如下所示:

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

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

控制器片段:

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

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

如果您使用的是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>

您是否真的需要使用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
}

在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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM