java获取环境变量_详解Java获取环境变量及系统属性的方法

java获取环境变量_详解Java获取环境变量及系统属性的方法

环境变量这个概念不陌生, 就是操作系统的环境变量。

系统变量就是java本身维护的变量。 通过 System.getProperty 的方式获取。

对于不同的操作系统来说, 环境变量的处理可能会有一些不统一的地方, 比如说: 不区分大小写 等等。

Java 获取环境变量Java 获取环境变量的方式很简单:

System.getEnv()  得到所有的环境变量

System.getEnv(key) 得到某个环境变量的值

Map map = System.getenv();

Iterator it = map.entrySet().iterator();

while(it.hasNext())

{

Entry entry = (Entry)it.next();

System.out.print(entry.getKey()+"=");

System.out.println(entry.getValue());

}

如果是windows 系统, 打印出来的值通过从 “我的电脑” 里看到的环境变量是一样的。

Java 获取和设置系统变量Java 获取环境变量的方式也很简单:

System.getProperties()  得到所有的系统变量

System.getProperty(key)  得到某个系统变量的值

Properties properties = System.getProperties();

Iterator it = properties.entrySet().iterator();

while(it.hasNext())

{

Entry entry = (Entry)it.next();

System.out.print(entry.getKey()+"=");

System.out.println(entry.getValue());

}

系统变量除了可以获取之外, 还可以通过System.setProperty(key, value)  的方式设置自己需要的系统变量。

默认情况下, java 设置了哪些系统变量:

java.version Java 运行时环境版本

java.vendor Java 运行时环境供应商

java.vendor.url Java 供应商的 URL

java.home Java 安装目录

java.vm.specification.version Java 虚拟机规范版本

java.vm.specification.vendor Java 虚拟机规范供应商

java.vm.specification.name Java 虚拟机规范名称

java.vm.version Java 虚拟机实现版本

java.vm.vendor Java 虚拟机实现供应商

java.vm.name Java 虚拟机实现名称

java.specification.version Java 运行时环境规范版本

java.specification.vendor Java 运行时环境规范供应商

java.specification.name Java 运行时环境规范名称

java.class.version Java 类格式版本号

java.class.path Java 类路径

java.library.path 加载库时搜索的路径列表

java.io.tmpdir 默认的临时文件路径

java.compiler 要使用的 JIT 编译器的名称

java.ext.dirs 一个或多个扩展目录的路径

os.name 操作系统的名称

os.arch 操作系统的架构

os.version 操作系统的版本

file.separator 文件分隔符(在 UNIX 系统中是"/")

path.separator 路径分隔符(在 UNIX 系统中是":")

line.separator 行分隔符(在 UNIX 系统中是"/n")

user.name 用户的账户名称

user.home 用户的主目录

user.dir 用户的当前工作目录

补充1 . 在.bat ;  .cmd 或  .sh 中会通过 set 的方式设置一些变量,

比如weblogic 的 setDomainEnv.cmd

set SUN_JAVA_HOME=C:\Oracle\Middleware\jdk160_21

这里设置的是环境变量

2. 在log4j 的配置中, 有时会配置log file 的产生路径。

比如 ${LOG_DIR}/logfile.log, 这里的LOG_DIR 是被系统属性的变量替换的。

3. 看一下java 源码, 通过 System.getProperties() 的方式获取系统变量时, 会有一个安全的检查

public static Properties getProperties() {

SecurityManager sm = getSecurityManager();

if (sm != null) {

sm.checkPropertiesAccess();

}

return props;

}

在 单个Java application  测试时, System 里的SecurityManager 是空的。

在Applet 运行时, 会结合 .policy 这个文件来检查权限。

如果给一个空的SecurityManager 会发现就会抛出权限异常。

public static void main(String[] args) {

// TODO Auto-generated method stub

System.setSecurityManager(new SecurityManager());

//SecurityManager sm = System.getSecurityManager();

//System.out.println(sm);

System.getSecurityManager().checkPropertiesAccess();

}

System.getEnv()和System.getProperties()的区别从概念上讲,系统属性 和环境变量 都是名称与值之间的映射。两种机制都能用来将用户定义的信息传递给 Java 进程。环境变量产生更多的全局效应,因为它们不仅对Java 子进程可见,而且对于定义它们的进程的所有子进程都是可见的。在不同的操作系统上,它们的语义有细微的差别,比如,不区分大小写。因为这些原因,环境变量更可能有意料不到的副作用。最好在可能的地方使用系统属性。环境变量应该在需要全局效应的时候使用,或者在外部系统接口要求使用环境变量时使用(比如 PATH)。

代码如下:

public static void main(String [] args)

{

Map m = System.getenv();

for ( Iterator it = m.keySet().iterator(); it.hasNext(); )

{

String key = (String ) it.next();

String value = (String ) m.get(key);

System.out.println(key +":" +value);

}

System.out.println( "--------------------------------------" );

Properties p = System.getProperties();

for ( Iterator it = p.keySet().iterator(); it.hasNext(); )

{

String key = (String ) it.next();

String value = (String ) p.get(key);

System.out.println(key +":" +value);

}

}

输入如下:

ANT_HOME:D:/program/devel/ant

PROCESSOR_ARCHITECTURE:x86

LOGONSERVER://RJ-WEIJIANJUN

HOMEDRIVE:C:

CATALINA_HOME:D:/program/server/Tomcat5.5

DXSDK_DIR:d:/Program Files/Microsoft DirectX SDK (August 2008)/

VS80COMNTOOLS:C:/Program Files/Microsoft Visual Studio 8/Common7/Tools/

SESSIONNAME:Console

HOMEPATH:/Documents and Settings/Administrator

TMP:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp

windir:C:/WINDOWS

PROCESSOR_IDENTIFIER:x86 Family 6 Model 15 Stepping 13, GenuineIntel

VS90COMNTOOLS:e:/Program Files/Microsoft Visual Studio 9.0/Common7/Tools/

SystemDrive:C:

USERPROFILE:C:/Documents and Settings/Administrator

PATHEXT:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

CommonProgramFiles:C:/Program Files/Common Files

NUMBER_OF_PROCESSORS:2

ComSpec:C:/WINDOWS/system32/cmd.exe

COMPUTERNAME:RJ-WEIJIANJUN

OS:Windows_NT

USERNAME:Administrator

CLIENTNAME:Console

TEMP:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp

USERDOMAIN:RJ-WEIJIANJUN

ALLUSERSPROFILE:C:/Documents and Settings/All Users

lib:C:/Program Files/SQLXML 4.0/bin/

PROCESSOR_LEVEL:6

SystemRoot:C:/WINDOWS

ClusterLog:C:/WINDOWS/Cluster/cluster.log

APPDATA:C:/Documents and Settings/Administrator/Application Data

Path:C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Microsoft SQL Server/80/Tools/Binn/;C:/Program Files/Microsoft SQL Server/90/DTS/Binn/;C:/Program Files/Microsoft SQL Server/90/Tools/binn/;C:/Program Files/Microsoft SQL Server/90/Tools/Binn/VSShell/Common7/IDE/;C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/PrivateAssemblies/;D:/program/devel/flex_sdk2/bin;D:/program/devel/ant/bin;C:/Program Files/Java/jdk1.6.0_07/bin;%JONAS_ROOT%/bin/nt;d:/program/devel/ant/bin

JAVA_HOME:C:/Program Files/Java/jdk1.6.0_07

FP_NO_HOST_CHECK:NO

PROCESSOR_REVISION:0f0d

ProgramFiles:C:/Program Files

以下是property的输出:

--------------------------------------

java.runtime.name:Java(TM) 2 Runtime Environment, Standard Edition

sun.boot.library.path:D:/Program Files/MyEclipse 6.5/jre/bin

java.vm.version:1.5.0_11-b03

java.vm.vendor:Sun Microsystems Inc.

java.vendor.url:http://java.sun.com/

path.separator:;

java.vm.name:Java HotSpot(TM) Client VM

file.encoding.pkg:sun.io

sun.java.launcher:SUN_STANDARD

user.country:CN

sun.os.patch.level:Service Pack 2

java.vm.specification.name:Java Virtual Machine Specification

user.dir:D:/dev/eclipse/mye65/workspace/jmx

java.runtime.version:1.5.0_11-b03

java.awt.graphicsenv:sun.awt.Win32GraphicsEnvironment

java.endorsed.dirs:D:/Program Files/MyEclipse 6.5/jre/lib/endorsed

os.arch:x86

java.io.tmpdir:C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/

line.separator:

java.vm.specification.vendor:Sun Microsystems Inc.

user.variant:

os.name:Windows 2003

sun.jnu.encoding:GBK

java.library.path:D:/Program Files/MyEclipse 6.5/jre/bin;.;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Microsoft SQL Server/80/Tools/Binn/;C:/Program Files/Microsoft SQL Server/90/DTS/Binn/;C:/Program Files/Microsoft SQL Server/90/Tools/binn/;C:/Program Files/Microsoft SQL Server/90/Tools/Binn/VSShell/Common7/IDE/;C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/PrivateAssemblies/;D:/program/devel/flex_sdk2/bin;D:/program/devel/ant/bin;C:/Program Files/Java/jdk1.6.0_07/bin;%JONAS_ROOT%/bin/nt;d:/program/devel/ant/bin

java.specification.name:Java Platform API Specification

java.class.version:49.0

sun.management.compiler:HotSpot Client Compiler

os.version:5.2

user.home:C:/Documents and Settings/Administrator

user.timezone:Asia/Shanghai

java.awt.printerjob:sun.awt.windows.WPrinterJob

file.encoding:GBK

java.specification.version:1.5

java.class.path:D:/dev/eclipse/mye65/workspace/jmx/bin;D:/program/lib/jmx/jmxtools.jar;D:/program/lib/log/commons-logging-1.1.1.jar;D:/program/lib/log/log4j-1.2.15.jar;D:/program/lib/registry/registry.jar

user.name:Administrator

java.vm.specification.version:1.0

java.home:D:/Program Files/MyEclipse 6.5/jre

sun.arch.data.model:32

user.language:zh

java.specification.vendor:Sun Microsystems Inc.

awt.toolkit:sun.awt.windows.WToolkit

java.vm.info:mixed mode

java.version:1.5.0_11

java.ext.dirs:D:/Program Files/MyEclipse 6.5/jre/lib/ext

sun.boot.class.path:D:/Program Files/MyEclipse 6.5/jre/lib/rt.jar;D:/Program Files/MyEclipse 6.5/jre/lib/i18n.jar;D:/Program Files/MyEclipse 6.5/jre/lib/sunrsasign.jar;D:/Program Files/MyEclipse 6.5/jre/lib/jsse.jar;D:/Program Files/MyEclipse 6.5/jre/lib/jce.jar;D:/Program Files/MyEclipse 6.5/jre/lib/charsets.jar;D:/Program Files/MyEclipse 6.5/jre/classes

java.vendor:Sun Microsystems Inc.

file.separator:/

java.vendor.url.bug:http://java.sun.com/cgi-bin/bugreport.cgi

sun.io.unicode.encoding:UnicodeLittle

sun.cpu.endian:little

sun.desktop:windows

sun.cpu.isalist:pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

Read more

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.