自学JFinal总结
前言:每次搭建ssm框架时,就像搬家一样,非常繁杂,并且还容易出错。正好了解到JFinal极简,无需配置即可使用,在这里记录下学习的过程。
感谢:非常感谢此网站发布的教程,非常详细,有兴趣的可以多看看,手把手教程了。。。。。https://www.jfinal.com/doc/1-3
开始正文吧!
一、搭建JFinal项目:
1.创建一个maven工程,选择An archetype which contains a sample Maven Webapp project。
2.pom文件加入依赖的jar包:
<dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal-undertow</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>4.3</version> </dependency>
3.加入指定jdk1.8的plugin,以下plugin需要放在<build><plugins>下(主要提醒别放错了,看不明白就百度一下)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
4.创建配置类(无需改动)
import com.jfinal.config.Constants; import com.jfinal.config.Handlers; import com.jfinal.config.Interceptors; import com.jfinal.config.JFinalConfig; import com.jfinal.config.Plugins; import com.jfinal.config.Routes; import com.jfinal.server.undertow.UndertowServer; import com.jfinal.template.Engine; public class DemoConfig extends JFinalConfig { public static void main(String[] args) { UndertowServer.start(DemoConfig.class, 80, true); } public void configConstant(Constants me) { me.setDevMode(true); } public void configRoute(Routes me) { me.add("/hello", HelloController.class); } public void configEngine(Engine me) { } public void configPlugin(Plugins me) { } public void configInterceptor(Interceptors me) { } public void configHandler(Handlers me) { } }
5.生成一个controller(无需改动)
import com.jfinal.core.Controller; public class HelloController extends Controller { public void index() { renderText("Hello JFinal World."); } }
6.运行main方法,直接访问127.0.0.1/hello 即可看到效果。至此简易JFinal已经搭建完毕,非常简单快捷!!!!!!
二、打包为jar包或生成快捷启动方式
1.JFinal默认使用jetty,无需使用tomcat!!!上一步运行main方法时即是运行在容器内了!!
2.加入pom文件有关maven打包jar的配置(无需改动)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <excludes> <exclude>*.txt</exclude> <exclude>*.xml</exclude> <exclude>*.properties</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <!-- 打包生成的文件名 --> <finalName>${project.artifactId}</finalName> <!-- jar 等压缩文件在被打包进入 zip、tar.gz 时是否压缩,设置为 false 可加快打包速度 --> <recompressZippedFiles>false</recompressZippedFiles> <!-- 打包生成的文件是否要追加 release.xml 中定义的 id 值 --> <appendAssemblyId>true</appendAssemblyId> <!-- 指向打包描述文件 package.xml --> <descriptors> <descriptor>package.xml</descriptor> </descriptors> <!-- 打包结果输出的基础目录 --> <outputDirectory>${project.build.directory}/</outputDirectory> </configuration> </execution> </executions> </plugin>
3.在项目根目录下创建package.xml(与2的红色字体一致),根目录即为项目一级目录,项目名下的目录(如JFinalTest项目,根目录即为JFinalTest/)。
tip:此处需要注意,我的配置文件是windows下的,所以打包格式是zip(红色字体处),如果是linux下,将zip修改为tar.gz
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd"> <!-- assembly 打包配置更多配置可参考官司方文档: http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html --> <id>release</id> <!-- 设置打包格式,可同时设置多种格式,常用格式有:dir、zip、tar、tar.gz dir 格式便于在本地测试打包结果 zip 格式便于 windows 系统下解压运行 tar、tar.gz 格式便于 linux 系统下解压运行 --> <formats> <format>zip</format> <!-- <format>tar.gz</format> --> </formats> <!-- 打 zip 设置为 true 时,会在 zip 包中生成一个根目录,打 dir 时设置为 false 少层目录 --> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <!-- src/main/resources 全部 copy 到 config 目录下 --> <fileSet> <directory>${basedir}/src/main/resources</directory> <outputDirectory>config</outputDirectory> </fileSet> <!-- src/main/webapp 全部 copy 到 webapp 目录下 --> <fileSet> <directory>${basedir}/src/main/webapp</directory> <outputDirectory>webapp</outputDirectory> </fileSet> <!-- 项目根下面的脚本文件 copy 到根目录下 --> <fileSet> <directory>${basedir}</directory> <outputDirectory></outputDirectory> <!-- 脚本文件在 linux 下的权限设为 755,无需 chmod 可直接运行 --> <fileMode>755</fileMode> <includes> <include>*.sh</include> <include>*.bat</include> </includes> </fileSet> </fileSets> <!-- 依赖的 jar 包 copy 到 lib 目录下 --> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> </dependencySet> </dependencySets> </assembly>
4.我是在eclipse下开发,首先maven update,然后执行clean,最后执行package(也可以直接去项目目录下cmd,mvn clean package),最终会在target目录下生成zip包和一个jar文件。
5.生成start.bat(或者start.sh)文件!只需要将下面的批处理程序的红色字体改为自己的main类即可。注意,这是windows下的bat文件。
使用方式:将生成的zip包解压后,将.bat程序放到一级目录下(如JFinalTest项目,.bat将放到JFinalTest/下),然后在cmd运行start.bat start
@echo off rem ------------------------------------------------------------------------- rem rem 使用说明: rem rem 1: 该脚本用于别的项目时只需要修改 MAIN_CLASS 即可运行 rem rem 2: JAVA_OPTS 可通过 -D 传入 undertow.port 与 undertow.host 这类参数覆盖 rem 配置文件中的相同值此外还有 undertow.resourcePath, undertow.ioThreads rem undertow.workerThreads 共五个参数可通过 -D 进行传入 rem rem 3: JAVA_OPTS 可传入标准的 java 命令行参数,例如 -Xms256m -Xmx1024m 这类常用参数 rem rem rem ------------------------------------------------------------------------- setlocal & pushd rem 启动入口类,该脚本文件用于别的项目时要改这里 set MAIN_CLASS=com.chx.test.DemoConfig rem Java 命令行参数,根据需要开启下面的配置,改成自己需要的,注意等号前后不能有空格 rem set "JAVA_OPTS=-Xms256m -Xmx1024m -Dundertow.port=80 -Dundertow.host=0.0.0.0" rem set "JAVA_OPTS=-Dundertow.port=80 -Dundertow.host=0.0.0.0" if "%1"=="start" goto normal if "%1"=="stop" goto normal if "%1"=="restart" goto normal goto error :error echo Usage: jfinal.bat start | stop | restart goto :eof :normal if "%1"=="start" goto start if "%1"=="stop" goto stop if "%1"=="restart" goto restart goto :eof :start set APP_BASE_PATH=%~dp0 set CP=%APP_BASE_PATH%config;%APP_BASE_PATH%lib\* echo starting jfinal undertow java -Xverify:none %JAVA_OPTS% -cp %CP% %MAIN_CLASS% goto :eof :stop set "PATH=%JAVA_HOME%\bin;%PATH%" echo stopping jfinal undertow for /f "tokens=1" %%i in ('jps -l ^| find "%MAIN_CLASS%"') do ( taskkill /F /PID %%i ) goto :eof :restart call :stop call :start goto :eof endlocal & popd pause
linux下的sh文件:将下面的红色字体改为自己的main类。文件放置的位置和上面相同,执行./start.sh start
#!/bin/bash # ---------------------------------------------------------------------- # name: jfinal.sh # version: 1.0 # author: yangfuhai # email: fuhai999@gmail.com # # 使用说明: # 1: 该脚本使用前需要首先修改 MAIN_CLASS 值,使其指向实际的启动类 # # 2:使用命令行 ./jfinal.sh start | stop | restart 可启动/关闭/重启项目 # # 3: JAVA_OPTS 可通过 -D 传入 undertow.port 与 undertow.host 这类参数覆盖 # 配置文件中的相同值此外还有 undertow.resourcePath、undertow.ioThreads、 # undertow.workerThreads 共五个参数可通过 -D 进行传入,该功能尽可能减少了 # 修改 undertow 配置文件的必要性 # # 4: JAVA_OPTS 可传入标准的 java 命令行参数,例如 -Xms256m -Xmx1024m 这类常用参数 # # 5: 函数 start() 给出了 4 种启动项目的命令行,根据注释中的提示自行选择合适的方式 # # ---------------------------------------------------------------------- # 启动入口类,该脚本文件用于别的项目时要改这里 MAIN_CLASS=com.yourpackage.YourMainClass if [[ "$MAIN_CLASS" == "com.yourpackage.YourMainClass" ]]; then echo "请先修改 MAIN_CLASS 的值为你自己项目启动Class,然后再执行此脚本。" exit 0 fi COMMAND="$1" if [[ "$COMMAND" != "start" ]] && [[ "$COMMAND" != "stop" ]] && [[ "$COMMAND" != "restart" ]]; then echo "Usage: $0 start | stop | restart" exit 0 fi # Java 命令行参数,根据需要开启下面的配置,改成自己需要的,注意等号前后不能有空格 # JAVA_OPTS="-Xms256m -Xmx1024m -Dundertow.port=80 -Dundertow.host=0.0.0.0" # JAVA_OPTS="-Dundertow.port=80 -Dundertow.host=0.0.0.0" # 生成 class path 值 APP_BASE_PATH=$(cd `dirname $0`; pwd) CP=${APP_BASE_PATH}/config:${APP_BASE_PATH}/lib/* function start() { # 运行为后台进程,并在控制台输出信息 java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} & # 运行为后台进程,并且不在控制台输出信息 # nohup java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} >/dev/null 2>&1 & # 运行为后台进程,并且将信息输出到 output.log 文件 # nohup java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} > output.log & # 运行为非后台进程,多用于开发阶段,快捷键 ctrl + c 可停止服务 # java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} } function stop() { # 支持集群部署 kill `pgrep -f ${APP_BASE_PATH}` 2>/dev/null # kill 命令不使用 -9 参数时,会回调 onStop() 方法,确定不需要此回调建议使用 -9 参数 # kill `pgrep -f ${MAIN_CLASS}` 2>/dev/null # 以下代码与上述代码等价 # kill $(pgrep -f ${MAIN_CLASS}) 2>/dev/null } if [[ "$COMMAND" == "start" ]]; then start elif [[ "$COMMAND" == "stop" ]]; then stop else stop start fi