96SEO 2026-02-23 14:57 36
。

演示时候工程编译是超级慢的。
因为把静态资源放在了Web工程下#xff0c;每次编译都要拷贝#xff0c;运行起码是1分钟#xff0c;不能忍受#xff0c;为此思考工程结构改解决这个问题#xff0c;顺带方便开发的发布。
运行WebLoade…上一篇的演示只是涉及自动编译业务脚本。
演示时候工程编译是超级慢的。
因为把静态资源放在了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即可
java.util.Scanner;//网站加载器引导加载网站
{System.out.println(本控制台将负责引导启动网站);try{File
directory.getCanonicalPath();System.out.println(courseFile);String
Paths.get(courseFile,WebSrc,bin).toString();String
Paths.get(courseFile,WebSrc,bin,shutdown.bat).toString();String
Paths.get(courseFile,WebSrc,bin,startup.bat).toString();//结束打开页面工具KillProcess(DevOpenPage.exe);System.out.println(尝试停止站点);System.out.println(执行脚本:stopBatPath);TryExecCmd(stopBatPath,binPath);//启动页面打开工具String
Paths.get(courseFile,WebSrc,webapps,ankilis,DevOpenPage,DevOpenPage.exe).toString();StartExe(openPageUtil,binPath);System.out.println(尝试启动站点);System.out.println(执行脚本:startBatPath);TryExecCmd(startBatPath,binPath);}catch
ex){System.out.println(ex.getMessage());}}//结束指定名称进程//processName:进程名public
Runtime.getRuntime().exec(System.getenv(windir)
InputStreamReader(p.getInputStream()));while
line.split(\\s)[1];Runtime.getRuntime().exec(taskkill
processId);System.out.println(Process
{e.printStackTrace();}}//启动Exe//cmdStr:命令串//runDir:运行路径private
File(runDir);try{System.out.println(启动:cmdStr);//
Runtime.getRuntime().exec(cmdStr,null,directory);}catch
ex){System.out.println(ex.getMessage());}}//执行cmd//cmdStr:命令串//runDir:运行路径private
File(runDir);try{System.out.println(执行:cmdStr);//
Runtime.getRuntime().exec(cmdStr,null,directory);//
InputStreamReader(process.getInputStream()));String
关闭资源reader.close();System.out.println(返回:exitCode);}catch
ex){System.out.println(ex.getMessage());}}
同时为了内嵌Tomcat改造了他的startup.bat和shutdown.bat
http://www.apache.org/licenses/LICENSE-2.0
---------------------------------------------------------------------------
---------------------------------------------------------------------------setlocalcd
%CATALINA_HOME%\bin\catalina.bat
%CATALINA_HOME%\bin\catalina.bat
EXECUTABLE%CATALINA_HOME%\bin\catalina.batrem
http://www.apache.org/licenses/LICENSE-2.0
---------------------------------------------------------------------------
---------------------------------------------------------------------------setlocalcd
%CATALINA_HOME%\bin\catalina.bat
%CATALINA_HOME%\bin\catalina.bat
EXECUTABLE%CATALINA_HOME%\bin\catalina.batrem
System.Security.Cryptography.X509Certificates;
FrmMian(){InitializeComponent();}///
DirectoryInfo(Application.StartupPath);StaticFilesPath
di.Parent.FullName;LoadTree();WriteLogToUI(本程序路径:
Path.Combine(AppContext.BaseDirectory,
{System.Threading.Thread.Sleep(7000);ChomeViewUtil.OpenChrome(http://localhost:8080/ankilis/login/form/Login.aspx);});}///
LoadTree(){treeViewMian.Nodes.Clear();list.Clear();TreeNode
StaticFilesPath;treeViewMian.Nodes.Add(root);BindChild(root);root.Expand();}///
fNode.Tag.ToString();//父成功);}///
WriteLog(SetLogTxt);txtLog.Invoke(txthandler,
DateTime.Now.ToString(hh:mm:ss#
e){if(e.KeyCodeKeys.Enter){LoadTree();}}}
System.Threading.Tasks;namespace
0){Console.WriteLine(驱动Chrome打开登录链接);if
true){System.Diagnostics.Process.Start(chromePath,
path);}else{System.Diagnostics.Process.Start(chromePath,
path);}}else{Console.WriteLine(没安装Chrome驱动默认浏览器打开登录链接);//调用系统默认的浏览器
System.Diagnostics.Process.Start(path);}}///
null;Microsoft.Win32.RegistryValueKind
regValueKind;Microsoft.Win32.RegistryKey
null;Microsoft.Win32.RegistryKey
Microsoft.Win32.Registry.LocalMachine;regSubKey
regKey.OpenSubKey(SOFTWARE\Microsoft\Windows\CurrentVersion\App
false);//如果在LocalMachine获取不到可以在CurrentUser里获取if
Microsoft.Win32.Registry.CurrentUser;regSubKey
regKey.OpenSubKey(SOFTWARE\Microsoft\Windows\CurrentVersion\App
regSubKey.GetValue(strKeyName);regValueKind
regSubKey.GetValueKind(strKeyName);//Set
Microsoft.Win32.RegistryValueKind.String){strPathResult
(System.Security.SecurityException
;System.Windows.Forms.MessageBox.Show(你没有读取注册表的权限!
;System.Windows.Forms.MessageBox.Show(读取注册表错误!
null){regSubKey.Close();regSubKey
mode)然后尝试启动测试网站这里要给startup.sh、catalina.sh、shutdown.sh执行权限给WebSrc目录权限否则javac无法编译别的没什么主意的。
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
org.apache.catalina.startup.Catalina
org.apache.catalina.startup.Catalina
java.net.PlainSocketImpl.socketConnect(Native
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
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)[rootlocalhost
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
/WebSrc/bin/bootstrap.jar:/WebSrc/bin/tomcat-juli.jar
部署只要上传WebSrc文件夹到Linux或者直接运行Windows下的WebSrc/bin的启动脚本前提是安装jdk。
Linux上设置文件夹权限和启动停止脚本权限非常简单。
轻松加愉快开发和Linux发布都很简单不依赖Maven、不用配开发idea的tomcat不用niginx代理前后台。
前后台做到分而不离。
下一阶段实现代码生成器和通用码表通用码表可以解决百分之80左右的基础维护界面。
生效的百分之二十的维护界面借助代码生成器生成的代码解决这里面的百分之80工作量从而极大降低基础维护的开发量等于剩下约百分之四。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback