站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题十万火急,请高手帮忙,在线等!在搞不出来,老板就要炒我尤鱼了!

十万火急,请高手帮忙,在线等!在搞不出来,老板就要炒我尤鱼了!

摘要: 十万火急,请高手帮忙,在线等!在搞不出来,老板就要炒我尤鱼了!


为什么我取Tomcat的环境变量取不出来呢!我用的jdk1.5,在搞不出来,老板就要炒我尤鱼了!
有两种取CATALINA_HOME的方法,我都试了,
第一种方法测试的代码如下:
package demo;
public class CSDN6 {
public static void main(String[] args)
{
System.out.println(System.getenv("CATALINA_HOME"));
}
}
程序输出结果为null,程序输出结果为什么是null??我的CATALINA_HOME设置如下C:/Program Files/Apache Software Foundation/Tomcat 5.0

第二种方法的测试代码如下:
package demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CSDN6 {
public static void main(String[] args)
{
Runtime rt = Runtime.getRuntime();
try {

Process p= rt.exec("cmd /c echo /"%CATALINA_HOME%/"");
BufferedReader in= new BufferedReader(new InputStreamReader(p.getInputStream()));
String path = in.readLine();
System.out.print(path);

} catch (IOException e) {
e.printStackTrace();
}
}
}
程序输出结果是"%CATALINA_HOME%"!怎么会这样啊!怎样才能取出来啊:C:/Program Files/Apache Software Foundation/Tomcat 5.0
这个问题我已经搞了很久了,在搞不出来,老板就要炒我了!高手帮帮我!感激啊!



你读这个参数做什么用呢?


Runtime rt = Runtime.getRuntime();
try {
Process p = rt.exec("cmd /c echo %JAVA_HOME%");
BufferedReader in = new BufferedReader(new InputStreamReader(p.
getInputStream()));
String path = in.readLine();
System.out.print(path);
}
catch (IOException ex) {
ex.printStackTrace();
}


to tongor(秦唐人):
项目需要啊!我要在这个目录下拷东西啊!比如我在C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/hello/Data目录下执行一些操作,比如拷贝,删除,更新等,这全部是项目的需要!



经过测试OK


System.out.println(System.getenv("CATALINA_HOME"));
最初的Java语言有一个访问环境变量的方法System.getenv(),但因为Java宣称的”Write Once,Run AnyWhere”特性,所以在JDK1.0中去掉了这个能够访问平台专有信息的方法。在J2SE5.0中,它又来了,并有所扩充。


搂住的第二种方法本来就没什么问题,我觉得是你设置环境变量时写错了


我这第一种好用,不知道你的是什么系统,我这xp,设置的是“TOMCAT_HOME”。


to lip009(深蓝忧郁):
大哥,我要的是CATALINA_HOME,你非要给我取JAVA_HOME!我是CATALINA_HOME取不出啊!你把JAVA_HOME变成CATALINA_HOME,就取不出来了!你自己试试好吗?


to buyaowen(外包需要掌握三点):
我设的是CATALINA_HOME,CATALINA_HOME和TOMCAT_HOME这两个环境变量是一回事吗?
to lip009(深蓝忧郁):
我查过jdk1.5的 ,System.out.println(System.getenv("CATALINA_HOME"));应该是可行的,可是我就是出不来啊!


环境变量你肯定设置错误,方法没什么问题


to ykzhujiang(朱朱):
我环境变量设置如下:
变量名:CATALINA_HOME
变量值:C:/Program Files/Apache Software Foundation/Tomcat 5.0;
你觉得这个有错吗??我实在是不知道哪里错了!
我第一种方法取出来就是null!


to ykzhujiang(朱朱):
我的第二种方法取出来是%CATALINA_HOME%,我用的xp,IDE用的是Eclipse3.2.0,会不会和我eclipse有关啊!郁闷呢!


Process p= rt.exec("cmd /c set CATALINA_HOME");

这样应该可以的吧


1.5 似乎 还有一个新类ProcessBuilder可以用


jimmyshao(杰米) ( ) :
不行啊!测试结果是null,代码给你帖出来!
package demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CSDN6 {
public static void main(String[] args)
{


Runtime rt = Runtime.getRuntime();
try {
Process p= rt.exec("cmd /c set CATALINA_HOME");

// Process p = rt.exec("cmd /c echo %CATALINA_HOME%");
BufferedReader in = new BufferedReader(new InputStreamReader(p.
getInputStream()));
String path = in.readLine();
System.out.print(path);
}
catch (IOException ex) {
ex.printStackTrace();
}

}
}

输出结果是null,是不是我Tomcat有问题?可是我Tomcat可以打开啊,我端口号是8083
我http://localhost:8083/可以打开Tomcat的!






我帮你测试了一下,重启下机器就可以找到%CATALINA_HOME%变量了.因为环境变量设定后,系统不能即时加载的


是IDE的问题,你在DOS下用java A来执行,就可以正确获得值
import java.util.Enumeration;
import java.util.Properties;
import java.io.*;
public class A
{
public static void main(String args[]){
Runtime rt = Runtime.getRuntime();
try {
Process p = rt.exec("cmd /c echo %CATALINA_HOME%");
BufferedReader in = new BufferedReader(new InputStreamReader(p.
getInputStream()));
String path = in.readLine();
System.out.println(path);
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}


to tongor(秦唐人):
项目需要啊!我要在这个目录下拷东西啊!比如我在C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/hello/Data目录下执行一些操作,比如拷贝,删除,更新等,这全部是项目的需要!
--------------------------

干吗取这个!!!!
万一我的tomcat是C:/Program Files/Apache Software Foundation/Tomcat 5.0,但是部署的确实D:/hello怎么办???!!!

你的目的是读写某个文件,使之能够被用户通过http://..../hello/abc/123/xyz.dat访问,对吧?

request.getRealPath("/abc/123/xyz.dat")就会得到这个服务器路径对应的本地真实路径了




程序是没问题,都可以正常执行的
有可能是楼上两位说的原因


第二,如果你需要通过系统环境得到某个目录,则应当是(如上所述,不应该是tomcat目录,而是web应用的目录)

System.getProperty("HELLO_WEB_APP");


java "-DHELLO_WEB_APP=C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/hello" demo.CSDN6

eclipse里面在运行的设置arguments里面添加

tomcat 在catalina.bat里面添加或者修改

set JAVA_OPTION=%JAVA_OPTION%;"-DHELLO_WEB_APP=C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/hello"


要不 试试 Process p= rt.exec("cmd /c set");
看看 环境变量里 有没有你要的那个



补充一点,要想取%CATALINA_HOME%变量,首先应当在环境变量里设定它,因为Tomcat在调用%CATALINA_HOME%时在批处理文件里进行了预设定,所以能正确找到,祝好运!


不知道LZ是不是没设置系统环境变量 catalina_home 呀

我的没问题


学习...


奇怪,我用楼主的第一个方法试了一下,一点问题都没有啊,可以正常得到信息!


刚我重启下电脑就好了!因为环境变量设定后,系统不能即时加载的!我原来在jdk1.4.2下改CATALINA_HOME后不需要重启,现在用jdk1.5了,反而要重启电脑了!



to shine333(enihs):
1.request.getRealPath("/abc/123/xyz.dat");这种方法只能用在jsp页面吧,我做的是GUI啊,用swing写的程序!request.getRealPath("/abc/123/xyz.dat");能用在swing中吗?
2.关于项目的部署问题:
hello是一个web工程,我暂时让用户部署在Tomcat的webapps下,但是这样不灵活,如果能让用户随便把hello拷到任何他想要的位置就好了!
System.getProperty("HELLO_WEB_APP");这句话应该可以在swing中用的吧!
然后在eclipse里面在运行的设置arguments里面添加:
java "-DHELLO_WEB_APP=C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/hello" demo.CSDN6就可以了吗?

catalina.bat文件要我自己写的吗?




呵呵.楼主这次不会被炒尤鱼了,不行你炒了老板的尤鱼吧


你swing的话,catalina.bat当然不必了
arguments添加"-DHELLO_WEB_APP=C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/hello"


项目部署在tomcat下?
要得到项目所在的目录?




验证::::
在命令行下,是可以的,可能是IDE的问题


C:/Program Files/Apache Software Foundation/Tomcat 5.0
这样写,因为有空格,所以jAVA不认,JAVA是跨平台的,而unix下无法使用空格在目录里
你可以设置
CATALINA_HOME=C:/Progra~1/Apache~1/Tomcat~1来试试,我遇到过类似情况,就是这样解决的


学习了!!!


yxhzj(余华[学习J2EE中]) :
项目部署在哪里应该由用户选择的,假如我的web项目的名字叫hello,怎样设置才可以让用户不管把项目部署在哪里都可以用Tomcat打开呢?比如项目部署在d:/hello,或e:/hello,或任何用户想部署的地方!我现在不知道怎么做设置,所以暂时让项目部署在Tomcat的Webapps下了!


由于本人开发经验不足,难免会遇到一些问题,大家想想这个hello项目的部署问题该怎样解决呢?我是没有办法才让用户部署在Tomcat的Webapps下,这样http://localhost:8083/hello就可以访问这个项目了,我那个swing模块是对hello工程做一些操作!通过http://localhost:8083/hello就可以得到操作的结果了!不知道大家明白我的思路了吗?


路过,顶起


up


我在系统XP的系统变量设置好CATALINA_HOME,运行下面的程序,结果为NULL,在系统的命令行下输入 CMD /C ECHO %CATALINA_HOME% 结果空白行,换了其他的系统变量都可以显示,把机器重新启动后,再次运行问题解决了.可能是系统变量更新方面的问题!


package demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class CSDN6 {
public static void main(String[] args)
{
Runtime rt = Runtime.getRuntime();
try {

Process p= rt.exec("cmd /c echo %CATALINA_HOME% ");
BufferedReader in= new BufferedReader(new InputStreamReader(p.getInputStream()));
String path = in.readLine();
System.out.print(path);

} catch (IOException e) {
e.printStackTrace();
}
}
}
可以


楼主啥都别说了!重启电脑就好了!我的和你的一样!


太高深了,学习ing


楼主你的第二种方法本来是对的,但就是多加了个引号。

Process p= rt.exec("cmd /c echo /"%CATALINA_HOME%/"");
应该是
Process p= rt.exec("cmd /c echo %CATALINA_HOME%");


good quest , mark


System.getProperty("catalina.home")


楼主怎么不给分呀,光说不练嘴把式


↑返回目录
前一篇: 学习开发java需要准备那些东西?
后一篇: JAVA高手请进