随笔-22  评论-8  文章-0  trackbacks-0
  2011年5月30日
     摘要: 最近给机器装上了Archlinux的操作系统,可以windows有进还不得不用,所以下载了virtualBox,准备安装个虚拟机;安装比较简单,可装好后与主系统(archlinux)如何交换数据呢?看到了数据空间,想到是用这个,可一直也没有搞清楚如可进行设置,所以就放了下来。 最近在网上看到一篇文章,对数据空间进行了说明,才搞清楚是这么回事。闲话少说,就说怎么设置吧:  阅读全文
posted @ 2011-12-29 17:21 Hukin 阅读(1968) | 评论 (1)编辑 收藏
     摘要: 每个文件系统分为3部分:超级块,i-节点表,数据区 。
超级块 :存放文件系统本身的信息,比如记录了每个区域的大小,或未被使用的磁盘块的信息。(不同版本稍有差别)
i-节点表 :每个文件都有其属性,大小,最近修改时间等等,这些被存储在ino_t 的结构体中,所有的i-节点都有一样的大小,i-节点表就是这样一些节点的列表。
(表中的每个i-节点都通过位置来标志,例如标志为2的i-节点位于文件系统i-节点表中的第3个位置 )
数据块 :存放文件内容,因为块的大小一定,所以有时一个文件会分布在多个磁盘上。
  阅读全文
posted @ 2011-12-28 11:16 Hukin 阅读(5049) | 评论 (1)编辑 收藏
@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
length是属性,一般集合类对象拥有的属性,取得集合的大小。
     例如:数组.length就是取得数组的长度。
length()是方法,一般字符串类对象有该方法,也是取得字符串长度。
     例如:字符串.length();
posted @ 2011-09-03 13:39 Hukin 阅读(373) | 评论 (0)编辑 收藏
     摘要: 一、指令元素(directive elements):控制所生成的servlet结构。
JSP指令用于“转换阶段”提供整个JSP页面的相关信息,影响由JSP页面生成的Servlet的整体结构。
指令不会产生任何的输出到当前的输出流中。

1,指令元素语法:
<%@ directive {attr="value"}* %>
说明:
<和% 以及和@,%和>之间不能有任何的空格。
属性值两边的双引号可以替换为单引号。引号标记不能完全省略。
在属性中使用引号使用\进行转义。
2,指令的xml语法:


在编写XML兼容的jsp页面时,只要不在同一页面中混用xml语法和标准语法,就可以使用指令的xml兼容模式。  阅读全文
posted @ 2011-08-29 17:12 Hukin 阅读(1596) | 评论 (0)编辑 收藏
     摘要: 创建了一个名为:hbchen 密码为:hbchen (的)用户。
然后登录一下。
mysql>exit;
@>mysql -u hbchen -p
@>输入密码
mysql>登录成功   阅读全文
posted @ 2011-08-28 21:04 Hukin 阅读(21693) | 评论 (0)编辑 收藏
     摘要: jion 语句有三种,inner join, left outer join 和 right outer join 都可以简写,分别为jion,left join,right jion。

jion语句可以用来组合两个表中的记录,只要在公共字段之中有相符的值即可,该语句联合两个表查询得到的结果是可以添加新的数据,可以把它看成将两个具有相关内容的表联接在一起新生成的表,而一般的select 语句没有这个功能。  阅读全文
posted @ 2011-08-28 18:31 Hukin 阅读(16202) | 评论 (0)编辑 收藏
     摘要: mysql中的where和having子句的区别

http://hi.baidu.com/ww999/blog/item/f330c8d3073107d0a8ec9a72.htmlwwhttp://hi.baidu.com/ww999/blog/item/f330c8d3073107d0a8ec9a72.htmlmysql中的where和having子句都可以实现过滤记录的功能,但他们的用法还是有一些区别的,看一例子:
用group by和having子句联合来查出不重复的记录,sql如下:
select uid,email,count(*) as ct from `edm_user081217` GROUP BY email
然后看这个,就容易理解了
select uid,email,count(*) as ct from `edm_user081217` GROUP BY email HAVING ct > 1
先用group by 对email进行分组,在用having来过滤大于1的,这样查找出来的就是重复的记录了.  阅读全文
posted @ 2011-08-28 17:12 Hukin 阅读(32611) | 评论 (2)编辑 收藏
     摘要: 大家都知道ArrayList和LinkedList的大致区别:

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

ArrayList和LinkedList是两个集合 类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。那么 ArrayList和LinkedList在性能上有什么差别呢?什么时候应该用ArrayList什么时候又该用LinkedList呢?  阅读全文
posted @ 2011-08-25 16:37 Hukin 阅读(244) | 评论 (0)编辑 收藏
     摘要: threadJVM
定义:守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。优先级:守护线程的优先级比较低,用于为系统中的其它对象和线程提供服务。

设置:通过setDaemon(true)来设置线程为“守护线程”;将一个用户线程设置为守护线程的方式是在 线程对象创建 之前 用线程对象的setDaemon方法。

example: 垃圾回收线程就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。

生命周期:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。那Java的守护线程是什么样子的呢。当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退  阅读全文
posted @ 2011-08-14 16:01 Hukin 阅读(1489) | 评论 (1)编辑 收藏
首先,你要找到msdbg2.dll。一般就在%CommonProgramFiles%\Microsoft Shared\VS7Debug”目录下。
找找先,实在不行搜索吧;如果没有直接下载一个,有的也需要执行以下操作:
msdbg2.dll文件拷贝一份到windows/system32目录下,然后在运行中regsvr32 msdbg2.dll,重启vs即可。
posted @ 2011-07-12 20:23 Hukin 阅读(3014) | 评论 (3)编辑 收藏
     摘要: 对于SOCKET在这里我不想究其历史,我只想说其时它是一种进程通讯的方式,简言之就是调用这个网络库的一些API函数就能实现分布在不同主机的相关进程之间的数据交换.
SOCKET中首先我们要理解如下几个定义概念:

一是IP地址:IP Address我想很容易理解,就是依照TCP/IP协议分配给本地主机的网络地址,就向两个进程要通讯,任一进程要知道通讯对方的位置,位置如何来确定,就用对方的IP

二是端口号:用来标识本地通讯进程,方便OS提交数据.就是说进程指定了对方进程的网络IP,但这个IP只是用来标识进程所在的主机,如何来找到运行在这个主机的这个进程呢,就用端口号.

三是连接:指两个进程间的通讯链路.

四是半相关:网络中用一个三元组可以在全局唯一标志一个进程:
(协议,本地地址,本地端口号)这样一个三元组,叫做一个半相关,它指定连接的每半部分。   阅读全文
posted @ 2011-06-27 10:46 Hukin 阅读(193) | 评论 (0)编辑 收藏
在网页中书写相对路径: 使用被引用文档或素材相对于当前页面的相对路径,例如,在网页“/home/www/a/index.htm”引用素材“/home/www/a/images/a.jpg”,其相对路径应该是“./images/a.jpg”或“images/a.jpg”。 
在JS文件中书写相对路径:JS文件是指在页面中引用的外部JavaScript文件,其中可能采用JavaScript代码生成html代码,由于生成的html代码是嵌入在引用该JS文件的页面中,因此,在描述相对路径时,应该使用被引用的文档或素材相对于引用JS文件的页面之间的相对路径。例如,文档“/home/www/a/index.htm”中引用了JS文件“/home/www/a/js/hello.js”,而在该js中生成一段引用素材“/home/www/a/images/1.jpg”的html代码,则在这段代码中,其相对路径应该是“./images/1.jpg”或“images/1.jpg”,而不能是“../images/1.jpg”。 
在CSS文件中书写相对路径:CSS文件是指在页面中引用的外部样式定义文件,该文件通常用于定义页面中各种html标记的显示效果(例如文本的字体名称、字体大小、缩进、边距等),CSS文件中同样可以引用外部的素材或文档(例如设置某个DIV对象的背景图片)。和JS文件不同,浏览器认为CSS文件也是一个独立的文档,因此,在CSS中对素材的引用可以通过计算素材文件和该CSS文件之间的相对路径来实现,而与引用该CSS文件的页面所在的位置无关。例如,文档“/home/www/a/index.htm”中引用了CSS文件“/home/www/a/css/main.css”,而在该CSS中引用了素材“/home/www/a/images/1.jpg”,则在CSS中对于该素材引用的相对路径应该是“../images/1.jpg”,而不能是“./images/1.jpg”或“images/1.jpg”。 
在Flash中书写相对路径:Flash用于表现网页中的某些动态效果,使用Flash的网页往往更美观,交互性更强。在Flash文件中,同样可以引用外部的素材(例如,使用Flash制作一个精美的相册),那么,应该如何在Flash中使用相对路径引用外部素材呢?与JS文件类似,浏览器也不认为Flash文件是一个独立的文档,而是认为其是一个嵌入在页面内的素材,因此,在Flash文件中引用素材时,同样应该使用被引用的素材和嵌入Flash的html页面之间的相对路径。例如,文档“/home/www/a/index.htm”中引用了Flash文件“/home/www/a/swf/main.swf”,而该Flash中引用了素材“/home/www/a/images/1.jpg”,则正确的相对路径是“./images/1.jpg”或“images/1.jpg”,而不是“../images/1.jpg”。
posted @ 2011-06-24 09:30 Hukin 阅读(901) | 评论 (0)编辑 收藏
     摘要: Embed
(一)、基本语法:
embed src=url
说明:embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等等,
Netscape及新版的IE 都支持。url为音频或视频文件及其路径,可以是相对路径或绝对路径。
示例:

(二)、属性设置:
1、自动播放:
语法:autostart=true、false
说明:该属性规定音频或视频文件是否在下载完之后就自动播放。
true:音乐文件在下载完之后自动播放;
false:音乐文件在下载完之后不自动播放。
示例:


2、循环播放:  阅读全文
posted @ 2011-06-23 14:14 Hukin 阅读(163) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2011-06-16 16:45 Hukin 阅读(6719) | 评论 (0)编辑 收藏
1.将数据库驱动程序的JAR文件放在Tomcat的 common/lib 中;

2.在server.xml中设置数据源,以MySQL数据库为例,如下:
在<GlobalNamingResources> </GlobalNamingResources>节点中加入,
      <Resource
      name="jdbc/DBPool"
      type="javax.sql.DataSource"
      password="root"
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      username="root"
      url="jdbc:mysql://127.0.0.1:3306/test"
      maxActive="4"/>
   属性说明:name,数据源名称,通常取”jdbc/XXX”的格式;
            type,”javax.sql.DataSource”;
            password,数据库用户密码;
            driveClassName,数据库驱动;
            maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
                     接将被标记为不可用,然后被释放。设为0表示无限制。
            MaxActive,连接池的最大数据库连接数。设为0表示无限制。
            maxWait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示
                     无限制。

3.在你的web应用程序的web.xml中设置数据源参考,如下:
  在<web-app></web-app>节点中加入,
  <resource-ref>
    <description>MySQL DB Connection Pool</description>
    <res-ref-name>jdbc/DBPool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
 </resource-ref>
  子节点说明: description,描述信息;
               res-ref-name,参考数据源名字,同上一步的属性name;
               res-type,资源类型,”javax.sql.DataSource”;
               res-auth,”Container”;
               res-sharing-scope,”Shareable”;

4.在web应用程序的context.xml中设置数据源链接,如下:
  在<Context></Context>节点中加入,
  <ResourceLink
   name="jdbc/DBPool" 
   type="javax.sql.DataSource" 
   global="jdbc/DBPool"/>
   属性说明:name,同第2步和第3步的属性name值,和子节点res-ref-name值;
             type,同样取”javax.sql.DataSource”;
             global,同name值。
 
至此,设置完成,下面是如何使用数据库连接池。
1.建立一个连接池类,DBPool.java,用来创建连接池,代码如下:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DBPool {
    private static DataSource pool;
    static {
         Context env = null;
          try {
              env = (Context) new InitialContext().lookup("java:comp/env");
              pool = (DataSource)env.lookup("jdbc/DBPool");
              if(pool==null) 
                  System.err.println("'DBPool' is an unknown DataSource");
               } catch(NamingException ne) {
                  ne.printStackTrace();
          }
      }
    public static DataSource getPool() {
        return pool;
    }
}

2.在要用到数据库操作的类或jsp页面中,用DBPool.getPool().getConnection(),获得一个Connection对象,就可以进行数据库操作,最后别忘了对Connection对象调用close()方法,注意:这里不会关闭这个Connection,而是将这个Connection放回数据库连接池。
posted @ 2011-06-14 15:06 Hukin 阅读(164) | 评论 (0)编辑 收藏
郁闷!为了在MyEclipse配置Tomcat 服务器,竟然弄了我几乎一个上午,也没弄成功,最后才注意到本该早注意到Tomcat 5.x还有个JDK这个东东,才成功了。一上午辛辛苦苦也没解决就是因为没注意到他害的,其实配置是很简单的。下面是其步骤:
  一、单击工具栏的的黑小三角或者单击 菜单栏窗口—>首选项,出现首选项对话框,在对话框的左边框中找到MyEclipse—>Application Servers下找到Tomcat选项,如下图,
二、根据自己的Tomcat版本选择相应的Tomcat选项(我的是5.0版本),然后在对话框右侧的Tomcat home directory选项选择Tomcat的安装目录,下面的Tomcat base directory和Tomcat temp directory系统会自动为你填上,Optional  program arguments可以不用填,我也不知道这是做什么用的,再选上Enable选项,要不然在待会儿在Server中看不到Tomcat服务器
三、千万别忘了Tomcat 选项下面的JDK,我就是因为没注意到它才一直不成功,单击JDK,弹出如下对话框,
Notes会提示你怎么做,
四、点击Tomcat JDK name旁的"Add",弹出如下对话框:
JRE名称(N)选项填上名字(可以随便取),在JRE主目录选项选择你的jdk安装目录(仅仅只是jdk,不包含jre),JRE系统库系统会自动添加,缺省JVM参数可以不用填,按“确定”回到上级再按“确定”就OK了。
如果你配置的不对的话会弹出出错提示对话框
就是Notes提示的第一条。
五、回到MyEclipse主界面,在Server下多了个Tomcat选项,右键单击Tomcat,选择Mannage Deployment(如果你不配置的话等一下你是运行不了项目的),弹出Srever Deployments对话框,在Server选项上选择你刚刚配置的Tomcat服务,点击"Add",弹出New Deployment对话框,
在Project上选择你要运行的项目,单击“完成”返回上一级按“确定”就可以了。
  最后启动Tomcat服务器,在Web Browser输入地址,到这里就大功告成了。
是不是发现原来很简单呢!
提醒一下,在New Deployment对话框中的Packaged Archive选项是把项目打包成.war形式运行的。
  刚开始是因为MyEclipse自带的Derby不会用,才去配置Tomcat的,等Tomcat配置成功后,也就明白怎么用Derby了,其实很简单,配置都不用你去配,系统已经帮你配好了,你只要启动它就行了。
只是感觉MyEclipse这方面没Lomboz—Elipse那么方便,只要在想要执行的jsp文件上选择“Run on Server”就行了,在MyEclipse下不行
posted @ 2011-06-14 14:49 Hukin 阅读(304) | 评论 (0)编辑 收藏

比如:在网上书店应用中,从一个客户开始购物,到最后结账,整个过程是一个Session.
Servlet API中定义了javax.servlet.http.HttpSession接口,Servlet容器必须实现这一接口。当一个Session开始时,Servlet容器将创建一个HttpSession对象,在HttpSession对象中可以存放客户状态的信息。Servelt容器为HttpSession分配一个唯一标识符,称为Session ID.Servlet容器把Session ID作为Cookie保存在客户的浏览器中。每次客户发出HTTP请求时,Servlet容器可以从HttpRequest对象中读取Session ID,然后根据SessionID找到相应的HttpSession对象,从而获取客户的状态信息。
HttpSession接口中的方法:
getId():返回Session的ID;
invalidate():使当前的Session失效,Servlet容器会释放HttpSession对象占用的资源。
setAttribute(String name,Object value):将一对name/Value属性保存在HttpSession对象中
getAttribut(String name):根据name参数返回保存在HttpSession对象的属性值。
getAttributeNames():以数组的方式HttpSession对象中所有的属性名。
isNew():判断是否是新创建的Session,如果是新创建的Session,返回true,否则返回false
setMaxInactiveInterval():设定一个Session可以处于不活动状态的最大时间间隔,以秒为单位。如果超过这个时间。Session自动失效,如果设置为负数,表示不限制Session付出与不活动状态的时间。
getMaxInactiveInterval()读取当前Sessions可以处于不活动状态的最大时间间隔。
在Java Servlet API中提出了跟踪Session的另一种机制,如果客户浏览器不支持Cookie,Servlet容器可以重写客户请求的URL,吧Session ID添加到URL信息中。
HttpServletResponse接口提供了重写URL的方法:
public java.lang.String encodeURL(java.lang.String url)
该方法的实现机制为:
先判断当前的Web组件是否启用Session,如果没有启用Session,例如在JSP中声明
<%@ page session="false"%>或者已经执行了session.invalidate()方法,那么直接返回参数URL
再判断客户浏览器是否支持Cookie,如果支持Cookie,就直接返回参数URL;如果不支持,就在参数URL中加入Session ID信息,然后返回修改后的URL.

String username1 = "";  (username1 为自定义的字段,从数据库中取出值后放到里面)
request.getSession().setAttribute("username",username1);            
 从request里得到session在把值传进去,不过这种方法可以将从数据库里取得的数据用session显示于页面,但当在页面点击按钮产生别的action的时候,取出来显示在页面的数据就都没了,原来是request的生命周期是一个请求,当另外一个请求发生时,原来action中的request的值没重置了,也就是说原来的数据都没了,所以在页面也不会显示.这时候要将原来action中的request.getSession().setAttribute("username",username1);  
改为HttpSession session = request.getSession();   session.setAttribute("username",username1);这时候传到页面的生命周期就是一个会话,即使你在页面有别的请求,但session中的值依然存在.

posted @ 2011-06-14 10:40 Hukin 阅读(360) | 评论 (0)编辑 收藏

本文档提供关于Tomcat的基础信息.主要内容如下:
Tomcat二进制版本安装
与Tomcat相关的脚本的主要内容
与server.xml相关的主要内容,Tomcat的主要配置文件
如何设置Tomcat与宿主web服务器一起工作的说明
如何应用Tomcat配置一个现实中的web站点
希望此文档足以使新用户可以开始使用Tomcat.如找不到某方面的内容请(按以下顺序)
查找Tomcat faq
查找Tomcat包清单
向Tomcat用户邮件列表发出问题
如此疑问的答案不存在,我们鼓励把对疑问的解答放入Tomcat faq或此文档.如对此文档有意见或建议,请发送到Tomcat的邮件列表.

Getting Started
Tomcat是一个带有jsp环境的servlet容器.servlet容器是一个根据用户的行为可以管理和激活servlet的运行时的shell.
粗略地可以将servlet容器分为如下几类:

独立的servlet容器
内置有web服务器的一部分.指当使用基于Java的web服务器的情形,例如servlet容器是JavaWebServer的一个部分. 独立的servlet容器是Tomcat的默认模式.
大多数的web服务器并非基于Java,因此,我们可以得出如下两种容器的模式.

进程内的servlet容器
servlet容器作为web服务器的插件和Java容器的实现.Web服务器插件在内部地址空间打开一个JVM(java virtual machine)使Java容器得以在内部运行.如有某个需要调用servlet的请求,,插件将取得对此请求的控制并将他传递(使用JNI)给Java容器.进程内容器对于多线程,单进程的服务器非常合适并且提供很好的运行速度,但伸缩性有所不足.

进程外的servlet容器
servlet容器运行于web服务器之外的地址空间且作为web服务器的插件和Java容器的实现的结合.web服务器插件和Java容器 JVM使用IPC机制(通常是TCP/IP)进行通讯.当一个调用servlet的请求到达时,插件将取得对此请求的控制并将其传递(使用IPC等)给Java容器,进程外容器的反应时间或进程外容器引擎不如进程内容器,但进程外容器引擎在许多其他可比的范围内更好(伸缩性,稳定性等).
Tomcat既可作为独立的容器(主要是用于开发与调试)又可作为对现有服务器的附加(当前支持Apache,IIS和Netscape服务器).即任何时候配置Tomcat你都必须决定如何应用他,如选择第二或第三种模式,你还需要安装一个web服务器接口.

Tomcat与Jserv有何区别?Tomcat是Jserv吗?
这是个常见的误解.Jserv是Servlet API2.0兼容并与Apache一起使用的容器.Tomcat是一个完全重写的并与Servlet API2.2和JSP1.1兼容的容器.
Tomcat使用了一些为Jserv而写的代码,特别是Jserv的Apache接口,但这是唯一的相同之处.

怎样安装Tomcat的二进制版本?
非常简单,只需:
下载 zip/tar.gz 任何压缩文件,从http://jakarta.apche.org/download/binindex.html处.
解压缩此文件到某目录(如:foo).将会生成一子目录,名为”tomcat”.
转换到”tomcat”目录设置一新的环境变量(TOMCAT_HOME)指向你安装的tomcat的目录
WIN32平台,键入:
“set TOMCAT_HOME=foo\tomcat”
Unix平台:
如是bash/sh环境, 键入:”TOMCAT_HOME=foo/tomcat;export TOMCAT_HOME”
如是tcsh环境, 键入:”setenv TOMCAT_HOME foo/tomcat”
设置环境变量JAVA_HOME指向你JDK的目录,然后添加JAVA解释器到你的PATH环境变量.
好了!现在可以运行TOMCAT并作为一个独立的Servlet容器(模式一)

启动与关闭Tomcat
使用”bin”目录中的脚本启动与关闭Tomcat.
启动:
uinx:bin/startup.sh
win32:bin\startup
关闭:
unix:bin/shutdown.sh
win32:bin\shutdown

Tomcat目录结构
假设你已将Tomcat解压,你已得到下列目录结构:
目录名--描述 
bin 
包含启动/关闭脚本 
conf 
包含不同的配置文件,
包括 server.xml(Tomcat的主要配置文件)和为不同的Tomcat配置的web应用设置缺省值的文件web.xml
doc
包含各种Tomcat文档 
lib 
包含Tomcat使用的jar文件.unix平台此目录下的任何文件都被加到Tomcat的classpath中 
logs 
Tomcat摆放日志文件的地方 
src 
ServletAPI源文件.先别高兴,这些只有些必须在Servlet容器内实现的空接口和抽象类 
webapps 
包含web项目示例 
此外你可以Tomcat会创建如下目录:
work
Tomcat自动生成,放置Tomcat运行时的临时文件(如编译后的JSP文件).如在Tomcat运行时删除此目录.JSP页面将不能运行.
classes
你可以创建此目录来添加一些附加的类到类路径中.任何你加到此目录中的类都可在Tomcat的类路径中找到自身.
Tomcat的脚本
Tomcat是一个Java程序,因此在设置好几个环境变量后即可用命令行的方式运行.然而设置Tomcat使用的每个环境变量和如下的命令行参数乏味且易错.因此,Tomcat开发组提供了一些脚本使启动和关闭Tomcat变得轻松.
注意:这些脚本仅仅是个便利的方法去启动和关闭Tomcat.你可修改他们来定制CLASSPATH,环境变量如PATH,LD_LIBRARY_PATH,等等,只要是生成一个正确的命令行即可.
这些脚本是什么呢?下表列出对一般用户最重要的脚本.
tomcat 
主脚本.设置合适的环境变量,包括CLASSPATH,TOMCAT_HOME和JAVA_HOME和用适合的命令行参数启动Tomcat 

startup 
在后台启动Tomcat.”tomcat start”命令的替换方式 

shutdown 
关闭Tomcat.”tomcat stop”命令的替换方式 

对用户最重要的脚本是tomcat(tomcat.bat/tomcat.sh).其他Tomcat相关的脚本作为一个简单的面向单任务的指向Tomcat脚本(设置不同的命令行参数等)的入口.


仔细考察tomcat.bat/tomcat.sh,它按以下步骤运行:

在Unix下的步骤:
如未指定,推测 TOMCAT_HOME
如未指定,推测 JAVA_HOME

设置CLASS_PATH包含:
1.${TOMCAT_HOME}/classes目录(如果存在)
2.${TOMCAT_HOME}/lib的一切内容
3.${JAVA_HOME}/lib/tools.jar(此jar文件包含工具javac,我们需要javac处理jsp文件.

运行带有设定Java环境变量的命令行参数的java命令,调入tomcat.home,和org.apache.tomcat.startup.Tomcat 作为启始类.同时也传递命令行参数到org.apache.tomcat.startup.Tomcat ,例如:

执行start/stop/run 等的操作
此Tomcat进程使用指向server.xml的路径,
例如server.xml放置于etc/server_1.xml并且用户意图在后台启动apache,键 入如下命令行:
bin/tomcat.sh start ?f /etc/server_1.xml
在Win32下的步骤:(略)
由此可见,win32版的tomcat.bat与Unix版的几乎一致.尤其在它不推测TOMCAT_HOME和JAVA_HOME的值,并且不将所有的jar文件放入类路径中.

Tomcat的配置文件
Tomcat的配置基于两个配置文件:
1.server.xml - Tomcat的全局配置文件
2.web.xml - 在Tomcat中配置不同的关系环境

这一部分将讲述如何使用这些文件.我们不会包含web.xml的内部机制,这些内部机制深入到了Servlet API的细节,因此,我们将讨论涵盖servler.xml内容及web.xml在Tomcat关系环境中的用法.

server.xml
server.xml是Tomcat的主配置文件.完成两个目标:
1 提供Tomcat组件的初始配置.
2 说明Tomcat的结构,含义,使得Tomcat通过实例化组件完成起动及构建自身, 如在server.xml所指定的

下表描述server.xml种的重要元素: 

元素及其描述 
Server
server.xml文件中最重要的元素.Server定义了一个Tomcat服务器.一般你不用对他担心太多.Server元素能包含Logger和ContextManager元素类型

Logger
此元素定义一个Logger对象,每个Logger都有一个名字去标识,也有一个纪录Logger的输出和冗余级别(描述此日志级别)和包含日志文件的路径.通常有servlet的Logger(ServletContext.log()处),JSP和Tomcat运行时的Logger.

ContextManager
ContextManager说明一套ContextInterceptor, RequestInterceptor , Context和他们的Connectors的配置及结构.ContextManager有几个随同提供的特性:
1. 用来纪录调试信息的调试级别 
2. webapps/,conf/,logs/和所有已定义的环境的基本位置.用来使Tomcat可以在TOMCAT_HOME外的其他目录启动. 
3. 工作目录的名字

ContextInterceptor&RequestInterceptor
这些侦听器(interceptors)侦听具体发生在ContextManager中的事件.例如,ContextInterceptor侦听Tomcat的启动及终止事件,RequestInterceptor监视在它服务过程中用户请求需要通过的不同阶段.Tomcat的管理员不必知道太多关于侦听器的知识;另外,开发者应该知道这是如何在Tomcat中实现一个”全局”型的操作(例如安全性及每个请求日志)

Connector
Connector表示一个到用户的联接,不管是通过web服务器或直接到用户浏览器(在一个独立配置中).Connector负责管理Tomcat的工作线程和 读/写 连接到不同用户的端口的 请求/响应.Connector的配置包含如下信息:
1.句柄类
2.句柄监听的TCP/IP端口
3.句柄服务器端口的TCP/IP的backlog.
稍后我们将在此文档中描述如何配置Connector.

Context
每个Context提供一个指向你放置你Web项目的Tomcat的下属目录。每个Context包含如下配置:
1. Context放置的路径,可以是与ContextManager主目录相关的路径.
2.纪录调试信息的调试级别
3.可重载的标志.开发Servlet时,重载更改后的Servlet,这是一个非常便利的特性,你可以调试或用Tomcat测试新代码而不用停止或重新启动Tomcat.要打开重载,把reloadable设为真即可.这虽花费时间但可检测所发生的变化;更重要的事,鉴于,在一个装载类对象装入一个新的servlet时,类装载触发器可能会掷出一些错误.为避免这些问题,你可以设置可重载为假,这将停止重载功能.

从另一个目录中启动Tomcat
作为缺省值将使用TOMCAT_HOME/conf/server.xml作为配置文件.缺省配置将使用TOMCT_HOME作为关系环境的基础.
使用 “-f/你的/目录/server.xml”选项你可改变这种情况,使用另一个服务器配置文件和设置关系环境管理器的目录属性你需要在主目录内设置以下几个文件:
? 一个 webapps/目录(如果你已生成) ? 所有war文件奖杯界压倒此目录而且所有子目录将作为关系环境添加.
? conf/目录 - 你可保存一个特殊的web.xml文件和其他配置文件
? logs/ - 所有日志文件将代替TOMCAT_HOME/logs/纪录到此目录中
? work/ - 关系环境的工作目录
如server.xml中的ContextManager.home属性有关联,将关联到到当前工作目录.

web。xml
关于web。xml和web项目结构(包括目录服务及配置)的详细描述可在Servlet API Spec的第9,10,14章中找到。
然而有一个与Tomcat有关的小“特性“与web.xml有关。Tomcat可以让用户通过将缺省的web.xml放入conf目录中来定义所有关系环境的web.xml的缺省值.建立一个新的关系环境时,Tomcat使用缺省的web.xml文件作为基本设置和应用项目特定的web.xml(放在应用项目的WEB-INF/web.xml文件)来覆盖这些缺省值.

设置Tomcat与Apache Web 服务器
服务器
到现在为止,我们未讨论作为服务器扩展的Tomcat,只讨论了作为独立运行的服务器.但有一些问题需要说明:
1. 当处理静态页面时,Tomcat不如Apache迅速.
2. Tomcat不象Apache一样可配置.
3. Tomcat不象Apache一样强壮.
4. 有很多网站已在某一特定web server上投入了很长时间,例如,使用CGI脚本/Server API模组/perl/php…我们不能假设这些遗留下来的东西都会被丢弃.
基于以上原因,一个现实的网站建议使用一个Web服务器,如Apache,为网站的静态页面请求提供服务,并使用Tomcat作为一个Servlet/JSP插件.
我们不准备深入的讨论每个不同的配置,我们将:
1. 涵盖Web服务器的基本行为
2. 解释需要何种配置
3. 在Apache上的实例

Web 服务器操作
简单说来,web服务器总是等待来自客户端的HTTP请求。当请求到达时,服务器会提供一切必要的内容来满足此请求。加入一个Servlet容器某种程度上会改变此行为。但服务器仍需处理如下因素:
载入servlet容器接口库并初始化(处理请求之前)。
当收到一个请求时,检查是否属于某Servlet,如是,则接口库接收此请求并处理。
另一方面,接口库需要知道他将服务某种请求,通常是基于请求的URL的某种模式和将此请求导向何处。
当用户想要设置使用虚拟主机的配置时,事情会变得更加复杂,或者想多个开发者在一个服务器上进行开发但使用不同的Servlet容器的JVMs。以下我们将讨论这两个问题。

必需进行的配置
应该考虑的是最明显的配置是servlet URL具有对servlet容器中的servlet具有表示的责任。很明显,你必须知道传递什么到Servlet容器。我们仍需提供附加的配置项目到web-server或servlet-container的结合体中.
l 考虑到Tomcat进程是否可取得,我们仍需提供配置和Tomcat正在监听的TCP/IP 主机名/端口号。
l 需要告知web服务器接口库的位置(因此我们可以在起始时装入)
l 需要设置接口内部信息如将日志记录在何处和如何纪录,等等。
所有此类信息必须出现在web服务器配置里或被接口使用的私有配置文件中。下面将讲述如何在Apache中如何实现这些配置。

Apache上的实现
这一部分演示如何配置Apache与Tomcat一起工作;并试图解释深入到可能会用到的配置规范。在jserv 安装页上可找到其他信息。 

posted @ 2011-06-01 16:18 Hukin 阅读(215) | 评论 (0)编辑 收藏
一、开发环境配置
  第一步:下载j2sdk和tomcat:到sun官方站(http://java.sun.com/j2se/1.5.0/download.jsp)下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.5.0 Documentation,然后到tomcat官方站点(http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi)下载tomcat(下载最新5.5.9版本的tomcat); 
  第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后按默认设置进行安装即可。
  1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.5.0):
  JAVA_HOME=c:\j2sdk1.5.0
  classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径)
  path=%JAVA_HOME%\bin
  接着可以写一个简单的java程序来测试J2SDK是否已安装成功: 
  public class Test{
  public static void main(String args[]){
  System.out.println("This is a test program.");
  }
  }
  将上面的这段程序保存为文件名为Test.java的文件。 
  然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令
  javac Test.java
  java Test
  此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。
  2.安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat):
  CATALINA_HOME=c:\tomcat
  CATALINA_BASE=c:\tomcat
  然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的(可以根据实际追加)servlet.jar追加到classpath中去,修改后的classpath如下:
  classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet-api.jar; 
  接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。
   第三步:建立自己的jsp app目录
  1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录;
  2.在webapps目录下新建一个目录,起名叫myapp;
  3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的;
  4.WEB-INF下新建一个文件web.xml,内容如下:
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">
  <web-app>
  <display-name>My Web Application</display-name>
  <description>
  A application for test.
  </description>
  </web-app>
   5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下:
  <html><body><center>
  Now time is: <%=new java.util.Date()%>
  </center></body></html>
  6.重启Tomcat
  7.打开浏览器,输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。
   第四步:建立自己的Servlet:
  1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个servlet程序,文件名为Test.java,文件内容如下:
package Test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
out.println("<html><body><h1>This is a servlet test.</h1></body></html>");
out.flush();
}
}
 
  2 .编译
  将Test.java放在c:\test下,使用如下命令编译:
    C:\Test>javac Test.java 
  然后在c:\Test下会产生一个编译后的servlet文件:Test.class
  3 .将结构Test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那个test目录到classes目录下,如果classes目录不存在,就新建一个。 现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结构
   4 .修改webapps\myapp\WEB-INF\web.xml,添加servlet和servlet-mapping
  编辑后的web.xml如下所示,红色为添加的内容:
 <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>

<servlet>
<servlet-name>Test</servlet-name>
<display-name>Test</display-name>
<description>A test Servlet</description>
<servlet-class>Test.Test</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test</url-pattern>
</servlet-mapping>
</web-app>
 
  这段话中的servlet这一段声明了你要调用的Servlet,而servlet-mapping则是将声明的servlet"映射"到地址/Test上
 
  5 .好了,重启动Tomcat,启动浏览器,输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.就说明编写的servlet成功了。
 
  注意:修改了web.xml以及新加了class,都要重启Tomcat
    第四步:建立自己的Bean:
梓熹提示注意: Bean中的如:package Test;中的“包名”要与它的上层文件夹名称相同。jsp网页引用时<%@page import="Test.TestBean" %>中的Test同样是包名。
 
  1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个java程序,文件名为TestBean.java,文件内容如下:
 
package Test;
public class TestBean{
private String name = null;
public TestBean(String strName_p){
this.name=strName_p;
}
public void setName(String strName_p){
this.name=strName_p;
}
public String getName(){
return this.name;
}
}

  2 .编译
    将TestBean.java放在c:\test下,使用如下命令编译:
  C:\Test>javac TestBean.java
   然后在c:\Test下会产生一个编译后的bean文件:TestBean.class
 
  3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\Test下,
 
  4 .新建一个TestBean.jsp文件,文件内容为:
 
<%@page import="Test.TestBean" %>
<html><body><center>
<%
TestBean testBean=new TestBean("This is a test java bean.");
%>
Java bean name is: <%=testBean.getName()%>
</center>
</body>
</html>
 
  5 .好了,重启Tomcat,启动浏览器,输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。
 
  这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码,自己多动手写代码以增强自己在这方面开发的能力了。
 
  jvm应填写到
  c:\j2sdk\bin
 
  给你一个简单的配置::::
 
  JSP环境配置心得
 
  首先要说的是,使用jdk+tomcat完全可以配置我们的jsp服务器,不再需要其实任何东东,有很多文章介绍了Apache,其实根本用不着,一般的学习调试tomcat完全可以胜任了。
 
  安装jdk后,tomcat在安装之前会自动找到jdk的安装路径,一路点击"下一步",经过一段时间的文件复制,最后"close",完成comcat的安装。
 
  您最好去下载一个版本较高的tomcat,比如4.1以上的,因为它不需要设置太多的系统变量,右击"我的电脑",选择"属性"->"高级"->"环境变量"->"系统变量",新建一个TOMCAT_HOME,值设置成你的tomcat所在的路径,比如:D:\Program Files\Apache Group\Tomcat 5.5,配置完成。
 
  从开始菜单中找到tomcat选项,一般打开顺序是:开始->程序->Apache Tomcat 5.5,选择"Start Tomcat",让jsp服务器开始运行,此时会打开一个类似Dos的窗口,会显示一些相关的信息。<
posted @ 2011-05-30 14:25 Hukin 阅读(358) | 评论 (0)编辑 收藏

HTTP协议(http://www.w3.org/Protocols/)是“一次性单向”协议。

服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTP Request,服务端处理请求,并且返回一个HTTP Response给客户端,本次HTTP Request-Response Cycle结束。

 

我们看到,HTTP协议本身并不能支持服务端保存客户端的状态信息。于是,Web Server中引入了session的概念,用来保存客户端的状态信息。

 

这里用一个形象的比喻来解释session的工作方式。假设Web Server是一个商场的存包处,HTTP Request是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子就相当于Session),然后把一个号码牌交给这个顾客,作为取包凭证(这个号码牌就是Session ID)。顾客(HTTP Request)下一次来的时候,就要把号码牌(Session ID)交给存包处(Web Server)的管理员。管理员根据号码牌(Session ID)找到相应的柜子(Session),根据顾客(HTTP Request)的请求,Web Server可以取出、更换、添加柜子(Session)中的物品,Web Server也可以让顾客(HTTP Request)的号码牌和号码牌对应的柜子(Session)失效。顾客(HTTP Request)的忘性很大,管理员在顾客回去的时候(HTTP Response)都要重新提醒顾客记住自己的号码牌(Session ID)。这样,顾客(HTTP Request)下次来的时候,就又带着号码牌回来了。

 

Session ID实际上是在客户端和服务端之间通过HTTP RequestHTTP Response传来传去的。号码牌(Session ID)必须包含在HTTP Request里面。关于HTTP Request的具体格式,请参见HTTP协议(http://www.w3.org/Protocols/)。这里只做一个简单的介绍。

Java Web Server(即Servlet/JSP Server)中,Session IDjsessionid表示(请参见Servlet规范)。

 

HTTP Request一般由3部分组成:

1Request Line

这一行由HTTP Method(如GETPOST)、URL、和HTTP版本号组成。

例如,GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

GET http://www.google.com/search?q=Tomcat HTTP/1.1

POST http://www.google.com/search HTTP/1.1

GET http://www.somsite.com/menu.do;jsessionid=1001 HTTP/1.1

 

2Request Headers

这部分定义了一些重要的头部信息,如,浏览器的种类,语言,类型。Request Headers中还可以包括Cookie的定义。例如:

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Accept-Language: en-us

Cookie: jsessionid=1001

 

3Message Body

如果HTTP MethodGET,那么Message Body为空。

如果HTTP MethodPOST,说明这个HTTP Requestsubmit一个HTML Form的结果,

那么Message BodyHTML Form里面定义的Input属性。例如,

user=guest

password=guest

jsessionid=1001

主意,如果把HTML Form元素的Method属性改为GET。那么,Message Body为空,所有的Input属性都会加在URL的后面。你在浏览器的URL地址栏中会看到这些属性,类似于

http://www.somesite/login.do?user=guest&password=guest&jsessionid=1001

 

从理论上来说,这3个部分(Request URLCookie Header, Message Body)都可以用来存放Session ID。由于Message Body方法必须需要一个包含Session IDHTML Form,所以这种方法不通用。

 

一般用来实现Session的方法有两种:

1URL重写。

Web Server在返回Response的时候,检查页面中所有的URL,包括所有的连接,和HTML FormAction属性,在这些URL后面加上“;jsessionid=XXX”。

下一次,用户访问这个页面中的URLjsessionid就会传回到Web Server

2Cookie

如果客户端支持CookieWeb Server在返回Response的时候,在ResponseHeader部分,加入一个“set-cookie: jsessionid=XXXXheader属性,把jsessionid放在Cookie里传到客户端。

 

客户端会把Cookie存放在本地文件里,下一次访问Web Server的时候,再把Cookie的信息放到HTTP Request的“Cookieheader属性里面,这样jsessionid就随着HTTP Request返回给Web Server

posted @ 2011-05-30 11:24 Hukin 阅读(139) | 评论 (0)编辑 收藏
     摘要:   原文(http://www.blogjava.net/roymoro/archive/2011/05/09/349833.html)  问题:写出这个工具的意义在于我运行一个需要长时间执行的程序,如单线程爬虫。在网络出现中断的或网站丢包情况下,程序会抛出socketexception 和sockettimeoutexception。程序会中断。(再此只是提出一种假设) ...  阅读全文
posted @ 2011-05-30 10:34 Hukin 阅读(453) | 评论 (0)编辑 收藏

Cookies一词用在程序设计中是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。从本质上讲,它可以看作是你的身份证。但Cookies不能作为代码执行,也不会传送病毒,且为你所专有,并只能由提供它的服务器来读取。保存的信息片断以"名/值"对(name-value pairs)的形式储存,一个"名/值"对仅仅是一条命名的数据。
  一个网站只能取得它放在你的电脑中的信息,它无法从其它的Cookies文件中取得信息,也无法得到你的电脑上的其它任何东西。 Cookies中的内容大多数经过了加密处理,因此一般用户看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。
  由于Cookies是我们浏览的网站传输到用户计算机硬盘中的文本文件或内存中的数据,因此它在硬盘中存放的位置与使用的操作系统和浏览器密切相关。在Windows 9X系统计算机中,Cookies文件的存放位置为C:/Windows/Cookies,在Windows NT/2000/XP的计算机中,Cookies文件的存放位置为C:/Documents and Settings/用户名/Cookies,在Windows Vista/7的计算机中,Cookies文件的存放位置为C:\Users\user\AppData\Roaming\Microsoft\Windows\Cookies\Low。
  硬盘中的Cookies文件可以被Web浏览器读取,它的命令格式为:用户名@网站地址[数字].txt。如笔者计算机中的一个Cookies文件名为:ch@163[1].txt。要注意的是:硬盘中的Cookies属于文本文件,不是程序。
  Cookies的设置
  你可以在IE的"工具/Internet选项"的"常规"选项卡中,选择"设置/查看文件",查看所有保存到你电脑里的Cookies。这些文件通常是以user@domain格式命名的,user是你的本地用户名,domain是所访问的网站的域名。如果你使用NetsCape浏览器,则存放在"C:/PROGRAMFILES/NETS- CAPE/USERS/"里面,与IE不同的是,NETSCAPE是使用一个Cookie文件记录所有网站的Cookies。
  我们可对Cookie进行适当设置:打开"工具/Internet选项"中的"隐私"选项卡(注意该设置只在IE6.0中存在,其他版本IE可以单击"工具/Internet选项" "安全"标签中的"自定义级别"按钮,进行简单调整),调整Cookie的安全级别。通常情况,可以调整到"中高"或者"高"的位置。多数的论坛站点需要使用Cookie信息,如果你从来不去这些地方,可以将安全级调到"阻止所有Cookies";如果只是为了禁止个别网站的Cookie,可以单击"编辑"按钮,将要屏蔽的网站添加到列表中。在"高级"按钮选项中,你可以对第一方Cookie和第三方的Cookie进行设置,第一方Cookie是你正在浏览的网站的Cookie,第三方Cookie是非正在浏览的网站发给你的Cookie,通常要对第三方Cookie选择"拒绝"。你如果需要保存Cookie,可以使用IE的"导入导出"功能,打开"文件/导入导出",按提示操作即可。
  Cookies的写入与读取
  Cookies集合是附属于Response对象及Request对象的数据集合,使用时需要在前面加上Response或Request。
  用于给客户机发送Cookies的语法通常为:
  当给不存在的Cookies集合设置时,就会在客户机创建,如果该Cookies己存在,则会被代替。由于Cookies是作为HTTP传输的头信息的一部分发给客户机的,所以向客户机发送Cookies的代码一般放在发送给浏览器的HTML文件的标记之前。
  如果用户要读取Cookies,则必须使用Request对象的Cookies集合,其使用方法是: 需要注意的是,只有在服务器未被下载任何数据给浏览器前,浏览器才能与Server进行Cookies集合的数据交换,一旦浏览器开始接收Server所下载的数据,Cookies的数据交换则停止,为了避免错误,要在程序和前面加上response.Buffer=True。
  Cookies的应用
  几乎所有的网站设计者在进行网站设计时都使用了Cookie,因为他们都想给浏览网站的用户提供一个更友好的、人文化的浏览环境,同时也能更加准确地收集访问者的信息。
  网站浏览人数管理
  由于代理服务器、缓存等的使用,唯一能帮助网站精确统计来访人数的方法就是为每个访问者建立一个唯一的ID。使用Cookie,网站可以完成以下工作:测定多少人访问过;测定访问者中有多少是新用户(即第一次来访),多少是老用户;测定一个用户多久访问一次网站。
  通常情况下,网站设计者是借助后台数据库来实现以上目的的。当用户第一次访问该网站时,网站在数据库中建立一个新的ID,并把ID通过Cookie传送给用户。用户再次来访时,网站把该用户ID对应的计数器加1,得到用户的来访次数或判断用户是新用户还是老用户。
  按照用户的喜好定制网页外观
  有的网站设计者,为用户提供了改变网页内容、布局和颜色的权力,允许用户输入自己的信息,然后通过这些信息对网站的一些参数进行修改,以定制网页的外观。
  在电子商务站点中实现诸如"购物篮"等功能
  可以使用Cookie记录用户的ID,这样当你往"购物篮"中放了新东西时,网站就能记录下来,并在网站的数据库里对应着你的ID记录当你"买单"时,网站通过ID检索数据库中你的所有选择就能知道你的"购物篮"里有些什么。
  在一般的事例中,网站的数据库能够保存的有你所选择的内容、你浏览过的网页、你在表单里填写的信息等;而包含有你的唯一ID的Cookie则保存在你的电脑里。
  Cookies的缺陷
  Cookie虽然被广泛的应用,并能做到一些使用其它技术不可能实现的功能。但也存在一些不够完美的方面,给应用带来不便。
  多人共用一台电脑的问题
  任何公共场合的电脑或者许多在办公室或家里使用的电脑,都会同时被两个以上的人使用。这样,当你用它在网上超市购物时,网上超市或网站会在这台机器上留下一个Cookie,将来也许就会有某个人试图使用你的账户购物,带来了不安全的可能。当然,在一些使用多用户操作系统如Windows NT或UNIX的电脑上,这并不会成为一个问题。因为在多用户操作系统下不同的账户的Cookie分别放在不同的地方。
  Cookies被删除时
  假如你的浏览器不能正常工作,你可能会删除电脑上所有的临时Internet文件。然而,一旦这样操作以后,你就会丢掉所有的Cookies文件。当你再次访问一个网站时,网站会认为你是一位新用户并分配给你一个新的用户ID以及一个新的Cookie。结果将会造成网站统计的新老用户比发生偏差,而你也难以恢复过去保存的参数选择。
  一人使用多台电脑时
  有的人一天之中经常使用一台以上的电脑。例如在办公室里有一台电脑、家里有一台、还有移动办公用的笔记本电脑。除非网站使用了特别的技术来解决这一问题,否则,你将会有三个不同的Cookies文件在这三台机器上,而在三台机器上访问过的任何网站都将会把你看成三个不同的用户。
  防范Cookies泄密
  想知道你访问的网站是否在你的硬盘或内存中写入了Cookies信息吗?只需执行下面的操作步骤,就可以了解和控制你正在访问的网站的Cookies信息。
  步骤一点击IE窗口中的"工具" "Internet选项",打开"Internet选项"设置窗口;
  步骤二点击"Internet选项"设置窗口中的"安全"标签,然后再点击"自定义级别"按钮,进入"安全设置"窗口;
  步骤三 找到"安全设置"窗口中的"Cookies"设置项。"Cookies"设置项下有两个分选项,其中"允许使用存储在您计算机上的Cookies"是针对存储在用户计算机硬盘中的Cookies文件;"允许使用每个对话Cookies(未存储)"是针对存储在用户计算机内存中的Cookies信息。存储在硬盘中的Cookies文件是永久存在的,而存储在内存中的Cookies信息是临时的。要想IE在即将接收来自Web站点的所有Cookies时进行提示,可分别选择上面两个分选项中的"提示"项。当然,你也可以选择"启用",允许IE接受所有的Cookies信息(这也是IE的默认选项);选择"禁止",则是不允许Web站点将Cookies存储到您的计算机上,而且Web站点也不能读取你计算机中已有的Cookies。
  IE6.0提供了更为可靠的个人隐私及安全保护措施,可以让用户来控制浏览器向外发送信息的多少。在"Internet 选项"窗口中新增了"隐私"选项卡(图1),用户可以在其中直接设置浏览时的隐私级别,按需要控制其他站点对自己电脑所使用的Cookies。
  如果我们正在浏览的站点使用了Cookie,那么在浏览器状态栏中会有一个黄色惊叹号的标记,双击后可打开"隐私报告"对话框,用户可以在其中查看具体的隐私策略,还可直接点击"设置"按钮后在上述"隐私"选项卡中调节安全隐私级别。
  在"常规"选项卡中还增加了"删除Cookies"按钮(图2),方便用户直接清除本机上的Cookies。另外,在"工具" "选项" "高级"选项卡中也增加了一些进一步提高安全性的选项(如关闭浏览器时清空Internet临时文件)。其实,如何更好地保护个人隐私和安全是微软下一代".NET"战略软件中的关键技术,现在IE6.0已经尝试着迈出了第一步。
  另外,由于Cookies的信息并不都是以文件形式存放在计算机里,还有部分信息保存在内存里。比如你在浏览网站的时候,Web服务器会自动在内存中生成Cookie,当你关闭IE浏览器的时候又自动把Cookie删除,那样上面介绍的两种方法就起不了作用,我们需要借助注册表编辑器来修改系统设置。要注意的是,修改注册表前请作备份,以便出现问题后能顺利恢复。
  运行Regedit,找到如下键值:HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Cache/Special Paths/Cookies,这是Cookies在内存中的键值,把这个键值删除。至此Cookies无论以什么形式存在,我们都不用再害怕了。
  最后有必要说明的一点是:杜绝Cookies虽然可以增强你电脑的信息安全程度,但这样做同样会有一些弊端。比如在一些需要Cookies支持的网页上,会发生一些莫名其妙的错误,典型的例子就是你以后不能使用某些网站的免费信箱了。
  Cookies欺骗
  通过分析Cookie的格式,我们知道,最后两项中分别是它的URL路径和域名,服务器对Cookie的识别靠的就是这两个参数。正常情况下,我们要浏览一个网站时输入的URL便是它的域名,需要经过域名管理系统DNS将其转化为IP地址后进行连接。若能在DNS上进行一些设置,把目标域名的IP地址对应到其它站点上,我们便可以非法访问目标站点的Cookie了。
  要进行Cookies欺骗,其实很简单。比如在Win9X下的安装目录下,有一名为hosts.sam的文件,以文本方式打开后会看到这样的格式:
  127.0.0.1 localhost
  经过设置,便可以实现域名解析的本地化,只需将IP和域名依上面的格式添加到文件中并另存为hosts即可。hosts文件实际上可以看成一个本机的DNS系统,它可以负责把域名解释成IP地址,它的优先权比DNS服务器要高,它的具体实现是TCP/IP协议中的一部分。
  总之,在某种程度上虽然可以实现Cookies的欺骗,给网络应用带来不安全的因素,但Cookies文件本身并不会造成用户隐私的泄露,也不会给黑客提供木马程序的载体,只要合理使用,它们会给网站管理员进行网站的维护和管理以及广大用户的使用都带来便利。
  Cookies集合具有以下几种属性:
  1.Expires属性:此属性用来给Cookies设置一个期限,在期限内只要打开网页就可以调用被保存的Cookies,如果过了此期限Cookies就自动被删除。如:
  设定Cookies的有效期到2004年4月1日,到时将自动删除。如果一个Cookies没有设定有效期,则其生命周期从打开浏览器开始,到关闭浏览器结束,每次运行后生命周期将结束,下次运行将重新开始。
  2.Domain属性:这个属性定义了Cookies传送数据的唯一性。若只将某Cookies传送给_blank">搜狐主页时,则可使用如下代码:
  3.Path属性:定义了Cookies只发给指定的路径请求,如果Path属性没有被设置,则使用应用软件的缺省路径。
  4.Srcure属性:指定Cookies能否被用户读取。
  5.Haskeys属性:如果所请求的Cookies是一个具有多个键值的Cookies字典,则返回True,它是一个只读属性
  偷窃Cookies和脚本攻击
  尽管cookies没有病毒那么危险,但它仍包含了一些敏感信息:用户名,计算机名,使用的浏览器和曾经访问的网站。用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。
  这并非危言耸听,一种名为Cross site scripting的工具可以达到此目的。在受到Cross site scripting攻击时,cookie盗贼和cookie毒药将窃取内容。一旦cookie落入攻击者手中,它将会重现其价值。
  cookie盗贼:搜集用户cookie并发给攻击者的黑客。攻击者将利用cookie信息通过合法手段进入用户帐户。 cookie毒药:利用安全机制,攻击者加入代码从而改写cookie内容,以便持续攻击。
  Cookies的替代品
  鉴于cookie的局限和反对者的声音,有如下一些替代方法:
  Brownie方案,是一项开放源代码工程,由SourceForge发起。Brownie曾被用以共享在不同域中的接入,而cookies则被构想成单一域中的接入。这项方案已经停止开发。
  P3P,用以让用户获得更多控制个人隐私权利的协议。在浏览网站时,它类似于cookie。
  在与服务器传输数据时,通过在地址后面添加唯一查询串,让服务器识别是否合法用户,也可以避免使用cookie。
  使用和禁用Cookies
  用户可以改变浏览器的设置,以使用或者禁用Cookies
  微软 Internet Explorer
  工具 > Internet选项 > 隐私页
  调节滑块或者点击“高级”,进行设置。
  Mozilla Firefox
  工具 > 选项 > 隐私
  [1][2][3](注:在Linux版本中,可能会是如下操作:编辑 > 属性 > 隐私 , 而Mac则是:Firefox > 属性 > 隐私)
  设置Cookies选项
  设定阻止/允许的各个域内Cookie
  查看Cookies管理窗口,检查现存Cookie信息,选择删除或者阻止它们
  苹果计算机 Safari
  Safari > 预置 > 安全标签 
  选择以下的选项
  总是 接受 Cookies
  永不 接受 Cookies
  接受 Cookies 仅从您浏览的站点 (例如,不接受来自其它站点的广告) 预设的选项。
  您可以显示所有驻留在您浏览器中的 cookies,也可随时将它们之一删除。
  NETSCAPE
  “PREFERENCE\ADVANCED\COOKIES”,在出现的窗口中有三个选项,选择“DISABLECOOKIES”即可关闭COOKIE。在IE中,选择“查看”/“INTERNET选项”/“高级",在随后出现的窗口中找到“COOKIES”一项,选择“禁止所有的COOKIE 使用”可关闭COOKIE。
  如果没有设置cookie列表,请记住在域名前面加入“。”
posted @ 2011-05-30 10:27 Hukin 阅读(207) | 评论 (0)编辑 收藏