Spring5:就这一次,搞定资源加载器之ServletContextResourceLoader

本文介绍了ServletContextResourceLoader类的使用方法及注意事项。此类继承自DefaultResourceLoader,并重写了getResourceByPath方法,可以从Servlet上下文的根目录加载资源。文章通过示例展示了如何加载位于WEB-INF目录下的资源文件,并讨论了资源路径的正确指定方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ServletContextResourceLoader继承自DefaultReourceLoader,并重写了getResourceByPath(String path)方法,该类的扩展功能是可以从Servlet上下文的根目录加载资源。

构造该加载器的时候需要ServletContext,示例如下:

@Controller
public class LoginController  {
				
	@RequestMapping(value="/index.html")
	public String loginPage(HttpServletRequest request) throws IOException {
		
		ResourceLoader resourceLoader=new ServletContextResourceLoader (request.getSession().getServletContext());
		Resource resource=resourceLoader.getResource("/WEB-INF/test.xml");
		System.out.println(resource.getInputStream()); 
		return "index"; 
	}	  
}

这段示例程序的意思是在/WEB-INF下存在test.xml文件,咱们用ServletContextResourceLoader加载它,

启动服务器,访问index.html,观察输出:

[INFO] Restart completed at Fri Jul 06 11:44:19 CST 2018
sun.nio.ch.ChannelInputStream@6a3bc065

成功。

接下来,咱们皮一下,传个相对路径进去,像这样:

Resource resource=resourceLoader.getResource("WEB-INF/test.xml");

观察输出:

[INFO] Restart completed at Fri Jul 06 11:46:51 CST 2018
sun.nio.ch.ChannelInputStream@67203436

也是可以的,因为ServletContextResourceLoader是从上下文的根路径加载资源,上下文的根路径是webapp(在开发工具中比如eclipse中,指的就是webapp,当打成war包以后就是你项目打包的名字了...),拼上WEB-INF/test.xml,没毛病,没毛病。

但是使用该加载器要注意一个问题,就是maven工程打包以后src/main/resources下的资源文件会被打到WEB-INF/classes下,所以WEB-INF/test.xml这种写法spring是加载不到的,因此路径要这么写才可以:

Resource resource=resourceLoader.getResource("WEB-INF/classes/test.xml");
但是这不就是classpath?为何不用 classpath:test.xml呢,简单方便!以上纯属个人理解,如有错误,还望指正,谢谢!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值