tomcat源码学习-System.getProperty讲解

本文介绍了一种使用 Java 的 System.getProperty 方法来获取当前工程路径的方法。通过传递不同的参数,如 'user.dir',可以灵活地获取到项目的根目录路径。

1、获取当前工程路径
System.getProperty(“user.dir”)

System.getProperty(“”),可以操作一下参数:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

<think>根据用户反馈,官方提供的Tomcat NativeWin64下载链接中只有32位版本。实际上,Tomcat Native库的Windows64位版本通常由第三方提供或需要自行编译。以下是替代解决方案:###解决方案(针对Windows64位)1.**使用预编译的64位版本**:-从可靠第三方获取(如:[Apache Tomcat Native1.2.xWin64](https://github.com/openssl/openssl)不直接提供,但可尝试以下途径):-[Apache Tomcat Native官方二进制仓库](https://downloads.apache.org/tomcat/tomcat-connectors/native/)查找对应版本-或使用Maven仓库:搜索`tomcat-native`并下载`win64`版本(例如:[tomcat-native-1.2.26-win64-bin.zip](https://repo1.maven.org/maven2/org/apache/tomcat/tomcat-native/1.2.26/tomcat-native-1.2.26-win64-bin.zip))2.**自行编译**(复杂):-需要安装VisualStudio和OpenSSL源码-参考官方文档:[BuildingonWindows](https://tomcat.apache.org/native-doc/) ###推荐方法:使用NIO协议(无需Native库) 修改`conf/server.xml`,将协议改为NIO:```xml<!--修改HTTP连接器 --><Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol".../> <!--修改HTTPS连接器--> <Connectorport="8443"protocol="org.apache.coyote.http11.Http11NioProtocol".../> ```###验证64位DLL的可用性若仍想使用APR,下载64位DLL后,通过以下Java代码验证:```javapublicclass CheckDll{public staticvoid main(String[]args){System.out.println("Bitness:" +System.getProperty("sun.arch.data.model"));try{System.loadLibrary("tcnative-1");System.out.println("Loadedtcnative-1 successfully");} catch(UnsatisfiedLinkErrore){e.printStackTrace();}} }``` 运行前将`tcnative-1.dll`放在同一目录或系统路径。###日志中其他问题处理1. **SecureRandom启动慢**:-在`setenv.bat`(创建于Tomcat/bin目录)中添加:```batset "JAVA_OPTS=%JAVA_OPTS%-Djava.security.egd=file:/dev/./urandom"``` 2. **TLD扫描警告**:-在`conf/context.xml`的`<Context>`标签内添加:```xml<JarScannerscanManifest="false"scanClassPath="false"/>```---§§相关问题§§:1.如何编译适用于Windows64位的TomcatNative库? 2. Tomcat的NIO连接器与APR连接器在SSL/TLS性能上有什么差异?3.为什么Java的SecureRandom在Windows上启动慢?有哪些优化方案? 4. Tomcat如何配置使用OpenSSL代替JSSE实现HTTPS?</think>### 解决 Tomcat Native 64位缺失问题 您提到官方提供的 `tomcat-native-1.2.x-win64-bin.zip` 中没有真正的64位版本,这是常见问题。以下是完整的解决方案: ### 完整解决方案 #### 方法1:使用官方提供的64位版本(推荐) 从 Apache 官方获取正确的64位版本: 1. 访问 [Apache Tomcat Native 下载页面](https://tomcat.apache.org/download-native.cgi) 2. 选择匹配您 Tomcat 版本的 `tomcat-native-[version]-win64-bin.zip`(如 `tomcat-native-1.2.36-win64-bin.zip`) 3. 解压后将 `tcnative-1.dll` 复制到 `Tomcat/bin` 目录 #### 方法2:自行编译64位版本(高级) ```powershell # 需要安装 Visual Studio 和 OpenSSL git clone https://github.com/apache/tomcat-native.git cd tomcat-native/native # 使用 Visual Studio 命令行工具 cmake -G "Visual Studio 16 2019" -A x64 -DOPENSSL_ROOT_DIR=C:\OpenSSL-Win64 cmake --build . --config Release # 复制生成的 tcnative-1.dll 到 Tomcat/bin copy Release\tcnative-1.dll D:\apache-tomcat-9.0.37\bin\ ``` #### 方法3:使用预编译的64位 DLL(备选) 如果官方没有提供,可以从以下可靠来源获取: 1. [Maven Central 仓库](https://repo1.maven.org/maven2/org/apache/tomcat/tomcat-native/)(搜索对应版本) 2. [GitHub 上的预编译版本](https://github.com/sureshmec/tomcat-native-win64/releases) ### 验证64位 DLL 创建测试脚本 `CheckDllBitness.java`: ```java public class CheckDllBitness { public static void main(String[] args) { try { System.loadLibrary("tcnative-1"); System.out.println("成功加载64位 tcnative-1.dll"); } catch (UnsatisfiedLinkError e) { System.err.println("DLL加载失败: " + e.getMessage()); // 检查系统架构 String arch = System.getProperty("os.arch"); String sunArch = System.getProperty("sun.arch.data.model"); System.out.println("系统架构: " + arch); System.out.println("JVM架构: " + sunArch + "位"); // 检查DLL类型 try { Process p = Runtime.getRuntime().exec("dumpbin /headers bin\\tcnative-1.dll"); p.waitFor(); BufferedReader reader = new BufferedReader( new InputStreamReader(p.getInputStream())); String line; while ((line = reader.readLine()) != null) { if (line.contains("machine")) { System.out.println("DLL架构信息: " + line.trim()); } } } catch (Exception ex) { ex.printStackTrace(); } } } } ``` ### 备选方案:完全禁用 APR 修改 `conf/server.xml`: ```xml <!-- 注释掉 APR 监听器 --> <!-- <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> --> <!-- 修改连接器使用 NIO --> <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector> ``` ### 为什么官方包可能缺少64位版本 1. **历史原因**:早期版本对64位 Windows 支持不足 2. **编译复杂性**:需要特定版本的 OpenSSL 和 Visual Studio 3. **维护资源**:Apache 团队优先支持 Linux 平台 ### 最佳实践建议 1. **生产环境**:使用 NIO 协议(性能足够且无依赖问题) 2. **高性能需求**:在 Linux 上部署 Tomcat + APR 3. **开发环境**:使用官方 Docker 镜像避免环境问题 ```dockerfile FROM tomcat:9.0 RUN apt-get update && apt-get install -y libtcnative-1 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值