Jfianl

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

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"));

时间: 2024-10-06 15:15:33

Jfianl的相关文章

jfianl返回自定义的404页面

1 public class MyErrorRenderFactory implements IErrorRenderFactory{ 2 3 public Render getRender(int errorCode, String view) { 4 return new MyErrorRender(errorCode, view); 5 } 6 class MyErrorRender extends ErrorRender { 7 public MyErrorRender(int erro

jfianl main 链接数据源

public static void main(String[] args) { C3p0Plugin cp = new C3p0Plugin("jdbc:mysql://localhost/safe", "root", "root"); cp.start(); ActiveRecordPlugin arp = new ActiveRecordPlugin(cp); arp.start(); arp.addMapping("driver

JFianl 传字符串

JFinal 传字符串(String)用renderText(String),不用renderJson() string 格式:“key” Json 是一种固定格式的的字符串,格式:“key:value" 拼接字符串: String str1=""; String str2="hello"; str1=str1+str2+","; renderText(str1);

jfianl 登录状态验证,未登录打开登录页面,登录成功后跳转到请求页面

项目中的一个需求,1.当用户提交预约信息时,如果未登录跳装到用户登录(注册)界面. 2.当登录(注册)成功后,跳转到请求页面 思路:1.增加登录状态验证拦截器,验证登录状态,如果未登录,获取请求路径,并保存在requset中,跳转登录(注册)页面 2.前台form中 增加 hiddent  input  .value为request中的请求路径 3.后台登录controller中验证,如登录(注册)成功则跳转到 请求路径 代码:1. public class LoginInterceptor i

angularJs跨域

前端angularJs  后端jfinal angular代码 请求url 中带参数 ?callback=JSON_CALLBACK例如 http://127.0.0.1/address/list?callback=JSON_CALLBACK $http.jsonp(url).success(function (data) { console.log(data); }); jfianl代码 后端返回格式为 callback参数值+(json) String json = JsonKit.toJs

qwqw

1. JFinal简介 JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再拥有ruby.python.php等动态语言的开发效率!为您节约更多时间,去陪恋人.家人和朋友 :) JFinal 官方网站:http://www.jfinal.com JFinal有如下主要特点: MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Re

JFinal 入门

1. 创建MyAppConfig.java 首先创建MyJFinal的配置类MyAppConfig.java: 在方法中添加如下代码: @Override public void configConstant(Constants me) { me.setDevMode(true); me.setEncoding("utf-8"); me.setViewType(ViewType.JSP); } @Override public void configHandler(Handlers m

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

前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Spring MVC+Mybatis),但是发现配置实在过于复杂,好多东西配置起来麻烦,虽然最终是配置出来了,但是还是感觉开发速度跟不上,本来打算切换到jfianl,但是后来发现需要用的几个框架不支持jfianl,如Swagger2(根据代码中的注解生成接口文档和测试页面,非常的方便):同时我也不愿意放弃SpringMVC强大的验证参数模块,jfianl中好像只能手动验证(当然我对jfianl只处于简单的开发,并不是特别熟),而Sp

Jfinal极速开发微信系列教程(三)--------------对JSP的支持以及部署Tomcat运行异常问题

本文章主要解决以下问题: 1.Jfianl对JSP的支持2.Jfianl Maven项目部署到Tomcat,启动项目异常问题解决 第一个问题重现截图解决方案:1.在configConstant中添加视图的配置(默认支持的视图为freemarker) me.setViewType(ViewType.JSP); 2.在Maven的配置文件中(pom.xml)添加lib 的支持 <!-- jsp --> <dependency> <groupId>org.eclipse.je