All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zkoss.web.fn.ServletFns Maven / Gradle / Ivy

There is a newer version: 10.0.0-jakarta
Show newest version
/* ServletFns.java

	Purpose:
		
	Description:
		
	History:
		Mon Apr 11 15:13:44     2005, Created by tomyeh

Copyright (C) 2005 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
	This program is distributed under LGPL Version 2.1 in the hope that
	it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.web.fn;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.Writer;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.zkoss.lang.Library;
import org.zkoss.lang.Strings;
import org.zkoss.web.servlet.Servlets;
import org.zkoss.web.servlet.dsp.DspException;
import org.zkoss.web.servlet.dsp.action.ActionContext;
import org.zkoss.web.servlet.http.Encodes;
import org.zkoss.web.servlet.xel.RequestContext;
import org.zkoss.web.servlet.xel.RequestContexts;
import org.zkoss.web.theme.StandardTheme;
import org.zkoss.web.theme.StandardTheme.ThemeOrigin;
import org.zkoss.web.theme.Theme;

/**
 * Providing servlet relevant functions for EL.
 *
 * @author tomyeh
 */
public class ServletFns {
	protected ServletFns() {
	}

	/** Encodes a URL.
	 *
	 * 

If an URI contains "*", it will be replaced with a proper Locale. * For example, if the current Locale is zh_TW and the resource is * named "ab*.cd", then it searches "ab_zh_TW.cd", "ab_zh.cd" and * then "ab.cd", until any of them is found. * *

Note: "*" must be right before ".", or the last character. * For example, "ab*.cd" and "ab*" are both correct, while * "ab*cd" and "ab*\/cd" are ignored.
* *

If an URI contains two "*", the first "*" will be replaced with * a browser code and the second with a proper locale. * The browser code depends on what browser * the user are used to visit the web site. * Currently, the code for Internet Explorer is "ie", Safari is "saf", * Opera is "opr" and all others are "moz". * Thus, in the above example, if the resource is named "ab**.cd" * and Firefox is used, then it searches "abmoz_zh_TW.cd", "abmoz_zh.cd" * and then "abmoz.cd", until any of them is found. */ public static String encodeURL(String uri) throws ServletException { return Encodes.encodeURL(getCurrentServletContext(), getCurrentRequest(), getCurrentResponse(), uri); } /** * Encodes a URL with theme key injected. * @param s the string to encode * @return the encoded string or null if s is null * @throws UnsupportedEncodingException * @since 6.0.0 */ public static final String encodeThemeURL(String s) throws ServletException { if (s == null) return null; return encodeURL(resolveThemeURL(s)); } private static final String THEME_FOLDER_ROOT = "org.zkoss.theme.folder.root"; /** * Resolves a URL to point to resource served by the current theme. * @param url the default theme url to resolve * @return the resolved url or null if url is null * @since 6.5.2 */ public static final String resolveThemeURL(String url) { if (url == null) return null; String themeName = ThemeFns.getCurrentTheme(); String prefix = Library.getProperty(THEME_FOLDER_ROOT, "theme"); String resolved = null; if (Strings.isBlank(themeName) || StandardTheme.DEFAULT_NAME.equals(themeName)) resolved = url; else { Theme theme = ThemeFns.getThemeRegistry().getTheme(themeName); if (theme instanceof StandardTheme) { if (((StandardTheme) theme).getOrigin() == ThemeOrigin.JAR) resolved = url.replaceFirst("~./", "~./" + themeName + "/"); else resolved = url.replaceFirst("~./", "/" + prefix + "/" + themeName + "/"); } } return resolved; } /** Returns whether the current request is from * a browser of the specified type. * * @param type the type of the browser. * The syntax: <browser-name>[<version-number>];[-].
* For example, ie9, ios and ie6-. * And, ie9 means Internet Explorer 9 and later, while * ie6- means Internet Explorer 6 (not prior, nor later). * @since 3.5.1 * @deprecated As of release 6.0.0, replaced with {@link Servlets#getBrowser}. */ public static boolean isBrowser(String type) { return Servlets.isBrowser(getCurrentRequest(), type); } /** Returns whether the browser of the current request is Explorer. * @deprecated As of release 6.0.0, replaced with {@link Servlets#getBrowser}. */ public static boolean isExplorer() { return Servlets.isExplorer(getCurrentRequest()); } /** Returns whether the browser of the current request is Explorer 7 or later. * @deprecated As of release 6.0.0, replaced with {@link Servlets#getBrowser}. */ public static boolean isExplorer7() { return Servlets.isExplorer7(getCurrentRequest()); } /** Returns whether the browser of the current request is Gecko based, * such as Mozilla, Firefox and Camino. * @deprecated As of release 6.0.0, replaced with {@link Servlets#getBrowser}. */ public static boolean isGecko() { return Servlets.isGecko(getCurrentRequest()); } /** Returns whether the browser is Gecko 3 based, such as Firefox 3. * @since 3.5.0 * @deprecated As of release 6.0.0, replaced with {@link Servlets#getBrowser}. */ public static boolean isGecko3() { return Servlets.isGecko3(getCurrentRequest()); } /** Returns whether the browser of the current request is Safari. * @deprecated As of release 6.0.0, replaced with {@link Servlets#getBrowser}. */ public static boolean isSafari() { return Servlets.isSafari(getCurrentRequest()); } /** Returns whether the browser of the current request is Opera. * @deprecated As of release 6.0.0, replaced with {@link Servlets#getBrowser}. */ public static boolean isOpera() { return Servlets.isOpera(getCurrentRequest()); } /** Returns the current EL context. */ public static RequestContext getCurrentContext() { return RequestContexts.getCurrent(); } /** Returns the current output. */ public static Writer getCurrentOut() throws IOException { return getCurrentContext().getOut(); } /** Returns the current servlet context, or null if not available. */ public static ServletContext getCurrentServletContext() { return getCurrentContext().getServletContext(); } /** Returns the current servlet request, or null if not available. */ public static ServletRequest getCurrentRequest() { return getCurrentContext().getRequest(); } /** Returns the current servlet response, or null if not available. */ public static ServletResponse getCurrentResponse() { return getCurrentContext().getResponse(); } /** Renders the DSP fragment from EL. * * @param ac the action context; never null. */ public static void render(ActionContext ac) throws DspException, IOException { ac.renderFragment(null); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy