• jbase编译与部署的优化


    上一篇的演示只是涉及自动编译业务脚本。演示时候工程编译是超级慢的。因为把静态资源放在了Web工程下,每次编译都要拷贝,运行起码是1分钟,不能忍受,为此思考工程结构改解决这个问题,顺带方便开发的发布。运行WebLoader能达到5秒内把网站启动,同时打开辅助的页面打开器。

    老的结构是这样子的,为了编译运行时候借助tomcat一起发布静态资源,就把静态资源放Web工程,导致的问题就是每次编译都要拷贝静态资源,超级慢,同时还要配idea的Tomcat设置
    在这里插入图片描述
    调整工程结构,把WebUI拆成WebBase和WebLoader两部分,WebBase只包含网站的servlet基础,剔除静态资源和业务脚本,WebLoader是一个控制台,负载加载Web,同时放静态资源和Java业务脚本
    在这里插入图片描述

    简化后的WebBase,平时不编译,涉及到调用和主体变动才编译得到WEB-INF拷贝到WebLoader
    在这里插入图片描述
    WebLoader是控制台程序复杂驱动Tomcat的停止和启动脚本,同时启动实现的页面打开器,他里面加上静态资源与Java业务脚本,既能让.java享受语法检查,又不用编译拷贝,同时发布时候只要拷贝WebSrc即可
    在这里插入图片描述
    加载器逻辑

    package WebLoader;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.*;
    import java.nio.file.Paths;
    import java.util.Scanner;
    
    //网站加载器,引导加载网站
    public class Main {
    
        //加载入口
        public static void main(String[] args) {
            System.out.println("本控制台将负责引导启动网站");
            try
            {
                File directory = new File("");// 参数为空
                String courseFile = directory.getCanonicalPath();
                System.out.println(courseFile);
                String binPath= Paths.get(courseFile,"WebSrc","bin").toString();
                String stopBatPath= Paths.get(courseFile,"WebSrc","bin","shutdown.bat").toString();
                String startBatPath= Paths.get(courseFile,"WebSrc","bin","startup.bat").toString();
                //结束打开页面工具
                KillProcess("DevOpenPage.exe");
                System.out.println("尝试停止站点");
                System.out.println("执行脚本:"+stopBatPath);
                TryExecCmd(stopBatPath,binPath);
    
                //启动页面打开工具
                String openPageUtil= Paths.get(courseFile,"WebSrc","webapps","ankilis","DevOpenPage","DevOpenPage.exe").toString();
                StartExe(openPageUtil,binPath);
                System.out.println("尝试启动站点");
                System.out.println("执行脚本:"+startBatPath);
                TryExecCmd(startBatPath,binPath);
            }
            catch (Exception ex)
            {
                System.out.println(ex.getMessage());
            }
    
        }
    
        //结束指定名称进程
        //processName:进程名
        public static void KillProcess(String processName) {
            try {
                String line;
                Process p = Runtime.getRuntime().exec(System.getenv("windir") + "\\system32\\" + "tasklist.exe");
                BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
                while ((line = input.readLine()) != null) {
                    if (line.contains(processName)) {
                        String processId = line.split("\\s+")[1];
                        Runtime.getRuntime().exec("taskkill /F /PID " + processId);
                        System.out.println("Process " + processName + " has been killed.");
                    }
                }
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //启动Exe
        //cmdStr:命令串
        //runDir:运行路径
        private static void StartExe(String cmdStr,String runDir)
        {
            File directory = new File(runDir);
            try
            {
                System.out.println("启动:"+cmdStr);
                // 创建进程并执行命令
                Process process = Runtime.getRuntime().exec(cmdStr,null,directory);
            }
            catch (Exception ex)
            {
                System.out.println(ex.getMessage());
            }
        }
    
    
        //执行cmd
        //cmdStr:命令串
        //runDir:运行路径
        private static void TryExecCmd(String cmdStr,String runDir)
        {
            File directory = new File(runDir);
            try
            {
                System.out.println("执行:"+cmdStr);
                // 创建进程并执行命令
                Process process = Runtime.getRuntime().exec(cmdStr,null,directory);
                // 获取命令行程序的输出结果
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
                // 等待命令行程序执行完毕
                int exitCode=process.waitFor();
                // 关闭资源
                reader.close();
                System.out.println("返回:"+exitCode);
            }
            catch (Exception ex)
            {
                System.out.println(ex.getMessage());
            }
        }
    }
    
    
    • 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
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111

    WebSrc内嵌的是一个Tomcat
    在这里插入图片描述

    静态资源和业务脚本在这里
    在这里插入图片描述

    同时为了内嵌Tomcat改造了他的startup.bat和shutdown.bat
    startup.bat

    @echo off
    rem Licensed to the Apache Software Foundation (ASF) under one or more
    rem contributor license agreements.  See the NOTICE file distributed with
    rem this work for additional information regarding copyright ownership.
    rem The ASF licenses this file to You under the Apache License, Version 2.0
    rem (the "License"); you may not use this file except in compliance with
    rem the License.  You may obtain a copy of the License at
    rem
    rem     http://www.apache.org/licenses/LICENSE-2.0
    rem
    rem Unless required by applicable law or agreed to in writing, software
    rem distributed under the License is distributed on an "AS IS" BASIS,
    rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    rem See the License for the specific language governing permissions and
    rem limitations under the License.
    
    rem ---------------------------------------------------------------------------
    rem Start script for the CATALINA Server
    rem ---------------------------------------------------------------------------
    
    setlocal
    
    cd ..
    set "CATALINA_HOME=%cd%"
    
    rem Guess CATALINA_HOME if not defined
    set "CURRENT_DIR=%cd%"
    if not "%CATALINA_HOME%" == "" goto gotHome
    set "CATALINA_HOME=%CURRENT_DIR%"
    if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
    cd ..
    set "CATALINA_HOME=%cd%"
    cd "%CURRENT_DIR%"
    :gotHome
    if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
    echo The CATALINA_HOME environment variable is not defined correctly
    echo This environment variable is needed to run this program
    goto end
    :okHome
    
    set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
    
    rem Check that target executable exists
    if exist "%EXECUTABLE%" goto okExec
    echo Cannot find "%EXECUTABLE%"
    echo This file is needed to run this program
    goto end
    :okExec
    
    rem Get remaining unshifted command line arguments and save them in the
    set CMD_LINE_ARGS=
    :setArgs
    if ""%1""=="""" goto doneSetArgs
    set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
    shift
    goto setArgs
    :doneSetArgs
    
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%
    
    :end
    
    
    • 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
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    shutdown.bat

    @echo off
    rem Licensed to the Apache Software Foundation (ASF) under one or more
    rem contributor license agreements.  See the NOTICE file distributed with
    rem this work for additional information regarding copyright ownership.
    rem The ASF licenses this file to You under the Apache License, Version 2.0
    rem (the "License"); you may not use this file except in compliance with
    rem the License.  You may obtain a copy of the License at
    rem
    rem     http://www.apache.org/licenses/LICENSE-2.0
    rem
    rem Unless required by applicable law or agreed to in writing, software
    rem distributed under the License is distributed on an "AS IS" BASIS,
    rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    rem See the License for the specific language governing permissions and
    rem limitations under the License.
    
    rem ---------------------------------------------------------------------------
    rem Stop script for the CATALINA Server
    rem ---------------------------------------------------------------------------
    
    setlocal
    
    cd ..
    set "CATALINA_HOME=%cd%"
    
    rem Guess CATALINA_HOME if not defined
    set "CURRENT_DIR=%cd%"
    if not "%CATALINA_HOME%" == "" goto gotHome
    set "CATALINA_HOME=%CURRENT_DIR%"
    if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
    cd ..
    set "CATALINA_HOME=%cd%"
    cd "%CURRENT_DIR%"
    :gotHome
    if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
    echo The CATALINA_HOME environment variable is not defined correctly
    echo This environment variable is needed to run this program
    goto end
    :okHome
    
    set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
    
    rem Check that target executable exists
    if exist "%EXECUTABLE%" goto okExec
    echo Cannot find "%EXECUTABLE%"
    echo This file is needed to run this program
    goto end
    :okExec
    
    rem Get remaining unshifted command line arguments and save them in the
    set CMD_LINE_ARGS=
    :setArgs
    if ""%1""=="""" goto doneSetArgs
    set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
    shift
    goto setArgs
    :doneSetArgs
    
    call "%EXECUTABLE%" stop %CMD_LINE_ARGS%
    
    :end
    
    
    • 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
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    用C#实现页面打开器方便开发打开页面

    在这里插入图片描述

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace DevOpenPage
    {
        public partial class FrmMian : Form
        {
            /// 
            /// 写日志
            /// 
            /// 
            private delegate void WriteLog(string str);
    
            /// 
            /// java文件集合
            /// 
            private List<Dto> list = new List<Dto>();
    
            /// 
            /// 静态文件路径
            /// 
            string StaticFilesPath = "";
    
            public FrmMian()
            {
                InitializeComponent();
            }
    
            /// 
            /// 加载函数
            /// 
            /// 
            /// 
            private void Form1_Load(object sender, EventArgs e)
            {
                DirectoryInfo di = new DirectoryInfo(Application.StartupPath);
                StaticFilesPath = di.Parent.FullName;
                LoadTree();
                WriteLogToUI("本程序路径:" + Path.Combine(AppContext.BaseDirectory, "DevOpenPage.exe"));
                Task.Run(() =>
                {
                    System.Threading.Thread.Sleep(7000);
                    ChomeViewUtil.OpenChrome("http://localhost:8080/ankilis/login/form/Login.aspx");
                });
                
    
            }
    
            /// 
            /// 加载数
            /// 
            private void LoadTree()
            {
                treeViewMian.Nodes.Clear();
                list.Clear();
                TreeNode root = new TreeNode();
                root.Text = @"ankilis";
                root.Tag = StaticFilesPath;
                treeViewMian.Nodes.Add(root);
                BindChild(root);
                root.Expand();
            }
    
    
            /// 
            /// 回调
            /// 
            /// 
            /// 
            /// 
            /// 
            /// 
            private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                //总是接受  
                return true;
            }
    
            /// 
            /// 绑定子节点
            /// 
            /// 
            private bool BindChild(TreeNode fNode)
            {
                string path = fNode.Tag.ToString();
                //父目录
                DirectoryInfo fDir = new DirectoryInfo(path);
                FileSystemInfo[] finfos = fDir.GetFileSystemInfos();
                bool HasFile = false;
                foreach (FileSystemInfo f in finfos)
                {
                    if (fDir.GetType() != f.GetType())
                    {
                        if(txtFilter.Text!=""&&(!f.Name.ToLower().Contains(txtFilter.Text.ToLower())))
                        {
                            continue;
                        }
                    }
                   TreeNode node = new TreeNode();
                    node.Text = f.Name;
                    node.Tag = f.FullName;
                    if(f.Extension==".java")
                    {
                        Dto dto = new Dto();
                        dto.FullName = f.FullName.Replace(".java",".ashx");
                        dto.LastTime = f.LastWriteTime;
                        list.Add(dto);
                    }
                    if (f.Extension == ".aspx"|| f.Extension == ".html" || f.Extension == ".java")
                    {
                        node.ForeColor = Color.Blue;
                    }
                    //是文件夹时才递归调用自己
                    if (fDir.GetType() == f.GetType()) 
                    {
                        bool ChildHasFile=BindChild(node);
                        if(ChildHasFile==true)
                        {
                            HasFile = true;
                            fNode.Nodes.Add(node);
                        }
                    }
                    else
                    {
                        HasFile = true;
                        fNode.Nodes.Add(node);
                    }
                }
                return HasFile;
            }
    
            /// 
            /// 双击打开
            /// 
            /// 
            /// 
            private void treeViewMian_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                string fullPath = e.Node.Tag.ToString();
                if (fullPath.Contains(".aspx")|| e.Node.Tag.ToString().Contains(".html") || e.Node.Tag.ToString().Contains(".java"))
                {
                    ChomeViewUtil.OpenChrome("http://localhost:8080/"+e.Node.FullPath.Replace(".java", ".ashx"));
                    WriteLogToUI("打开" + "http://localhost:8080/" + e.Node.FullPath.Replace(".java", ".ashx"));
                }
                else
                {
                    if(File.Exists(fullPath))
                    {
                        Process process = new Process();
                        process.StartInfo.FileName = "cmd.exe";
                        process.StartInfo.UseShellExecute = false;
                        process.StartInfo.RedirectStandardInput = false;
                        process.StartInfo.RedirectStandardOutput = false;
                        process.StartInfo.RedirectStandardError = false;
                        process.StartInfo.CreateNoWindow = true;
                        process.StartInfo.Arguments = @"/c " + fullPath;
                        process.Start();
                        WriteLogToUI("打开" + fullPath);
                    }
                }
            }
    
            /// 
            /// 刷新树
            /// 
            /// 
            /// 
            private void btnRefresh_Click(object sender, EventArgs e)
            {
                list.Clear();
                LoadTree();
                WriteLogToUI("刷新目录成功");
            }
    
            /// 
            /// 写日志到界面
            /// 
            /// 
            private void WriteLogToUI(string str)
            {
                WriteLog txthandler = new WriteLog(SetLogTxt);
                txtLog.Invoke(txthandler, new object[] { str });
            }
    
            /// 
            /// 设置日志控件文本
            /// 
            /// 
            private void SetLogTxt(string str)
            {
                txtLog.Text += DateTime.Now.ToString("hh:mm:ss# ")+str + "\n";
            }
    
    
    
            /// 
            /// 实体
            /// 
            public class Dto
            {
                /// 
                /// 全名
                /// 
                public string FullName
                {
                    get;
                    set;
                }
    
                /// 
                /// 最后修改时间
                /// 
                public DateTime LastTime
                {
                    get;
                    set;
                }
            }
    
            /// 
            /// 模糊查询
            /// 
            /// 
            /// 
            private void txtFilter_KeyDown(object sender, KeyEventArgs e)
            {
                if(e.KeyCode==Keys.Enter)
                {
                    LoadTree();
                }
            }
        }
    }
    
    
    
    • 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
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248

    谷歌打开工具

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace DevOpenPage
    {
        /// 
        /// 用谷歌打开url工具
        /// 
        public static class ChomeViewUtil
        {
            /// 
            /// 谷歌打开url
            /// 
            /// url
            /// 是否app模式
            public static void OpenChrome(string path, bool isApp = false)
            {
                string chromePath = "";
                bool IsChrome = TryGetSoftwarePath("chrome", out chromePath);
                if (IsChrome && chromePath.Length > 0)
                {
                    Console.WriteLine("驱动Chrome打开登录链接");
                    if (isApp == true)
                    {
                        System.Diagnostics.Process.Start(chromePath, "--app=" + path);
                    }
                    else
                    {
                        System.Diagnostics.Process.Start(chromePath, path);
                    }
                }
                else
                {
                    Console.WriteLine("没安装Chrome,驱动默认浏览器打开登录链接");
                    //调用系统默认的浏览器 
                    System.Diagnostics.Process.Start(path);
                }
            }
    
            /// 
            /// 获取某个安装文件的执行路径
            /// 
            /// 软件名
            /// 路径
            /// 
            public static bool TryGetSoftwarePath(string softName, out string path)
            {
                string strPathResult = string.Empty;
                string strKeyName = "";    
                object objResult = null;
    
                Microsoft.Win32.RegistryValueKind regValueKind;
                Microsoft.Win32.RegistryKey regKey = null;
                Microsoft.Win32.RegistryKey regSubKey = null;
    
                try
                {
                    //Read the key 
                    regKey = Microsoft.Win32.Registry.LocalMachine;
                    regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + softName.ToString() + ".exe", false);
                    //如果在LocalMachine获取不到,可以在CurrentUser里获取
                    if (regSubKey == null)
                    {
                        regKey = Microsoft.Win32.Registry.CurrentUser;
                        regSubKey = regKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + softName.ToString() + ".exe", false);
                    }
                    if(regSubKey==null)
                    {
                        path = "";
                        return false;
                    }
                    //Read the path 
                    objResult = regSubKey.GetValue(strKeyName);
                    regValueKind = regSubKey.GetValueKind(strKeyName);
    
                    //Set the path 
                    if (regValueKind == Microsoft.Win32.RegistryValueKind.String)
                    {
                        strPathResult = objResult.ToString();
                    }
                }
                catch (System.Security.SecurityException ex)
                {
                    path = "";
                    System.Windows.Forms.MessageBox.Show("你没有读取注册表的权限! "+ex.Message);
                }
                catch (Exception ex)
                {
                    path = "";
                    System.Windows.Forms.MessageBox.Show("读取注册表错误! " + ex.Message);
                }
                finally
                {
    
                    if (regKey != null)
                    {
                        regKey.Close();
                        regKey = null;
                    }
    
                    if (regSubKey != null)
                    {
                        regSubKey.Close();
                        regSubKey = null;
                    }
                }
    
                if (strPathResult != string.Empty)
                {
                    path = strPathResult;
                    return true;
                }
                else
                {
                    path = "";
                    return false;
                }
            }
        }
    }
    
    
    • 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
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124

    Linux部署
    先安装jdk

    [root@localhost ~]# yum install  java-1.8.0-openjdk* -y
    
    • 1

    然后打开8080端口和查看jdk版本

    [root@localhost ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
    success
    [root@localhost ~]# firewall-cmd --reload
    success
    [root@localhost ~]# java --version
    Unrecognized option: --version
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
    [root@localhost ~]# java -version
    openjdk version "1.8.0_382"
    OpenJDK Runtime Environment (build 1.8.0_382-b05)
    OpenJDK 64-Bit Server VM (build 25.382-b05, mixed mode)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    然后尝试启动测试网站,这里要给startup.sh、catalina.sh、shutdown.sh执行权限,给WebSrc目录权限,否则javac无法编译,别的没什么主意的。

    在这里插入图片描述

    [root@localhost ~]# bash /WebSrc/bin/startup.sh
    Cannot find /WebSrc/bin/catalina.sh
    The file is absent or does not have execute permission
    This file is needed to run this program
    [root@localhost ~]# chmod +x /WebSrc/bin/startup.sh
    [root@localhost ~]# bash /WebSrc/bin/startup.sh
    Cannot find /WebSrc/bin/catalina.sh
    The file is absent or does not have execute permission
    This file is needed to run this program
    [root@localhost ~]# chmod +x /WebSrc/bin/catalina.sh
    [root@localhost ~]# bash /WebSrc/bin/startup.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    [root@localhost ~]# bash /WebSrc/bin/shutdown.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    [root@localhost ~]# bash /WebSrc/bin/shutdown.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Nov 06, 2023 9:02:45 PM org.apache.catalina.startup.Catalina stopServer
    SEVERE: Could not contact [localhost:8005] (base port [8005] and offset [0]). Tomcat may not be running.
    Nov 06, 2023 9:02:45 PM org.apache.catalina.startup.Catalina stopServer
    SEVERE: Error stopping Catalina
    java.net.ConnectException: Connection refused (Connection refused)
    	at java.net.PlainSocketImpl.socketConnect(Native Method)
    	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    	at java.net.Socket.connect(Socket.java:607)
    	at java.net.Socket.connect(Socket.java:556)
    	at java.net.Socket.<init>(Socket.java:452)
    	at java.net.Socket.<init>(Socket.java:229)
    	at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:667)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:393)
    	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:483)
    
    [root@localhost ~]# bash /WebSrc/bin/startup.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    [root@localhost ~]# 
    [root@localhost ~]# 
    [root@localhost ~]# bash /WebSrc/bin/shutdown.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    [root@localhost ~]# bash /WebSrc/bin/startup.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    [root@localhost ~]# bash /WebSrc/bin/shutdown.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    [root@localhost ~]# bash /WebSrc/bin/startup.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    [root@localhost ~]# chmod -R +777 /WebSrc
    [root@localhost ~]# bash /WebSrc/bin/shutdown.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    [root@localhost ~]# bash /WebSrc/bin/startup.sh
    Using CATALINA_BASE:   /WebSrc
    Using CATALINA_HOME:   /WebSrc
    Using CATALINA_TMPDIR: /WebSrc/temp
    Using JRE_HOME:        /usr
    Using CLASSPATH:       /WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
    Using CATALINA_OPTS:   
    Tomcat started.
    
    
    • 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
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111

    部署只要上传WebSrc文件夹到Linux或者直接运行Windows下的WebSrc/bin的启动脚本(前提是安装jdk)。Linux上设置文件夹权限和启动停止脚本权限,非常简单。

    CentOS7上发布效果
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    改业务代码测试
    在这里插入图片描述

    在这里插入图片描述

    轻松加愉快,开发和Linux发布都很简单,不依赖Maven、不用配开发idea的tomcat,不用niginx代理前后台。前后台做到分而不离。下一阶段实现代码生成器和通用码表,通用码表可以解决百分之80左右的基础维护界面。生效的百分之二十的维护界面借助代码生成器生成的代码解决这里面的百分之80工作量,从而极大降低基础维护的开发量,等于剩下约百分之四。

    通用码表原理

    代码生成器原理

  • 相关阅读:
    2023湖北大学计算机考研信息汇总
    好心情平台:看精神科医生前必知的5件事!让你少花钱少受罪
    四十七、Fluent近壁面处理
    【HTML5】登录页面制作简易版
    穿越时空的创新:解析云原生与Web3.0的奇妙渊源
    Playwright 配置文件/运行命令/测试标记
    GIS跟踪监管系统单元信息更新
    选择最适合的产品研发和运营管理工具
    无缝集成的艺术:iCloud与Apple TV的协同之旅
    NVRadar:一种实时的雷达障碍检测和占位栅格预测方法
  • 原文地址:https://blog.csdn.net/zhanglianzhu_91/article/details/134255336