Ⅰ 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样式皮肤)
全面改进了收藏夹和网络收藏夹的相关功能
改进了地址栏输入时的智能提示