JAVA_HOME和TOMCAT_HOME

12月13日
为什么要设置 JAVA_HOME, TOMCAT_HOME 等环境变量?
来源:http://topic.yesky.com/topic/146/579837.html

  你可能把tomcat装在c:\tomcat里,也可能把tomcat装在d:\jerrymouse里,tomcat怎么知道自己的文件都在哪儿呢?  在Windows里面程序可以到registry里查,java是跨平台的,不应该读registry,而应该利用更通用的途径,比如象 tomcat_home这样的操作系统环境变量。

为了保持独立与操作系统的特性,java程序并不能直接读到操作系统环境变量。如果不用任何诡计,java程序只能“求”你在启动程序的时候利用java的-D参数把变量告诉它。比如java -Djava_home=%java_home % start_the_servlet_engine.你一定很讨厌每次都打如-D...那些东西,所以通常这种东西都放在一个.bat文件或是 unix的.sh文件里。

实际上tomcat就是这样利用java_home的,用这个办法找到java编译器,然后调用java编译器来编译jsp和servlet程序。至于tomcat_home,可能只是.bat文件里用的。因为.bat文件里不应该写c:\tomcat\bin\ start_engine这样的话,以防你的tomcat躲在d:\jerrymouse里,所以它写成%tomcat_home%\bin\ start_engine。(我不记得具体的程序名,可能不是"start_engine"是别的什么东东,但是这个道理。

java程序怎样读-D参数给的变量? 用System.getProperty("变量名")。

如果你想读到Windows的那些环境变量(在cmd窗口里用set看到的那些),就要用一些阴谋诡计,那样的程序通常很丑陋。

tomcat 文件夹里面没有java编译器,除非自己你装进去,但是要运行tomcat,你的电脑里一定要有java编译器,并且把路径通过java_home告诉 tomcat。如果你的电脑里java在c:\jdk1.4.0里面,java_home就应该设成c:\jdk1.4.0。

你写的那些 servlet,tomcat都要先用java编译器编译过才能运行,其实运行也是用java_home里的java虚拟机,tomcat只不过是通过 Process的get...Stream方法同servlet交互再把结果通过普通的java socket传给浏览器。

jsp由tomcat转换成servlet的java源程序,再用%java_home%\bin\javac编译。所以,jsp和servlet的最终class文件结构上没有什么不同。

java 下的Classpath 配置

和Java 类路径(classpath)打交道的过程中,开发者偶尔会遇到麻烦。这是因为,类装载器实际装入的是哪一个类有时并不显而易见,当应用程序的 classpath包含大量的类和目录时,情况尤其严重。本文将提供一个工具,它能够显示出被装入类文件的绝对路径名。 


一、Classpath基础 


  Java虚拟机(JVM)借助类装载器装入应用程序使用的类,具体装入哪些类根据当时的需要决定。CLASSPATH环境变量告诉类装载器到哪里去寻找第三方提供的类和用户定义的类。另外,你也可以使用JVM命令行参数-classpath分别为应用程序指定类路径,在-classpath中指定的类路径覆盖CLASSPATH环境变量中指定的值。 


  类路径中的内容可以是:文件的目录(包含不在包里面的类),包的根目录(包含已打包的类),包含类的档案文件(比如.zip文件或者.jar文件)。在Unix家族的系统上,类路径的各个项目由冒号分隔,在MS Windows系统上,它们由分号分隔。 


  类装载器以委托层次的形式组织,每一个类装载器有一个父类装载器。当一个类装载器被要求装载某个类时,它在尝试自己寻找类之前会把请求先委托给它的父类装载器。系统类装载器,即由安装在系统上的JDK或JRE提供的默认类装载器,通过CLASSPATH环境变量或者-classpath这个JVM命令行参数装入第三方提供的类或者用户定义的类。系统类装载器委托扩展类装载器装入使用Java Extension机制的类。扩展类装载器委托自举类装载器(bootstrap class loader)装入核心JDK类。 


  你可以自己开发特殊的类装载器,定制JVM如何动态地装入类。例如,大多数Servlet引擎使用定制的类装载器,动态地装入那些在classpath指定的目录内发生变化的类。 


  必须特别注意的是(也是令人吃惊的是),类装载器装入类的次序就是类在classpath中出现的次序。类装载器从classpath的第一项开始,依次检查每一个设定的目录和压缩文件,尝试找出待装入的类文件。当类装载器第一次找到具有指定名字的类时,它就把该类装入,classpath中所有余下的项目都被忽略。 


  看起来很简单,对吧? 

二、可能出现的问题 


  不管他们是否愿意承认,初学者和富有经验的Java开发者都一样,他们都曾经在某些时候(通常是在那些最糟糕的情形下)被冗长、复杂的classpath欺骗。应用程序所依赖的第三方类和用户定义类的数量逐渐增长,classpath也逐渐成了一个堆积所有可能的目录和档案文件名的地方。此时,类装载器首先装载的究竟是哪一个类也就不再显而易见。如果classpath中包含重复的类入口,这个问题尤其突出。前面已经提到,类装载器总是装载第一个它在classpath 中找到的具有合适名字的类,从实际效果看,它“隐藏”了其他具有合适名字但在classpath中优先级较低的类。 


  如果不小心,你很容易掉进这个classpath的陷阱。当你结束了一天漫长的工作,最后为了让应用程序使用最好、最新的类,你把一个目录加入到了 classpath,但与此同时,你却忘记了:在classpath的另一个具有更高优先级的目录下,存放着该类的另一个版本! 


三、一个简单的classpath工具 


  优先级问题是扁平路径声明方法与生俱来固有的问题,但它不是只有Java的classpath才有的问题。要解决这个问题,你只需站到富有传奇色彩的软件巨构的肩膀上:Unix操作系统有一个which命令,在命令参数中指定一个名字,which就会显示出当这个名字作为命令执行时执行文件的路径名。实际上,which命令是分析PATH变量,然后找出命令第一次出现的位置。对于Java的类路径管理来说,这应该也是一个好工具。在它的启发之下,我着手设计了一个Java工具JWhich。这个工具要求指定一个Java类的名字,然后根据classpath的指引,找出类装载器即将装载的类所在位置的绝对路径。 


  下面是一个JWhich的使用实例。它显示出当Java类装载器装载com.clarkware.ejb.ShoppingCartBean类时,该类第一次出现位置的绝对路径名,查找结果显示该类在某个目录下: 


> java JWhich com.clarkware.ejb.ShoppingCartBean 

Class ´com.clarkware.ejb.ShoppingCartBean´ found in 
´/home/mclark/classes/com/clarkware/ejb/ShoppingCartBean.class´ 


  下面是第二个JWhich的使用实例。它显示出当Java类装载器装载javax.servlet.http.HttpServlet类时,该类第一次出现位置的绝对路径名,查找结果显示该类在某个档案文件中: 

> java JWhich javax.servlet.http.HttpServlet 

Class ´javax.servlet.http.HttpServlet´ found in 
´file:/home/mclark/lib/servlet.jar!/javax/servlet/http/HttpServlet.class´ 


四、JWhich的工作过程 
  要精确地测定classpath中哪一个类先被装载,你必须深入到类装载器的思考方法。事实上,具体实现的时候并没有听起来这么复杂——你只需直接询问类装载器就可以了! 

1: public class JWhich { 
2: 
3: /** 
4: * 根据当前的classpath设置, 
5: * 显示出包含指定类的类文件所在 
6: * 位置的绝对路径 
7: * 
8: * @param className <类的名字> 
9: */ 
10: public static void which(String className) { 
11: 
12: if (!className.startsWith("/")) { 
13: className = "/" + className; 
14: } 
15: className = className.replace(´.´, ´/´); 
16: className = className + ".class"; 
17: 
18: java.net.URL classUrl = 
19: new JWhich().getClass().getResource(className); 
20: 
21: if (classUrl != null) { 
22: System.out.println("\nClass ´" + className + 
23: "´ found in \n´" + classUrl.getFile() + "´"); 
24: } else { 
25: System.out.println("\nClass ´" + className + 
26: "´ not found in \n´" + 
27: System.getProperty("java.class.path") + "´"); 
28: } 
29: } 
30: 
31: public static void main(String args[]) { 
32: if (args.length > 0) { 
33: JWhich.which(args[0]); 
34: } else { 
35: System.err.println("Usage: java JWhich "); 
36: } 
37: } 
38: } 

  首先,你必须稍微调整一下类的名字以便类装载器能够接受(12-16行)。在类的名字前面加上一个“/”表示要求类装载器对classpath中的类名字进行逐字精确匹配,而不是尝试隐含地加上调用类的包名字前缀。把所有“.”转换为“/”的目的是,按照类装载器的要求,把类名字格式化成一个合法的 URL资源名。 

  接下来,程序向类装载器查询资源,这个资源的名字必须和经过适当格式化的类名字匹配(18-19行)。每一个 Class对象维护着一个对装载它的ClassLoader对象的引用,所以这里是向装载JWhich类的类装载器查询。 Class.getResource()方法实际上委托装入该类的类装载器,返回一个用于读取类文件资源的URL;或者,当指定的类名字不能在当前的 classpath中找到时,Class.getResource()方法返回null。 


最后,如果当前的classpath 中能够找到指定的类,则程序显示包含该类的类文件所在位置的绝对路径名(21-24行)。作为一种调试辅助手段,如果当前classpath中不能找到指定的类,则程序获取java.class.path系统属性并显示当前的classpath(24-28行)。 

  很容易想象,在使用 Servlet引擎classpath的Java Servlet中,或者在使用EJB服务器classpath的EJB组件中,上面这段简单的代码是如何运作。例如,如果JWhich类是由Servlet引擎的定制类装载器装入,那么程序将用Servlet引擎的类装载器去寻找指定的类。如果 Servlet引擎的类装载器不能找到类文件,它将委托它的父类装载器。一般地,当JWhich被某个类装载器装入时,它能够找出当前类装载器以及所有其父类装载器所装入的所有类。 

  【结束语】如果需要是所有发明之母,那么帮助我们管理Java类路径的工具可以说迟到了很长时间。 Java新闻组和邮件列表中充塞着许多有关classpath的问题,现在JWhich为我们提供了一个简单却强大的工具,帮助我们在任何环境中彻底玩转 Java类路径。
启动tomcat服务器,为何要配置CATALINA_HOME和JAVA_HOME ? https://blog.csdn.net/weixin_38322156/article/details/72852607 ... 阅读详情

相关推荐

在Ubuntu 18下安装SIMULIA Abaqus 2020

参考资料: https://github.com/imirzov/Install-Abaqus-2019-on-Ubuntu-18.04-LTS 安装环境: Ubuntu 18.4 LTS 软件版本: SIMULIA for Linux 2020 1 准备 安装光盘及破解文件 解压光盘至一目录,不能挂载,因为要修改文件内容 /home/sunwk/Downloads/abaqus2020 更改文件权限为最大 sudo chmod -R 777 abaqus2020/ * 复制libpng12

oak619的博客 1万+

Tomcat中配置JAVA_HOME的简单方法

Tomcat中配置JAVA_HOME首先我们安装好java和apache-tomcat, 我这里用的是 进入bin目录,打开 找到 rem Make sure prerequisite environment variables are set 下面添加 SET JAVA_HOME= 你的JDK位置 我的就是 修改完 启动 浏览器输入 localhost:8080 配置成功...

m0_67401761的博客 4345

八股文(Unity篇)

在Unity中,协程是通过迭代器实现的,即将协程函数的返回值类型定义为IEnumerator,然后使用yield语句暂停协程的执行,并在需要恢复执行时通过MoveNext()方法继续执行。Unity中的协程是一种能够在主函数中暂停和恢复执行的功能,它使用了C#的迭代器。Resources方式:Resources方式:使用Resources.Load方法加载Resources文件夹下的资源,这种方式的好处是简单易用,无需手动打包资源,但是会导致应用包变得较大,加载速度较慢,不适合较大的资源文件。

m0_50816320的博客 1万+

tomcat java home配置_Tomcat 本地环境运行及Java_home设置

一、JAVA_HOME配置首先需要到官网上下载JDK这款软件,本人下载的是jdk-6u26-windows-i586版本,安装完成显示jdk1.6.0_26。其次选择安装路径。本人的安装路径是C:\Program Files\Java\jdk1.6.0_26。安装完成后需要设置环境变量从而使编译器正常使用。右击“计算机”à选择“属性”à选择左边“高级系统设置”à选择上面“高级”选项卡à点击右下角“...

weixin_36140683的博客 4914

银河飞腾FT-M6678 DSP开发初体验:从仿真器连接到第一个网络程序(CCS5.5+FT-EMU560实战)

本文详细介绍了银河飞腾FT-M6678 DSP开发环境的搭建过程,包括CCS5.5开发环境的配置、FT-EMU560仿真器的连接与设置,以及关键模块如网络驱动的国产化替换。通过实战案例,帮助开发者快速掌握国产DSP的开发流程,实现网络通信功能。

weixin_30919429的博客 554

手把手教你用ADS优化肖特基二极管检波电路(附RC参数避坑指南)

本文详细介绍了如何使用ADS软件优化肖特基二极管检波电路,包括RC参数设置、常见失真问题分析与解决方案。通过实战案例和参数优化技巧,帮助射频工程师避免设计陷阱,提升电路性能。特别附有RC参数避坑指南,适用于调幅解调、功率检测等应用场景。

m2n3o4p5的博客 198

tomcat启动配置java_home,启动网址等,点击startup.bat直接启动

tomcat启动配置java_home,启动网址等,点击startup.bat直接启动,以及跨域等相关问题

shendygis的专栏 4824

Logstash安装部署

1. 部署及安装所用的用户不能是root。

lmj3732018的博客 4294

Tomcat配置环境变量

Tomcat是目前比较流行的开源且免费的Web应用服务器,在我的电脑上第一次安装Tomcat,再经过网上教程和自己的摸索后,将这个过程 重新记录下来,以便以后如果忘记了可以随时查看。 注意:首先要明确一点,Tomcat与Java密切相关,因此安装使用之前要先安装JDK并设置JDK的环境变量,由于机子上已经安装好了JDK,也设置好了JDK环境变量,因此这里不再过多叙述,只说明我设置好的环境变量: JAVA_HOME :F:JDK_Kit CLASSPATH:.;%JAVA_HOME%libdt.jar;%JA

m0_54866636的博客 1445

SAP-ABAP:ABAP 开发基础概念入门:写给刚踏入 SAP 开发世界的新人

本文介绍了 ABAP 开发语言的基础概念,帮助 SAP 开发新人快速入门。主要内容包括: ABAP 的发展历程与核心优势 - 作为 SAP 平台的专属语言,ABAP 在企业级应用开发中具有深度集成、数据处理高效和长期稳定的特点 ABAP 开发环境概览 - 介绍了 SE38、SE80 等关键事务码,以及 ABAP 工作台的核心组件和开发权限管理 基础语法入门 - 重点讲解了 ABAP 特有的数据类型体系(特别是结构体和内表),并通过 Hello World 示例展示程序基本结构 文章通过对比 ABAP 与 J

baidu_35680696的博客 511

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

随着人工智能技术在农业领域的深入应用,基于深度学习的害虫检测系统已成为智慧农业的重要组成部分。本文详细介绍了一种基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统,涵盖算法原理、数据集构建、模型训练、系统实现及完整代码。该系统能够实时检测并识别多种农作物害虫,为农业生产提供精准的病虫害监测解决方案。

YOLO 273

tomcat配置JAVA_HOME和JRE_HOME

tomcat环境变量 rem ---------------------------------------------------------------------------  rem Set CLASSPATH and Java options  rem  rem $Id: setclasspath.bat 730396 2008-12-31 13:49:30Z markt $ 

catandjava的专栏 8547

android studio 2022打开了v1 签名但是生成的apk没有v1签名问题

我使用了Android Studio Flamingo | 2022.2.1 Patch 2版本的IDE编译了一个apk,但是apksigner查看apk的签名信息时,发现只有v2签名,没有v1签名。试着改小一下minSdkVersion 为23重新编译apk,再检测一下签名版本v1居然打开了!参考网上搜索到的方法,手动在build.gradle里面添加。但是编译出来的apk还是只有v2的签名。里面提到了v1签名还和。

hedalei的博客 466

tomcat修改java hone,Tomcat 里修改JAVA_HOME和JRE_HOME

先看Tomcat的startup.bat,它调用了catalina.bat,而catalina.bat则调用了setclasspath.bat。只要在setclasspath.bat的开头声明环境变量,打开tomcat的bin目录下面的setclasspath.sh,添加红色部分,路径自己修改#!/bin/sh# ------------------------------------------...

weixin_35704532的博客 793

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

安装Tomcat时 ,设置JAVA_HOME和JRE_HOME

http://blog.csdn.net/xw370457549/article/details/21638827安装tomcat后,运行startup.bat提示JAVA_HOME、JRE_HOME未配置,无法启动进行如下设置:例如JDK的安装路径为C:\Program Files\Java\jdk1.5.0在系统的环境变量里增加一个系统变量JAVA_HOME,值为C:\Program File...

. 4万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IDEA配置tomcat完成后提示缺少JAVA_HOME 和 JRE_HOME

IDEA配置好tomcat后,无法启动tomcat,提示以下: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program Disconnected from serve

Kevin2_J的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Tomcat 指定JAVA_HOME和CATALINA_HOME

项目需要: 启动Tomcat时, 指定JAVA_HOME 和 CATALINA_HOME(使用相对目录) 参考了网上的很多办法没有解决(真的怀疑参考这些方法的人解决问题了吗?) 不过大体思路有了, 就是再启动文件中设置好这两个变量; 如下:在tomcat\bin\startup.bat 文件中 rem 在这一行下 setlocal rem 设置这三行 set JAVA_HOME=..\...

brickcarrierhiahia的博客 930

Tomcat 里修改JAVA_HOME和JRE_HOME

先看Tomcat的startup.bat,它调用了catalina.bat,而catalina.bat则调用了setclasspath.bat。只要在setclasspath.bat的开头声明环境变量,打开tomcat的bin目录下面的setclasspath.sh,添加红色部分,路径自己修改  #!/bin/sh  # ----------------------------------

IamJavaStar的专栏 4万+

修改java的jre_Tomcat 里修改JAVA_HOME和JRE_HOME | 學步園

先看Tomcat的startup.bat,它調用了catalina.bat,而catalina.bat則調用了setclasspath.bat。只要在setclasspath.bat的開頭聲明環境變數,打開tomcat的bin目錄下面的setclasspath.sh,添加紅色部分,路徑自己修改#!/bin/sh# ------------------------------------------...

weixin_39639643的博客 368

tomcat java home配置_Tomcat 启动找不到配置好的 $JAVA_HOME和$JRE_HOME 变量?

$ sudo ./bin/catalina.sh runNeither the JAVA_HOME nor the JRE_HOME environment variable is definedAt least one of these environment variable is needed to run this program/etc/profile 中配置好了所有的环境变量, 为什么...

weixin_42164685的博客 310

启动tomcat服务器,配置CATALINA_HOME和JAVA_HOME

遇到很多次运行startup.bat后,一个窗口一闪而过的问题,但是从来没去纠正怎样修改配置才是正确的,现在从网上查阅的资料整理如下:tomcat在启动时,会读取环境变量的信息,需要一个CATALINA_HOME 与JAVA_HOME的信息,CATALINA_HOME即tomcat的主目录,JAVA_HOME即java安装的主目录,jdk的主目录。首先,要在环境变量处,配置JAVA_HOME,注意...

weixin_33973609的博客 727

java home bin java home jre bin_Tomcat 启动找不到配置好的 $JAVA_HOME和$JRE_HOME 变量?

$ sudo ./bin/catalina.sh runNeither the JAVA_HOME nor the JRE_HOME environment variable is definedAt least one of these environment variable is needed to run this program/etc/profile 中配置好了所有的环境变量, 为什么...

weixin_39710295的博客 122
上一篇: MyEclipse7.1中安装Flex3插件
下一篇: IE兼容模式切换
lemon_may
博客等级 码龄19年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值