在jdk的api中,资源访问基本上都是通过URL类和IO来完成的,首先我们来介绍一下jdk中的资源访问
在j2se中,我们一般通过ClassLoader的getResource()方法来定位查找资源:
public static void main(String[] args) throws IOException, URISyntaxException { URL url = Thread.currentThread().getContextClassLoader().getResource("format.properties"); Properties p = new Properties(); p.load(url.openStream()); System.out.println(p.get("chengan")); System.out.println(url.getProtocol()); }
ClassLoader的getResource()方法访问资源有一个限制,资源的位置只能在classpath路径下或者classpath的子路径下,如果format.properties文件的路径不在classpath路径下,getResource()方法是找不到文件的,比如我们再开发web项目的时候,jdbc.properties一般都会放到WEB-INF下新建一个文件保存,此时在使用ClassLoader获取,就获取不到,下面我们就需要使用servletContext提供的方法,getResource()方法参数可以使用"/"作为路径,比如format.properties位于classpath路径下的test包下(getResource()方法参数的起始路径为classpath):
URL url = Thread.currentThread().getContextClassLoader().getResource("test/format.properties");
在j2ee中,可以使用ServletContext提供的方法getResource()来访问资源:
response.setContentType("text/html"); URL url = request.getSession().getServletContext().getResource("/WEB-INF/config/jdbc.properties"); response.getWriter().print(url);
jdbc.properties文件放在WEB-INF的config文件下,servletContext的getResource方法以WebRoot为起始路径,上面代码运行的结果为:
jndi:/localhost/SpringDemo/WEB-INF/config/jdbc.properties
spring的资源访问提供了统一的接口:Resource
spring在设计上使用了策略模式,针对不同的资源访问,提供了不同的实现类,常用的实现类有:
UrlResource:对java.net.URL访问的封装
ServletContextResource:对servletContext访问资源的封装
FileSystemResource:访问文件系统资源的封装
InputStreamResource:流操作资源访问
ContextResource:该接口是对访问容器资源的接口,提供一系列实现该接口的类
在spring中,访问资源的入口在applicationContext中,applicationContext继承了ResourcePatternResolver接口
public interface ResourcePatternResolver extends ResourceLoader { String CLASSPATH_ALL_URL_PREFIX = "classpath*:"; Resource[] getResources(String locationPattern) throws IOException; }
ResourcePatternResolver又继承了ResourceLoader接口:
public interface ResourceLoader { /** Pseudo URL prefix for loading from the class path: "classpath:" */ String CLASSPATH_URL_PREFIX = ResourceUtils.CLASSPATH_URL_PREFIX; Resource getResource(String location); ClassLoader getClassLoader(); }
在访问资源时,可以指定访问资源的方式:
public Resource getResource(String location) { Assert.notNull(location, "Location must not be null"); //常量CLASSPATH_URL_PREFIX值为:classpath: if (location.startsWith(CLASSPATH_URL_PREFIX)) { return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader()); } else { try { // Try to parse the location as a URL... URL url = new URL(location); return new UrlResource(url); } catch (MalformedURLException ex) { // No URL -> resolve as resource path. return getResourceByPath(location); } } }
上面是ResourceLoader的方法getResource()的默认实现,由上述代码可知,在指定资源的位置时,如果前缀指定为“classpath:",那么会使用ClassPathResource,否则默认使用UrlResource,如果出错会使用ClassPathResource
相关推荐
### Spring资源访问详解 #### 资源访问概述 在Spring框架中,资源访问是一个非常重要的功能,它为开发者提供了一种统一的方式去访问不同类型的资源(如文件、URL等)。这一特性使得开发者能够轻松地在不同的环境中...
在"spring资源访问的一个例子"中,可能包含了一个名为`testresource`的子文件夹。这通常表示该目录存放了与资源访问相关的测试文件,可能是HTML、CSS、图片或其他静态文件。为了使这些资源在打包后能够正常运行,...
Spring的Resource接口是访问资源的抽象,它提供了一种统一的资源访问方式,可以处理不同来源的资源,包括本地文件系统、类路径、URL等。Resource对象并不直接包含资源内容,而是提供了打开输入流、获取资源路径等...
2. **访问Resource目录下的文件** 在Spring Boot中,我们可以使用`ClassPathResource`或`Resource`类来访问`src/main/resources`目录下的文件。例如,要读取一个名为`file.pdf`的PDF文件,可以这样做: ```java ...
`Resource`接口是Spring框架提供的一种抽象层,用于封装资源访问,它可以是本地文件系统中的文件,也可以是URL、类路径下的资源,甚至是JDBC数据源。通过`Resource`接口,开发者可以统一地处理不同来源的资源,提高...
在Spring框架中,资源访问是核心功能之一,它允许开发者高效、便捷地处理各种类型的资源,包括文件、网络、类路径等。本文将详细介绍Spring如何通过`Resource`接口及其实现类来简化资源的访问。 首先,传统的资源...
### Spring Boot 访问 Resource 下的文件 #### 知识点一:Spring Boot 项目结构与 Resource 文件夹 在 Spring Boot 项目中,`src/main/resources` 文件夹用于存放项目的资源文件,包括配置文件、静态资源文件(如...
标题“spring resource code”指的是与Spring框架相关的源代码资源,这通常涉及到Java应用程序开发中的核心概念。Spring是一个开源的Java平台,它为构建企业级应用提供了全面的框架支持。Spring以其依赖注入...
#### 3.3 访问Resource - **使用ResourceLoader**:可以通过ApplicationContext获取ResourceLoader,然后调用其`getResource(String location)`方法获取Resource对象。 #### 3.4 Resource通配符路径 - **通配符**:...
在Spring Boot应用中,资源文件(resources)是存放应用程序所需...正确配置应用、构建工具以及代码中的资源访问路径,通常能有效地解决这类问题。在实际开发中,确保进行充分的测试和调试,以确保所有功能的正常运行。
Resource接口是Spring提供的,用于抽象资源的访问,它可以是文件、URL、类路径下的资源等。通过Resource的实现类,如FileSystemResource或ClassPathResource,我们可以轻松地获取到文件的InputStream。 例如,对于...
通过`@Secured`、`@PreAuthorize`等注解,可以控制对特定资源的访问。此外,Spring Security还支持OAuth2、JWT等现代安全协议。 6. **异常处理**:Spring MVC提供了统一的异常处理机制,我们可以通过定义`@...
在Spring框架中,`ServletContextResource` 是一个非常实用的类,它允许我们通过Servlet上下文(`ServletContext`)来访问Web应用中的资源文件。在实际的Web开发中,我们需要经常处理如XML配置文件、静态资源等文件...
总之,Spring Security OAuth2 的 resource_id 配置和验证机制是系统安全性和资源访问控制的关键部分。通过正确配置和验证 resource_id,可以确保客户端只能访问被明确授权的资源,从而提高系统的整体安全性。
在Spring框架中,`ClassPathResource`是一个非常重要的类,用于加载类路径(classpath)下的资源文件,如XML配置文件。在实际开发中,我们经常需要从类路径中读取这些资源来初始化bean或其他配置。本示例将详细介绍...
综上所述,Spring资源文件的使用涉及到了Spring框架的多个核心概念,包括配置管理、资源加载、国际化、环境适应性等方面。理解并熟练掌握这些知识点对于有效地利用Spring进行企业级应用开发至关重要。在实际开发中,...
要解决跨域问题,Spring提供了CORS(Cross-Origin Resource Sharing)支持。默认情况下,浏览器阻止跨域请求,但我们可以配置Spring MVC来允许特定来源的请求。这通常通过`@CrossOrigin`注解实现,可以应用于...
同时,Sparklr2和Tonr2示例能帮助我们直观地看到OAuth流程的每个步骤,包括授权、令牌交换和资源访问。 在实际开发中,你可以根据这些源码学习如何自定义OAuth流程,例如实现自己的授权策略、令牌存储方式,或者...
在Spring中,我们可以使用Resource作为Bean的属性,从而实现对资源的访问和操作。 Resource的概念 在Spring中,Resource是对资源的抽象表示,可以是一个文件、一个URL或是一个输入流等。Resource接口提供了几个...
OAuth2是一个授权框架,允许第三方应用在用户许可的情况下访问其受保护的资源,而OpenID Connect则是在OAuth2之上添加身份验证层。下面将详细探讨Spring Security OAuth2的核心概念、工作流程以及关键组件。 1. **...