http://www.oschina.net/question/257183_149268-----------

添加Handler: me.add(new ContextPathHandler("ctx")),然后在页面中就可以 ${ctx} 来用

代码如下:找不到代码写在哪里的,请在整个工程中搜索

  1. /**
  2. * 配置处理器
  3. */
  4. public void configHandler(Handlers me) {
  5. me.add(new ContextPathHandler("ctx"));
  6. }

Jsp中直接引用就可以了:

    1. <link href="${ctx}/css/login.css" rel="stylesheet" type="text/css" />

JFinal的Interceptor、Controller、Render、Plugin,Handler是对Controller和Interceptor的补充。ORM使用的是Db+ActiveRecord。

Config是基本的配置。

在Config这个类中,Routes、Interceptors、Handlers均以成员变量的形式存在。

Routes
在Route中有两个Map:map和viewPathMap。
map中放置的是controllerKey和controllerClass的键值对。
viewPathMap中放置的是controllerKey和viewPath的键值对。

在initActionMapping中将Routes和Interceptors组织起来。其中,在initActionMapping中有一个重要的方法:buildActionMapping

JFinalFilter中的doFilter。在doFilter中主要是调用了handle方法。

https://segmentfault.com/a/1190000003028991

http://www.cnblogs.com/istianyu/p/3267012.html-----------jfinal框架教程-学习笔记(二)

Handler 会接管所有请求,包括静态请求,如 localhost/css/style.css 或者 locahost/img/logo.jpg,并且可以改变请求所指向的资源参数如 String target参数,所以 Handler 具有可以处理更多的事情,例如改变 target 参数做url 伪静态或者 url 重写。 而拦截器只能拦截对 action 的请求,对静态资源的请求是完全无法感知的,并且拦截器无法改变 starget 参数,当拦截发生时,很多事情已经确定了,例如拦截的 controller 和 action 都确定了。

Controller 是请求希望到达的最终目标,通常只做三件事:接收参数、调用业务、使用业务结果渲染页面。Handler、Interceptor 辅助 Controller 解决切面问题,例如权限验证、事务处理等等。

也就是说jfinal handler相当于servlet中的filter?

当 action 中没有调用 render 时,jfinal 会默认给你调用一个 render(view),其中
view = baseViewPath + viewPath + methodName + 模板扩展名

1:baseViewPath 通过 me.setBaseViewPath(...) 进行配置
2:viewPath 是在配置路由的时候通过 me.add(controllerKey,controllerClass, viewPath) 方法的第三个参数进行配置,如果第三个参数未指定则默认与 controllerKey值相同
3:methodName 就是 controller 中的方法名
4:当 viewPath 以"/" 打头时 baseViewPath 不起作用,这样设计是让 viewPath有机会回到根路径

需求如下:

动态生成的静态html页面在webapp下的doc目录中,但是在doc下的目录级数不固定,是根据文件名字动态生成的,如名字为index,则生成的html页面为:webapp/doc/index.html;名字为2014-02-23-index,则生成的html页面为:webapp/doc/2014/02/23/index.html。以此类推。

有一个HtmlController接收/doc的请求,可以renderJsp("/doc/")跳转到doc目录下,

但是现在如何根据不同的/doc的请求返回不同的目录呢?如
请求:/doc/2014,renderJsp("/doc/2014");
请求:/doc/2014/02,renderJsp("/doc/2014/02");
以此类推。

我记得spring mvc有类似的配置通配的功能,Jfinal能实现类似需求吗

url目前不支持通配符,像你说的需求可以通过参数的不同render不同的渲染,或者你可以写自己的handler来处理你的全局请求和响应

JFinal Handler 可以无限扩展路由规则,因为它可以改变到达的 url 值,该值在 Handler 类中是 String target。具体点是创建一个 DocHandler 和一个 DocController 配合处理,大致代码如下:

1
2
3
4
5
6
7
8
public class DocHandler extends Handler {
  public void handle(String target,HttpServletRequest request,HttpServletResponse response,boolean[] isHandled) {
  if (target.startsWith("/doc")) {
    target = target.substring(0, 4);
    request.setAttribute("view", target.substring(4));
  }
  nextHandler.handle(target, request, response, isHandled);
}
 
 

DocController 就更简单了,一行代码搞定:其实还可以更省代码:

1
2
3
4
5
6
7
public class DocHandler extends Handler {
  public void handle(String target,HttpServletRequest request,HttpServletResponse response,boolean[] isHandled) {
  if (target.startsWith("/doc")) {
    RenderFactory.me().getJspRender(target.substring(4)).setContext(request, response).render();
    isHandled[0] = true;
  }
}

这样就连 DocController 都不需要了

1
render(getAttr("view"));

Jfianl的更多相关文章

  1. Jfianl框架定时器使用配置

    Jfianl 自2.3版本后就整合了定时器到框架中,赞一个: 下面我来总结下自己使用cron4j到达定时效果的经验,不足之处还请见谅: Cron4jPlugin是作为JFinal的Plugin而存在的 ...

  2. jfianl返回自定义的404页面

    public class MyErrorRenderFactory implements IErrorRenderFactory{ public Render getRender(int errorC ...

  3. 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建

    基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Sp ...

  4. 从BAE到SAE,从SAE又回到BAE

    版权声明:本文为博主原创文章,未经博主允许不得转载. [很久以后] 这段话是很久之后补充的,发现错误要勇于改正,以下红色字体是对以前观点的改正, 大概总结下: 1.bae最大缺点是需要备案,不过现在看 ...

  5. JFinal教程1——小白的第一个JFinal程序

    为了使小白能够完全的按步骤创建第一个JFinal应用并运行,笔者将以Java界最流行的Eclipse平台为例,搭建出所有基础教程中喜欢的Hello world应用. 1. JFinal简介 2. 小白 ...

  6. JFinal项目发送邮件——jfinal-mail-plugin

    JFianl框架: JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有 ...

  7. java.lang.NoClassDefFoundError 错误

    练习jfianl,,,配置数据库插件的时候遇到: java.lang.NoClassDefFoundError: com/mchange/v2/c3p0/ComboPooledDataSource 解 ...

  8. layui模板和jfinal混合使用注意

    <!-- 列表信息展示 --> <div class="layui-row"> <table class="layui-table" ...

  9. jfinal视频目录

    目录-----------------------------------------------------------第一章 简介第二章 JFine2.0 maven demo第三章番外篇 JFi ...

随机推荐

  1. HDU4307 Matrix(最小割)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4307 Description Let A be a 1*N matrix, and each ...

  2. ZOJ3201 Tree of Tree(树形DP)

    题目大概求一棵树中大小为k的子树的最大权和. dp[u][k]表示以u为根的子树中包含u结点的大小为k的子树的最大权和,然后树上背包转移转移很容易.. #include<cstdio> # ...

  3. POJ3613 Cow Relays(矩阵快速幂)

    题目大概要求从起点到终点恰好经过k条边的最短路. 离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778. 这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以 ...

  4. BZOJ2646 : neerc2011 flight

    答案由$3$部分构成: $1$.抛物线的极值. $2$.询问区间的左端点在抛物线上的值. $3$.询问区间的右端点在抛物线上的值. 对于$1$,就是某个矩形范围内最大值查询,使用KD-Tree可以在$ ...

  5. 使用GDB 修改MySQL参数不重启

    link:http://blog.chinaunix.net/uid-20785090-id-4016315.html mysql很多参数都需要重启才能生效,有时候条件不允许,可以使用gdb作为最后的 ...

  6. POJ3461Oulipo 题解

    题目大意: 求字符串A在字符串B中出现的次数. 思路: KMP板题,用Hash也可水过~要学习KMP可参考http://blog.csdn.net/u011564456/article/details ...

  7. 关于UIView的userInteractionEnabled属性

    关于UIView的userInteractionEnabled属性 如果父视图为ParentView包含一个Button,如果再ParentView上添加子视图ChildView,且ChildView ...

  8. TC SRM 591

    表示第一次在div1,我要记录一下... 木有挂0,第一题不怎么难的,读题读了20分钟,又想了20分钟,时间有点长,然后各种小心,然后得了140分.... 后两个题,根本木有看,貌似做出来的也不多.. ...

  9. flex4+fms3.5+cs4开发实时音视频直播及点播详解

    开发工具及环境: 1)flash builder4 2)flash cs4 3)flash media server3.5 fms部分 fms是adobe的流媒体服务器,不过是收费的,价格大概是ora ...

  10. C#反射生成简单sql语句

    static void Main(string[] args) { book book = new book();//实体类 booktest b1 = new booktest(); book.bo ...