参考文章:1. http://www.ibm.com/developerworks/cn/java/j-lo-spring-utils1/
2.spring源码
WebUtils
位于 org.springframework.web.util 包中的 WebUtils 是一个非常好用的工具类,它对很多 Servlet API 提供了易用的代理方法,降低了访问 Servlet API 的复杂度,可以将其看成是常用 Servlet API 方法的门面类。
下面这些方法为访问 HttpServletRequest 和 HttpSession 中的对象和属性带来了方便:
(1)getSessionAttribute
获取 HttpSession 特定属性名的对象,否则您必须通过 request.getSession.getAttribute(name) 完成相同的操作;
/**
* Check the given request for a session attribute of the given name.
* Returns null if there is no session or if the session has no such attribute.
* Does not create a new session if none has existed before!
* @param request current HTTP request
* @param name the name of the session attribute
* @return the value of the session attribute, or <code>null</code> if not found
*/
public static Object getSessionAttribute(HttpServletRequest request, String name) {
Assert.notNull(request, "Request must not be null");
HttpSession session = request.getSession(false);
return (session != null ? session.getAttribute(name) : null);
}
(2)getRequiredSessionAttribute
和上一个方法类似,只不过强制要求 HttpSession 中拥有指定的属性,否则抛出异常;
/**
* Check the given request for a session attribute of the given name.
* Throws an exception if there is no session or if the session has no such
* attribute. Does not create a new session if none has existed before!
* @param request current HTTP request
* @param name the name of the session attribute
* @return the value of the session attribute, or <code>null</code> if not found
* @throws IllegalStateException if the session attribute could not be found
*/
public static Object getRequiredSessionAttribute(HttpServletRequest request, String name)
throws IllegalStateException {
Object attr = getSessionAttribute(request, name);
if (attr == null) {
throw new IllegalStateException("No session attribute '" + name + "' found");
}
return attr;
}
(3)setSessionAttribute
给session中的指定属性设置值,若传入值为空,则从session中移除该属性
/**
* Set the session attribute with the given name to the given value.
* Removes the session attribute if value is null, if a session existed at all.
* Does not create a new session if not necessary!
* @param request current HTTP request
* @param name the name of the session attribute
* @param value the value of the session attribute
*/
public static void setSessionAttribute(HttpServletRequest request, String name, Object value) {
Assert.notNull(request, "Request must not be null");
if (value != null) {
request.getSession().setAttribute(name, value);
}
else {
HttpSession session = request.getSession(false);
if (session != null) {
session.removeAttribute(name);
}
}
}
(4)exposeRequestAttributes
将 Map 元素添加到 ServletRequest 的属性列表中,当请求被导向(forward)到下一个处理程序时,这些请求属性就可以被访问到了;
/**
* Expose the given Map as request attributes, using the keys as attribute names
* and the values as corresponding attribute values. Keys need to be Strings.
* @param request current HTTP request
* @param attributes the attributes Map
*/
public static void exposeRequestAttributes(ServletRequest request, Map<String, ?> attributes) {
Assert.notNull(request, "Request must not be null");
Assert.notNull(attributes, "Attributes Map must not be null");
for (Map.Entry<String, ?> entry : attributes.entrySet()) {
request.setAttribute(entry.getKey(), entry.getValue());
}
}
(5)getCookie
获取 HttpServletRequest 中特定名字的 Cookie 对象。如果您需要创建 Cookie, Spring 也提供了一个方便的 CookieGenerator 工具类;
/**
* Retrieve the first cookie with the given name. Note that multiple
* cookies can have the same name but different paths or domains.
* @param request current servlet request
* @param name cookie name
* @return the first cookie with the given name, or <code>null</code> if none is found
*/
public static Cookie getCookie(HttpServletRequest request, String name) {
Assert.notNull(request, "Request must not be null");
Cookie cookies[] = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
return cookie;
}
}
}
return null;
}
(6)extractFilenameFromUrlPath
从Url地址中截取文件名称
/**
* Extract the URL filename from the given request URL path.
* Correctly resolves nested paths such as "/products/view.html" as well.
* @param urlPath the request URL path (e.g. "/index.html")
* @return the extracted URI filename (e.g. "index")
*/
public static String extractFilenameFromUrlPath(String urlPath) {
String filename = extractFullFilenameFromUrlPath(urlPath);
int dotIndex = filename.lastIndexOf('.');
if (dotIndex != -1) {
filename = filename.substring(0, dotIndex);
}
return filename;
}
/**
* Extract the full URL filename (including file extension) from the given request URL path.
* Correctly resolves nested paths such as "/products/view.html" as well.
* @param urlPath the request URL path (e.g. "/products/index.html")
* @return the extracted URI filename (e.g. "index.html")
*/
public static String extractFullFilenameFromUrlPath(String urlPath) {
int end = urlPath.indexOf(';');
if (end == -1) {
end = urlPath.indexOf('?');
if (end == -1) {
end = urlPath.length();
}
}
int begin = urlPath.lastIndexOf('/', end) + 1;
return urlPath.substring(begin, end);
}
分享到:
相关推荐
在本文档中,我们将详细介绍如何搭建 Spring 源码环境,帮助读者快速入门 Spring 源码阅读。 标题解释 "spring 源码环境搭建" 是指搭建一个可以读取和编译 Spring 源码的开发环境。Spring 是一个广泛使用的 Java ...
Xmind是一种强大的思维导图工具,它可以清晰地展现Spring源码中的类、接口和方法关系,使得源码阅读更加有序。 总的来说,"Spring源码解析"这个压缩包为我们提供了一个系统性学习Spring源码的途径。通过深入学习和...
通过搭建开发环境,我们可以更方便地阅读和调试Spring框架的源码。 1.2.1 源码链接获取 Spring框架的源码可以从GitHub等网站上下载。下载后的源码需要使用IDEA或Eclipse等IDE工具导入,方便我们阅读和调试源码。 ...
Spring 源码注释中文版的提供,使得开发者能够更加深入地理解 Spring 的工作原理,无需经过复杂的编译过程,可以直接阅读源码注释来学习。 Spring 框架主要由以下几个关键模块组成: 1. **Core Container(核心...
这份"spring 源码中文注释"包含了对Spring框架源码的详细解读,对于理解其工作原理、优化代码以及定制化开发具有重要意义。 首先,我们来看看Spring的核心组件——IoC容器。IoC容器是Spring的核心,它负责管理对象...
Spring 源码分析 Spring 框架是 Java 语言中最流行的开源框架之一,它提供了一个强大且灵活的基础设施来构建企业级应用程序。在 Spring 框架中,IOC 容器扮演着核心角色,本文将深入分析 Spring 源码,了解 IOC ...
1. **Spring 事务处理**:Spring 提供了声明式事务管理,允许开发者在配置文件中定义事务边界,无需在业务逻辑代码中显式控制事务开始、提交和回滚。它主要基于AOP代理来实现,通过TransactionInterceptor拦截器进行...
- **阅读源码**:通过Eclipse的代码阅读工具,可以逐行查看和理解Spring的实现细节。例如,研究`org.springframework.beans.factory.BeanFactory`接口及其实现,了解依赖注入的过程。 - **设置断点**:在关键...
通过阅读源码和注释,我们可以更清晰地了解Spring如何管理依赖注入、AOP(面向切面编程)、事务管理、上下文以及其他的特性。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,允许组件之间...
12 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-1.mp4 13 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-2 .mp4 14 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-3.mp4 15 Spring源码...
1. **spring-core**:这是Spring框架的基础模块,包含了核心的工具类和资源处理能力。如BeanFactory接口和ApplicationContext接口,它们是Spring容器的核心,负责创建、管理和装配对象。此外,还提供了IoC容器的基础...
1. 表现层(Presentation Layer):通常由Spring MVC的Controller组件负责。Controller接收HTTP请求,处理用户交互,调用业务逻辑,然后将结果转发到视图进行渲染。Controller通过@RequestMapping注解与URL路径绑定...
12 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-1.mp4 13 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-2 .mp4 14 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-3.mp4 15 Spring源码...
12 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-1.mp4 13 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-2 .mp4 14 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-3.mp4 15 Spring源码...
12 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-1.mp4 13 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-2 .mp4 14 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-3.mp4 15 Spring源码...
Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring ...
Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring ...
Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring ...
阅读源码好处: 了解其整体架构与核心概念以便建立Spring的模型 从框架入口开始抽丝剥茧,理解其每一个核心概念以及作用,并将这些核心技术点融汇起来 探究每一个核心的实现细节(UML图、跑单元测试用例、DEBUG,...
1. Spring 源码可以通过直接下载 zip 文件或使用 Git 克隆的方式获取。 2. Gradle 是一个基于 Groovy 语言的构建工具,用于构建和管理项目依赖项。 3. 在 Spring 源码目录下,有一个名为 `gradle` 的目录,其中包含...