java jfinal框架: hello world

前言

官网: https://jfinal.com/

源码:https://gitee.com/jfinal/

这个框架的优势是: 开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、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全家桶之一。优势是轻量快速和热部署。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值