公司项目使用jfinal有一段时间了,也有自己手动搭建过项目,但是没有使用demo中jetty方式启动过项目。这几天决定参考jfinal文档更好的学习下jfinal框架,其实创建项目挺简单,但是碰到了一个jetty报错404的问题,查询了论坛分享和网上一些创建方式也没也没解决,论坛和网上提到的基本上时路由配置问题,折腾了一段时间,这里做个记录希望同样碰到的人可以少折腾会儿。
创建项目
首先创建一个maven项目(使用模板)
这里使用了我自己的maven配置文件
由于使用idea创建项目,这里我一般项目目录(Project location)和模块目录(Module file location)会分开。这样的话再新建模块的时候所有模块的目录层级更清晰点。而这也是为后面的出404问题埋下了伏笔
结束完成项目创建。
修改项目配置
增加maven依赖
1
2
3
4
5
6
7
8
9
10
11
12<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>8.1.8</version>
<!-- <scope>provided</scope>-->
</dependency>修改maven项目结构配置
简单代码编写
创建控制类
TestController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package com.yihengliu.test.controller;
import com.jfinal.core.Controller;
/**
* 测试控制类
*
* @author liucheng
* @version 0.1
* @since 0.1 2018-01-30 下午2:31
**/
public class TestController extends Controller {
public void index() {
renderText("Hello, JFinal!");
}
}创建配置类
DemoConfig.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48package com.yihengliu.test;
import com.jfinal.config.*;
import com.jfinal.template.Engine;
import com.yihengliu.test.controller.TestController;
/**
* jfinal配置类
*
* @author liucheng
* @version 0.1
* @since 0.1 2018-01-30 下午2:30
**/
public class DemoConfig extends JFinalConfig{
public void configConstant(Constants me) {
}
public void configRoute(Routes me) {
me.add("/", TestController.class);
}
public void configEngine(Engine me) {
}
public void configPlugin(Plugins me) {
}
public void configInterceptor(Interceptors me) {
}
public void configHandler(Handlers me) {
}
public static void main(String[] args) {
JFinal.start("src/main/webapp", 9091, "/");
}
}web.xml
文件配置1
2
3
4
5
6
7
8
9
10
11
12<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>com.yihengliu.test.DemoConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
测试问题处理
在DemoConfig
类中运行main函数
然后问题来了,页面怎么访问都是404,错误如图:
而不是jfinal报错(这种报错就肯定时jfinal路由配置的问题了):
其实很容易就能看出是因为没有读取web.xml配置,导致项目没有启动jfinal。论坛里面也有提到这种情况的,但是由于自己没有什么jetty使用经验,所以后面还是通过debug代码才发问题的原因。
原因就是前面建立项目提到的,在建立项目的时候project目录和module目录不在同一个目录,所以启动的地方需要修改相对目录,加上module目录。JFinal.start("jfinal_test/src/main/webapp", 9091, "/");
最终,重启项目,顺利运行。
总结
不得不说下jfinal使用确实很简单、方便,而自己搭建项目碰到问题没有快速定位也说明自己确实还有很多的东西需要学习、学习。
再介绍一个比较简洁可靠的方法,利用一个现有的 maven 项目,里头有 src 目录,以及 pom.xml 文件,稍微改改 pom.xml 中的 groupid 之类的,然后导入到 eclipse/IDEA 中即可,导入的时候选择导入的是 maven 项目, 开发工具会自动生成各种配置文件
这种方法可以避免掉自己创建项目过程中有些选项或者输入拿不准的问题
具体操作时,可以下载 jfinal.com 首页的 jfinal-demo-form-maven 这个小 demo 作为蓝本去操作,再一个就是 github 上很多这种标准备的 maven 结构的项目可以直接利用