`
ryanflyer
  • 浏览: 102420 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring源码阅读(1)WebUtils

阅读更多

参考文章: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 源码的开发环境。Spring 是一个广泛使用的 Java ...

    Spring源码解析.zip

    Xmind是一种强大的思维导图工具,它可以清晰地展现Spring源码中的类、接口和方法关系,使得源码阅读更加有序。 总的来说,"Spring源码解析"这个压缩包为我们提供了一个系统性学习Spring源码的途径。通过深入学习和...

    Spring源码深度解析第二版

    通过搭建开发环境,我们可以更方便地阅读和调试Spring框架的源码。 1.2.1 源码链接获取 Spring框架的源码可以从GitHub等网站上下载。下载后的源码需要使用IDEA或Eclipse等IDE工具导入,方便我们阅读和调试源码。 ...

    spring源码注释中文

    Spring 源码注释中文版的提供,使得开发者能够更加深入地理解 Spring 的工作原理,无需经过复杂的编译过程,可以直接阅读源码注释来学习。 Spring 框架主要由以下几个关键模块组成: 1. **Core Container(核心...

    spring 源码中文注释

    这份"spring 源码中文注释"包含了对Spring框架源码的详细解读,对于理解其工作原理、优化代码以及定制化开发具有重要意义。 首先,我们来看看Spring的核心组件——IoC容器。IoC容器是Spring的核心,它负责管理对象...

    Spring源码分析.pdf

    Spring 源码分析 Spring 框架是 Java 语言中最流行的开源框架之一,它提供了一个强大且灵活的基础设施来构建企业级应用程序。在 Spring 框架中,IOC 容器扮演着核心角色,本文将深入分析 Spring 源码,了解 IOC ...

    spring源码分析(1-10)

    1. **Spring 事务处理**:Spring 提供了声明式事务管理,允许开发者在配置文件中定义事务边界,无需在业务逻辑代码中显式控制事务开始、提交和回滚。它主要基于AOP代理来实现,通过TransactionInterceptor拦截器进行...

    构建为eclipse项目的spring源码

    - **阅读源码**:通过Eclipse的代码阅读工具,可以逐行查看和理解Spring的实现细节。例如,研究`org.springframework.beans.factory.BeanFactory`接口及其实现,了解依赖注入的过程。 - **设置断点**:在关键...

    spring源码中英文注释

    通过阅读源码和注释,我们可以更清晰地了解Spring如何管理依赖注入、AOP(面向切面编程)、事务管理、上下文以及其他的特性。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,允许组件之间...

    阿里P7美团T8大咖带你学习Spring5源码 视频教程 下载 百度网盘链接1.zip

    12 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-1.mp4 13 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-2 .mp4 14 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-3.mp4 15 Spring源码...

    spring源码(注释+测试版)

    1. **spring-core**:这是Spring框架的基础模块,包含了核心的工具类和资源处理能力。如BeanFactory接口和ApplicationContext接口,它们是Spring容器的核心,负责创建、管理和装配对象。此外,还提供了IoC容器的基础...

    spring源码

    1. 表现层(Presentation Layer):通常由Spring MVC的Controller组件负责。Controller接收HTTP请求,处理用户交互,调用业务逻辑,然后将结果转发到视图进行渲染。Controller通过@RequestMapping注解与URL路径绑定...

    阿里P7美团T8大咖带你学习Spring5源码 视频教程 下载 百度网盘链接3.zip

    12 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-1.mp4 13 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-2 .mp4 14 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-3.mp4 15 Spring源码...

    阿里P7美团T8大咖带你学习Spring5源码 视频教程 下载 百度网盘链接4.zip

    12 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-1.mp4 13 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-2 .mp4 14 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-3.mp4 15 Spring源码...

    阿里P7美团T8大咖带你学习Spring5源码 视频教程 下载 百度网盘链接2.zip

    12 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-1.mp4 13 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-2 .mp4 14 Spring源码阅读 - this.AnnotatedBeanDefinitionReader-3.mp4 15 Spring源码...

    4-8 Spring 源码深度剖析(四).rar

    Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring ...

    4-7 Spring 源码深度剖析(三).rar

    Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring ...

    4-5 Spring 源码深度剖析(一).rar

    Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring 源码深度剖析Spring ...

    spring源码阅读所需jar spring-cglib-repack-3.2.8.jar 和spring-objenesis-repack-2.6.jar

    阅读源码好处: 了解其整体架构与核心概念以便建立Spring的模型 从框架入口开始抽丝剥茧,理解其每一个核心概念以及作用,并将这些核心技术点融汇起来 探究每一个核心的实现细节(UML图、跑单元测试用例、DEBUG,...

    idea+gradle构建spring源码环境.docx

    1. Spring 源码可以通过直接下载 zip 文件或使用 Git 克隆的方式获取。 2. Gradle 是一个基于 Groovy 语言的构建工具,用于构建和管理项目依赖项。 3. 在 Spring 源码目录下,有一个名为 `gradle` 的目录,其中包含...

Global site tag (gtag.js) - Google Analytics