路由通配符问题。

文档中说:

  JFinal 仅有四种路由,路由规则如下表:

8.png

 从表中可以看出,JFinal访问一个确切的Action(Action定义见3.2节)需要使用controllerKey与method来精确定位,当method省略时默认值为index。


那么jfinal是否无法支持通配符路由?

比如以某个结尾的请求由某个controller处理,eg: 

http://localhost/id/3.txt

http://localhost/user/id/4.txt

http://localhost/customer/user/id/5.txt

这3个请求都以.txt结尾,能否由同一个controller处理?

评论区

JFinal

2019-08-16 08:18

这种需求需要使用 Handler 转换成 Controller 能接收到的路由,参考 com.jfinal.ext.handler 包下面的一些用法

其实很简单,变动一下 String target 这个参数即可

一笑一整天

2019-08-16 15:26

@JFinal 感谢大佬,把过程贴出来方便以后有需求的人。
一:首先创建一个MyHandler类继承jfinal handler
public class MyHandler extends Handler {
@Override
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
if(target.contains(".txt")){
target="/blog";
}
this.next.handle(target, request, response, isHandled);
}
}
二:配置文件中配置handler
/**
* 配置处理器
*/
public void configHandler(Handlers me) {
me.add(new MyHandler());
}

这样就实现自定义路由。同时在第一步中可以使用正则去匹配target实现restful风格请求。
对应的处理方法中使用getRequest().getServletPath()可以拿到请求路径。

JFinal

2019-08-16 16:09

@一笑一整天 代码十分简洁,谢谢你的分享