随笔-22  评论-8  文章-0  trackbacks-0
 
     摘要: 对于SOCKET在这里我不想究其历史,我只想说其时它是一种进程通讯的方式,简言之就是调用这个网络库的一些API函数就能实现分布在不同主机的相关进程之间的数据交换.
SOCKET中首先我们要理解如下几个定义概念:

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

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

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

四是半相关:网络中用一个三元组可以在全局唯一标志一个进程:
(协议,本地地址,本地端口号)这样一个三元组,叫做一个半相关,它指定连接的每半部分。   阅读全文
posted @ 2011-06-27 10:46 Hukin 阅读(197) | 评论 (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 阅读(906) | 评论 (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 阅读(169) | 评论 (0)编辑 收藏
     摘要:   阅读全文
posted @ 2011-06-16 16:45 Hukin 阅读(6723) | 评论 (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 阅读(168) | 评论 (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 阅读(310) | 评论 (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 阅读(373) | 评论 (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 阅读(222) | 评论 (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 阅读(363) | 评论 (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 阅读(143) | 评论 (0)编辑 收藏
仅列出标题
共3页: 上一页 1 2 3 下一页