Class BrowserTool
- All Implemented Interfaces:
Serializable
Browser sniffing tool (session or request scope requested, session scope advised).
Usage:
BrowserTool defines properties that are used to test the client browser, operating system, device, language...
All properties are boolean, excpet those in italic which are strings (and major/minor versions which are integers)
The following properties are available:
- Device: device robot mobile tablet desktop tv
- Features:css3 dom3
- Browser:browser.name browser.majorVersion browser.minorVersion
- Rendering engine: renderingEngine.name renderingEngine.minorVersion renderingEngine.majorVersion
- Operating system: operatingsystem.name operatingsystem.majorVersion operatingsystem.minorVersion
- Specific browser tests:netscape firefox safari MSIE opera links mozilla konqueror chrome
- Specific rendering engine tests:gecko webKit KHTML trident blink edgeHTML presto
- Specific OS tests:windows OSX linux unix BSD android iOS symbian
- Languages: preferredLanguageTag (a string like 'en', 'da', 'en-US', ...), preferredLocale (a java Locale)
- IP address: IPAddress
Language properties are filtered by the languagesFilter tool param, if present, which is here to specify which languages are acceptable on the server side. If no matching language is found, or if there is no matching language, the tools defaut locale (or the first value of languagesFilter) is returned. Their value is guarantied to belong to the set provided in languagesFilter, if any.
Notes on implementation:
- The parsing algorithm is mainly empirical. Used rules are rather generic, so shouldn't need recent updates to be accurate, but accuracy remains far from guaranteed for new devices.
- Parsing should be fast, as the parser only uses a single regex iteration on the user agent string.
- Game consoles, e-readers, etc... are for now classified as mobile devices (but can sometimes be identified by their operating system).
- Needless to say, the frontier between different device types can be very thin...
Thanks to Lee Semel (lee@semel.net), the author of the HTTP::BrowserDetect Perl module.
See also:
- http://www.zytrax.com/tech/web/browser_ids.htm
- http://en.wikipedia.org/wiki/User_agent
- http://www.user-agents.org/
- https://github.com/OpenDDR
- https://devicemap.apache.org/
- http://www.useragentstring.com/pages/useragentstring.php?name=All
- https://en.wikipedia.org/wiki/Comparison_of_layout_engines_(Cascading_Style_Sheets)
- https://en.wikipedia.org/wiki/Comparison_of_layout_engines_(Document_Object_Model)
- http://www.webapps-online.com/online-tools/user-agent-strings
- https://whichbrowser.net/data/
TODO:
- parse X-Wap-Profile header if present
- parse X-Requested-With header if present
- Since:
- VelocityTools 2.0
- Version:
- $Revision$ $Date$
- Author:
- Claude Brisson
- See Also:
-
Field Summary
Fields inherited from class org.apache.velocity.tools.generic.FormatConfig
DEFAULT_FORMAT, FORMAT_KEYFields inherited from class org.apache.velocity.tools.generic.LocaleConfig
DEFAULT_LOCALEFields inherited from class org.apache.velocity.tools.generic.SafeConfig
LOCK_CONFIG_KEY, log, LOGGER_NAME_KEY, SAFE_MODE_KEY, USE_CLASS_LOGGER_KEY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanbooleangetCss3()booleangetDom3()Get the client browser IP address.booleanbooleanbooleanisBlink()booleanisBSD()booleanisChrome()booleanbooleanbooleanbooleanisGecko()booleanisIOS()booleanisKHTML()booleanbooleanisLinks()booleanisLinux()booleanisMobile()booleanbooleanisMSIE()booleanbooleanisOpera()booleanisOSX()booleanisPresto()booleanisRobot()booleanisSafari()booleanbooleanisTablet()booleanbooleanisTV()booleanisUnix()booleanisWebKit()booleanvoidvoidsetLanguagesFilter(String filter) voidsetRequest(javax.servlet.http.HttpServletRequest request) Retrieves the User-Agent header from the request (if any).voidSets the User-Agent string to be parsed for info.protected booleantoString()Methods inherited from class BrowserToolDeprecatedMethods
getCss, getCss1, getCss2, getDom0, getDom1, getDom2, getDotnet, getGeckoMajorVersion, getGeckoMinorVersion, getGeckoVersion, getIe, getIe3, getIe4, getIe4up, getIe5, getIe55, getIe55up, getIe5up, getIe6, getIe6up, getIe7, getIe7up, getIe8, getIe8up, getJavascript, getMajorVersion, getMinorVersion, getNav2, getNav3, getNav4, getNav45, getNav45up, getNav4up, getNav6, getNav6up, getNavgold, getOpera3, getOpera4, getOpera5, getOpera6, getOpera7, getOpera8, getOpera9, getUserAgent, getVersion, getVista, getWin16, getWin2k, getWin31, getWin32, getWin3x, getWin95, getWin98, getWinme, getWinnt, getWinxp, isAix, isAix1, isAix2, isAix3, isAix4, isAmiga, isBsd, isDec, isEmacs, isFreebsd, isHpux, isHpux10, isHpux9, isIrix, isIrix5, isIrix6, isMac, isMac68k, isMacppc, isMpras, isOs2, isReliant, isSco, isSinix, isSun, isSun4, isSun5, isSuni86, isUnixware, isVMS, isX11Methods inherited from class org.apache.velocity.tools.generic.FormatConfig
configure, getFormat, setFormatMethods inherited from class org.apache.velocity.tools.generic.LocaleConfig
getLocale, setLocale, toLocaleMethods inherited from class org.apache.velocity.tools.generic.SafeConfig
configure, getLog, initLogger, isConfigLocked, isSafeMode, setLockConfig, setSafeMode
-
Constructor Details
-
BrowserTool
public BrowserTool()
-
-
Method Details
-
setRequest
public void setRequest(javax.servlet.http.HttpServletRequest request) Retrieves the User-Agent header from the request (if any).- Parameters:
request- servlet request- See Also:
-
setUserAgentString
Sets the User-Agent string to be parsed for info. If null, the string will be empty and everything will return false or null. Otherwise, it will set the whole string to lower case before storing to simplify parsing.- Parameters:
ua- user agent string
-
setAcceptLanguage
-
setLanguagesFilter
-
getLanguagesFilter
-
toString
-
get
-
getUserAgentString
- Specified by:
getUserAgentStringin classBrowserToolDeprecatedMethods
-
getAcceptLanguage
-
getIPAddress
Get the client browser IP address. In the session scope, which is the default, it corresponds to the first seen IP adress.
The tool tries to get the real IP address whenever the request has been proxied.
Please note that the result may be null.
- Returns:
- the IP address as a string
- Since:
- VelocityTools 3.0
-
getDevice
- Returns:
- found device
- Since:
- VelocityTools 3.0
-
isRobot
public boolean isRobot() -
isTablet
public boolean isTablet()- Returns:
- whether found device is a tablet
- Since:
- VelocityTools 3.0
-
isMobile
public boolean isMobile()- Returns:
- whether found device is a mobile device
- Since:
- VelocityTools 3.0
-
isDesktop
public boolean isDesktop()- Returns:
- whether found device is a desktop device
- Since:
- VelocityTools 3.0
-
isTV
public boolean isTV()- Returns:
- whether found device is a TV
- Since:
- VelocityTools 3.0
-
getBrowser
- Specified by:
getBrowserin classBrowserToolDeprecatedMethods- Returns:
- parsed browser
- Since:
- VelocityTools 3.0
-
getRenderingEngine
- Specified by:
getRenderingEnginein classBrowserToolDeprecatedMethods- Returns:
- parsed rendering engine
- Since:
- VelocityTools 3.0
-
getOperatingSystem
- Specified by:
getOperatingSystemin classBrowserToolDeprecatedMethods- Returns:
- parsed operating system
- Since:
- VelocityTools 3.0
-
isGecko
public boolean isGecko()- Specified by:
isGeckoin classBrowserToolDeprecatedMethods
-
isWebKit
public boolean isWebKit() -
isKHTML
public boolean isKHTML() -
isTrident
public boolean isTrident() -
isBlink
public boolean isBlink() -
isEdgeHTML
public boolean isEdgeHTML() -
isPresto
public boolean isPresto() -
isChrome
public boolean isChrome()- Specified by:
isChromein classBrowserToolDeprecatedMethods
-
isMSIE
public boolean isMSIE()- Specified by:
isMSIEin classBrowserToolDeprecatedMethods
-
isFirefox
public boolean isFirefox()- Specified by:
isFirefoxin classBrowserToolDeprecatedMethods
-
isOpera
public boolean isOpera()- Specified by:
isOperain classBrowserToolDeprecatedMethods
-
isSafari
public boolean isSafari()- Specified by:
isSafariin classBrowserToolDeprecatedMethods
-
isNetscape
public boolean isNetscape()- Specified by:
isNetscapein classBrowserToolDeprecatedMethods
-
isKonqueror
public boolean isKonqueror()- Specified by:
isKonquerorin classBrowserToolDeprecatedMethods
-
isLinks
public boolean isLinks()- Specified by:
isLinksin classBrowserToolDeprecatedMethods
-
isMozilla
public boolean isMozilla()- Specified by:
isMozillain classBrowserToolDeprecatedMethods
-
isWindows
public boolean isWindows()- Specified by:
isWindowsin classBrowserToolDeprecatedMethods
-
isOSX
public boolean isOSX()- Specified by:
isOSXin classBrowserToolDeprecatedMethods
-
isLinux
public boolean isLinux()- Specified by:
isLinuxin classBrowserToolDeprecatedMethods
-
isBSD
public boolean isBSD() -
isUnix
public boolean isUnix() -
isAndroid
public boolean isAndroid() -
isIOS
public boolean isIOS() -
isSymbian
public boolean isSymbian() -
isBlackberry
public boolean isBlackberry() -
getCss3
public boolean getCss3() -
getDom3
public boolean getDom3() -
getPreferredLanguage
-
getPreferredLocale
-
test
- Specified by:
testin classBrowserToolDeprecatedMethods
-