我对Spring没有经验,现在我需要做的所有事情都是访问并获取对webapp文件夹中文件和文件夹的引用。这里是我的相关项目层次:在Spring中访问webapp文件夹中的文件/目录
-src
--main
---java (marked as source root)
----my
-----package
------controller
-------Home.java
---webapp
----images
-----avatars
我在Home.java代码:
@Controller
@RequestMapping("/")
public class Home
{
@RequestMapping(method = RequestMethod.GET)
public String index(Model model,
HttpServletRequest request) throws Exception
{
String test1 = request.getSession().getServletContext().getRealPath("");
String test2 = request.getSession().getServletContext().getRealPath("/");
String test3 = request.getRealPath("");
String test4 = request.getRealPath("/");
String test5 = request.getSession().getServletContext().getRealPath(request.getServletPath());
return "index";
}
}
所有5个请求返回null。难道我做错了什么?
的web.xml:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Test</display-name>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
</web-app>
我试图实现(在本例中未显示),用于编码负责图像的缩放控制器。为此,我需要访问src/main/webapp/_images文件夹。
谢谢!
更新:为了更好地理解,简化了示例。
Update2:感谢@gigadot的建议,我将应用程序部署为爆炸WAR,问题部分解决。有人能告诉我在部署WAR时爆炸的区别是什么?是否建议在生产服务器上执行某些操作?优点缺点?
我认为值得用一个例子来解释这种情况。假设我正在编写一个社交网络,我必须有可能上传我的个人资料图片。这张照片将被上传到src/main/webapp/_images/avatars/[myid].jpg
文件夹。 是否建议将图片上传到webapp
文件夹?还是有更好的解决方案? 我希望能够在访问URL /images/[width]x[height]/[userid].jpg
时返回缩放的图像实例。
部署WAR的爆炸和实施ResourceLoaderAware
(感谢@KevinSchmidt),我可以让它工作中使用此:
resourceLoader.getResource("file:" + request.getSession().getServletContext().getRealPath("/") + "_images/avatars/");
对我来说,它看起来很肮脏,是它在生产服务器是个好主意?有更好的解决方案吗?
我在乎目录是否存在 – satoshi 2012-02-07 10:08:49
任何人......?谢谢 – satoshi 2012-02-09 10:39:02
你想如何处理这些文件,只需将它们返回给客户端,或处理其内容? – Ralph 2012-02-20 07:52:32