`

spring常用工具

阅读更多


文件资源操作
Spring 定义了一个 org.springframework.core.io.Resource 接口,Resource 接口是为了统一各种类型不同的资源而定义的,Spring 提供了若干 Resource 接口的实现类,这些实现类可以轻松地加载不同类型的底层资源,并提供了获取文件名、URL 地址以及资源内容的操作方法

访问文件资源
* 通过 FileSystemResource 以文件系统绝对路径的方式进行访问;
* 通过 ClassPathResource 以类路径的方式进行访问;
* 通过 ServletContextResource 以相对于 Web 应用根目录的方式进行访问。

package com.baobaotao.io;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
public class FileSourceExample {
public static void main(String[] args) {
try {
String filePath =
"D:/masterSpring/chapter23/webapp/WEB-INF/classes/conf/file1.txt";
// ① 使用系统文件路径方式加载文件
Resource res1 = new FileSystemResource(filePath);
// ② 使用类路径方式加载文件
Resource res2 = new ClassPathResource("conf/file1.txt");
InputStream ins1 = res1.getInputStream();
InputStream ins2 = res2.getInputStream();
System.out.println("res1:"+res1.getFilename());
System.out.println("res2:"+res2.getFilename());
} catch (IOException e) {
e.printStackTrace();
}
}
}
在获取资源后,您就可以通过 Resource 接口定义的多个方法访问文件的数据和其它的信息
getFileName() 获取文件名,
getFile() 获取资源对应的 File 对象,
getInputStream() 直接获取文件的输入流。
createRelative(String relativePath) 在资源相对地址上创建新的资源。

在 Web 应用中,您还可以通过 ServletContextResource 以相对于 Web 应用根目录的方式访问文件资源
Spring 提供了一个 ResourceUtils 工具类,它支持“classpath:”和“file:”的地址前缀 ,它能够从指定的地址加载文件资源。
File clsFile = ResourceUtils.getFile("classpath:conf/file1.txt");
System.out.println(clsFile.isFile());
String httpFilePath = "file:D:/masterSpring/chapter23/src/conf/file1.txt";
File httpFile = ResourceUtils.getFile(httpFilePath);


文件操作
在使用各种 Resource 接口的实现类加载文件资源后,经常需要对文件资源进行读取、拷贝、转存等不同类型的操作。


FileCopyUtils
它提供了许多一步式的静态操作方法,能够将文件内容拷贝到一个目标 byte[]、String 甚至一个输出流或输出文件中。
package com.baobaotao.io;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.OutputStream;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.util.FileCopyUtils;
public class FileCopyUtilsExample {
public static void main(String[] args) throws Throwable {
Resource res = new ClassPathResource("conf/file1.txt");
// ① 将文件内容拷贝到一个 byte[] 中
byte[] fileData = FileCopyUtils.copyToByteArray(res.getFile());
// ② 将文件内容拷贝到一个 String 中
String fileStr = FileCopyUtils.copyToString(new FileReader(res.getFile()));
// ③ 将文件内容拷贝到另一个目标文件
FileCopyUtils.copy(res.getFile(),
new File(res.getFile().getParent()+ "/file2.txt"));

// ④ 将文件内容拷贝到一个输出流中
OutputStream os = new ByteArrayOutputStream();
FileCopyUtils.copy(res.getInputStream(), os);

}
}
static void copy(byte[] in, File out) 将 byte[] 拷贝到一个文件中
static void copy(byte[] in, OutputStream out) 将 byte[] 拷贝到一个输出流中
static int copy(File in, File out) 将文件拷贝到另一个文件中
static int copy(InputStream in, OutputStream out) 将输入流拷贝到输出流中
static int copy(Reader in, Writer out) 将 Reader 读取的内容拷贝到 Writer 指向目标输出中
static void copy(String in, Writer out) 将字符串拷贝到一个 Writer 指向的目标中

属性文件操作
Spring 提供的 PropertiesLoaderUtils 允许您直接通过基于类路径的文件 地址加载属性资源
package com.baobaotao.io;
import java.util.Properties;
import org.springframework.core.io.support.PropertiesLoaderUtils;
public class PropertiesLoaderUtilsExample {
public static void main(String[] args) throws Throwable {
// ① jdbc.properties 是位于类路径下的文件
Properties props = PropertiesLoaderUtils.loadAllProperties("jdbc.properties");
System.out.println(props.getProperty("jdbc.driverClassName"));
}
}

特殊编码的资源
当您使用 Resource 实现类加载文件资源时,它默认采用操作系统的编码格式。如果文件资源采用了特殊的编码格式(如 UTF-8),则在读取资源内容时必须事先通过 EncodedResource 指定编码格式,否则将会产生中文乱码的问题。
package com.baobaotao.io;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.util.FileCopyUtils;
public class EncodedResourceExample {
public static void main(String[] args) throws Throwable {
Resource res = new ClassPathResource("conf/file1.txt");
// ① 指定文件资源对应的编码格式(UTF-8)
EncodedResource encRes = new EncodedResource(res,"UTF-8");
// ② 这样才能正确读取文件的内容,而不会出现乱码
String content = FileCopyUtils.copyToString(encRes.getReader());
System.out.println(content);

}
}


访问 Spring 容器,获取容器中的 Bean,使用 WebApplicationContextUtils 工具类
ServletContext servletContext = request.getSession().getServletContext();
WebApplicationContext wac = WebApplicationContextUtils. getWebApplicationContext(servletContext);



Spring 所提供的过滤器和监听器

延迟加载过滤器
Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。
Spring 为此专门提供了一个 OpenSessionInViewFilter 过滤器,它的主要功能是使每个请求过程绑定一个 Hibernate Session,即使最初的事务已经完成了,也可以在 Web 层进行延迟加载的操作。
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>


中文乱码过滤器
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter ① Spring 编辑过滤器
</filter-class>
<init-param> ② 编码方式
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param> ③ 强制进行编码转换
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping> ② 过滤器的匹配 URL
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>



一般情况下,您必须将 Log4J 日志配置文件以 log4j.properties 为文件名并保存在类路径下。Log4jConfigListener 允许您通过 log4jConfigLocation Servlet 上下文参数显式指定 Log4J 配置文件的地址,如下所示:
① 指定 Log4J 配置文件的地址
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
② 使用该监听器初始化 Log4J 日志引擎
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>



Introspector 缓存清除监听器,防止内存泄露
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>


一些 Web 应用服务器(如 Tomcat)不会为不同的 Web 应用使用独立的系统参数,也就是说,应用服务器上所有的 Web 应用都共享同一个系统参数对象。这时,您必须通过 webAppRootKey 上下文参数为不同 Web 应用指定不同的属性名:如第一个 Web 应用使用 webapp1.root 而第二个 Web 应用使用 webapp2.root 等,这样才不会发生后者覆盖前者的问题。此外,WebAppRootListener 和 Log4jConfigListener 都只能应用在 Web 应用部署后 WAR 文件会解包的 Web 应用服务器上。一些 Web 应用服务器不会将 Web 应用的 WAR 文件解包,整个 Web 应用以一个 WAR 包的方式存在(如 Weblogic),此时因为无法指定对应文件系统的 Web 应用根目录,使用这两个监听器将会发生问题。

 

特殊字符转义
Web 开发者最常面对需要转义的特殊字符类型:
* HTML 特殊字符;
* JavaScript 特殊字符;

 

HTML 特殊字符转义
* & :&amp;
* " :&quot;
* < :&lt;
* > :&gt;


JavaScript 特殊字符转义
* ' :/'
* " :/"
* / ://
* 走纸换页: /f
* 换行:/n
* 换栏符:/t
* 回车:/r
* 回退符:/b

 

工具类

JavaScriptUtils.javaScriptEscape(String str);

HtmlUtils.htmlEscape(String str);①转换为HTML转义字符表示

HtmlUtils.htmlEscapeDecimal(String str); ②转换为数据转义表示

HtmlUtils.htmlEscapeHex(String str); ③转换为十六进制数据转义表示

HtmlUtils.htmlUnescape(String str);将经过转义内容还原

 

Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作:
1.Resource访问文件资源:
具体有:ResourceUtils.getFile(url);
FileSystemResource(); ClassPathResource();
ServletContextResource(application,url);


2.文件操作 FileCopyUtils
具体有:FileCopyUtils.copy(Resource.getFile,new File(Resource.getFile(),getParent()+'目标文件名'));


3.属性文件操作 PropertiesLoaderUtils
具体有: PropertiesLoaderUtils.loadAllProperties("属性文件名"); --基于类路径


4.EncodedResource(Resource对象,"UTF-8") 编码资源(特殊的);


5.WebApplicationContextUtils


6.StringEscapeutils 编码解码

分享到:
评论

相关推荐

    spring包,spring开发工具

    6. **Spring Test**:为Spring应用提供测试支持,包括单元测试和集成测试,与JUnit和Mockito等工具紧密集成,帮助开发者编写和执行测试。 7. **Spring Boot**:近年来流行的快速启动Spring应用的方式,它预设了许多...

    Spring开发工具包

    Spring开发工具包是Java开发人员在构建基于Spring框架的应用程序时不可或缺的一部分。Spring是一个开源的Java平台,它为创建企业级应用提供了全面的框架支持,包括依赖注入、面向切面编程(AOP)、数据访问、Web开发...

    Spring 加密工具包(kylin密码加密工具包)

    综合以上信息,我们可以推断这个Spring加密工具包是一个独立的Java应用程序,专为Kylin项目设计,用于处理用户密码的加密。通过简单的命令行接口,它能快速对用户信息进行加密,以增强系统安全性。开发人员可以将其...

    Spring获取ApplicationContext对象工具类的实现方法

    Spring框架作为Java EE开发中非常流行和强大的框架之一,为Java应用提供了全面的基础设施支持。在Spring中,ApplicationContext(应用程序上下文)是容器的核心,负责配置和管理应用中对象的生命周期和依赖关系。在...

    java spring工具包

    Java Spring工具包是Java开发中的核心组件之一,它是一个开源框架,主要用于简化企业级应用的开发。Spring框架以其模块化、灵活的配置和强大的依赖注入特性而闻名,它提供了多种功能,包括但不限于:面向切面编程...

    SpringToolSuite4 工具

    用户可以快速创建新的Spring Boot项目,使用内置的启动器(starter)来添加依赖,还有用于测试和运行Spring Boot应用的便捷工具。 ### 4. **Spring Cloud 集成** 对于Spring Cloud开发者,STS4 提供了可视化工具,...

    spring常用jar包

    在这个名为"spring常用jar包"的压缩包中,包含了一些Spring框架运行所必需的核心库。下面我们将逐一解析这些jar包的功能和重要性。 1. aspectjrt.jar:这是AspectJ运行时库,用于支持面向切面编程(AOP)。AOP是...

    spring 开发工具jar包

    9. **Spring Boot**:这是一个用于简化Spring应用初始搭建以及开发过程的工具,通过自动配置和起步依赖来快速创建独立运行的Spring应用。对应的jar文件通常会在一个Spring Boot应用的可执行jar中。 10. **Spring ...

    spring常用包

    以下是对Spring常用包的详细解析: 1. **spring-core**:这是Spring框架的基础,包含了核心工具类和资源处理。其中,BeanUtils、ClassUtils等工具类提供了通用的Java对象操作,Resource接口则用于处理各种类型的...

    springcloud开发测试工具集

    本文将详细探讨一个专为Spring Cloud开发测试设计的工具集,帮助开发者更高效地构建、调试和测试微服务应用。 一、Spring Cloud概述 Spring Cloud是基于Spring Boot实现的一系列微服务解决方案,它提供了服务注册...

    使用 Spring Boot 快速构建 Spring 框架应用

    Spring Boot 是一个基于 Spring Framework 的快速开发工具,旨在简化 Spring 应用程序的初始设置和配置过程,从而提高开发效率。Spring 框架以其模块化和灵活性著称,但这也可能导致在配置和集成各个子项目时遇到...

    模拟spring和工具jar包

    在IT行业中,Spring框架是Java开发领域中广泛应用的开源框架,尤其在企业级应用开发中占据了主导地位。它提供了一整套服务,如依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,...

    android_springrestful工具包

    在Android开发中,Spring Restful工具包是一种将Spring框架与Android结合使用的库,它使得在Android应用中构建和消费RESTful服务变得更加简单。Spring Restful工具包主要涉及到以下几个关键知识点: 1. **RESTful ...

    TXD之Spring开发工具包180807

    Spring开发工具包180807是一款专为学习和开发Spring框架的人员设计的集合,其中包含了Spring原生的各种工具和库。Spring框架是Java领域广泛应用的企业级应用开发框架,以其灵活、模块化和面向切面编程(AOP)的特点...

    spring最常用jar包

    标题 "spring最常用jar包" 暗示了我们讨论的核心是Spring框架中不可或缺的库文件,这些jar包是开发人员在使用Spring进行Java应用程序开发时最常引用的基础组件。Spring是一个开源的Java平台,它提供了全面的企业级...

    基于Java的guerlab-spring设计源码,全面整合Spring扩展工具集

    工具集全面整合了Spring框架的扩展功能,包括云项目常用依赖、通用工具包、自动配置、通用Mapper与分页支持、MyBatis自动配置与类型转换、数据库如MySQL和Redis的自动配置、参数搜索支持、Swagger文档、基于Redis的...

    SpringIDE工具

    **SpringIDE工具详解** SpringIDE是一款专为Spring框架开发者设计的集成开发环境(IDE)插件,它将Spring的功能深度整合到Eclipse中,极大地提高了Spring应用的开发效率。SpringIDE提供了一系列强大的特性,帮助...

    spring 常用的26个包

    本文将深入探讨Spring框架中常用的26个包,这些包是构建高效、可维护的Java应用的基础。 1. `org.springframework.beans`:这个包主要处理JavaBeans,包括属性的读取、设置、类型转换以及事件处理等。它还提供了...

    spring常用模块介绍

    Spring Boot是近年来流行的快速开发工具,它基于约定优于配置的原则,简化了Spring应用的启动和配置过程。通过自动配置和starter依赖,开发者可以快速构建生产级别的应用。 7. **Spring Data** Spring Data是...

Global site tag (gtag.js) - Google Analytics