在java web项目中,如何获取项目的绝对路径(考虑到后期移植不能写死),大神帮忙!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java web项目中,如何获取项目的绝对路径(考虑到后期移植不能写死),大神帮忙!相关的知识,希望对你有一定的参考价值。

参考技术A 传递一个参数进去不就有了,没办法传递那就 ThreadLocal.set 然后在另一个地方 ThreadLocal.get 再拿回来就是了。
pubblic class A
private static final ThreadLocal instances = new ThreadLocal();
public static void put (Object target) instances.set(target);
public static Object get() return instances.get();

在请求之后调用 A.put(ServletContext); 在你的普通 java 类中调用 A.get();

ThreadLocal 像它的名字一样,它能保证这个 set 和 get 能对线程进行隔离,get 到的肯定是这个线程在之前 set 进去的东西,不会拿到其它线程的东西,因为 servlet 一个请求由一个线程服务的,我们需要保证请求完成后清理掉现场 set(null) 就可以了。

public void doGet(request, response)
try
A.set(request.getServletContext());
// ... 其它正常的操作。
finally

A.set(null);



你的普通类 A.get() 得到刚才那个 ServletContext。这个 try / finally 配对是必须的,因为 HTTP 服务器都是使用线程池的,也就是说一个 http request 完成之后这个线程并不会终止而是被另一个请求使用,为了不影响其它的请求,我们需要清理现场。
参考技术B HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
String path = req.getContextPath();追问

这是一个普通的java类,没有pageContext对象,怎么办,多指点一下

参考技术C 通过实现ServletContextListener就可以拿到:
public class wwww implements ServletContextListener
@Override
public void contextDestroyed(ServletContextEvent sce)
// TODO Auto-generated method stub



@Override
public void contextInitialized(ServletContextEvent sce)
String path = sce.getServletContext().getRealPath("/");



//你还得到web.xml里面配置一下,具体百度本回答被提问者和网友采纳

以上是关于在java web项目中,如何获取项目的绝对路径(考虑到后期移植不能写死),大神帮忙!的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中获取当前项目的路径

java中如何判断web工程中图片的绝对路径是不是存在

如何在eclipse中获取动态项目的绝对路径

java web项目 相对路径怎么写

关于web工程中java类如何获取webapp路径下的文件

java中怎样获取当前路径的绝对路径