获取上下文路径而不依赖于spring中的servlet

时间:2016-06-09 07:07:47

标签: spring url web

我使用下面的代码获取上下文路径。

String  contextpath = request.getSession().getServletContext().getRealPath("sample.html");

但是由于我的代码是在业务方面,我在这里只使用方法传递file name,根据文件名我需要获取服务器中该war文件夹的路径我怎么能得到它?

我正在使用spring web应用程序。

2 个答案:

答案 0 :(得分:0)

对于Spring应用程序,您可以使用应用程序上下文感知bean。由于应用程序是Web应用程序,ApplicationContext将是WebApplicationContext,因此您可以向它请求ServletContext:

public class ContextPathHolder
        implements ApplicationContextAware, InitializingBean {

    private WebApplicationContext wac;
    private String contextPath;
    private String realPath;

    public void setApplicationContext(ApplicationContext ac) {
        wac = (WebApplicationContext) ac;
    }

    public void     afterPropertiesSet() {
        ServletContext sc = wac.getServletContext();
        contextPath = sc.getContextPath();
        realPath = sc.getRealPath();
    }

    public String getContextPath() {
        return contextPath;
    }

    public String getRealPath() {
        return realPath;
    }
}

这样,你就可以在一个需要servlet上下文路径的任何其他bean中注入一个简单的bean。

假设xml配置的用法示例:

需要访问真实上下文路径的服务类:

class ConfigurableServiceImpl implements ConfigurableService {

    private ContextPathHolder pathHolder;
    public setPathHolder(ContextPathHolder pathHolder) {
        this.pathHolder = pathHolder;
    }

    @Override
    public MyServiceObject myServiceMethod(...) {
        String realContextPath = pathHolder.getRealPath(); // get the real path...
    ...
}

Spring XML根上下文

<bean id="contextWebApplicationContextProvider" class="...ResourcePathHolder"/>
<bean id="configurableService" class="...ConfigurableServiceImpl"
        p:pathHolder="contextWebApplicationContextProvider">
    ...
</bean>

答案 1 :(得分:-1)

我们需要服务/ dao /资源层中的真实路径来执行许多操作。最好在初始化Web应用程序时提取该路径,并将其存储在系统的所有层都可以访问它的位置。

这样做的方法是通过ServletListener接口。以下是准确显示如何操作的链接。

Getting The Context Path (Without a HttpRequest)