我使用下面的代码获取上下文路径。
String contextpath = request.getSession().getServletContext().getRealPath("sample.html");
但是由于我的代码是在业务方面,我在这里只使用方法传递file name
,根据文件名我需要获取服务器中该war文件夹的路径我怎么能得到它?
我正在使用spring web应用程序。
答案 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接口。以下是准确显示如何操作的链接。