JFinal学习

JFinal

1、基于 JFinal 的 web 项目需要创建一个继承自 JFinalConfig 类的子类,该类用于对整个 web
项目进行配置。

    JFinalConfig 子类需要实现六个抽象方法:

1)configConstant(Constants me)

    此方法用来配置 JFinal 常量值,如开发模式常量 devMode 的配置,如下代码配置了 JFinal运行在开发模式:

public void configConstant(Constants me) {me.setDevMode(true);
}

    在开发模式下, JFinal 会对每次请求输出报告,如输出本次请求的 URL、 Controller、 Method以及请求所携带的参数。
2)configRoute(Routes me)

    此方法用来配置 JFinal 访问路由,如下代码配置了将”/”映射到 HelloController 这个控制 器 , 在controller中通过使用@ActionKey注解访 问 HelloController.login() 方法。

public void configRoute(Routes me) {		me.setBaseViewPath("/view");me.add("/", HelloController.class);
}
public class HelloController extends Controller {@ActionKey("/login")//通过ActionKey注解使在浏览器中输入http://localhost/login来访问login.htmlpublic void login() {//renderText("Hello JFinal World.");render("login.html");//重定向到login页面}
} http://localhost/login来访问login.htmlpublic void login() {//renderText("Hello JFinal World.");render("login.html");//重定向到login页面}
} 

    Routes.setBaseViewPath(baseViewPath)方法用于为该Routes内部的所有 Controller 设置视图渲染时的基础路径,该基础路径与 Routes.add(…,viewType)方法传入的viewPath以及Controller.render(view)方法传入的view参数联合组成最终的视图路径,规则如下:
    finalView = baseViewPath + viewPath + view

    注意:当view以“/”字符打头时表示绝对路径,baseViewPath 与 viewPath 将被忽略。

3)configEngine(Engine me)

    此方法用来配置 Template Engine 。

4)configPlugin (Plugins me)

    此方法用来配置 JFinal 的 Plugin 。JFinal 插件架构是其主要扩展方式之一,可以方便地创建插件并应用到项目中去 。

5)configInterceptor (Interceptors me)

    此方法用来配置 JFinal 的全局拦截器,全局拦截器将拦截所有 action 请求,除非使用@Clear 在 Controller 中清除 。而Interceptor 配置粒度分为Global、 Inject、 Class、 Method 四个层次 。

6)configHandler (Handlers me)
    此方法用来配置 JFinal的 Handler处理器,Handler可以接管所有 web 请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。

2、afterJFinalStart()与 beforeJFinalStop()

    JFinalConfig中的 afterJFinalStart()与 beforeJFinalStop()方法供开发者在 JFinalConfig继承类中覆盖。 JFinal 会在系统启动完成后回调 afterJFinalStart()方法, 会在系统关闭前回 调beforeJFinalStop()方法。 这两个方法可以很方便地在项目启动后与关闭前让开发者有机会进行额外操作,如在系统启动后创建调度线程或在系统关闭前写回缓存。

3、PropKit

    PropKit 工具类用来操作外部配置文件。 PropKit 可以极度方便地在系统任意时空使用 。

public class AppConfig extends JFinalConfig {public void configConstant(Constants me) {// 第一次使用use加载的配置将成为主配置,可以通过PropKit.get(...)直接取值PropKit.use("a_little_config.txt");me.setDevMode(PropKit.getBoolean("devMode"));}public void configPlugin(Plugins me) {// 非第一次使用use加载的配置,需要通过每次使用use来指定配置文件名再来取值String redisHost = PropKit.use("redis_config.txt").get("host");int redisPort = PropKit.use("redis_config.txt").getInt("port");RedisPlugin rp = new RedisPlugin("myRedis", redisHost, redisPort);me.add(rp);// 非第一次使用 use加载的配置,也可以先得到一个Prop对象,再通过该对象来获取值Prop p = PropKit.use("db_config.txt");DruidPlugin dp = new DruidPlugin(p.get("jdbcUrl"), p.get("user")…);me.add(dp);}
}

    PropKit 可同时加载多个配置文件,第一个被加载的配置文件可以使用PorpKit.get(…)方法直接操作,非第一个被加载的配置文件则需要使用 PropKit.use(…).get(…)来操作。 PropKit 的使用并不限于在 YourJFinalConfig 中,可以在项目的任何地方使用。 此外PropKit.use(…) 方 法 在 加 载 配 置 文 件 内 容 以 后 会 将 数 据 缓 存 在 内 存 之 中 , 可 以 通 过PropKit.useless(…)将缓存的内容进行清除。

4、Controller

    1)Controller 是 JFinal 核心类之一, 该类作为 MVC 模式中的控制器。 基于 JFinal 的 Web 应用的控制器需要继承该类。 Controller 是定义 Action 方法的地点,是组织 Action 的一种方式,一个 Controller 可以包含多个 Action。 Controller 是线程安全的。

    2)在 Controller 之中定义的 public 方法称为 Action。 Action 是请求的最小单位。 Action 方法必须在 Controller 中定义, 且必须是 public 可见性。Action 可以有返回值,返回值可在拦截器中通过 invocation.getReturnValue() 获取到,以便进行 render 控制。

    3)Controller提供了 getPara系列方法用来从请求中获取参数。getPara系列方法分为两种类型。第 一 种 类 型 为 第 一 个 形 参 为 String 的 getPara 系 列 方 法 。 该 系 列 方 法 是 对HttpServletRequest.getParameter(String name) 的 封 装 , 这 类 方 法 都 是 转 调 了HttpServletRequest.getParameter(String name)。 第二种类型为第一个形参为 int 或无形参的getPara 系列方法。 该系列方法是去获取 urlPara 中所带的参数值。 getParaMap 与 getParaNames分别对应 HttpServletRequest 的 getParameterMap 与 getParameterNames。

    4)getModel 用来接收页面表单域传递过来的 model 对象 ,getModel 使用的 attrName 必须与数据表字段名完全一样。getBean 方法用于支持传统 Java Bean, 包括支持使用 jfnal 生成器生成了 getter、 setter 方法的 Model, 页面表单传参时使用与 setter 方法相一致的 attrName,而非数据表字段名。 getModel 与 getBean 区别在于前者使用数表字段名而后者使用setter 方法一致的属性名进行数据注入。 建议优先使用 getBean 方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模 —— 聚类分析(3)

目录 一、聚类分析概述 1.1 常用聚类要素的数据处理 1.1.1 总和标准化 1.1.2 标准差标准化 1.1.3 极大值标准化 1.1.4 极差的标准化 1.2 分类 1.2.1 快速聚类法(K-均值聚类) 1.2.2 系统聚类法(分层聚类法) 二、分类统计…

QPainter::end: Painter ended with 2 saved states 如何解决

QPainter::end: Painter ended with 2 saved states 是一个警告信息,它表明 QPainter 对象在结束时还存在未恢复的状态栈。这通常发生在 QPainter 对象被销毁(即调用其析构函数)时,如果存在未通过 restore() 方法平衡掉的 save() …

AutoMQ 生态集成 Tigris

Tigris[1]是一个全球分布式的兼容 S3 的对象存储服务,它允许你存储和访问任意数量的数据,具有广泛的使用场景。Tigris 会自动且智能地将数据分布到靠近用户的位置,让用户无需担心数据复制和缓存复杂性。 你可以将 Tigris 用于多种场景&#x…

EEPROM 怎么选

选择合适的EEPROM型号需要考虑多个因素,包括容量、供应商、性能参数、价格、可用性和兼容性等。以下是一个详细的步骤指南,帮助您在众多品牌和型号中做出选择: 1. 确定基本需求 首先确定您的应用对EEPROM的基本需求: 容量&…

Python里cv2是什么包?怎么安装使用?

在Python中,cv2是OpenCV库的模块名。OpenCV(全称Open Source Computer Vision Library)是一个基于开源的计算机视觉库,它提供了大量的图像处理和计算机视觉算法,如图像滤波、边缘检测、图像分割、特征提取、目标检测等…

快速排序——AcWing785.快速排序

AcWing785.快速排序 题目描述 785. 快速排序 - AcWing题库 运行代码 #include <iostream> #include <algorithm> using namespace std; const int N 1e66; int q[N]; void quick_sort(int q[], int l, int r) {if (l > r) return;int m l r >> 1;//…

LeetCode刷题之HOT100之不同路径

2024/6/6 小雨&#xff0c;没停。明天就要高考啦&#xff0c;回想五年前我也带着紧张与期待走过这些天&#xff0c;祝高考学子一切顺利。Anyway&#xff0c;早上一到实验室我就去看望我的栀子花&#xff0c;带着满怀的期待去看它长大了多少&#xff0c;是的&#xff0c;花苞还在…

《开源模型食用指南》基于Linux环境快速部署开源模型,更适合中国宝宝的部署教程

今天给大家推荐一个非常适合中国宝宝学习的专属大模型教程&#xff0c;也就是它《开源模型食用指南》&#xff01; 当前百模大战正值火热&#xff0c;开源LLM层出不穷。 如今国内外已经涌现了众多优秀开源LLM&#xff0c;国外如LLaMA、Alpaca&#xff0c;国内如ChatGLM、BaiCh…

想了解Prompt 技术?看这篇就够了!

最近看了 Meta-Prompt&#xff0c;发现 Prompt 的技术已经发展了几代了。真的要好好梳理一下了。首先是官方有 一个自己的 Prompt engineer &#xff0c; 这个是一定要认真学习的。 https://platform.openai.com/docs/guides/prompt-engineering 官方建议&#xff1a; 写作清…

使用pexpect检查SSH上的文件是否存在

使用 pexpect 模块可以在 Python 中执行命令并检查其输出。你可以使用 ssh 命令连接到远程服务器&#xff0c;并执行 ls 命令检查文件是否存在。下面我就列举几个我经常遇到的几个错误并做个详细的解决方案。 1、问题背景 用户需要编写一个 Python 脚本&#xff0c;以检查一个…

python面向过程与初始面向对象编程

让我们穿越到《龙珠》世界&#xff0c;一起揭开 面向对象编程 的神秘面纱吧。 面向过程编程与面向对象编程 天下第一武道会 选手登记 第 22 届天下第一武道会即将召开&#xff0c;各路武术高手齐聚一堂&#xff0c;其中最受瞩目的&#xff0c;当属卡卡罗特&#xff08;孙悟…

代码随想录训练营Day 51|力扣121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

1.买卖股票的最佳时机 视频讲解&#xff1a;动态规划之 LeetCode&#xff1a;121.买卖股票的最佳时机1_哔哩哔哩_bilibili 代码随想录 代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.s…

Golang time CST以及UTC介绍

package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) fmt.Println(time.Now().UTC()) //Influxdb采用RFC3339格式确定起止时间&#xff0c;所以必须将格式进行对应转换&#xff0c;将其转换为该格式即可 fmt.Println(time.Now().…

线性数据结构-队列

队列&#xff08;Queue&#xff09;是一种先进先出&#xff08;First In First Out, FIFO&#xff09;的数据结构&#xff0c;它按照元素进入的顺序来处理元素。队列的基本操作包括&#xff1a; enqueue&#xff1a;在队列的末尾添加一个元素。dequeue&#xff1a;移除队列的第…

在 Debian 上使用和配置 SSH 的指南

SSH&#xff08;Secure Shell&#xff09;是用于在不安全网络上安全登录远程计算机和执行命令的协议。本文将详细介绍如何在 Debian 系统上安装、配置和使用 SSH。 1. 安装 SSH 首先&#xff0c;您需要安装 OpenSSH 服务器和客户端&#xff08;也可直接安装服务器端&#xff…

38、Flink 的 WindowAssigner 之 GlobalWindows 示例

1、注意 使用 GlobalWindows 需要自定义 Trigger&#xff0c;否则窗口中的数据不会被计算。 2、代码示例 import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org…

我的创作纪念日--我和CSDN一起走过的1825天

机缘 第一次在CSDN写文章&#xff0c;是自己在记录学习Java8新特性中Lambda表达式的内容过程中收获的学习心得。之前也有记录工作和生活中的心得体会、难点的解决办法、bug的排查处理过程等等。一直都用的有道笔记&#xff0c;没有去和大家区分享的想法&#xff0c;是一起的朋…

C++第二十四弹---从零开始模拟STL中的list(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、基本结构 2、基本函数实现 2.1、默认构造函数 2.2、尾插数据 3、迭代器的封装 3.1、迭代器的基本结构 3.2、迭代器重载函数的实现 4、迭…

大家都在用的4款超实用视频剪辑软件,快来码住自用吧!

随着自媒体行业的不断发展&#xff0c;不少小伙伴也逐渐步入了短视频的热潮。对于短视频制作来说&#xff0c;视频剪辑软件的选择非常重要。 如果剪辑软件不够好&#xff0c;整个视频就基本垮掉了。今天就给大家推荐4款好用的视频剪辑软件。 1.牛学长视频剪辑 推荐剪辑新手入门…

win11通过网线分享网络到Ubuntu工控机

1.条件&#xff1a;一个能无线联网的win11&#xff0c;一根网线&#xff0c;一台Ubuntu工控机&#xff0c;并且使用网线连接两者 2.在win11电脑上 2.1 打开控制面板的网络和Internet 2.2 进入网络和共享中心&#xff0c;在左侧进入 更改适配器设置 2.3 在WLAN上右键&#xff0…