如果是同一个jvm,那最好办了,在你的servlet启动的时候,往System.setProperty,然后普通程序System.getProperty读出project_home如果不是同一个jvm,但是是同一个机器,Servlet System.getProperty("user.home"),往里面写以一个文件,记录project_home,然后application读,其实第二种情况下,最不用动脑筋或者普遍的方法,就是你执行这个main application一定会写一个批处理或者快捷方式的,在里面设置一下project_home,然后作为一个-Dxxx=yyyy或者args[x]参数传进去。反正你用到tomcat,肯定不会是给普通用户玩的,所以,顶多需要给你的用户的readme文档里面,提一下,如果需要改变tomcat或者webapp的发布目录,需要更改这个批处理里面的 SET PROJECT_HOME=".../.../..."
这个不行,不能得到web工程的正确路径
String fullPath = file.getAbsolutePath();再用fullPath去掉当前类的包名结构的路径,以及基础路径.如Web工程中,fullPath应该是这样的:
F:\aDir\bDir\projects\CurrentProject\WEB-INF\classes\com\yaray\tools\Tools.class
==>CurrentProject是工程根目录
需要做的就是切去\WEB-INF\classes\com\yaray\tools,楼主自己想办法吧:)
fullpath得到的是我的eclipse路径:E:\eclipse\.
String name = clazz.getName().replace('.', '/');
URL url = Thread.currentThread().getContextClassLoader().getResource(name);这个时候会得到"file:/D:/java/test/Test.class"这样的url,你只要去掉file:/即可
class Test {
static class Inner {}
}Class clazz = Test.Inner.class; 由于其类名不能直接replace('.', '/'),可能需要另外想办法
file:/D:/tomcat/webapps/0903/WEB-INF/classes/不过有没有更简单直接一点的,
在一般的工程下"."就表示当前路径了
eclipse下,projectname/src,
projectname/classes,
不管package有几层,当前路径就是projectname了但是在web工程下这个当前路径怎么找呢?
tomcat/webapps/projectname/WEB-INF/classes/somepackage/SomeClass.class
如何能直接定位到
tomcat/webapps/projectname路径下,使用该路径下的一个配置文件
有一个页面要用到some.jsp的,而有一个普通类需要处理这张图片,难道只能拷贝一份到classes下面?
这样好像有点罗索啊,假如有很多需要处理的话,不是需要把projectname下面很多东西都拷贝一份过去?
平时普通的application,就是把这个war作为一个classpath,运行
SET PROJECT_HOME=".../.../..."