java jfinal框架: hello world
前言
这个框架的优势是: 开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友。
可以看成了java里的php语言。适合个人创业者,中小企业使用。还好就是由于是国人开人的,文档都是中文,容易阅读。
这是一个开源web开发框架 ,只用于web方面,spring则是一个大而全的框架,不单单可以用在web开发,其它领域也可以使用。
IDEA创建工程
由于是是web应用,必须使用旗舰版的IDEA,不能使用社区版的。
以下参考: https://blog.csdn.net/m0_37456570/article/details/107563548
File -->New-->Project
工程类型:Maven-->Create from archetype-->org.apache.maven.archetypes:maven-archetype-webapp
填写名称路径,以及项目GroupId 和ArtifactId
注意:GroupId 和ArtifactId 要点开 Aritiface Coordinates前面的三角符号才能配置,使用默认的也行,不过是一个名字罢了。
设置Maven的参数,这次先使用默认配置吧,如下:
工程刚建好的时候,会自动开始使用pom导入jar包,本质上就是通过 pom.xml的描述,从网上代码仓库里下载jar包,如下:
耐心等待pom导入完毕,整个基本工程就算建立完毕啦。
首次可能会用时比较久(30分钟),下载过一次,后面就会直接使用本地的了,就不会有这个下载的过程啦。
导入完成后的工程文件如下:
加入配置及代码
加入java目录及相关子目录(文件),如下:
这里,可能会遇到一个问题:IDEA包右键没有新建Java class 的解决方法
解决方法见附件。
这4个文件的内容:
1:DemoConfig.java
创建自定义的JFinalConfig,自己配置文件一定要集成JFinalConfig
可能会遇到问题 "无法创建类 auto-detect file type by content", 解决方法见附录。
DemoConfig.java 内容如下:
package com.hui.demo.config;
import com.hui.demo.controller.HelloController;
import com.jfinal.config.*;
import com.jfinal.template.Engine;
/**
* @program: JFinalFreemarkerDemo
* @description: JFinal配置中心
* @author: LuNanTing
* @create: 2020-07-24 15:35
**/
public class DemoConfig extends JFinalConfig {
@Override
public void configConstant(Constants constants) {
//开启开发模式
constants.setDevMode(true);
}
@Override
public void configRoute(Routes routes) {
routes.add("/hello", HelloController.class);
}
@Override
public void configEngine(Engine engine) {
}
@Override
public void configPlugin(Plugins plugins) {
}
@Override
public void configInterceptor(Interceptors interceptors) {
}
@Override
public void configHandler(Handlers handlers) {
}
}
2:HelloController.java
因为只是最基础测试搭建,一些配置文件并未配置,需要配置可以通过上边的官方文档查看和配置,
接下来创建一个基础的视图管理Controller类(需要继承jfinal包中的Controller):
package com.hui.demo.controller;
import com.jfinal.core.Controller;
/**
* @program: JFinalFreemarkerDemo
* @description:
* @author: LuNanTing
* @create: 2020-07-24 15:13
**/
public class HelloController extends Controller {
public void index(){
renderText("Hello World! jFinal");
}
}
3:web.xml
这时候打开web.xml进行配置:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<filter>
<filter-name>jfinal</filter-name>
<!-- 这里一定要引用JFinal的过滤器 -->
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<!-- 要注意这里一定要配置为configClass,且注意大小写 -->
<param-name>configClass</param-name>
<!-- 引用了自定义的配置类 -->
<param-value>com.hui.demo.config.DemoConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4:StartMain.java
最后设置一个启动类,类似于SpringBoot内置Tomcat那样,需要一个main方法:
package com.hui.demo;
import com.jfinal.core.JFinal;
/**
* @program: JFinalFreemarkerDemo
* @description: 启动类
* @author: LuNanTing
* @create: 2020-07-24 15:40
**/
public class StartMain {
public static void main(String[] args) {
JFinal.start("src/main/webapp",8081,"/", 5);
}
}
5.添加依赖
pom.xml 文件:
最新的jfinal框架官方推荐使用 jfinal-undertow,而不是jetty,这个helloworld工程就暂时沿用旧的做法吧,新工程就不要这样写了。
注意:要先装Jetty Server,否则会有红色高亮警告,详请见附录。
这里特别注意一下:如果是使用 IDEA 开发,scope 仍然得设置成为 compile,否则提示缺少 jar 包,在打包的时候记得要改回 provided,避免打进一些不需要的 jar 包
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>2019.3</version>
<scope>compile</scope>
</dependency>
运行
点击绿三角,即可运行。
点击运行。
问题1,可能会出现了以下问题:
Exception in thread "main" java.lang.NoClassDefFoundError: com/jfinal/core/JFinal
解决方法:
添加依赖:
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>2018.11</version>
<scope>compile</scope>
</dependency>
但是红色的,
这是因为 Jetty Server没有安装。安装方法见附录。
问题2:IncompatibleClassChangeError 错误
原因: 是因为加了两个或两个以上版本的库,比如我这里的问题是加了两个版本的 jfinal库,删掉一个低版本的就好。
下图是删掉多余库之后的截图。
运行成功后的提示信息是这样的:
在浏览器就输入地址,就可以访问啦,如下:
附录1:关于IDEA包右键没有新建Java class 的解决方法
参考: https://blog.csdn.net/weixin_43874433/article/details/104762253
现象为:
解决方法:右键-->New-->Mark Directory as --> Sources Root
附录2: 问题:无法创建类 auto-detect file type by content
会提示无法创建类,即使强行创建一个 DemoConfig.java 文件, IDEA也不会识别成 *.java文件。
原因: 你添加了一个特定样子的文件类型,IDE记住了,导致你这个文件都是按模板指定的文件类型。
解决方法:办法就是,打开设置,找到File Types(可以通过左上边的搜索快速找打,然后,找到签名添加的auto-detect file type by content类型,你会发下在右下边有你添加的文件安静的躺在那,快快把他删除了。
附录3: Jetty Server 安装与使用
最新的jfinal框架官方推荐使用 jfinal-undertow,而不是jetty,这个helloworld工程就暂时沿用旧的做法吧,新工程就不要这样写了。
Jetty更轻量级。这是相对Tomcat而言的。功能类似,Tomcat和Jetty都是一种Servlet引擎。
还有一点不同的是,Jetty是一种嵌入式服务器,Tomcat要单独运行,但Jetty可以直接集成到代码里。安装方法也相对简单,通过maven就行。如下图所示,
Project Structure --> Libraries --> "+"号 --> 输入"com.jfinal" --> 点击输入框右侧的搜索图标,就会显示好几个版本。
选中一个版本,添加到库里即可。
然后就会出现一个提示框,等待其完成即可。
添加成功后,就可以看到Libraries里多了一个选项:
接着在pom.xml文件里添加依赖:
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>2019.3</version>
<scope>compile</scope>
</dependency>
groupId, artifactId,version 必须和上一步下载的一模一样,否则,会有红色高亮提示。
扩展:
如果缺少其它库,也可以同样的方便把库添加进来,比如:
解决方法:
下载完这个库后,颜色就正常了:
附录4: jfinal-undertow 简介
jfinal-undertow 功能和 tomcat、jetty 类似,可以相互替代。和jetty一样,是嵌入式服务器。是jfinal全家桶之一。优势是轻量快速和热部署。