1、web.xml
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>k.common.MyConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、pom.xml
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- jfinal -->
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>4.9.01</version>
</dependency>
<!-- jfinal-undertow 开发、部署一体化 web 服务器 -->
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal-undertow</artifactId>
<version>2.1</version>
</dependency>
<!-- 避免控制台输出如下提示信息:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
项目中实际上用不到这个 jar 包,本 jfinal demo 用不上这个依赖,在此仅为大家
在未来基于 jfinal demo 为模板做开发时做准备工作
注意:eclipse 下可以将 scope 设置为 provided
-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.29</version>
<!-- 打包前改成 provided,此处使用 compile 仅为支持 IDEA -->
<scope>compile</scope>
</dependency>
<!-- log4j 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!-- druid 数据源连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
<!-- cos 文件上传 -->
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>cos</artifactId>
<version>2020.4</version>
</dependency>
3、demo-config-dev.properties
# config
jdbcUrl = jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
user = root
password =123456
devMode = true
4、MyConfig
import com.jfinal.config.*;
import com.jfinal.ext.handler.ContextPathHandler;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;
import k.controller.*;
public class MyConfig extends JFinalConfig {
public static void main(String[] args) {
// UndertowServer.start(MyConfig.class, 80, true);
}
static Prop p;
/**
* PropKit.useFirstFound(...) 使用参数中从左到右最先被找到的配置文件
* 从左到右依次去找配置,找到则立即加载并立即返回,后续配置将被忽略
*/
static void loadConfig() {
if (p == null) {
p = PropKit.useFirstFound("demo-config-pro.txt", "demo-config-dev.properties");
}
}
@Override
public void configConstant(Constants constants) {
loadConfig();
constants.setDevMode(p.getBoolean("devMode", false));
constants.setBaseUploadPath("/");
}
@Override
public void configRoute(Routes routes) {
routes.add("/hello", HelloController.class);
routes.add("/", IndexController.class);
}
@Override
public void configEngine(Engine engine) {
engine.addSharedFunction();
}
@Override
public void configPlugin(Plugins plugins) {
// 配置 druid 数据库连接池插件
DruidPlugin druidPlugin = new DruidPlugin(p.get("jdbcUrl"), p.get("user"), p.get("password"));
plugins.add(druidPlugin);
}
@Override
public void configInterceptor(Interceptors interceptors) {
}
@Override
public void configHandler(Handlers handlers) {
handlers.add(new ContextPathHandler("ctx"));
}
}
5、IndexController
public class IndexController extends Controller {
public void index() {
render("index.jsp");
}
}
6、HelloController
public class HelloController extends Controller {
public void index() {
renderText("昨夜西风凋碧树。独上高楼,望尽天涯路。
" +
"衣带渐宽终不悔,为伊消得人憔悴。
");
}
}