Ⅰ web app與安卓ios的區別嗎
function androidOrIosSys() {
var browser = {
versions : function() {
var u = navigator.userAgent, app = navigator.appVersion;
return {// 移動終端瀏覽器版本信息
trident : u.indexOf('Trident') > -1, // IE內核
presto : u.indexOf('Presto') > -1, // opera內核
webKit : u.indexOf('AppleWebKit') > -1, // 蘋果、谷歌內核
gecko : u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, // 火狐內核
mobile : !!u.match(/AppleWebKit.*Mobile.*/)
|| !!u.match(/AppleWebKit/), // 是否為移動終端
ios : !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios終端
android : u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, // android終端或者uc瀏覽器
iPhone : u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, // 是否為iPhone或者QQHD瀏覽器
iPad : u.indexOf('iPad') > -1, // 是否iPad
webApp : u.indexOf('Safari') == -1
// 是否web應該程序,沒有頭部與底部
};
}(),
language : (navigator.browserLanguage || navigator.language)
.toLowerCase()
}
if (browser.versions.ios || browser.versions.iPhone
|| browser.versions.iPad) {
return 1;
} else if (browser.versions.android) {
return 2;
}
}
<html>
<body>
<script type="text/javascript">
document.write("<p>瀏覽器:")
document.write(navigator.appName + "</p>")
document.write("<p>瀏覽器版本:")
document.write(navigator.appVersion + "</p>")
document.write("<p>代碼:")
document.write(navigator.appCodeName + "</p>")
document.write("<p>平台:")
document.write(navigator.platform + "</p>")
document.write("<p>Cookies 啟用:")
document.write(navigator.cookieEnabled + "</p>")
document.write("<p>瀏覽器的用戶代理報頭:")
document.write(navigator.userAgent + "</p>")
</script>
</body>
</html>
Ⅱ 為什麼.net開發的webapp在android機上不能鎐ookie
Android中在使用OkHttp這個庫的時候,有時候需要持久化Cookie,那麼怎麼實現呢。OkHttp的內部源碼過於復雜,不進行深究,這里只看其中的HttpEngineer裡面的部分源碼,在發起請求以及請求結束都會調用這個類的幾個方法。我們先看networkRequest方法,在裡面通過client.getCookieHandler()函數獲得了CookieHandler對象,通過該對象拿到cookie並設置到請求頭里,請求結束後取得響應後通過networkResponse.headers()函數將請求頭獲得傳入receiveHeaders函數,並將取得的cookie存入getCookieHandler得到的一個CookieHandler對象中去
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
This client doesn't specify a default {@code Accept} header because it
* doesn't know what content types the application is interested in.
*/
private Request networkRequest(Request request) throws IOException {
Request.Builder result = request.newBuilder();
//此處省略n行代碼......
CookieHandler cookieHandler = client.getCookieHandler();
if (cookieHandler != null) {
// Capture the request headers added so far so that they can be offered to the CookieHandler.
// This is mostly to stay close to the RI; it is unlikely any of the headers above would
// affect cookie choice besides Host.
Map<string, string="">> headers = OkHeaders.toMultimap(result.build().headers(), null);
Map<string, string="">> cookies = cookieHandler.get(request.uri(), headers);
// Add any new cookies to the request.
OkHeaders.addCookies(result, cookies);
}
//此處省略n行代碼......
return result.build();
} data-snippet-id=ext. data-snippet-saved=false data-csrftoken=bFkHGE1O-cy7WY9D6w70F6qK9YUKZHLynI5g data-codota-status=done><code class="hljs" java="">/**
* Populates request with defaults and cookies.
*
* </code><p><code class="hljs" java="">This client doesn't specify a default {@code Accept} header because it
* doesn't know what content types the application is interested in.
*/
private Request networkRequest(Request request) throws IOException {
Request.Builder result = request.newBuilder();
//此處省略n行代碼......
CookieHandler cookieHandler = client.getCookieHandler();
if (cookieHandler != null) {
// Capture the request headers added so far so that they can be offered to the CookieHandler.
// This is mostly to stay close to the RI; it is unlikely any of the headers above would
// affect cookie choice besides Host.
Map<string, string="">> headers = OkHeaders.toMultimap(result.build().headers(), null);
Map<string, string="">> cookies = cookieHandler.get(request.uri(), headers);
// Add any new cookies to the request.
OkHeaders.addCookies(result, cookies);
}
//此處省略n行代碼......
return result.build();
}</string,></string,></code></p></string,></string,>
?
1
2
3
4
5
6
7
<code class="hljs" java="">public void readResponse() throws IOException {
//此處省略n行代碼......
receiveHeaders(networkResponse.headers());
//此處省略n行代碼......
}</code>
?
1
2
3
4
5
6
<code class="hljs" java="">public void receiveHeaders(Headers headers) throws IOException {
CookieHandler cookieHandler = client.getCookieHandler();
if (cookieHandler != null) {
cookieHandler.put(userRequest.uri(), OkHeaders.toMultimap(headers, null));
}
}</code>
而這個CookieHandler對象是OkHttpClient類中的一個屬性,提供了getter和setter方法,默認的構造函數OkHttpClient client = new OkHttpClient();不會創建這個CookieHandler對象。假設我們傳入了這個對象,那麼OkHttp自然會進行cookie的自動管理了。
?
1
2
3
4
5
6
7
8
9
<code class="hljs" cs="">private CookieHandler cookieHandler;
public OkHttpClient setCookieHandler(CookieHandler cookieHandler) {
this.cookieHandler = cookieHandler;
return this;
}
public CookieHandler getCookieHandler() {
return cookieHandler;
}</code>
那麼假設我們將CookieHandler對象傳入
?
1
2
<code axapta="" class="hljs">OkHttpClient client = new OkHttpClient();
client.setCookieHandler(CookieHandler cookieHanlder);</code>
那麼,現在關鍵是如何去實現這個CookieHandler 對象。CookieManager是CookieHandler 的一個子類,其構造函數 public CookieManager(CookieStore store, CookiePolicy cookiePolicy)需要傳入兩個參數,CookieStore 是一個介面,因此我們實現CookieStore介面中的抽象方法,即可實現這個CookieHandler 對象。參考android-async-http這個庫,它具有cookie的自動管理功能,主要我們參考其中的兩個類
PersistentCookieStore SerializableCookie
參考以上兩個類並做適當修改,得到了如下兩個類,他們的功能就是將cookie保持在SharedPreferences中。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<code avrasm="" class="hljs">package com.kltz88.okhttp.cookie;
/**
* User:lizhangqu([email protected])
* Date:2015-07-13
* Time: 17:31
*/
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.HttpCookie;
public class SerializableHttpCookie implements Serializable {
private static final long serialVersionUID = 6374381323722046732L;
private transient final HttpCookie cookie;
private transient HttpCookie clientCookie;
public SerializableHttpCookie(HttpCookie cookie) {
this.cookie = cookie;
}
public HttpCookie getCookie() {
HttpCookie bestCookie = cookie;
if (clientCookie != null) {
bestCookie = clientCookie;
}
return bestCookie;
}
private void writeObject(ObjectOutputStream out) throws IOException {
out.writeObject(cookie.getName());
out.writeObject(cookie.getValue());
out.writeObject(cookie.getComment());
out.writeObject(cookie.getCommentURL());
out.writeObject(cookie.getDomain());
out.writeLong(cookie.getMaxAge());
out.writeObject(cookie.getPath());
out.writeObject(cookie.getPortlist());
out.writeInt(cookie.getVersion());
out.writeBoolean(cookie.getSecure());
out.writeBoolean(cookie.getDiscard());
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
String name = (String) in.readObject();
String value = (String) in.readObject();
clientCookie = new HttpCookie(name, value);
clientCookie.setComment((String) in.readObject());
clientCookie.setCommentURL((String) in.readObject());
clientCookie.setDomain((String) in.readObject());
clientCookie.setMaxAge(in.readLong());
clientCookie.setPath((String) in.readObject());
clientCookie.setPortlist((String) in.readObject());
clientCookie.setVersion(in.readInt());
clientCookie.setSecure(in.readBoolean());
clientCookie.setDiscard(in.readBoolean());
}
}</code>
?
Ⅲ 誰能介紹一些單點登錄系統
tomcat的的下載地址http://www.apache.org/dist/jakarta/tomcat-4/
1、安裝jdk,詳細操作請參考本站windows 2k和redhat 8.0下java環境配置
2、如何修改埠號
使用文本編輯器如EditPlus,打開server.xml文件,查找到
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
useURIValidationHack="false" disableUploadTimeout="true" />
將其中的8080,改成80,然後重啟tomcat,本機使用http://localhost即可訪問。
註:其他版本,查找相應的8080,然後修改。
3、修改發布目錄
例如將d:\test目錄作為自己的文檔發布目錄,並指定mytest為http訪問的相對目錄(本機即http://localhost/mytest)。
同上要修改server.xml文件,找到
<!-- Tomcat Root Context -->
<!--
<Context path="" docBase="ROOT" debug="0"/>
-->
去掉注釋,或者將已經屏蔽掉的<Context path="" docBase="ROOT" debug="0"/> 復制到下面的空白處,這時候復制的文本已經可以彩色亮顯。根據例子中的要求,修改這段文本如下:
<Context path="/mytest" docBase="d:\test" debug="0"/>
然後重啟tomcat,本機即可通過http://localhost/mytest來訪問放在d:\test目錄下的JSP文件。
總結:
如上例中發布目錄結構整體結構如下:
d:\test┄┄JSP文件
│
└/WEB-INF┄┄web.xml
│
└/classes┈┈JavaBean/Servlet文件
│
└myPackages(包路徑) ┈┈JavaBean/Servlet文件
Tomcat配置技巧Top 10
2004-01-09 17:19:25
作者:Jason Brittain & Ian F. Darwin
出處:http://www.orielly.com
譯者:陳光
2003-12-31
編者按:現在開發Java Web應用,建立和部署Web內容是一件很簡單的工作。使用Jakarta Tomcat作為Servlet和JSP容器的人已經遍及全世界。Tomcat具有免費、跨平台等諸多特性,並且更新得很快,現在非常的流行。
你所需要做的就是:按照你的需求配置Tomcat,只要你正確配置,Tomcat一般都能適合你的要求。下面是一系列關於Tomcat的配置技巧,這些技巧源自於我的書:《Tomcat權威指南》,希望對你有所幫助。—— Jason Brittain
1. 配置系統管理(Admin Web Application)
大多數商業化的J2EE伺服器都提供一個功能強大的管理界面,且大都採用易於理解的Web應用界面。Tomcat按照自己的方式,同樣提供一個成熟的管理工具,並且絲毫不遜於那些商業化的競爭對手。Tomcat的Admin Web Application最初在4.1版本時出現,當時的功能包括管理context、data source、user和group等。當然也可以管理像初始化參數,user、group、role的多種資料庫管理等。在後續的版本中,這些功能將得到很大的擴展,但現有的功能已經非常實用了。
Admin Web Application被定義在自動部署文件:CATALINA_BASE/webapps/admin.xml 。
(譯者註:CATALINA_BASE即tomcat安裝目錄下的server目錄)
你必須編輯這個文件,以確定Context中的docBase參數是絕對路徑。也就是說,CATALINA_BASE/webapps/admin.xml 的路徑是絕對路徑。作為另外一種選擇,你也可以刪除這個自動部署文件,而在server.xml文件中建立一個Admin Web Application的context,效果是一樣的。你不能管理Admin Web Application這個應用,換而言之,除了刪除CATALINA_BASE/webapps/admin.xml ,你可能什麼都做不了。
如果你使用UserDatabaseRealm(默認),你將需要添加一個user以及一個role到CATALINA_BASE/conf/tomcat-users.xml 文件中。你編輯這個文件,添加一個名叫「admin」的role 到該文件中,如下:
<role name="admin"/>
你同樣需要有一個用戶,並且這個用戶的角色是「admin」。象存在的用戶那樣,添加一個用戶(改變密碼使其更加安全):
<user name="admin" password="deep_dark_secret" roles="admin"/>
當你完成這些步驟後,請重新啟動Tomcat,訪問http://localhost:8080/admin,你將看到一個登錄界面。Admin Web Application採用基於容器管理的安全機制,並採用了Jakarta Struts框架。一旦你作為「admin」角色的用戶登錄管理界面,你將能夠使用這個管理界面配置Tomcat。
2.配置應用管理(Manager Web Application)
Manager Web Application讓你通過一個比Admin Web Application更為簡單的用戶界面,執行一些簡單的Web應用任務。
Manager Web Application被被定義在一個自動部署文件中:
CATALINA_BASE/webapps/manager.xml 。
你必須編輯這個文件,以確保context的docBase參數是絕對路徑,也就是說CATALINA_HOME/server/webapps/manager的絕對路徑。
(譯者註:CATALINA_HOME即tomcat安裝目錄)
如果你使用的是UserDatabaseRealm,那麼你需要添加一個角色和一個用戶到CATALINA_BASE/conf/tomcat-users.xml文件中。接下來,編輯這個文件,添加一個名為「manager」的角色到該文件中:
<role name=」manager」>
你同樣需要有一個角色為「manager」的用戶。像已經存在的用戶那樣,添加一個新用戶(改變密碼使其更加安全):
<user name="manager" password="deep_dark_secret" roles="manager"/>
然後重新啟動Tomcat,訪問http://localhost/manager/list,將看到一個很樸素的文本型管理界面,或者訪問http://localhost/manager/html/list,將看到一個HMTL的管理界面。不管是哪種方式都說明你的Manager Web Application現在已經啟動了。
Manager application讓你可以在沒有系統管理特權的基礎上,安裝新的Web應用,以用於測試。如果我們有一個新的web應用位於/home/user/hello下在,並且想把它安裝到 /hello下,為了測試這個應用,我們可以這么做,在第一個文件框中輸入「/hello」(作為訪問時的path),在第二個文本框中輸入「file:/home/user/hello」(作為Config URL)。
Manager application還允許你停止、重新啟動、移除以及重新部署一個web應用。停止一個應用使其無法被訪問,當有用戶嘗試訪問這個被停止的應用時,將看到一個503的錯誤——「503 - This application is not currently available」。
移除一個web應用,只是指從Tomcat的運行拷貝中刪除了該應用,如果你重新啟動Tomcat,被刪除的應用將再次出現(也就是說,移除並不是指從硬碟上刪除)。
3.部署一個web應用
有兩個辦法可以在系統中部署web服務。
1> 拷貝你的WAR文件或者你的web應用文件夾(包括該web的所有內容)到$CATALINA_BASE/webapps目錄下。
2> 為你的web服務建立一個只包括context內容的XML片斷文件,並把該文件放到$CATALINA_BASE/webapps目錄下。這個web應用本身可以存儲在硬碟上的任何地方。
如果你有一個WAR文件,你若想部署它,則只需要把該文件簡單的拷貝到CATALINA_BASE/webapps目錄下即可,文件必須以「.war」作為擴展名。一旦Tomcat監聽到這個文件,它將(預設的)解開該文件包作為一個子目錄,並以WAR文件的文件名作為子目錄的名字。接下來,Tomcat將在內存中建立一個context,就好象你在server.xml文件里建立一樣。當然,其他必需的內容,將從server.xml中的DefaultContext獲得。
部署web應用的另一種方式是寫一個Context XML片斷文件,然後把該文件拷貝到CATALINA_BASE/webapps目錄下。一個Context片斷並非一個完整的XML文件,而只是一個context元素,以及對該應用的相應描述。這種片斷文件就像是從server.xml中切取出來的context元素一樣,所以這種片斷被命名為「context片斷」。
舉個例子,如果我們想部署一個名叫MyWebApp.war的應用,該應用使用realm作為訪問控制方式,我們可以使用下面這個片斷:
<!--
Context fragment for deploying MyWebApp.war
-->
<Context path="/demo" docBase="webapps/MyWebApp.war"
debug="0" privileged="true">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Context>
把該片斷命名為「MyWebApp.xml」,然後拷貝到CATALINA_BASE/webapps目錄下。
這種context片斷提供了一種便利的方法來部署web應用,你不需要編輯server.xml,除非你想改變預設的部署特性,安裝一個新的web應用時不需要重啟動Tomcat。
4.配置虛擬主機(Virtual Hosts)
關於server.xml中「Host」這個元素,只有在你設置虛擬主機的才需要修改。虛擬主機是一種在一個web伺服器上服務多個域名的機制,對每個域名而言,都好象獨享了整個主機。實際上,大多數的小型商務網站都是採用虛擬主機實現的,這主要是因為虛擬主機能直接連接到Internet並提供相應的帶寬,以保障合理的訪問響應速度,另外虛擬主機還能提供一個穩定的固定IP。
基於名字的虛擬主機可以被建立在任何web伺服器上,建立的方法就是通過在域名伺服器(DNS)上建立IP地址的別名,並且告訴web伺服器把去往不同域名的請求分發到相應的網頁目錄。因為這篇文章主要是講Tomcat,我們不準備介紹在各種操作系統上設置DNS的方法,如果你在這方面需要幫助,請參考《DNS and Bind》一書,作者是Paul Albitz and Cricket Liu (O'Reilly)。為了示範方便,我將使用一個靜態的主機文件,因為這是測試別名最簡單的方法。
在Tomcat中使用虛擬主機,你需要設置DNS或主機數據。為了測試,為本地IP設置一個IP別名就足夠了,接下來,你需要在server.xml中添加幾行內容,如下:
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Service name="Tomcat-Standalone">
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"/>
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0" scheme="https" secure="true"/>
<Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
clientAuth="false" protocol="TLS" />
</Connector>
<Engine name="Standalone" defaultHost="localhost" debug="0">
<!-- This Host is the default Host -->
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="ROOT" debug="0"/>
<Context path="/orders" docBase="/home/ian/orders" debug="0"
reloadable="true" crossContext="true">
</Context>
</Host>
<!-- This Host is the first "Virtual Host": www.example.com -->
<Host name="www.example.com" appBase="/home/example/webapp">
<Context path="" docBase="."/>
</Host>
</Engine>
</Service>
</Server>
Tomcat的server.xml文件,在初始狀態下,只包括一個虛擬主機,但是它容易被擴充到支持多個虛擬主機。在前面的例子中展示的是一個簡單的server.xml版本,其中粗體部分就是用於添加一個虛擬主機。每一個Host元素必須包括一個或多個context元素,所包含的context元素中必須有一個是默認的context,這個默認的context的顯示路徑應該為空(例如,path=」」)。
5.配置基礎驗證(Basic Authentication)
容器管理驗證方法控制著當用戶訪問受保護的web應用資源時,如何進行用戶的身份鑒別。當一個web應用使用了Basic Authentication(BASIC參數在web.xml文件中auto-method元素中設置),而有用戶訪問受保護的web應用時,Tomcat將通過HTTP Basic Authentication方式,彈出一個對話框,要求用戶輸入用戶名和密碼。在這種驗證方法中,所有密碼將被以64位的編碼方式在網路上傳輸。
注意:使用Basic Authentication通過被認為是不安全的,因為它沒有強健的加密方法,除非在客戶端和伺服器端都使用HTTPS或者其他密碼加密碼方式(比如,在一個虛擬私人網路中)。若沒有額外的加密方法,網路管理員將能夠截獲(或濫用)用戶的密碼。但是,如果你是剛開始使用Tomcat,或者你想在你的web應用中測試一下基於容器的安全管理,Basic Authentication還是非常易於設置和使用的。只需要添加<security-constraint>和<login-config>兩個元素到你的web應用的web.xml文件中,並且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加適當的<role>和<user>即可,然後重新啟動Tomcat。
下面例子中的web.xml摘自一個俱樂部會員網站系統,該系統中只有member目錄被保護起來,並使用Basic Authentication進行身份驗證。請注意,這種方式將有效的代替Apache web伺服器中的.htaccess文件。
<!--
Define the Members-only area, by defining
a "Security Constraint" on this Application, and
mapping it to the subdirectory (URL) that we want
to restrict.
-->
<security-constraint>
<web-resource-collection>
<web-resource-name>
Entire Application
</web-resource-name>
<url-pattern>/members/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
<!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My Club Members-only Area</realm-name>
</login-config>
6.配置單點登錄(Single Sign-On)
一旦你設置了realm和驗證的方法,你就需要進行實際的用戶登錄處理。一般說來,對用戶而言登錄系統是一件很麻煩的事情,你必須盡量減少用戶登錄驗證的次數。作為預設的情況,當用戶第一次請求受保護的資源時,每一個web應用都會要求用戶登錄。如果你運行了多個web應用,並且每個應用都需要進行單獨的用戶驗證,那這看起來就有點像你在與你的用戶搏鬥。用戶們不知道怎樣才能把多個分離的應用整合成一個單獨的系統,所有他們也就不知道他們需要訪問多少個不同的應用,只是很迷惑,為什麼總要不停的登錄。
Tomcat 4的「single sign-on」特性允許用戶在訪問同一虛擬主機下所有web應用時,只需登錄一次。為了使用這個功能,你只需要在Host上添加一個SingleSignOn Valve元素即可,如下所示:
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/>
在Tomcat初始安裝後,server.xml的注釋裡麵包括SingleSignOn Valve配置的例子,你只需要去掉注釋,即可使用。那麼,任何用戶只要登錄過一個應用,則對於同一虛擬主機下的所有應用同樣有效。
使用single sign-on valve有一些重要的限制:
1> value必須被配置和嵌套在相同的Host元素里,並且所有需要進行單點驗證的web應用(必須通過context元素定義)都位於該Host下。
2> 包括共享用戶信息的realm必須被設置在同一級Host中或者嵌套之外。
3> 不能被context中的realm覆蓋。
4> 使用單點登錄的web應用最好使用一個Tomcat的內置的驗證方式(被定義在web.xml中的<auth-method>中),這比自定義的驗證方式強,Tomcat內置的的驗證方式包括basic、digest、form和client-cert。
5> 如果你使用單點登錄,還希望集成一個第三方的web應用到你的網站中來,並且這個新的web應用使用它自己的驗證方式,而不使用容器管理安全,那你基本上就沒招了。你的用戶每次登錄原來所有應用時需要登錄一次,並且在請求新的第三方應用時還得再登錄一次。當然,如果你擁有這個第三方web應用的源碼,而你又是一個程序員,你可以修改它,但那恐怕也不容易做。
6> 單點登錄需要使用cookies。
7.配置用戶定製目錄(Customized User Directores)
一些站點允許個別用戶在伺服器上發布網頁。例如,一所大學的學院可能想給每一位學生一個公共區域,或者是一個ISP希望給一些web空間給他的客戶,但這又不是虛擬主機。在這種情況下,一個典型的方法就是在用戶名前面加一個特殊字元(~),作為每位用戶的網站,比如:
http://www.cs.myuniversity.e/~username
http://members.mybigisp.com/~username
Tomcat提供兩種方法在主機上映射這些個人網站,主要使用一對特殊的Listener元素。Listener的className屬性應該是org.apache.catalina.startup.UserConfig,userClass屬性應該是幾個映射類之一。如果你的系統是Unix,它將有一個標準的/etc/passwd文件,該文件中的帳號能夠被運行中的Tomcat很容易的讀取,該文件指定了用戶的主目錄,使用PasswdUserDatabase 映射類。
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一樣的目錄下面。當然你也可以改變public_html 到其他任何子目錄下。
實際上,這個用戶目錄根本不一定需要位於用戶主目錄下裡面。如果你沒有一個密碼文件,但你又想把一個用戶名映射到公共的像/home一樣目錄的子目錄裡面,則可以使用HomesUserDatabase類。
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html" homeBase="/home"
userClass="org.apache.catalina.startup.HomesUserDatabase"/>
這樣一來,web文件就可以位於像/home/ian/public_html 或者 /home/jasonb/public_html一樣的目錄下。這種形式對Windows而言更加有利,你可以使用一個像c:\home這樣的目錄。
這些Listener元素,如果出現,則必須在Host元素裡面,而不能在context元素裡面,因為它們都用應用於Host本身。
8.在Tomcat中使用CGI腳本
Tomcat主要是作為Servlet/JSP容器,但它也有許多傳統web伺服器的性能。支持通用網關介面(Common Gateway Interface,即CGI)就是其中之一,CGI提供一組方法在響應瀏覽器請求時運行一些擴展程序。CGI之所以被稱為通用,是因為它能在大多數程序或腳本中被調用,包括:Perl,Python,awk,Unix shell scripting等,甚至包括Java。當然,你大概不會把一個Java應用程序當作CGI來運行,畢竟這樣太過原始。一般而言,開發Servlet總要比CGI具有更好的效率,因為當用戶點擊一個鏈接或一個按鈕時,你不需要從操作系統層開始進行處理。
Tomcat包括一個可選的CGI Servlet,允許你運行遺留下來的CGI腳本。
為了使Tomcat能夠運行CGI,你必須做如下幾件事:
1. 把servlets-cgi.renametojar (在CATALINA_HOME/server/lib/目錄下)改名為servlets-cgi.jar。處理CGI的servlet應該位於Tomcat的CLASSPATH下。
2. 在Tomcat的CATALINA_BASE/conf/web.xml 文件中,把關於<servlet-name> CGI的那段的注釋去掉(默認情況下,該段位於第241行)。
3. 同樣,在Tomcat的CATALINA_BASE/conf/web.xml文件中,把關於對CGI進行映射的那段的注釋去掉(默認情況下,該段位於第299行)。注意,這段內容指定了HTML鏈接到CGI腳本的訪問方式。
4. 你可以把CGI腳本放置在WEB-INF/cgi 目錄下(注意,WEB-INF是一個安全的地方,你可以把一些不想被用戶看見或基於安全考慮不想暴露的文件放在此處),或者你也可以把CGI腳本放置在context下的其他目錄下,並為CGI Servlet調整cgiPathPrefix初始化參數。這就指定的CGI Servlet的實際位置,且不能與上一步指定的URL重名。
5. 重新啟動Tomcat,你的CGI就可以運行了。
在Tomcat中,CGI程序預設放置在WEB-INF/cgi目錄下,正如前面所提示的那樣,WEB-INF目錄受保護的,通過客戶端的瀏覽器無法窺探到其中內容,所以對於放置含有密碼或其他敏感信息的CGI腳本而言,這是一個非常好的地方。為了兼容其他伺服器,盡管你也可以把CGI腳本保存在傳統的/cgi-bin目錄,但要知道,在這些目錄中的文件有可能被網上好奇的沖浪者看到。另外,在Unix中,請確定運行Tomcat的用戶有執行CGI腳本的許可權。
9.改變Tomcat中的JSP編譯器(JSP Compiler)
在Tomcat 4.1(或更高版本,大概),JSP的編譯由包含在Tomcat裡面的Ant程序控制器直接執行。這聽起來有一點點奇怪,但這正是Ant有意為之的一部分,有一個API文檔指導開發者在沒有啟動一個新的JVM的情況下,使用Ant。這是使用Ant進行Java開發的一大優勢。另外,這也意味著你現在能夠在Ant中使用任何javac支持的編譯方式,這里有一個關於Apache Ant使用手冊的javac page列表。使用起來是容易的,因為你只需要在<init-param> 元素中定義一個名字叫「compiler」,並且在value中有一個支持編譯的編譯器名字,示例如下:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>
org.apache.jasper.servlet.JspServlet
</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<init-param>
<param-name>compiler</param-name>
<param-value>jikes</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
當然,給出的編譯器必須已經安裝在你的系統中,並且CLASSPATH可能需要設置,那處決於你選擇的是何種編譯器。
10.限制特定主機訪問(Restricting Access to Specific Hosts)
有時,你可能想限制對Tomcat web應用的訪問,比如,你希望只有你指定的主機或IP地址可以訪問你的應用。這樣一來,就只有那些指定的的客戶端可以訪問服務的內容了。為了實現這種效果,Tomcat提供了兩個參數供你配置:RemoteHostValve 和RemoteAddrValve。
通過配置這兩個參數,可以讓你過濾來自請求的主機或IP地址,並允許或拒絕哪些主機/IP。與之類似的,在Apache的httpd文件里有對每個目錄的允許/拒絕指定。
例如你可以把Admin Web application設置成只允許本地訪問,設置如下:
<Context path="/path/to/secret_files" ...>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1" deny=""/>
</Context>
如果沒有給出允許主機的指定,那麼與拒絕主機匹配的主機就會被拒絕,除此之外的都是允許的。與之類似,如果沒有給出拒絕主機的指定,那麼與允許主機匹配的主機就會被允許,除此之外的都是拒絕的。
隨著java的流行,其在web上的應用也越來越廣,tomcat作為一個開源的servlet容器,應用前景越來越廣,本文將向你講述tomcat的一些知識。
一:簡介
tomcat是jakarta項目中的一個重要的子項目,其被JavaWorld雜志的編輯選為2001年度最具創新的java產品(Most Innovative Java Proct),同時它又是sun公司官方推薦的servlet和jsp容器(具體可以見http://java.sun.com/procts/jsp/tomcat/),因此其越來越多的受到軟體公司和開發人員的喜愛。servlet和jsp的最新規范都可以在tomcat的新版本中得到實現。
二:安裝及配置
tomcat最新版本為4.0.1,這個版本用了一個新的servlet容器Catalina,完整的實現了servlet2.3和jsp1.2規范。注意安裝之前你的系統必須安裝了jdk1.2以上版本。
(一):安裝
1:windows平台
從tomcat網站下載jakarta-tomcat-4.0.1.exe,按照一般的windows程序安裝步驟即可安裝好tomcat,安裝時它會自動尋找你的jdk和jre的位置。
2:linux平台
下載jakarta-tomcat-4.0.1.tar.gz,將其解壓到一個目錄。
(二):配置
運行tomcat需要設置JAVA_HOME變數
set JAVA_HOME=c:/jdk (win98,在msdos方式下使用,或者放入autoexec.bat中)
export JAVA_HOME=/usr/local/jdk (linux下使用,放到/etc/bashrc或者/etc/profile中)
(三):運行
設置完畢後就可以運行tomcat伺服器了,進入tomcat的bin目錄,win98下用startup啟動tomcat,linux下用startup.sh,相應的關閉tomcat的命令為shutdown和shutdown.sh。
啟動後可以在瀏覽器中輸入http://localhost:8080/測試,由於tomcat本身具有web伺服器的功能,因此我們不必安裝apache,當然其也可以與apache集成到一起,下面會介紹。
下面你可以測試其自帶的jsp和servlet示例。
三:應用
(一):目錄結構
tomcat的目錄結構如下: 目錄名 簡介
bin 存放啟動和關閉tomcat腳本
conf 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
work 存放jsp編譯後產生的class文件
webapp 存放應用程序示例,以後你要部署的應用
另外還有像Eclipse、WebSphere、WebLogic這樣的IDE環境,就不一一介紹了!
Ⅳ Web App 和 Native App,哪個是趨勢
Web的特點為業務邏輯和數據存諸基本上全在服務端,傳統Web不支持離線應用,Cookies僅支持4K;而App除了能做Web能做的事,即C/S+B/S兩層架構外,支持離線應用,WebKit或者說HTML5引入了資料庫機制允許離線操作,未來兩者可能會融合。總得來說,Web只是我們作為設計者和開發者所期待的一種理想化結果,開發成本低、輕松跨平台、迭代更新快,但是顯然,現階段用戶的期待和手機設備廠商的期待還是體驗上更勝一籌的Native。Web之於我們,只是一種趨勢。在這個也許會非常久的過渡階段,對復雜產品來說,NativeApp+WebApp也許是個不錯的解決方案。
Ⅳ 我用java寫的cookie運行的時候出現錯誤500,瀏覽器ie10,火狐,用的是tomcat6.0.29
您好!很高興為您答疑!
檢查下文件名和保存路徑,為Setcookies換個名字,火狐下您可以安裝Firebug,配合使用。
您可以在火狐社區了解更多內容。希望我的回答對您有所幫助,如有疑問,歡迎繼續在本平台咨詢。
Ⅵ cookie如何提取admin
關於提取Cookie的方法2007-05-24 09:43ASP中的Cookie用法:
Cookie是一種發送到客戶瀏覽器的文本串句柄,並保存在客戶機硬碟上,可以用來在某個Web站點會話之間持久地保持數據。Request和Response對象都有一組Cookie。Request.cookie集合是一系列Cookie,從客戶端與HTTP Request一起發送到Web伺服器。反過來,如果你希望把Cookie發送到客戶機,就可以使用Response.Cookies.
1、Expires屬性
該屬性可以賦一個日期,過了這個日期Cookie就不能再被使用了。通過給Expires屬性賦一個過期的日期,就可以刪除Cookie。如:
<%Response.cookies("passtime").Expires=DateAdd("m", 1, NOW)%>
這樣設置Cookie在一個月後過期。
2、Domain屬性
該屬性定義Cookie要傳送的唯一域。如:Cookie只傳送給Microsoft的人,則可以使用以下代碼。
<%Response.Cookies("domain").Domain="http://www.microsoft.com/"%>
3、ASP用來寫入Cookie即向客戶機發送Cookie的語法如下:
Response.Cookies("Cookie名").[("鍵名").屬性]=內容
如果某個ASP文件要創建一個Cookie,則下面的代碼可以放在ASP文件的第一個<html>之前,以避免產生錯誤.
<%Response.Cookies("CookieName")="NewCookie" %>
<html>
......
</html>
4、同樣ASP用Request對象的Cookies集合來讀取Cookie,如:
<%Response.write Request.Cookies("CookieName")%>
下面以一個完整的例子來說明Cookie:
<%
dim Num
Num=Request.Cookies("Visit_num")
if Num>0 then
Num=Num+1
Response.write "您已是第" & Num & "次訪問本站點了。"
else
Response.write "歡迎您首次訪問本站。"
Num=1
end if
Response.Cookies("Visit_num")=Num
%>
在該例子中,首先讀取Cookies變數Visit_num,看用戶端計算機是否保存有Cookies變數。如果有該變數,則說明用戶已經訪問過該頁面,同時輸入出訪問次數。如果用戶是首次訪問該頁面,則其計算機內不會有Cookies變數,程序會顯示「歡迎」字樣,然後將Cookies變數Visit_num存到用戶計算機中,以便該用戶下一次訪問該頁面時給出「訪問的次數」信息。
5、Cookie字典
有時在一個頁面中可能需要定義很多個Cookies變數,為了更好地管理它,在Cookies組件中常引入一人的概念「子鍵」。引用它的語法如下:
Request.Cookies("變更名")("子鍵名")
如下面的Cookie創建一個名為"Dictionary"的字典,其中保存了三個鍵值:
<%
Response.Cookie("info")("Myname")="jeff"
Response.Cookie("info")("Gender")="male"
Response.Cookie("info")("Myheight")="172"
%>
事實上客戶機上的Cookie字典是以字元串的形式存在:
info=Myname=jeff&Gender=male&Myheight=172
如果用戶沒有指定「子鍵」名而直接引用Cookies變數,將會返回一個包含所有的「子鍵」名及值的字元串。例如上面這個例子包含三個「子鍵」:"Myname"、"Gender"和"Myheight",當用戶沒有指定其「子鍵」而直接通過Request.Cookies("info")來引用時,則會得到下列字元串:
info=Myname=jeff&Gender=male&Myheight=172
如果要把Cookie中讀取的所有數據,可以用下面的代碼得到:
<%For each cookie in Request.Cookies
if Not cookie.HasKeys then
Response.write cookie & "=" & Request.Cookies(cookie)
Else
for each key in Request.Cookies(cookie)
Response.write cookie&"("&key&")"&"="& Request.Cookies(cookie)(key)
next
end if
next
%>
常的cookie只能在一個應用中共享,即一個cookie只能由創建它的應用獲得。
1.在同一應用伺服器內共享的方法:設置cookie.setPath("/");
設本機tomcat/webapp下面有兩個應用:cas和webapp_b
1)原來在cas下面設置的cookie,在webapp_b下面獲取不到,
path默認是產生cookie的應用的路徑。
2)若在cas下面設置cookie的時候,增加一條:
cookie.setPath("/");或者cookie.setPath("/webapp_b/");
就可以在webapp_b下面獲取到cas設置的cookie了。
3)此處的參數,是相對於應用伺服器存放應用的文件夾的根目錄而言的(比如tomcat下面的webapp),因此cookie.setPath("/");之後,可以在webapp文件夾下的所有應用共享cookie,而cookie.setPath("/webapp_b/"),是指cas應用設置的cookie只能在webapp_b應用下的獲得,即便是產生這個cookie的cas應用也不可以。
4)設置cookie.setPath("/webapp_b/jsp/")的時候,只有在webapp_b/jsp下面可以獲得cookie,在webapp_b下面但是在jsp文件夾外的都不能獲得cookie。
5)設置cookie.setPath("/webapp_b/"),是指在webapp_b下面才可以使用cookie,這樣就不可以在產生cookie的應用cas下面獲取cookie了。
6)有多條cookie.setPath("XXX");語句的時候,起作用的以最後一條為准。
7)設置多個path的方法???
2.跨域共享cookie的方法:設置cookie.setDomain(".jszx.com");
A機所在的域:home.langchao.com,A有應用cas
B機所在的域:jszx.com,B有應用webapp_b
1)在cas下面設置cookie的時候,增加cookie.setDomain(".jszx.com");,這樣在webapp_b下面就可以取到cookie。
2)這個參數必須以「.」開始。
3)輸入url訪問webapp_b的時候,必須輸入域名才能解析。比如說在A機器輸入:http://lc-bsp.jszx.com:8080/webapp_b,可以獲取cas在客戶端設置的cookie,而B機器訪問本機的應用,輸入:http://localhost:8080/webapp_b則不可以獲得cookie。
4)設置了cookie.setDomain(".jszx.com");,還可以在默認的home.langchao.com下面共享。
5)設置多個域的方法???
Ⅶ java中cookie的運行理念是什麼
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//設置Cookie
//1:伺服器可以向客戶端寫內容
//2:只能是文本內容
//3:客戶端可以阻止伺服器寫入
//4:只能拿自己webapp寫入的東西
//5:Cookie分為兩種,第一種:屬於窗口/子窗口(放在內存中的),第二種:屬於文本(有生命周期的)
//6:一個servlet/jsp設置的cookies能夠被同一個路徑下面或者子路徑下面的servlet/jsp讀到 (路徑 = URL)(路徑 != 真實文件路徑)
public class SetCookies extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
for (int i = 0; i < 3; i++) {
// Default maxAge is -1, indicating cookie applies only to current browsing session.
Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i);
response.addCookie(cookie);
cookie = new Cookie("Persistent-Cookie-" + i, "Cookie-Value-P" + i);
// Cookie is valid for an hour, regardless of whether user quits browser, reboots computer, or whatever.
cookie.setMaxAge(3600);
response.addCookie(cookie);
}
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
out.println("<html><head><title>設置Cookie</title></head>"
+ "<BODY>\n"
+ "<H1 ALIGN=\"CENTER\">"
+ "設置Cookie" + "</H1>\n"
+ "6個Cookie\n"
+ "<A HREF=\"ShowCookies\">\n"
+ "查看</A>.\n"
+ "</BODY></HTML>");
}
}
-------------
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//讀取客戶端的Cookie
public class ShowCookies extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
String title = "Active Cookies";
out.println("<html><head><title>獲取客戶端Cookie</title></head>" +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
"<TABLE BORDER=1 ALIGN=\"CENTER\">\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
" <TH>Cookie Name\n" +
" <TH>Cookie Value");
Cookie[] cookies = request.getCookies();
if (cookies != null) {
Cookie cookie;
for(int i=0; i<cookies.length; i++) {
cookie = cookies[i];
out.println("<TR>\n" +
" <TD>" + cookie.getName() + "</TD>\n" +
" <TD>" + cookie.getValue() + "</TD></TR>\n" );
}
}
out.println("</TABLE></BODY></HTML>");
}
}
Ⅷ java中如何獲取cookie
1.設置cookie到客戶端
Cookie c1 = new Cookie("username","hzh");
response.addCookie(c1);
Cookie c2 = new Cookie("password","123");
//設置生命周期為1小時,秒為單位
c2.setMaxAge(3600);
response.addCookie(c2);
response.getWriter().print("ok");
查看此時的cookie文件,發現只寫入了password,因為此時未給 username設置生命周期,它還在客戶端的內存中,並為寫到文件中(此時客戶端關閉此瀏覽器窗口,就丟失了),想寫到客戶端,需要加入c1.setMaxAge(3600)在 response.addCookie(c1);之前
以下是寫入我電腦中的cookie
2.讀取cookie文件
Cookie[] cookies = request.getCookies();
for(Cookie c :cookies ){
System.out.println(c.getName()+"--->"+c.getValue());
}
控制台輸出結果如下:
username--->hzh
password--->123
JSESSIONID--->
注意:
1.伺服器可以向客戶端寫內容, 只能是文本內容
2.客戶端可以阻止伺服器寫入,禁用cookies
3.只能讀取自己webapp寫入的東西
Ⅸ tomcat伺服器工作原理
tomcat伺服器的工作原理可以概括為以下幾點:
1、Tomcat是運行在JVM中的一個進程。它定義為「中間件」,顧名思義是一個在Java項目與JVM之間的中間容器。
2、Web項目的本質,是一大堆的資源文件和方法。Web項目沒有入口方法(即main方法),這意味著Web項目中的方法不會自動運行起來。
Web項目部署進Tomcat的webapp中的目的是很明確的,那就是希望Tomcat去調用寫好的方法去為客戶端返回需要的資源和數據。
3、Tomcat可以運行起來,並調用寫好的方法。那麼,Tomcat一定有一個main方法。對於Tomcat而言,它並不知道用戶會有什麼樣的方法,這些都只是在項目被部署進webapp下後才確定的。
由此,可知Tomcat用到了Java的反射來實現類的動態載入、實例化、獲取方法、調用方法。但是部署到Tomcat的中的Web項目必須是按照規定好的介面來進行編寫,以便進行調用。
(9)webappcookies擴展閱讀:
tomcat伺服器的特點:
Tomcat運行時佔用的系統資源小,擴展性好,支持負載均衡與郵件服務等開發應用系統常用的功能。Tomcat是一個開源的web伺服器,且是一個小型的輕量級應用伺服器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選。
對於一個初學者來說,可以這樣認為,當在一台機器上配置好Apache伺服器,可利用它響應對HTML頁面的訪問請求。實際上Tomcat部分是Apache伺服器的擴展,所以當你運行tomcat時,它實際上作為一個Apache獨立的進程單獨運行的。
當配置正確時,Apache為HTML頁面服務,而Tomcat實際上運行JSP頁面和Servlet。另外,Tomcat和IIS、Apache等Web伺服器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。
參考資料來源:網路-tomcat
Ⅹ 世界之窗3.0選項設置
了整理收藏夾的功能(在收藏夾菜單中可用)
視頻播放器功能增加了對大量常見網路視頻格式的支持
了Cookie同步的選項。可讓新窗口使用不同的Cookie,便於同時登錄多個賬號
增加了插件欄。可選擇擴展在狀態欄、插件欄、工具菜單里顯示 - 在管理功能組件對話框里調整(暫時僅下載擴展支持選擇,之後有更多擴展支持選擇)
增加了添加網頁快捷方式到桌面的功能 - 在標簽右鍵菜單中使用(由theworld.exe同目錄下的webapp.exe支持,今後將支持更多特性)
增加了使用世界之窗格式收藏夾時的備份功能(在data目錄下的backup目錄中)
增加了「在搜索欄顯示搜索詞」的選項,以便不習慣此功能的用戶去掉(在搜索欄的搜索引擎菜單里設置)
增加了系統信息擴展
增加了快速啟動擴展,可將任意文件添加到瀏覽器狀態欄以便快速啟動
擴展在此頁面下載:http://www.ioage.com/tw/addon.html
改進:
改進了一些瀏覽器消息的處理,使瀏覽器反應更快速了
改進打開播放器的功能,修復了視頻閃爍的問題
改進了多進程Cookie共享的處理,改善了Cookie丟失的問題
360安全紅綠燈,修復了導致RSS頁面打不開的問題
截圖擴展,更換了更便於識別的圖標
下載擴展,改進了添加對話框。表現更友好,並支持一鍵直接選用其他下載工具
下載擴展,加入了設置始終使用IE下載的文件類型的功能
下載擴展,已完成任務上加入了打開文件夾的功能
下載擴展,加入了添加下載時是否打開下載窗口的選項設置
下載擴展,改進了重命名的邏輯。獲取下載文件的名稱更智能了
修復:
修復了某種情況下,可能導致配置丟失的問題
修復了防假死功能下,Alt+Tab切換窗口導致頁面焦點丟失的問題
修復了 Windows 7 下,狀態欄可能出現兩個程序圖標的問題
修復了非管理器帳號下,啟動總是提示設置默認瀏覽器的問題
修復了快速點擊外部鏈接,導致打開多個瀏覽器窗口的問題
修復了對話框打開時,非前台顯示的幾個問題
修復了Ctrl+Tab切換標簽順序不正確的問題
修復了拖拽網頁圖片不能打開的問題
修復了點擊網頁鏈接打開新標簽卡的問題
修復了某種情況下可能導致崩潰的問題
修復了一個GDI資源泄漏的問題
修復了一個進程駐留的問題
修復了雅虎郵箱無法上傳附件的問題
修復了視頻播放器功能的數個兼容性問題
修復了地址欄網址別名和自動完成沖突的問題
修復了安裝擴展後,狀態欄圖標位置可能重置的問題
修復了某種情況下點擊外部鏈接時,可能新開一個窗口訪問的問題
修復了導入、導出收藏夾時的一些邏輯問題
修復了某種情況下頁面查找無法查找到文字的問題
修復了特殊情況下導致點擊菜單欄收藏按鈕無效的問題
下載擴展,修復了導致狀態欄圖標顯示位置不能自定義的問題
2009-11-3世界之窗 3.0 正式版 (3.0.7.8)
增加:
使用世界之窗收藏夾時,重新加入了對JS腳本的支持。之前的版本出於安全性的考慮關閉了此支持
修復:
修復了安裝程序在某些情況下可能產生錯誤的問題
2009-10-30世界之窗 3.0 正式版 (3.0.7.7)
改進:
改進了防假死功能下的使用體驗
修復:
修復了上個版本Esc關閉對話框失效的問題
修復了某種情況下丟失網站Cookie的問題
修復了用視頻播放器窗口打開QQ農場閃爍的問題
2009-10-26世界之窗 3.0 正式版 (3.0.7.6)
增加:
雙擊快捷方式圖標新建多個窗口可同時登陸多個QQ空間帳號了
修復:
修復了防假死功能下的多個問題,改進了防假死功能下的兼容性
修復了IE6下不能登錄網路收藏夾的問題
2009-10-14世界之窗 3.0 正式版 (3.0.7.1)
增加:
增加了地址欄自動補全的功能
視頻播放器功能,加入了對迅雷看看視頻的支持
增加了搜索欄和查找欄的關鍵字同步功能
增加了關閉地址欄智能提示的選項(在選項 - 隱私保護 中設置)
改進:
地址欄智能提示,大幅提升了輸入時的效率
地址欄智能提示,改進了提示內容的規則,更智能了
改進了起始頁 最常訪問 的網址內容,更准確了
搜索按鈕右鍵改為訪問搜索引擎首頁
選項、起始頁等頁面默認不再使用微軟雅黑,以免不開啟Cleartype時,頁面顯示模糊
在側邊欄添加收藏時,默認添加到側邊欄展開的目錄
視頻播放器功能,改進了提示出現的時機 - 在一些Flash廣告上不顯示提示
改進了下載、代理伺服器等擴展的設置保存,避免某些情況下丟失設置
金山網址安全擴展,更新數據時,不再顯示氣泡提示
Windows 7下的任務欄多標簽預覽改為默認關閉。可在 選項 - 高級 - 其他 里開啟
修復:
修復了某些情況下可能丟失網站Cookie的問題
修復了防假死功能下帶有Alt的快捷鍵失效的問題
修復了防假死功能下,頁面區域顯示不正常的幾個問題
修復了添加收藏和目錄時,收藏夾順序重排的問題
修復了某些情況下,網站信息和金山安全擴展導致狀態欄顯示錯亂的問題
修復了某種情況下將視頻在獨立窗口息顯示後,不能輸入文字的問題
修復了 Windows 7 下靜音功能可能導致瀏覽器始終沒有聲音的問題
修復了歷史記錄里存在某些特殊字元時導致TW崩潰的問題
修復了收藏夾菜單上懸停時,狀態欄網址顯示延遲的問題
修復了搜索欄和查找欄文字顏色未讀取皮膚配置的問題
下載擴展,修復了下載文件可能損壞的問題
下載擴展,修復了使用下載全部功能時,多媒體類別顯示的內容不完整的問題
下載擴展,修復了修改同時進行的下載任務數導致下載閃斷的問題
金山網址安全擴展,修復了某些情況下,圖標始終顯示為危險的問題
廣告過濾擴展,修復了從白名單刪除網站設置未保存的問題
2009-9-18世界之窗 3.0 正式版 (3.0.6.5)
增加:
圖標進度動畫(ProgressState) - 頁面載入時或清理瀏覽記錄時,任務欄圖標上顯示進度動畫
多點觸摸(Multi-Touch) - 支持多點觸摸屏幕:單指動作同IE。雙指動作同滑鼠手勢。三指動作 - 向下:關閉標簽,三指向上:恢復標簽,三指向左或向右:切換標簽
跳轉列表(JumpList支持) - 右擊任務欄上的圖標,顯示隱私瀏覽、進程管理器及常用網站等入口
多標簽預覽(TabbedThumbnail) - 滑鼠懸停在任務欄圖標上時,顯示打開的標簽預覽(待完善)
圖標下載提示(DownloadState) - 使用內建下載時,任務欄圖標上會顯示正在下載的文件數目。多於3個時,顯示為「...」
修復:
修復了Windows 7下,防假死功能帶來的切換標簽速度慢、頁面閃爍等問題
修復了Windows 7下輸入法同步失靈的問題
下載擴展,修復了界面上的一些細節問題
下載擴展,修復了某種情況下,關閉瀏覽器導致正在進行的下載也被關閉的問題
修復了打開某些RSS訂閱項,頁面顯示亂碼的問題
修復了在頁面內聊天的時候,標簽會顯示進度動畫的問題
修復了更換皮膚時的GDI資源泄漏問題
2009-9-4世界之窗 3.0 正式版 (3.0.5.9)
修復:
修復了打開某些頁面時導致假死或崩潰的問題
2009-9-1世界之窗 3.0 正式版 (3.0.5.7)
增加:
增加了輸入法同步的功能
改進:
改進了地址欄智能輸入提示的相應速度
優化了多處性能,在同時打開多個頁面時或老電腦上,速度有明顯提升
改進了上次退出時未關閉的頁面tw:list的細節,打開全部後自動關閉此頁
恢復菜單和標簽列表菜單支持了滑鼠中鍵點擊
修改了標簽動畫的幀數,視覺效果更平滑的同時,降低了系統資源消耗
金山網址安全擴展,修改了狀態欄的安全狀態圖標
代理伺服器擴展,加回了狀態欄圖標按鈕(可通過自定義狀態欄按鈕隱藏掉)
修復:
修復了某種情況下頁面拖拽可能導致頁面不正常的問題
修復了Windows 7的窗口熱鍵的支持,如:WIN+←、WIN+→
修復了Windows 7 下最大化後任務欄上空出1像素的問題
修復了「在新標簽打開收藏夾里的網址」不勾選時,也生效的問題
修復了某種情況下,地址欄輸入後打開頁面卡住幾秒的問題
修復了打開某些特殊頁面時,頁面自動關閉的問題
修復了皮膚繪制的數個問題
修復了某種特殊情況下收藏夾排序被重置的問題
金山網址安全擴展,修復了一些可能導致主程序不正常的問題
RSS訂閱擴展,修復了某些訂閱無法顯示圖片的問題
RSS訂閱擴展,修復了一個可能導致瀏覽器不正常的問題
自動填表擴展,修復了啟用、禁用此擴展未立即生效的問題
搜索建議擴展,修復了 Google 搜索建議格式變化導致未能顯示的問題
2009-8-13世界之窗 3.0 正式版 (3.0.4.9)
增加:
增加了與金山合作開發的「金山網址安全」擴展,使用來自金山的數據攔截惡意網站。惡意網站範例(勿輕易打開):http://iacmr.gsm.pku.e.cn/
增加了截圖擴展
增加了「只打開一個瀏覽器窗口」的選項
增加了「檢查更新」的功能(幫助菜單中)
增加了將快捷鍵功能設置為「無動作」的功能。避免默認的快捷鍵和其他軟體沖突
增加了上次異常退出時未關閉的頁面列表 - tw:list(僅在啟動時不顯示起始頁的情況下出現)
改進:
將代理伺服器擴展的菜單從狀態欄移到了工具菜單中
收藏夾右鍵菜單里的「打開」,改為「在新標簽打開」
改進了起始頁「最近關閉的窗口」的保存邏輯,異常退出時未關閉的頁面也會記錄到起始頁了
界面的文字運陰影效果調整,去掉了橫向陰影,僅保留縱向陰影
修復:
修復了Gmail(美國)不能上傳附件的問題
修復了某些極端情況下,在收藏欄拖拽導致崩潰的問題
修復了某些搜索引擎圖標無法在搜索欄顯示的問題
修復了收藏夾菜單在雙屏下顯示位置不正確的問題
修復了視頻播放器在雙屏下彈出後位置不正確的問題
修復了關閉老闆鍵需要重啟瀏覽器才能生效的問題
修復了某種系統環境下安裝時選擇簡潔皮膚未生效的問題
修復了某些情況下老闆鍵隱藏窗口後,會被外部鏈接調出的問題
修復了保存網頁的類型選擇全部時保存失敗的問題
修復了頁面崩潰後,其他頁面顯示不正常的問題
修復了地址欄「粘貼並訪問」,沒有使用地址欄搜索引擎的問題
修復了恢復標簽功能在某種情況下,恢復的頁面不正確的問題
2009-7-30世界之窗 3.0 正式版 (3.0.4.5)
增加:
增加了「恢復已關閉標簽」時,能保留前進、後退頁面的功能。從恢復列表中恢復的標簽暫不支持此功能,會盡快支持。
改進:
自定義Cookies和臨時文件保存路徑時,若選擇的是世界之窗目錄,則在路徑後自動添加子目錄(Cookies添加cookies、臨時文件添加ietemp)
全面更新了正體中文(繁體中文)的翻譯。多謝用電郵與我們聯絡,幫忙翻譯的小緯,以及論壇上的很多熱心網友
下載擴展 - 改進了添加下載和任務屬性對話框的某些功能,避免用戶誤操作
下載擴展 - 批量下載頁面圖片時,優先讀取緩存里已下載的圖片,提高下載速度、節省帶寬。(其他文件不從緩存下載)
下載擴展 - 支持了拖拽下載列表的文件到文件夾的功能
下載擴展 - 支持了直接拖拽頁面下載到下載窗口進行下載的功能
RSS擴展 - 改進了RSS頁面的文字大小等一些細節,便於閱讀
修復:
修復了魔獸世界戰網無法登錄的問題
修復了防假死模式下切換標簽閃屏的問題
修復了滑鼠懸停切換標簽導致任務欄世界之窗閃動的問題
修復了禁用某些擴展後,退出瀏覽器出錯的問題
修復了某些情況下後退按鈕無效的問題
修復了某些情況下滑鼠手勢滾動頁面失效的問題
修復了皮膚某些地方的顏色使用不正確的問題
修復了默認界面無法正確使用Theme字體的問題
修復了某些用戶無法解析rss、需要刷新才能登陸論壇的問題
修復了下載圖標導致某些頁面無法登陸的問題
修復了打開某些不規范的網頁提示「Windows 損壞的圖像」的問題
修復了起始頁網路搜索中文出現問號的問題
2009-7-16世界之窗 3.0 正式版 (3.0.4.1)
改進:
改進了防假死功能下的使用體驗
文件菜單里選擇「打開」,將在新標簽中打開,不覆蓋當前標簽
修復:
修復了某種情況下不能登錄Gmail的問題
修復了Vista和win7開啟UAC下,某些設置無法保存的問題
修復了某種情況下中鍵點擊鏈接打開標簽的功能失效的問題
修復了地址欄輸入網址後,未能即時加入到下拉列表裡的問題
修復了設置老闆鍵對話框里點擊X,快捷鍵被設置為ESC的問題
修復了設置老闆鍵快捷鍵後,中鍵隱藏自動被啟用的問題
修復了卸載程序導致卸載不完全的問題
2009-7-9 21:00世界之窗 3.0 正式版 (3.0.3.9)
修復:
修復了導入2.X設置的工具,在某種情況下,導入收藏夾路徑出錯的問題
2009-7-9世界之窗 3.0 正式版 (3.0.3.9)
增加:
增加了導入2.X的設置到3.0的功能。位於文件菜單 - 導入導出
改進:
改進了防假死功能的使用體驗
改進了擴展的安裝速度
地址欄下拉列表記錄里屏蔽了本地路徑,更適合瀏覽器用戶使用
修復:
修復了Flash視頻播放器導致內存釋放不正常的問題
修復了使用內建下載的「直接打開」功能,打開某些郵箱附件出錯的問題
修復了某種情況下,中鍵點擊鏈接顯示載入中的問題
修復了某種情況下,添加收藏地址不正確的問題
修復了從收藏夾里打開搜索結果頁面,頁面亂碼的問題
修復了頁面里點擊中鍵不出現滾動圖標的問題
修復了某種情況下不能重復查找關鍵字的問題
修復了收藏夾根目錄下設置「我的最愛」功能未立刻生效的問題
修復了某種網頁里聲音無法播放的問題
2009-7-2世界之窗 3.0 RC 2版 (3.0.3.6)
增加:
增加了如下3個擴展:自動填表、RSS訂閱夾、代理伺服器
增加了在視頻播放器中打開視頻的功能
增加了滑鼠懸停切換標簽的功能
增加了滑鼠在標簽欄上滾動切換標簽的功能
增加了選擇是否在新標簽打開收藏夾的選項
增加了滑鼠懸停在收藏夾菜單、恢復標簽列表、標簽列表等處時的標題和地址提示
增加了對收藏夾里的網址自定義圖標的支持
網頁工具欄的翻譯功能里增加了翻譯到繁體中文及阿拉伯語
瀏覽歷史頁面增加了批量清除搜索結果的功能
更多菜單里增加了「向上一層」和「切換總在新標簽打開鏈接」,以便設置快捷鍵
網頁鏈接的右鍵菜單增加了「在隱私瀏覽窗口中打開」的功能
改進:
改進了搜索引擎的設置里指定地址欄搜索使用某個搜索引擎的功能(默認和搜索欄相同)
改進了隱私瀏覽窗口 - 標題欄始終不顯示網頁標題
改進了Ctrl+Shift+S顯示/隱藏側邊欄的邏輯,更符合使用習慣了
其他眾多細節功能的改進
修復:
修復了防假死模式下閃屏的問題,改進了防假死模式下的表現
修復了中鍵(或按住Ctrl)點擊鏈接在新標簽打開的一些問題
修復了網頁靜音功能在禁止某些聲音出發出雜音的問題
修復了Windows 7下設置自動隱藏系統任務欄的情況下,最大化世界之窗後,滑鼠指向任務欄不能顯示任務欄的問題
修復了在收藏夾里使用按名稱排序的功能後,收藏欄目錄重置為收藏夾根目錄的問題
修復了拖拽標簽為窗口功能在某些操作下可能導致崩潰的問題
修復了山東移動登陸後無法操作的問題
修復了訪問某些特定頁面假死的問題
修復某種情況下切換收藏夾可能崩潰的問題
修復了地址欄的智能輸入提示里URL與標題不一致的問題
修復了廣告過濾誤攔截的問題
修復了不能攔截126和163郵箱關閉後彈出窗口的問題
修復了Vista及Windows 7下安裝及卸載擴展失敗的問題
修復了「強制在新標簽中打開網頁上的鏈接「導致某些頁面無法打開的問題(如新浪郵箱收件夾)
修復了形如localhost/demo的地址無法訪問的問題
修復了拖拽地址欄網站圖標到文件夾創建快捷方式時,名稱含有某些字元被判斷為目錄的問題
2009-6-11世界之窗 3.0 RC版 (3.0.2.8)
增加:
增加了保存網站圖標的功能。保存在程序目錄的data\ico目錄下 - 注意:第一次運行時,會發現收藏夾里圖標完全顯示為默認,需要訪問一次後即可正確顯示
下載擴展增加了下載全部的功能
增加了將停止、刷新按鈕顯示在地址欄前面的選項 - 狀態欄右鍵菜單里可設置
增加了自動刷新的功能,使用方法同2.X
查找欄加入了右鍵菜單
增加了一些滑鼠手勢動作 - 添加到收藏夾、向上一層、用IE訪問此地址、鎖定解鎖標簽、保存媒體、切換到第一個標簽、切換到最後一個標簽
增加了氣泡提示,目前只加入了少量提示
增加了卸載擴展時的確認對話框
收藏夾文件夾右鍵菜單增加了按名稱排序的功能
插件管理器中增加了獲取更多的按鈕
改進:
改進了收藏欄不顯示圖標的功能,即使勾選這個功能也不再隱藏添加及網路收藏夾圖標了
改進了下載窗口,當沒有下載任務時,關閉主程序同時退出下載窗口
改進了快捷鍵的處理順序,優先處理網頁上的快捷鍵
改進了地址欄網址的顯示 - 對於較長的網址,當地址欄獲得焦點的時候,超出地址欄部分的字元不再自動滾動顯示後半部分
改進了廣告攔截擴展,能攔截更多類型的彈出窗口了
修復:
修復了某些情況下中鍵點擊鏈接仍然在當前標簽打開的問題
修復了廣告攔截擴展導致誤攔截,以及OA系統登錄不了的問題
修復了點擊廣告攔截擴展按鈕導致頁面上的Flash暫停的問題
修復了右鍵+滾輪的滑鼠手勢不能連續切換標簽的問題
修復了按TAB不能轉到地址欄的下拉列表的問題
修復了在Vista和Windows 7的某種情況下無法在線安裝擴展的問題
修復了刪除擴展後必須重啟瀏覽器才能再次安裝該擴展的問題
修復了不執行腳本功能失效的問題
修復了混合進程下,換膚可能導致進程崩潰的問題
修復了禁用廣告過濾擴展導致狀態欄圖標混亂的問題
修復了某種極端情況下出現崩潰頁面的問題
2009-5-27世界之窗 3.0 測試版 2(3.0.2.5)
修復:
修復了使用滑鼠手勢時手勢圖標顯示不正確的問題
2009-5-26世界之窗 3.0 測試版 2(3.0.2.4)
增加:
增加了廣告過濾擴展。(暫時只有彈出窗口及浮動元素過濾,之後會有更強大的功能)
增加了老闆鍵的功能(若使用的綠色版,請將裡面的Extensions擴展目錄解壓覆蓋,方能看到此選項)
增加了中鍵點擊窗口最小化到托盤圖標的功能
增加了設置收藏欄目錄的功能
增加了收藏夾按鈕右鍵的功能 - 顯示/隱藏側邊欄收藏夾
增加了右鍵復制圖片地址的功能
增加了添加常用搜索引擎的頁面
增加了「當網站出錯的時候顯示友好錯誤頁面」的選項(選項 - 高級 分類中)
收藏夾菜單里增加了顯示/隱藏收藏欄的功能
收藏夾菜單加入了添加到此目錄的功能(可在選項里去掉)
收藏夾自定義路徑增加了對相對路徑的支持
添加收藏夾對話框的選擇收藏夾菜單增加了使用鍵盤定位的功能
下載擴展增加了對其他下載軟體的支持並能將其他下載軟體設置為默認下載工具
起始頁里的「定製」菜單里,增加了「啟動時顯示此頁」的選項
友好錯誤頁面上增加了查看網頁快照的功能
改進:
改進了進程模型的處理,老機器下使用更流暢了
改進了地址欄下拉列表的使用體驗
改進了外觀按鈕左鍵的功能,改為了顯示/隱藏菜單欄,右鍵仍然為打開選項
改進了對外部鏈接調用的處理,不再用新的窗口打開了,而是在已打開的世界之窗窗口裡打開
改進了對http:google.com這種地址的支持,之前必須輸入//才能被識別
改進了菜單欄的顯示,對於新安裝的用戶,默認皮膚下預設顯示菜單欄
改進了標簽欄右側的按鈕的功能(改為了更加實用的標簽列表),同時可選擇是否在右側顯示關閉按鈕(類似2.X)
改進了托盤圖標,當只有一個瀏覽器窗口時,點擊托盤區圖標可在顯示和隱藏間切換
改進了網址別名的數量限制,目前可以設置128個網址別名了
修復:
修復了幾個主程序、下載擴展及搜索建議擴展的崩潰問題
修復了點擊標簽導致新建標簽的問題
修復了頁面上已訪問的鏈接不變色的問題
修復了一個內核對象未釋放的問題
修復了Gmail里無法添加附件的問題
修復了Google音樂的挑歌頁面上,無法顯示歌曲的問題
修復了對某些網站的Cookies讀取、保存不正確的問題
修復了某種情況下載擴展無法下載文件的問題
修復了在IE8下訪問某些網站時,使用網站記住登陸狀態的功能失敗的問題
修復了Vista下安裝世界之窗後,第一次運行時進行的設置無法正確保存的問題
修復了一些輸入法在地址欄輸入時無法顯示輸入條的問題
修復了頁面查找的高亮顯示關鍵字功能的問題
修復了某些頁面無法保持縮放比例的問題
修復了友好錯誤頁面上F5無法刷新的問題
修復了移動搜索引擎排序時,導致默認搜索引擎改變的問題
修復了Windows 7下彈出對話框導致世界之窗界面鎖住的問題
修復了某種彈出窗口關閉後,界面失去響應的問題
修復了拖拽大量文字時,拖拽保存為文件保存不完整的問題
修復了拖拽某些腳本鏈接時標題顯示不正確的問題
修復了主程序、下載擴展和插件管理器的幾個繪制的問題
修復了使用滑鼠手勢最小化世界之窗,未能根據設置最小化到托盤的問題
修復了拖拽窗口最後一個標簽到其他瀏覽窗口後,托盤圖標顯示不正常的問題
修復了重啟Explorer進程後,托盤圖標消失的問題
修復了某些情況下,已隱藏的收藏欄被自動顯示出來的問題
修復了自定義狀態欄按鈕的位置後重啟瀏覽器又恢復默認位置的問題
修復了標簽選項不顯示關閉按鈕的時候,點擊關閉按鈕區域仍會關閉的問題
2009-4-29世界之窗 3.0 測試版(Beta)
增加:
增加並完善了滑鼠手勢、網址輔助、搜索引擎等選項
增加了隱私瀏覽的功能。在隱私瀏覽窗口中瀏覽的網站將不會被記錄。點以下鏈接了解更多:
http://www.ioage.com/tw3/help/privatemode.htm
增加了增強下載的擴展。安裝擴展後,即可使用2.0的內建下載功能
增加了搜索建議的擴展。安裝擴展後,在搜索框輸入時,即時顯示Google搜索建議
增加了右鍵點擊搜索按鈕搜索頁面選中的文字的功能。若未選中文字,則搜索第一個輸入框里的文字
增加了對IEBHO插件的支持
增加了滑鼠手勢的樣式選擇。關閉瀏覽器後,編輯theworld.ini,在[option]節下加入GestureStyle參數即可控制滑鼠手勢的樣式
GestureStyle=1表示只顯示圖標
GestureStyle=2表示只顯示線條
GestureStyle=3表示顯示圖標和線條
增加了將標簽欄放在網頁下方的選擇。關閉瀏覽器後,編輯theworld.ini,在[option]節下加入tabalign=0即可將標簽欄顯示在網頁下方。(僅對傳統樣式的皮膚生效,對Chrome樣式的皮膚無效)
更換了默認皮膚(安裝版和綠色版仍將包含之前的Chrome樣式皮膚)
全面改進了收藏夾和網路收藏夾的相關功能
改進了地址欄輸入時的智能提示