/u/userId/topics 请求path中间带动态参数,用jfinal如何实现?? 400 报错
@JFinal 你好,想跟你请教个问题:
最近在学习jfinal ,自己在做一个论坛练练手,遇到个问题:
/u/userId 这个path,我希望跳转到用户的个人中心 (已实现)
/u/userId/topics 这个path,我希望跳转到该用户的发帖列表 (不知道怎么实现)
第2个用jfinal 怎么实现啊
me.add("/u", UserController.class); 路由我是这样加的
请求path中间带动态参数,springmvc好像可以实现这种,
但是用jfinal 如何实现呢?求大神们指导下
/** * 过滤新闻路径url * @param target * @param request * @param response * @param isHandled */ @Override public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) { /** * "/umectr/loadimg/upload/20140824/43811408815131240.jpg" */ String preffix=""; String rex="(\\w+)/(\\d{8})/(\\w+)\\.(\\w+)"; //UME用路由 if(target.startsWith(preffix_ume)){ preffix=preffix_ume; }else{ //TODO 系统公共上传下载路由 需要单独提取出来 preffix=preffix_updown; } rex=preffix+rex; Pattern pattern = Pattern.compile(rex); Matcher matcher = pattern.matcher(target); UmeditorHandlerFileUrl iu=new UmeditorHandlerFileUrl(); boolean status=matcher.find(); if(status){ iu.setBiaozhi(matcher.group(1));//标志 iu.setDate(matcher.group(2));//日期 iu.setFilename(matcher.group(3));//文件名称(不含后缀) iu.setSuffix(matcher.group(4));//后缀名 .jpg .abc } if(status){ target=makeUrlParam(iu,preffix); nextHandler.handle(target, request, response, isHandled); }else{ nextHandler.handle(target, request, response, isHandled); } }
简单的路由规则,我直接添加了一个handler,在handler中对业务相关的url进行二次分发
######感觉这是一种折中转换的方式,算是一种间接实现了,我试试看行不行/** * 过滤新闻路径url * @param target * @param request * @param response * @param isHandled */ @Override public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) { /** * "/umectr/loadimg/upload/20140824/43811408815131240.jpg" */ String preffix=""; String rex="(\\w+)/(\\d{8})/(\\w+)\\.(\\w+)"; //UME用路由 if(target.startsWith(preffix_ume)){ preffix=preffix_ume; }else{ //TODO 系统公共上传下载路由 需要单独提取出来 preffix=preffix_updown; } rex=preffix+rex; Pattern pattern = Pattern.compile(rex); Matcher matcher = pattern.matcher(target); UmeditorHandlerFileUrl iu=new UmeditorHandlerFileUrl(); boolean status=matcher.find(); if(status){ iu.setBiaozhi(matcher.group(1));//标志 iu.setDate(matcher.group(2));//日期 iu.setFilename(matcher.group(3));//文件名称(不含后缀) iu.setSuffix(matcher.group(4));//后缀名 .jpg .abc } if(status){ target=makeUrlParam(iu,preffix); nextHandler.handle(target, request, response, isHandled); }else{ nextHandler.handle(target, request, response, isHandled); } }
url 中参数是放在中间还是放在末尾,本质上功能都是一样的,jfinal 是建议放后面,因为这个与编程序语言的方法定义在感觉上是一致的:
public void topic(int userId) { // do something; }
应该是几乎所有编程语言参数都是放在方法名的后方的,所以 url 的参数也沿用这样的风格比较自然,方法放前面,方法所需要的参数放后面。
参数放后面,在传递多个参数时会显得更加自然。jfinal 也曾考虑过参数放中间的风格,权衡后放弃了这种风格。
######url 中参数是放在中间还是放在末尾,本质上功能都是一样的,jfinal 是建议放后面,因为这个与编程序语言的方法定义在感觉上是一致的:
public void topic(int userId) { // do something; }
应该是几乎所有编程语言参数都是放在方法名的后方的,所以 url 的参数也沿用这样的风格比较自然,方法放前面,方法所需要的参数放后面。
参数放后面,在传递多个参数时会显得更加自然。jfinal 也曾考虑过参数放中间的风格,权衡后放弃了这种风格。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。