• JFinal教程


    自学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%in;%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
  • 相关阅读:
    关于lucene断点续索引和增量索引的问题
    发布一个关于统计时间段的MDX语句
    【蛙蛙推荐】想设计一个关于软件开发的元搜索引擎,希望大家支持
    python中and和or的用法
    Hadoop实战中高级部分 之 Hadoop MapReduce高级编程
    (转)对实时分析与离线分析的思考(二)
    数据分析站点导航
    MapReduce:详解Shuffle过程
    分析能力的8个等级(My Level)
    (转)Tire Tree
  • 原文地址:https://www.cnblogs.com/chxwkx/p/11275423.html
Copyright © 2020-2023  润新知