From af626ed33d478cef7aead3c0c6216cb079b943b9 Mon Sep 17 00:00:00 2001 From: "liujie152@hotmail.com" Date: Fri, 22 May 2020 08:04:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=89=93=E5=8C=85=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.xml | 57 +++++++++++++++++++ pom.xml | 46 +++++++++++++++ src/main/java/com/rocket/pig/Application.java | 17 +++--- 3 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 package.xml diff --git a/package.xml b/package.xml new file mode 100644 index 0000000..7d4cf27 --- /dev/null +++ b/package.xml @@ -0,0 +1,57 @@ + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + + *.txt + *.xml + *.properties + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + make-assembly + package + + single + + + + ${project.artifactId} + + false + + true + + + package.xml + + + ${project.build.directory}/ + + + + \ No newline at end of file diff --git a/src/main/java/com/rocket/pig/Application.java b/src/main/java/com/rocket/pig/Application.java index fcd9bcf..d0530b2 100644 --- a/src/main/java/com/rocket/pig/Application.java +++ b/src/main/java/com/rocket/pig/Application.java @@ -1,10 +1,9 @@ package com.rocket.pig; -import com.rocket.pig.security.MapIdentityManager; +import io.undertow.Handlers; import io.undertow.Undertow; import io.undertow.io.IoCallback; import io.undertow.security.api.SecurityContext; -import io.undertow.security.idm.IdentityManager; import io.undertow.server.HttpHandler; import io.undertow.server.HttpServerExchange; import io.undertow.server.handlers.PathHandler; @@ -13,9 +12,6 @@ import io.undertow.util.Headers; import io.undertow.util.HttpString; import org.jboss.logging.Logger; -import java.util.HashMap; -import java.util.Map; - public class Application { private static Logger log = Logger.getLogger(Application.class); @@ -23,11 +19,11 @@ public class Application { public static void main(String[] args) { System.setProperty("org.jboss.logging.provider", "jdk"); - final Map users = new HashMap<>(2); - users.put("userOne", "passwordOne".toCharArray()); - users.put("userTwo", "passwordTwo".toCharArray()); - - final IdentityManager identityManager = new MapIdentityManager(users); +// final Map users = new HashMap<>(2); +// users.put("userOne", "passwordOne".toCharArray()); +// users.put("userTwo", "passwordTwo".toCharArray()); +// +// final IdentityManager identityManager = new MapIdentityManager(users); PathHandler pathHandler = new PathHandler(); pathHandler.addExactPath("/", new HttpHandler() { @Override @@ -46,6 +42,7 @@ public class Application { } }); SetHeaderHandler headerHandler = new SetHeaderHandler(pathHandler, Headers.CONTENT_TYPE_STRING, "text/html; charset=utf-8"); + Undertow server = Undertow.builder() .addHttpListener(8080, "localhost") .setHandler(headerHandler) -- Gitee From 4a539ead75b29f8f7dd91342e0907e8b3e9489fb Mon Sep 17 00:00:00 2001 From: "liujie152@hotmail.com" Date: Tue, 26 May 2020 11:51:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BD=BF=E7=94=A8asm=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.xml | 101 ++- pig.bat | 69 ++ pig.sh | 82 ++ pom.xml | 7 +- .../com/rocket/pig/annotation/Controller.java | 15 + .../com/rocket/pig/annotation/Repository.java | 15 + .../rocket/pig/annotation/RequestMapping.java | 22 + .../rocket/pig/annotation/RequestMethod.java | 7 + .../com/rocket/pig/annotation/Service.java | 16 + .../com/rocket/pig/io/AntPathMatcher.java | 854 ++++++++++++++++++ .../java/com/rocket/pig/utils/Assert.java | 28 + .../com/rocket/pig/utils/StringUtils.java | 48 + src/main/resources/logging.properties | 2 +- .../java/com/rocket/pig/test/DemoTest.java | 64 ++ 14 files changed, 1278 insertions(+), 52 deletions(-) create mode 100644 pig.bat create mode 100644 pig.sh create mode 100644 src/main/java/com/rocket/pig/annotation/Controller.java create mode 100644 src/main/java/com/rocket/pig/annotation/Repository.java create mode 100644 src/main/java/com/rocket/pig/annotation/RequestMapping.java create mode 100644 src/main/java/com/rocket/pig/annotation/RequestMethod.java create mode 100644 src/main/java/com/rocket/pig/annotation/Service.java create mode 100644 src/main/java/com/rocket/pig/io/AntPathMatcher.java create mode 100644 src/main/java/com/rocket/pig/utils/Assert.java create mode 100644 src/main/java/com/rocket/pig/utils/StringUtils.java create mode 100644 src/test/java/com/rocket/pig/test/DemoTest.java diff --git a/package.xml b/package.xml index 7d4cf27..8af1659 100644 --- a/package.xml +++ b/package.xml @@ -1,57 +1,58 @@ - - + -release - - -dir -zip - - + release + + + dir + zip + + - -true + + true - - - - ${basedir}/src/main/resources - config - + + + + ${basedir}/src/main/resources + config + - - - ${basedir}/src/main/webapp - webapp - + + + ${basedir}/src/main/webapp + webapp + - - - ${basedir} - - - 755 - - *.sh - *.bat - - - + + + ${basedir} + + + 755 + + *.sh + *.bat + + + - - - - lib - - - \ No newline at end of file + + + + lib + + + \ No newline at end of file diff --git a/pig.bat b/pig.bat new file mode 100644 index 0000000..455f04b --- /dev/null +++ b/pig.bat @@ -0,0 +1,69 @@ +@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.yourpackage.YourMainClass + +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 \ No newline at end of file diff --git a/pig.sh b/pig.sh new file mode 100644 index 0000000..1bda368 --- /dev/null +++ b/pig.sh @@ -0,0 +1,82 @@ +#!/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 diff --git a/pom.xml b/pom.xml index b4823ca..02601bb 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,11 @@ undertow-core ${undertow.version} - + + org.ow2.asm + asm + 6.2.1 + @@ -31,6 +35,7 @@ 1.8 1.8 + UTF-8 diff --git a/src/test/java/com/rocket/pig/test/DemoTest.java b/src/test/java/com/rocket/pig/test/DemoTest.java index c6cc32f..ffe3224 100644 --- a/src/test/java/com/rocket/pig/test/DemoTest.java +++ b/src/test/java/com/rocket/pig/test/DemoTest.java @@ -5,11 +5,12 @@ import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.org.objectweb.asm.MethodVisitor; import jdk.internal.org.objectweb.asm.Opcodes; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class DemoTest { - public static void main(String[] args) { + public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { // 生成二进制字节码 byte[] bytes = generate(); // 使用自定义的ClassLoader @@ -49,8 +50,10 @@ public class DemoTest { return cw.toByteArray(); } } + /** * 自定义ClassLoader以支持加载字节数组形式的字节码 + * * @author dadiyang */ class MyClassLoader extends ClassLoader { @@ -60,5 +63,3 @@ class MyClassLoader extends ClassLoader { return super.defineClass(name, b, 0, b.length); } } - -} diff --git a/src/test/java/com/rocket/pig/test/HelloWorldRefection.java b/src/test/java/com/rocket/pig/test/HelloWorldRefection.java new file mode 100644 index 0000000..fc27460 --- /dev/null +++ b/src/test/java/com/rocket/pig/test/HelloWorldRefection.java @@ -0,0 +1,18 @@ +package com.rocket.pig.test; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +class ReflectDemo { + public static void main(String[] args) { + System.out.println("HelloWorld"); + } +} + +public class HelloWorldRefection { + public static void main(String[] args) throws InstantiationException, IllegalAccessException, + SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException { + Method method = ReflectDemo.class.getMethod("main",String[].class); + method.invoke(null,(Object)new String[]{}); + } +} -- Gitee