WebUtils工具类解析

WebUtils根据名称,知道是Spring当中一个工具类,主要用于Web应用程序,供各种框架使用。

其中有些方法还是挺有用的,比如可以获取Session中的会话属性,获取Cookies,设置Session中的会话属性的值等等

翻译了WebUtils类的文档,其中WebUtils中的方法如下:

1.将一个系统性质设置到上下文根路径

	public static void setWebAppRootSystemProperty(ServletContext servletContext) throws IllegalStateException 

2.移除系统性质

	public static void removeWebAppRootSystemProperty(ServletContext servletContext)

3.判断“HTML escaping”(HTML转义)对应用是否允许,即看web.xml中的defaultHtmlEscape的值是否设置为true

	public static Boolean getDefaultHtmlEscape(ServletContext servletContext) 

4、返回由当前servlet容器提供的 当前Web应用程序的临时目录

public static File getTempDir(ServletContext servletContext) 

5.返回由servlet容器提供的,Web应用程序中给定路径的实际路径

	public static String getRealPath(ServletContext servletContext, String path) throws FileNotFoundException 

6.通过一个请求确定会话Session的标识(Id)

public static String getSessionId(HttpServletRequest request)

7.通过一个请求,通过name获取session中的属性,如果session中没有属性或者没有session会返回一个null

public static Object getSessionAttribute(HttpServletRequest request, String name) 

8.和7中方法相似,只不过不会返回null,会抛出异常

	public static Object getRequiredSessionAttribute(HttpServletRequest request, String name)
		throws IllegalStateException

9.通过给定的名称和值设置session中的属性,如果session值为空,会移除session的属性

public static void setSessionAttribute(HttpServletRequest request, String name, Object value) 

10.获取指定的会话属性,如果没有找到的话会创建并设置新的属性。其中给定的类需要有一个公共的无参构造函数。

	public static Object getOrCreateSessionAttribute(HttpSession session, String name, Class<?> clazz)
			throws IllegalArgumentException

11.返回给定会话的最佳可用互斥量:即为给定会话同步的对象。返回会话互斥属性(如果可用);通常情况下,这意味着需要定义HttpSessionMutexListener在{code web.xml}中。 回到HttpSession本身如果没有找到互斥属性。会话互斥确保在期间是相同的对象会话的整个生命周期,在定义的密钥下可用由SESSION_MUTEX_ATTRIBUTE常量定义。 它作为一个在当前会话上同步锁定的安全引用。在很多情况下,HttpSession引用本身是一个安全的互斥体同样,因为它始终是相同的对象参考相同的活动逻辑会话。 但是,这并不能保证不同的servlet容器; 唯一的100%安全方式是会话互斥。

public static Object getSessionMutex(HttpSession session)

12.返回指定类型的合适的请求对象,如果可用,会unwrapping给定的request请求

public static <T> T getNativeRequest(ServletRequest request, Class<T> requiredType)

13.和12方法类似,应用于response

public static <T> T getNativeResponse(ServletResponse response, Class<T> requiredType)
	}

14.判断请求是否是一个包含(Include)请求,即不是从外部进入的顶级Http请求。

	public static boolean isIncludeRequest(ServletRequest request) 

15.Servlet规范的错误属性,Servlet2.3规范中定义的属性,用于错误页面直接呈现,而不是通过Servlet容器的错误页面解析

	public static void exposeErrorRequestAttributes(HttpServletRequest request, Throwable ex, String servletName)

16.如果不存在? 公开指定的请求属性 (有疑问)

	private static void exposeRequestAttributeIfNotPresent(ServletRequest request, String name, Object value) 

17.清除类似方法15中定义的错误属性,遵循servlet2.3规范

	public static void clearErrorRequestAttributes(HttpServletRequest request) 

18.将给定的Map公开为请求属性,使用键作为属性名称并将值作为相应的属性值。 键需要是字符串

	public static void exposeRequestAttributes(ServletRequest request, Map<String, ?> attributes) 

19.检索具有给定名称的第一个cookie。注意多个Cookie可以具有相同的名称,但路径和域不同。

	public static Cookie getCookie(HttpServletRequest request, String name)

20.检查请求中是否有通过按钮或者图像的特定的输入类型=“submit”参数

	public static boolean hasSubmitParameter(ServletRequest request, String name) 

21.从给定的请求参数中获取一个命名参数。可以参阅方法{findParameterValue}用于查找算法的描述

	public static String findParameterValue(ServletRequest request, String name)

22.获取参数值通过以下的算法:(算法补充)

public static String findParameterValue(Map<String, ?> parameters, String name) {
		// First try to get it as a normal name=value parameter
		Object value = parameters.get(name);
		if (value instanceof String[]) {
			String[] values = (String[]) value;
			return (values.length > 0 ? values[0] : null);
		}
		else if (value != null) {
			return value.toString();
		}
		// If no value yet, try to get it as a name_value=xyz parameter
		String prefix = name + "_";
		for (String paramName : parameters.keySet()) {
			if (paramName.startsWith(prefix)) {
				// Support images buttons, which would submit parameters as name_value.x=123
				for (String suffix : SUBMIT_IMAGE_SUFFIXES) {
					if (paramName.endsWith(suffix)) {
						return paramName.substring(prefix.length(), paramName.length() - suffix.length());
					}
				}
				return paramName.substring(prefix.length());
			}
		}
		// We couldn't find the parameter value...
		return null;
	}

23.返回包含具有给定前缀的所有参数的map。将单个值映射为String,多个值映射到String数组。

	public static Map<String, Object> getParametersStartingWith(ServletRequest request, String prefix) {
		Assert.notNull(request, "Request must not be null");
		Enumeration<String> paramNames = request.getParameterNames();
		Map<String, Object> params = new TreeMap<String, Object>();
		if (prefix == null) {
			prefix = "";
		}
		while (paramNames != null && paramNames.hasMoreElements()) {
			String paramName = paramNames.nextElement();
			if ("".equals(prefix) || paramName.startsWith(prefix)) {
				String unprefixed = paramName.substring(prefix.length());
				String[] values = request.getParameterValues(paramName);
				if (values == null || values.length == 0) {
					// Do nothing, no values found at all.
				}
				else if (values.length > 1) {
					params.put(unprefixed, values);
				}
				else {
					params.put(unprefixed, values[0]);
				}
			}
		}
		return params;
	}

24.返回请求中指定的目标页面

	public static int getTargetPage(ServletRequest request, String paramPrefix, int currentPage) {
		Enumeration<String> paramNames = request.getParameterNames();
		while (paramNames.hasMoreElements()) {
			String paramName = paramNames.nextElement();
			if (paramName.startsWith(paramPrefix)) {
				for (int i = 0; i < WebUtils.SUBMIT_IMAGE_SUFFIXES.length; i++) {
					String suffix = WebUtils.SUBMIT_IMAGE_SUFFIXES[i];
					if (paramName.endsWith(suffix)) {
						paramName = paramName.substring(0, paramName.length() - suffix.length());
					}
				}
				return Integer.parseInt(paramName.substring(paramPrefix.length()));
			}
		}
		return currentPage;
	}

25.从给定的请求URL路径中提取URL文件名

public static String extractFilenameFromUrlPath(String urlPath)

26.从给定的请求URL路径中提取完整的URL文件名(包括文件扩展名)。正确地解析嵌套路径,例如“/products/view.html”。

public static String extractFullFilenameFromUrlPath(String urlPath)

27.用矩阵变量解析给定的字符串。 一个例子字符串会看起来像这样{@code“q1 = a; q1 = b; q2 = a,b,c”}。 结果地图将包含

使用值{@code [“a”,“b”]}的密钥{@code“q1”}和{@code“q2”}和{@code [“a”,“b”,“c”]}。

	public static MultiValueMap<String, String> parseMatrixVariables(String matrixVariables) {
		MultiValueMap<String, String> result = new LinkedMultiValueMap<String, String>();
		if (!StringUtils.hasText(matrixVariables)) {
			return result;
		}
		StringTokenizer pairs = new StringTokenizer(matrixVariables, ";");
		while (pairs.hasMoreTokens()) {
			String pair = pairs.nextToken();
			int index = pair.indexOf('=');
			if (index != -1) {
				String name = pair.substring(0, index);
				String rawValue = pair.substring(index + 1);
				for (String value : StringUtils.commaDelimitedListToStringArray(rawValue)) {
					result.add(name, value);
				}
			}
			else {
				result.add(pair, "");
			}
		}
		return result;
	}

原文链接:https://blog.csdn.net/weixin_38938982/article/details/80537113

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值