public class ERXBrowserFactory extends Object
ERXBrowserFactory
instance. Its primary role is to manage ERXBrowser
objects.
It provides facility to parse "user-agent"
HTTP header and to
create an appropriate browser object. It also maintains the
browser pool to store shared ERXBrowser
objects.
Since ERXBrowser
object is immutable, it can be
safely shared between sessions and ERXBrowserFactory
tries to have only one instance of ERXBrowser
for
each kind of web browsers.
The primary method called by ERXSession
and ERXDirectAction
is browserMatchingRequest
which takes a WORequest
as the parameter and returns a shared instance of browser object.
You actually wouldn't have to call this function by yourself
because ERXSession
and ERXDirectAction
provide browser
method
that returns a browser object for the current request for you.
Note that ERXSession
and ERXDirectAction
call ERXBrowserFactory
's
retainBrowser
and releaseBrowser
to put the browser object to the browser pool when it is
created and to remove the browser object from the pool when
it is no longer referred from sessions and direct actions.
ERXSession
and ERXDirectAction
automatically handle this and you do not have to call these
methods from your code.
The current implementation of the parsers support variety of
Web browsers in the market such as Internet Explorer (IE),
OmniWeb, Netscape, iCab and Opera, versions between 2.0 and 7.0.
To customize the parsers for "user-agent"
HTTP header,
subclass ERXBrowserFactory
and override methods
like parseBrowserName
,
parseVersion
,
parseMozillaVersion
and
parsePlatForm
.
Then put the following statement into the application's
constructor.
ERXBrowserFactory.
setFactory(new SubClassOfERXBrowserFactory())
;
If you want to use your own subclass of ERXBrowser
,
put the following statement into the application's constructor.
ERXBrowserFactory.factory().
setBrowserClassName("NameOfTheSubClassOfERXBrowser")
This implementation is tested with the following browsers (or "user-agent" strings) Please ask the guy (tatsuyak@mac.com) for WOUnitTest test cases. Mac OS X ---------------------------------------------------------------------------------- iCab 2.8.1 Mozilla/4.5 (compatible; iCab 2.8.1; Macintosh; I; PPC) IE 5.21 Mozilla/4.0 (compatible; MSIE 5.21; Mac_PowerPC) Netscape 7.0b1 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0rc2) Gecko/20020512 Netscape/7.0b1 Netscape 6.2.3 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:0.9.4.1) Gecko/20020508 Netscape6/6.2.3 OmniWeb 5.11.1 Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7_3; en-US) AppleWebKit/533.21.1+(KHTML, like Gecko, Safari/533.19.4) Version/5.11.1 OmniWeb/622.18.0 Safari 1.0b(v48) Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/48 (like Gecko) Safari/48 iPhone 1.0 Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 iPhone 7.0 Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1 Windows 2000 ---------------------------------------------------------------------------------- IE 6.0 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) IE 5.5 Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Netscape 6.2.3 Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.4.1) Gecko/20020508 Netscape6/6.2.3 Netscape 4.79 Mozilla/4.79 [en] (Windows NT 5.0; U) Opera 6.04 Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.04 [en] Android ---------------------------------------------------------------------------------- Chrome 70 Mozilla/5.0 (Linux; Android 8.0.0; moto g(6)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.80 Mobile Safari/537.36
ERXBrowserFactory
インスタンスを持っている。
このメソッドは ERXBrowser
オブジェクトを管理する責任があります。
HTTP ヘッダーの "user-agent"
をパース、及び適切なブラウザ・オブジェクトを作成する機能がある。
さらに共有 ERXBrowser
オブジェクトのブラウザ・プールをメンテナンスします。
ERXBrowser
オブジェクトは不可変で、セッション間での共有も安全です。
ERXBrowserFactory
は各ブラウザ種類に一つのオブジェクトのみを作成することを試します。
ERXSession
と ERXDirectAction
より呼び出されるメイン・メソッドは
browserMatchingRequest
で、引数として
WORequest
を受け取り、
ブラウザ・オブジェクトの共有インスタンスを戻します。
実際には直接呼ぶ必要はないでしょう。なぜなら、ERXSession
と ERXDirectAction
は適切なブラウザ・オブジェクトをカレント・リクエストの為に戻す browser
メソッドを用意しています。
メモ:
ERXSession
と ERXDirectAction
は ERXBrowserFactory
の
retainBrowser
と releaseBrowser
を呼び出し、
ブラウザ・オブジェクトが作成される時にブラウザ・プールに追加し、ダイレクト・アクションやセッションよりの参照が
なくなるとブラウザ・プールから削除します。
ERXSession
と ERXDirectAction
は自動的に処理しますので、
自分でこれらのメソッドを呼ぶことはありません。
カレント実装では多数の Webブラウザをサポートしています。例えば、 Internet Explorer (IE),
OmniWeb, Netscape, iCab と Opera, バージョン番号は 2.0 から 7.0 まで "user-agent"
パースを拡張する場合には ERXBrowserFactory
をサブクラス化し、次のメソッド parseBrowserName
,
parseVersion
, parseMozillaVersion
と parsePlatForm
をオーバライドすると良いです。
後は次のステートメントをコンストラクタにセットします。
ERXBrowserFactory.setFactory(new SubClassOfERXBrowserFactory())
;
ERXBrowser
の独自のサブクラスを作成されたい場合は次のステートメントをコンストラクタにセットします。
ERXBrowserFactory.factory().setBrowserClassName("NameOfTheSubClassOfERXBrowser")
この実装は次のブラウザ "user-agent" でテストされています。 Mac OS X ---------------------------------------------------------------------------------- iCab 2.8.1 Mozilla/4.5 (compatible; iCab 2.8.1; Macintosh; I; PPC) IE 5.21 Mozilla/4.0 (compatible; MSIE 5.21; Mac_PowerPC) Netscape 7.0b1 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0rc2) Gecko/20020512 Netscape/7.0b1 Netscape 6.2.3 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:0.9.4.1) Gecko/20020508 Netscape6/6.2.3 OmniWeb 5.11.1 Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7_3; en-US) AppleWebKit/533.21.1+(KHTML, like Gecko, Safari/533.19.4) Version/5.11.1 OmniWeb/622.18.0 Safari 1.0b(v48) Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/48 (like Gecko) Safari/48 iPhone 1.0 Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 Windows 2000 ---------------------------------------------------------------------------------- IE 6.0 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) IE 5.5 Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Netscape 6.2.3 Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.4.1) Gecko/20020508 Netscape6/6.2.3 Netscape 4.79 Mozilla/4.79 [en] (Windows NT 5.0; U) Opera 6.04 Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.04 [en]
Name | Description |
---|---|
er.extensions.ERXBrowserFactory.FactoryClassName | er.extensions.ERXBrowserFactory.FactoryClassName |
er.extensions.ERXBrowserFactory.BrowserClassName | (default ERXBasicBrowser) |
Modifier and Type | Field and Description |
---|---|
protected String |
_browserClassName
Caches the browser class name
ブラウザ・クラス名:キャシュ用
|
Constructor and Description |
---|
ERXBrowserFactory()
Public browser constructor.
|
Modifier and Type | Method and Description |
---|---|
String |
browserClassName()
Returns the name of the
ERXBrowser subclass. |
String |
browserClassNameForBrowserNamed(String browserName)
Adds the option to use multiple different ERXBrowser subclasses
depending on the name of the browser.
|
ERXBrowser |
browserMatchingRequest(com.webobjects.appserver.WORequest request)
Gets a shared browser object for given request.
|
ERXBrowser |
browserMatchingUserAgent(String ua)
Returns a shared browser object for a given
user-agent
string by parsing the string and retrieving the appropriate browser
object, creating it if necessary. |
ERXBrowser |
createBrowser(String browserName,
String version,
String mozillaVersion,
String platform,
NSDictionary userInfo)
Creates a new browser object for given parameters.
|
static ERXBrowserFactory |
factory()
Gets the singleton browser factory object.
|
ERXBrowser |
getBrowserInstance(String browserName,
String version,
String mozillaVersion,
String platform,
NSDictionary userInfo)
Gets a shared browser object from browser pool.
|
String |
parseBrowserName(String userAgent)
ブラウザ名をパースします
|
String |
parseCPU(String userAgent)
CPUをパースします
|
String |
parseGeckoVersion(String userAgent)
GeckoVersionをパースします
|
String |
parseMozillaVersion(String userAgent)
Mozillaバージョンをパースします
|
String |
parsePlatform(String userAgent)
プラットフォームをパースします
|
String |
parseVersion(String userAgent)
バージョン番号をパースします
|
void |
releaseBrowser(ERXBrowser browser)
Decrements the retain count for a given
browser object.
|
void |
retainBrowser(ERXBrowser browser)
Retains a given browser object.
|
void |
setBrowserClassName(String name)
Sets the name of the
ERXBrowser subclass. |
static void |
setFactory(ERXBrowserFactory newFactory)
Sets the browser factory used to create browser objects.
|
protected String _browserClassName
public static ERXBrowserFactory factory()
public static void setFactory(ERXBrowserFactory newFactory)
newFactory
- public String browserClassName()
ERXBrowser
subclass.
The default value is "er.extensions.appserver.ERXBasicBrowser"
.
ERXBrowser
サブクラスの名前を戻します。
デフォルト値は "er.extensions.appserver.ERXBasicBrowser"
.
"er.extensions.appserver.ERXBasicBrowser"
"er.extensions.appserver.ERXBasicBrowser"
setBrowserClassName(java.lang.String)
public void setBrowserClassName(String name)
ERXBrowser
subclass.
name
- browserClassName()
,
createBrowser(java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.webobjects.foundation.NSDictionary)
public ERXBrowser browserMatchingRequest(com.webobjects.appserver.WORequest request)
"user-agent"
string in the request and gets
the appropriate browser object.
This is the primary method to call from application logics, and
once you get a browser object, you are responsible to call
retainBrowser
to keep the browser
object in the browser pool.
You are also required to call releaseBrowser
to release the browser from the pool when it is no longer needed.
"user-agent"
文字列をパースし、適切なブラウザ・オブジェクトを取得します。
アプリケーション・ロジックより呼ばれるメイン・メソッドになります。 ブラウザ・オブジェクトを取得した後、ブラウザ・オブジェクトをブラウザ・プールに登録する retainBrowser メソッドの呼び出しは開発者の責任です。
他にもオブジェクトが不必要になった場合には releaseBrowser を呼ばなければなりません。
request
- - WORequestpublic ERXBrowser browserMatchingUserAgent(String ua)
user-agent
string by parsing the string and retrieving the appropriate browser
object, creating it if necessary.
Use this method to retrieve a browser instance from an existing
user-agent string rather than a request object (e.g. you're
recreating a browser instance from a past user-agent string). Once
you get the browser object, you are responsible for calling retainBrowser
to keep it in the browser pool.
You are also required to call releaseBrowser
to release the browser from the pool when it is no longer needed.
ua
- - user agent string (e.g. from request headers)public ERXBrowser getBrowserInstance(String browserName, String version, String mozillaVersion, String platform, NSDictionary userInfo)
createBrowser
method.
createBrowser
メソッドを使って作成します。
browserName
- version
- mozillaVersion
- platform
- userInfo
- public ERXBrowser createBrowser(String browserName, String version, String mozillaVersion, String platform, NSDictionary userInfo)
ERXBrowser
.
If you override it, your implementation should not call super
.
Alternatively, use setBrowserClassName(java.lang.String)
and browserClassName()
.
super
を呼ばないこと。
他には setBrowserClassName(java.lang.String)
と browserClassName()
を使用できます。
browserName
- version
- mozillaVersion
- platform
- userInfo
- ERXBrowser
ERXBrowser
を明確なサブクラスとして持つ新規ブラウザ・オブジェクトsetBrowserClassName(java.lang.String)
,
browserClassName()
public void retainBrowser(ERXBrowser browser)
browser
- public void releaseBrowser(ERXBrowser browser)
browser
- public String browserClassNameForBrowserNamed(String browserName)
browserName
- public String parseBrowserName(String userAgent)
userAgent
- public String parseGeckoVersion(String userAgent)
userAgent
- public String parseVersion(String userAgent)
userAgent
- public String parseMozillaVersion(String userAgent)
userAgent
- public String parsePlatform(String userAgent)
userAgent
- Copyright © 2002 – 2020 Project Wonder.