初用此框架,关于路由的一个小问题

4、极简路由规则

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

8.png

    变更:从 jfinal 4.9.03 版本开始,controllerKey 改名为 controllerPath,多个 controller 可以共享同一个 controllerPath。

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


文档中提及,当method省略时默认值为index,反过来,如果method=index不省略呢?测试好像报错?如下:

定义contrllerPath=/,对应class=IndexController,内有方法index

http://HOST/,能正确识别

http://HOST/index,能正确识别

http://HOST/index/arg1-arg2-arg3,不能正确识别,警告: 404 Action Not Found: /index/

http://HOST/arg1-arg2-arg3,能正确识别

问题:是不是意味着当访问的method为index的时候,必须省略?

评论区

JFinal

2021-02-04 18:38

http://HOST/index,能正确识别,这个是将 "index" 当成 urlPara 而已,你在控制台的输出中能看到:
urlPara: index

如果不希望有 urlPara,可以在 index 中通过下面两种方式之一即可:
1:使用 checkUrlPara(0) 限定不使用 urlPara
public void index() {
checkUrlPara(0);
...... 其它代码在此
}

2:使用拦截器
@Before(NoUrlPara.class)
public void index() {
...... 其它代码在此
}

两种方法任选其一


一般来说 urlPara 是默认开启的,没有限制,但脑海中要有这根弦存在。此外,多关注一下控制台输出的 jfinal action report, 各种参数都有输出

JFinal

2021-02-04 18:39

补充一下,checkUrlPara(int) 还可以限定参数个数,例如:
checkUrlPara(3);

就可以限定 urlPara 只能有三个,前面的方案一是限定了参数个数为 0。

checkUrlPara(int) 检测到 urlPara 参数个数不正确时,会返回 404 页面

yiditushe

2021-02-04 18:54

谢谢波总。抛开参数的问题,总结一下我的问题:是不是意味着当要访问index方法的时候,url中必须省略index?

yiditushe

2021-02-04 18:57

才可以完全符合那个表格中的路由规则?

JFinal

2021-02-04 20:50

@yiditushe 只要方法名是 index,意味着 url 中必须省掉 index,但 jfinal 也为你提供了打破这个限定的方法,那就是使用 @ActionKey,例如:
@ActionKey("/index")
public void index() {
...
}

还可以使用路由扫描功能的 @Path 注解来实现,例如:
@Path("/index")
public class MyController extends Controller {
public void index() {
...
}
}

yiditushe

2021-02-04 21:21

谢谢波总。应该是在Controller的index方法上用@ActionKey("/index")注解有用,这样url中必须指定index才可以正确路由。@Path("/index")这个是针对Controller的,不是解决我提问题的。
总结一下就是:针对index方法的路由:1,要么url中必须省掉它,使用框架路由规则默认处理。2、要么必须在index方法上使用@ActionKey("/index")注解,然后在url中明确指定index。

JFinal

2021-02-04 23:17

热门反馈

扫码入社