发布新日志

  • 卸载 Java 软件后,如何从“添加/删除程序”中将其删除

    2010-01-13 13:17:28

    http://www.java.com/zh_CN/download/help/regkey_addremove.xml?Vistaqooqjre=1.4.2_xx
  • How to setup proxy for java in Mac

    2009-12-22 15:08:04

    If you set a proxy, for example "10.8.1.80 8082", you can follow me.

    set the following value in /var/root/Library/Cache/Java/deployment.properties

    deployment.proxy.http.port=8082 deployment.proxy.http.host=10.8.1.80

    This will enable java to download resourcing from swan, not enable browser.

    The content of the file after added the value:

    #deployment.properties
    #Fri Dec 11 15:16:40 HKT 2009
    deployment.proxy.bypass.local=true
    deployment.javapi.jre.1.6.0.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
    deployment.browser.path=/Applications/Safari.app
    deployment.javapi.jre.1.5.0.args=
    deployment.javapi.jre.1.5.0.osarch=x86_64
    deployment.javapi.jre.1.5.0.osname=Mac OS X
    deployment.proxy.http.port=8082
    deployment.proxy.http.host=10.8.1.80
    deployment.javapi.jre.1.4.2.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home
    deployment.proxy.type=1
    deployment.console.startup.mode=SHOW
    deployment.javapi.cache.update=true
    deployment.apple.java10.5.u1=true
    deployment.javapi.jre.1.5.0.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home
    deployment.javapi.jre.1.6.0.args=
    deployment.javaws.viewer.bounds=216,192,720,360
    deployment.javapi.jre.1.6.0.osname=Mac OS X
    deployment.javapi.jre.1.6.0.osarch=x86_64
    deployment.trace=true
    deployment.javaws.splash.index=/var/root/Library/Caches/Java/cache/6.0/splash/splash.xml
    deployment.javapi.jre.1.4.2.osname=Mac OS X
    deployment.javapi.jre.1.4.2.osarch=x86_64
    deployment.log=true
    deployment.javapi.jre.1.4.2.args=
    deployment.version=6.0
    #Java Web Start jre's
    #Fri Dec 11 15:16:40 HKT 2009
    deployment.javaws.jre.2.location=http\://java.sun.com/products/autodl/j2se
    deployment.javaws.jre.1.registered=true
    deployment.javaws.jre.0.product=1.6.0_13
    deployment.javaws.jre.3.registered=true
    deployment.javaws.jre.0.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/bin/java
    deployment.javaws.jre.0.args=
    deployment.javaws.jre.2.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java
    deployment.javaws.jre.3.location=http\://java.sun.com/products/autodl/j2se
    deployment.javaws.jre.2.args=
    deployment.javaws.jre.0.platform=1.6
    deployment.javaws.jre.3.product=1.4.2_21
    deployment.javaws.jre.0.osarch=x86_64
    deployment.javaws.jre.2.enabled=true
    deployment.javaws.jre.0.osname=Mac OS X
    deployment.javaws.jre.1.osarch=i386
    deployment.javaws.jre.1.platform=1.5
    deployment.javaws.jre.0.registered=true
    deployment.javaws.jre.1.product=1.5.0_19
    deployment.javaws.jre.1.osname=Mac OS X
    deployment.javaws.jre.2.osarch=x86_64
    deployment.javaws.jre.0.enabled=true
    deployment.javaws.jre.2.registered=true
    deployment.javaws.jre.0.location=http\://java.sun.com/products/autodl/j2se
    deployment.javaws.jre.3.osarch=i386
    deployment.javaws.jre.2.osname=Mac OS X
    deployment.javaws.jre.3.osname=Mac OS X
    deployment.javaws.jre.2.platform=1.5
    deployment.javaws.jre.1.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java
    deployment.javaws.jre.1.args=
    deployment.javaws.jre.3.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home/bin/java
    deployment.javaws.jre.3.args=
    deployment.javaws.jre.1.location=http\://java.sun.com/products/autodl/j2se
    deployment.javaws.jre.3.enabled=true
    deployment.javaws.jre.3.platform=1.4
    deployment.javaws.jre.2.product=1.5.0_19
    deployment.javaws.jre.1.enabled=true
    
  • 使用MAC(苹果机)中的root帐号

    2009-11-23 10:32:29

    root user(又名超级用户 - superuser)是一个非常有权力的 Unix 账户,root 的账户能在整个系统里任何部份进行任何操作,包括:拷贝档案、移动/移除档案及系统、执行程式等。所以,通常 root 的账户都只会指派给高级专业的用户使用。该账号即是权力最大的账号,也是最危险的账号,使用不当将严重破坏系统(当然你非要说重装系统就行,我也米话说了)。因此,苹果选择把root user 隐藏在 Mac OS X 里。

    但我们仍然可以透过以下几种方法把 root 的账户启动:

    方法一:
    启动 Mac OS X 的安装光碟,在安装菜单里选择「Password Reset」项目,便能更改密码或启动超级用户模式。(把这工具拷贝到硬碟中是不能启动的,一定要从光碟启动才有效。)

    方法二:
    启动在 Mac OS X 系统中的 Terminal,输入以下命令:
    [localhost:~] currentuser% sudo passwd root
    系统会即时要求输入 root user 的新密码,然後再输入一次,以确保密码正确。

    方法三:
    启动 NetInfo Manager 应用程式(在「Applications/Utilities」的文件夹中),再依照以下步骤:
    1. 从第二个列表里选择「users」目录,再选「root」
    2. 点按窗口底部的「锁」icon,然后在安装过程中提供的用户名称和密码注册。
    3. 从窗口下半部份的列表中选择 * 号一栏,再输入 root user 已加密的新密码。

    可在 Terminal 里输入以下的「htpasswd」命令来产生加密的新密码:
    [localhost:~] currentuser% htpasswd -nb anylogin yourpassword
    [return]
    [localhost:~] currentuser% anylogin : pu9fQgdzVHRB2
    pu9fQgdzVHRB2 就是已加密的新密码

    (一般用户不建议使用密码加密)

    4. 点按窗口底部的「锁型」icon,然後储存更改和离开 NetInfo Manager。

    现在可以在 Terminal 里试试 root user 的新密码!

    推荐:一般的操作,我们可以使用管理员账号进行操作。稍难的操作可以在终端程序中使用sudo命令来完成。而如果还是无法达到目的的时候再用root。

    二:如何以root账号登录系统
    1、终端
    在终端中输入命令:
    su
    然后输入root密码就行了。 这个时候提示符由:
    %
    变为:
    #
    例如:
    [G4:~] x% su
    -->>
    G4:/Users/x root#

    2、系统登录
    打开“系统预置-账号-登录选项“。将登录窗口选择显示为“名称和密码“。这样在登录的时候直接输入root用户及密码就可以了。

  • mac机中如何进入root用户

    2009-11-23 10:25:27

    mac机中,如果不是root用户,可能很多操作没有权限,需要进入root用户才会有权限。

    如果不知道root用户的密码,那么就进不了root用户,怎样解决呢?

    可以用这个命令来直接修改root用户的密码:

    sudo passwd root

    系统会即时要求输入 root user 的新密码,然後再输入一次,以确保密码正确。

    这样就可以了,然后用刚才设置的新密码来进入root用户。

     

  • 如何设置共享目录的访问权限

    2009-09-01 18:04:57

    假如我们要将E盘中的"Project"目录共享,只有"Right"组的成员可以读取,但不能修改,而另外一个用户Super可以对该共享目录完全控制,其他用户不可从网络访问该共享目录。下面我们就来看看如何操作。


    图一


      还是在"我的电脑"中浏览到E盘,然后选择目录"Project",单击鼠标右键,从快捷菜单中选择"共享"。选择"共享该文件夹",共享目录的名称已经自动填好,点"权限"按钮。(如图一)在默认状态下,"Everyone"组成员对该目录有完全控制的权限,这不符合我们的要求,所以先要将该组删除。点"删除"按钮,(如图二)"Everyone"组便从列表中清除了。然后点"添加"。




    图二


    图三

      屏幕上弹出"选择用户、计算机或组"的窗口(如图三),和我们在前面给"组"添加成员时看到的选择窗口基本一样。仔细的观察一下它们又不一样,在上方我们可以从本机或者所在"域"内选择用户,在下面的选择列表中,还可以看到本地已有的"组"。

      选择"Right"组,再单击击"添加"(如图四),下面的列表中自动出现Right组,前面的"ZW"就表示该"组"是工作站"ZW"中的。再从上面选择Super,将其也添加到下面的列表中(如图五)。选完后单击"确定"。



    图四


    图五

      下面我们来设置权限。先选择用户"Super"(如图六),下面的框中,显示出他当前的权限是"读取",这里的"读取"权限包括,查看此目录下的文件名和子文件夹名,进入子文件夹,查看文件中的数据和运行程序。根据前面提到的需求,这里我们选择允许中的"完全控制"。(如图七)



    图六


    图七

      我们再设置"Right"组的权限,选择"Right"组,在下面的框中可以看到默认的权限是允许"读取",符合我们的要求。现在所有的权限都设置好了,点"确定"结束(如图八)


    图八

  • 找回被删除并清空了回收站的文件

    2009-08-30 22:36:42

    找回被删除并清空了回收站的文件

    具体步骤如下哦:

    1、单击“开始——运行,然后输入regedit (打开注册表)
    2、依次展开:HEKEY——LOCAL——MACHIME/SOFTWARE/microsoft/WINDOWS/ CURRENTVERSION/EXPLORER/DESKTOP/NAMESPACE 在左边空白外点击“新建”,选择:“主键”,把它命名为“645FFO40——5081——101B——9F08——00AA002F954E”
    再把右边的“默认”的主键的键值设为“回收站”,然后退出注册表。这样就OK了哦。
    3、别忘了要重启你的计算机啦。

    4、嘿嘿。
    只要你机器没有运行过磁盘整理。系统完好.任何时候的文件都可以找回来。

     

  • 为java runtime environment(jre)配置代理

    2009-08-17 11:03:41

    为 Java Runtime Environment (JRE) 配置代理设置


    本文适用于:
    • 浏览器:
      Internet Explorer 5.5, Internet Explorer 6.x, Netscape 4.7x, Netscape 6.2x, Netscape 7, Mozilla 1.4+
    • JRE 版本:
      1.5.0


    按照以下说明启动“Java Plug-in 控制面板”:
    1. 单击“开始”菜单
    2. 选择“设置”
    3. 选择“控制面板”
    4. 双击“Java”图标。
    5. 单击“网络设置”按钮。


    “网络设置”对话框
    1. 选中“使用浏览器设置”复选框。
    2. 单击“确定”按钮保存所做的更改。


    Java 控制面板的网络设置
    1. 关闭所有浏览器窗口。重新启动浏览器,并尝试装入小应用程序。
    2. 如果仍然无法装入小应用程序,并且出现同样的连接错误,请尝试配置 Web 浏览器的代理设置。

    相关信息:
    什么是代理服务器?如何获得代理服务器信息?



    Web 浏览器代理配置
    您可以手动或自动配置 Web 浏览器代理设置。请按照下面的说明,选择一种为您的浏览器配置代理设置的方法。
    1. 手动代理配置
    2. 自动代理配置
    1. 手动代理配置
      1. Internet Explorer
      2. Mozilla

      1. 手动代理配置:Internet Explorer
        1. 在 Internet Explorer 菜单条中单击“工具”
        2. 选择“Internet 选项”
        3. 单击“连接”选项卡。
        4. 单击“局域网设置”按钮。
        5. 单击“高级”按钮。此时将显示“代理设置”对话框。


    Internet Explorer 代理设置示例
        1. 输入代理信息。咨询您的 ISP 或系统管理员以获得代理设置。
        2. 单击“确定”
      1. 手动代理配置:Mozilla
        1. 在 Mozilla 菜单条中单击“编辑”
        2. 选择“首选设置”
        3. 单击 + 符号展开“高级”菜单。
        4. 选择“代理”


    Mozilla 代理设置示例
        1. 将每个地址和端口号复制到“Java 控制面板”实用程序“代理”选项卡中的对应条目。
          1. 单击“开始”菜单
          2. 选择“设置”
          3. 选择“控制面板”
          4. 双击“Java”图标。
          5. 单击“网络设置”按钮。
          6. 选中“使用代理服务器”复选框
          7. 单击“高级”按钮


    代理设置示例:“JRE 高级网络设置”对话框
    1. 自动代理配置
      如果您的网络管理员提供了自动代理配置脚本,则 Java Runtime Environment 可以使用该脚本自动配置自身。请按照以下说明从代理配置脚本中获得代理信息。
      1. Internet Explorer
      2. Mozilla

      1. 自动代理配置:Internet Explorer
        1. 在 Internet Explorer 菜单条中单击“工具”
        2. 选择“Internet 选项”
        3. 单击“连接”选项卡。
        4. 单击“局域网设置”


    IE 自动检测代理设置示例
        1. 将“自动代理配置 URL”字段中的脚本名称输入到“Java 控制面板”中。
          • 单击“开始”>“设置”>“控制面板”
          • 双击“Java”图标。
          • 单击“常规”选项卡。
          • 单击“网络设置”
          • 选中“使用自动代理配置脚本”复选框。
          • 输入与 Web 浏览器中的输入项相同的脚本名称和路径。


    JRE 自动检测代理设置示例
      1. 自动代理配置:Mozilla
        1. 在 Mozilla 菜单条中单击“编辑”
        2. 选择“首选设置”
        3. 单击三角符号展开“高级”菜单。
        4. 选择“代理”


    Mozilla 自动检测代理设置示例
        1. 将“自动代理配置 URL”字段中的脚本名称输入到“Java 控制面板”中。
          • 单击“开始”>“设置”>“控制面板”
          • 双击“Java”图标。
          • 单击“常规”选项卡。
          • 单击“网络设置”
          • 选中“使用自动代理配置脚本”复选框。
          • 输入与 Web 浏览器中的输入项相同的脚本名称和路径。


    JRE 自动检测代理设置示例
  • How to Register java plug-in with FireFox 3 browser

    2009-08-10 10:08:50

     

    1) Go to <Fire _Install_Folder>/plugins
    2) remove the file libnpjp2.so if it exists and points to some otherJDK (Using root usr)
    3) ln -s <JDK_LOC>/jre/lib/i386/libnpjp2.so . ( note : dontforget to give . as target or name it as libnpjp2.so )

  • shell 输出重定向

    2009-08-05 14:04:40

    Linux Shell 环境中支持输入输出重定向,用符号"<"和">"来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>a.txt 表示将错误信息输出到文件a.txt中。

    同时,还可以在这三个标准输入输出之间实现重定向,比如将错误信息重定向到标准输出,可以用 2>&1来实现。

    Linux下还有一个非凡的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。

    假如想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:

    # ls 1>/dev/null 2>/dev/null

    还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:

    # ls >/dev/null 2>&1

    注重:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静静静:-)

    另外 :

    make >& make_log

    意思是把标准输出和错误输出都重定向, make>out 只重定向标准输出!!!!!

    >log 表示把标准输出重新定向到文件log中

    >& log 表示把标准输出和错误输出都定向到文件log中,相当于 >log 2>&1

  • Mercurial使用

    2009-08-03 17:24:48

    Mercurial是开放源码的分布式版本控制工具,下面简单介绍其用法

    1、进入http://www.selenic.com/mercurial/wiki/ 选择安装TortoiseHg,这是个用户界面化的Mercurial。

    2、安装完成后单击右键会发现多个TortoiseHg的菜单,里面有相关相关操作。另外进入命令行窗口键入hg命令会有相关的提示。

    3、假定我们已经有了个Mercurial工作区http://selenic.com/hg/hgweb.cgi,我们要check out这个工作区到本地。那么我们可以

    A、界面化操作: 右键->TortoiseHg->Clone a Respository , “Source Path”里是"http://selenic.com/hg/hgweb.cgi","Destination Path"里是本地文件夹,然后点击"clone"就成了

    B、命令窗口: 假设本地文件夹为"localFiles",则执行“hg clone http://fxsqe.sfbay.sun.com:7080/hg/hgweb.cgi localFiles”。

    4、版本控制需要确定是谁上传了某一版本,因此我们需要对用户名进行配置,设定好我们的名字。在命令窗口中进入复制出来的工作区,然后执行hg config username命令,在弹出的对话框中写入用户信息,最好遵守规范“用户名<用户邮件>”来填写。

    5、工作区更新后,如果想要把更改的结果提交上去则:

    A、右键点击对应文件,选择TortoiseHg->synchronize,然后可以在窗口中进行更新(pull),上传(push)和解决冲突项等.

    代理设置

    Solaris 新建~/.hgrc

    [http_proxy]
    host=10.8.1.80:8083
    
    [ui]
    username= Jacky Chu<ning-zhi.chu@sun.com>
    
    [truested]
    users=*
    groups=green, staff
    


  • 零碎知识总结

    2009-07-31 11:12:14

    一. 检查jar文件是否被signed:

    cd 到jarfile所在的目录内,如C:\Program Files\JavaFX\javafx-sdk1.2\bin内。

     然后输入命令jarsigner -verify jarfile, 就会显示jar文件是否被signed。如:jarsigner -verify jmc.jar

    二. javafxpackager using specific keystore

    举例说明:

    1. Install JavaFX SDK

    2. goto %JAVAFX_HOME%\samples

    3. copy one sample archive (for example DisplayShelf) to a location where you can expand, say for example \\FxSamples

    4. cd \\FxSamples\DisplayShelf

    5. Generate an FxKeyStore keystore using the following command:

      keytool -genkey -dname "cn=FX packager,ou=CSG,o=SMI,c=US" -alias FxKey -keypass abc123 -keystore FxKeyStore -storepass xyz789 -validity 365  

      Make sure you have JDK\bin in your path.

    6. package the DisplayShelf sample application using a command like:

      javafxpackager -src src -appClass displayshelf.Main -keyStore FxKeystore -keystorepassword xyz789 -keyalias FxKey -keyaliaspassword abc123 -sign

    7. javafxpackager should produce under the dist directory a jar along with a corresponding applet (in an html file) and a jnlp file.

    Expected :

    1. Loading the html or the jnlp file should start the applet/web start.
    2. Verify that the loaded application is signed. The applets and jnlp should prompt the security dialog with the specific signing details.
    3. Make sure there is no exception  shown in java Console while loading an applet or webstart application.
  • MAC中怎么清除java缓存

    2009-07-24 18:03:27

    以root用户为例:
    进入/var/root/Library/Caches/java/cache
    ls查看内容,会有javapi 和 tmp,还有其他的应该就是临时java了,如有6.0,然后删除6.0就可以了: rm -r 6.0/
    这样就删除了java缓存了。



  • MAC中jdk的目录

    2009-07-23 18:09:30

       在MAC系统中,jdk的安装路径与windows不同,默认目录是:/System/Libray/Frameworks/JavaVM.Framwork/。
       在这个目录下有个Versions目录,里面有不同版本的jdk。

    1.怎样设置mac中的默认java版本呢 ?

    先看一下mac中,java链接到了哪里:

    进入到相应的目录:cd /usr/bin

    查看java链接到了哪里:ls -l java

    localhost:bin root# ls -l java
    lrwxr-xr-x  1 root  wheel  74 May 18 10:26 java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
    可以看到java连接到了current版本。那么这个到底是什么版本呢?其实,mac中current只是一个快捷方式而已,是为了方便设置默认java的。

    这个链接连到哪里,默认的java就是哪个。但是在mac中可以保持这个java链接不变,只是改变一下当前的java即可,下面是步骤:

    1)打开Finder : 单击桌面地步的finder图标即可。

    2)Application-->Utilities-->Java-->Java Preferences

    3)由第二步可以打开“Java Preferences”对话框,选中“General”tab。在下面的“Java Application Runtime Settings”区把需要的java版本拖动到最顶端即可。

    最顶端的java就是当前(current)java,这样在改变默认java版本时就不用在/usr/bin下重新设置java链接,而是直接在这里把需要的java拖到最上面就行。

    2.MAC中的javahome设置

    在windows中,javahome的值只是取到版本号的目录即可,但是在mac中有稍微的不同,要去到版本号目录下的Home目录,如:

    JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

    3. 在MAC中设置JAVA_HOME环境变量

    环境变量要再etc目录下的profile文件中配置,这样才是永久的配置。

    cd /etc

    vi profile

    输入如下内容:

    JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

    export JAVA_HOME

    保存。然后重启或者注销,使环境变量的配置起作用。

    这样javahome的环境便令配置好了。

    同样的道理,我们可以在profile这个文件中进行PATH,CALSSPATH等环境变量的配置。

  • 管理 Java 类路径(UNIX 和 Mac OS X)

    2009-07-23 12:53:32

    http://www.ibm.com/developerworks/cn/java/j-classpath-unix/
  • sun中文网址

    2009-07-14 09:03:33

  • 学习java web start

    2009-07-08 18:15:02

    Java Web Start(以下简称JWS)是SUN提供的一种通过Web来部署和发布Java 程序的新技术,它既可以用来发布Application,也可以用来发布Applet,它获去年全球Java技术最佳创意奖。它仅在第一次运行时下载程 序,以后的事情,就全全交给JWS,包括版本的自动更新和维护。这是我们曾经梦寐以求的事情,程序运行在客户端(本地运行,当然有足够的速度),但不用去 安装配置客户端,也不用去考虑版本升级后对客户端的维护,这就是JWS提供给我们的好处之一。OK,下面我们就来看看如何玩转JWS,本文仅用发布 Application来做说明。

    系统环境:Win2000Professional+Tomcat3.2.1+JDK1.3。

    JWS简介

    JWS主要用来通过网络部署你的应用程序,它具有安全、稳定、易维护、易使用的特点。用户访问用JWS部署应用程序的站点,下载发布的应用程序,既可以在 线运行,也可以通过JWS的客户端离线运行已下载的应用程序。对同一个应用程序,在第一次运行时下载,以后每次运行时,JWS的客户端会自动去探测是否有 版本更新,有更新就自动下载新版本,没有更新就直接运行本地当前版本,所有的麻烦全由JWS去承担。好,下面我们就一步一步来搭建JWS








    搭建支持JWS的Web站点

    第一步:你的Tomcat3.2.1已经正常运转

    第二步:找到TomcatHOME/conf下的web.xml文件,在其中添加<mime-type>
    application/x-java-jnlp-file
    </mime-type>

    以支持JNLP文件。








    部署应用程序

    第一步:开发你希望发布的应用程序

    第二步:把应用程序及所用到的所有资源打成一个或多个jar包

    第三步:如果你的应用程序不会用到任何运行这个应用程序的机器的本地资源,那么,你的应用程序就可以部署了。

    第四步:如果你的应用程序用到了运行这个应用程序的机器的本地资源,那么,你的应用程序就必须先签名然后才可以发布。

    第五步:如何给应用程序签名

    1:首先确保你已经完全安装了Java2的环境,有keytool工具,它位于J2SE SDk的bin目录下。这一般不会有问题。

    2:到Dos状态下,进入你需发布应用程序的jar包所在的目录,运行下面这句话
    keytool -genkey -keystore myKeystore -alias jwstest

    它将会提示你输入用户名、密码等,不用理它,按照提示随便输入即可,但一定要记住密码。运行结束它将会在当前路径下创建名为myKeystore的文件。

    3:如果你想察看一下刚才生成的myKeystore文件的内容,可以使用下面这句话:
    keytool -list -keystore myKeystore

    显示出来应该类似如下:

    Keystore type: jks
    Keystore provider: SUN
    Your keystore contains 1 entry:
    jwstest, Tue Nov 23 19:29:32 PST 2001, keyEntry,
    Certificate fingerprint (Test):
    C3:A9:CD:F3:D3:AC:4D:3F:3C:5B:AF:9E:CF:0D:46:5C

    4:对你需发布应用程序的jar包进行签名,运行下面这句话:
    jarsigner -keystore myKeystore yourtest.jar jwstest

    其中yourtest.jar是你的jar包名,你需要修改它,别的就不必修改了。运行时会提示你输入密码,就是你刚才在生成myKeystore文件时设定的密码。

    第六步:部署应用程序的jar包。

    1:在Tomcat的webapps中新建目录JWSTest

    2:在JWSTest下新建目录apps,META-INF,WEB-INF

    3:在apps下新建目录images和lib

    4:在META-INF中拷入MANIFEST.MF

    5:在WEB-INF中拷入web.xml

    6:把已经准备好的jar包拷入lib目录下







    Jsp页面

    第一步:编写用于Web访问的页面index.jsp如下:

    <%@page contentType="text/html;charset=gb2312"%>
    <html>
    <title>JWS Test</title>
    <head>
    <SCRIPT. LANGUAGE="Javascript">
    function insertLink(url, name) {
    document.write("<a href=" + url + ">" + name + "</a><br><br>");
    }
    insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest ");
    </SCRIPT>
    </head>
    <body>
    </body>
    </html>

    第二步:在jsp中添加检测访问的客户端是否已经安装了JWS的客户端的代码,示例如下:

    <%@page contentType="text/html;charset=gb2312"%>
    <html>
    <title> JWS Test </title>
    <head>
    <SCRIPT. LANGUAGE="Javascript">
    var javawsInstalled = 0;
    isIE = "false";
    if (navigator.mimeTypes && navigator.mimeTypes.length) {
    x = navigator.mimeTypes['application/x-java-jnlp-file'];
    if (x) javawsInstalled = 1;
    } else {
    isIE = "true";
    }
    function insertLink(url, name) {
    if (javawsInstalled) {
    document.write("<a href=" + url + ">" + name + "</a><br><br>");
    } else {
    document.write("<a href=" + url + ">"+ name +"</a><br><br>");
    }
    }
    </SCRIPT>
    <SCRIPT. LANGUAGE="VBScript">
    on error resume next
    If isIE = "true" Then
    If Not(IsObject(CreateObject("JavaWebStart.IsInstalled"))) Then
    javawsInstalled = 0
    Else
    javawsInstalled = 1
    End If
    End If
    </SCRIPT>
    <SCRIPT. LANGUAGE="Javascript">
    if(javawsInstalled){
    insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest ");
    }else{
    //通知用户要先安装JWS的客户端,你可以自己提供下载或是直接链接到Sun的JWS下载。
    //分为两种,如果客户端已经安装了Java运行环境,则只要下载javaws-1_0_1_01-win-int.exe即可。
    //如果客户端没有安装Java运行环境,则要下载完整的javaws-1_0_1_01-win-int-rt.exe。
    }
    </SCRIPT>
    </head>
    <body>
    </body>
    </html>






    JNLP文件

    第一步:下面我们来编写JWS的核心配置文件JNLP,有了它,才能将以上各部分联系起来,真正让JWS运转起来。JNLP文件符合标准的XML语法,实质就是一个XML文件。当然,编写它的最好方式是对已写好的JNLP进行改写。JWSTest.jnlp示例如下:

    <?xml version="1.0" encoding="utf-8"?>
    <!-- JNLP File for SwingSet2 Demo Application -->
    <jnlp
    spec="1.0+"
    codebase="http://你的IP:8080/JWSTest/apps"
    href=" JWSTest.jnlp">
    <information>
    <title> JWS Test </title>
    <vendor>YOUR Name</vendor>
    <homepage href=" JWSTest.html"/>
    <description> JWS Test </description>
    <icon href="images/ JWSTest.jpg"/>
    <offline-allowed/>
    </information>
    <security>
    <all-permissions/>
    </security>
    <resources>
    <j2se version="1.3"/>
    <jar href="lib/ JWSTest.jar"/>
    </resources>
    <application-desc main-class="运行启动的主类"/>
    </jnlp>

    第二步:部分JNLP的关键语法

    <jnlp>元素
    spec:必须是1.0及以上版本,这里用1.0+,不需修改。
    codebase:资源的URL,是JNLP指向各连接的起始处,需自行修改。
    Href:JNLP文件相对codebase的存放位置,和JNLP文件的全名,需自行修改。

    <infomation>元素

    Title:发布的应用程序简单标题,需自行修改。
    Vendor:发行商信息,可以写上你的大名,需自行修改。
    Homepage:存放有关应用程序的相关文档的URL,如help文件等,可有可无。
    Description:对应用程序的描述,可以有多对<description></description>,可有可无。
    Icon:用户下载你的应用程序后,在JWS里显示的图标的URL,应是gif或jpeg格式。需自行修改。
    Offline-allowed:选择项,允许用户离线运行应用程序,一般都会有,不用修改。

    <security>元素
    选择项,如果没有指明<security>,默认是不允许应用程序访问用户的本地资源,即应用程序是沙箱运行。
    如果设定为<all-permissions/>,则表示允许应用程序访问用户的本地资源。一般都会设定此值。

    <resource>元素
    <j2se version = 指定jdk版本>
    <jar href = 指定需发布的应用程序的jar包存放的位置>
    <application-desc>元素
    main-class:应用程序运行启动的主类

    <argument>:应用程序运行时的参数,可以有多个,每一个参数用一对<argument>参数</argument>。

    至此,你已经完全构建了运转JWS的各部件。






    完整发布和测试

    前面我们已经准备好了需发布的应用程序的jar包,也写好了用来访问的jsp文件和服务器端的核心jnlp文件。

    第一步:在JWSTest下新建目录jsp。把index.jsp拷入jsp目录。

    第二步:把jnlp文件直接拷入apps目录下。

    第三步:在浏览器里输入:http://localhost:8080/JWSTest/jsp/index.jsp 即可访问到jsp页面。页面应出现JWSTest字样。

    第四步:点击JWSTest,连接到apps下的JWSTest.jnlp文件,JWS启动,开始下载你发布的应用程序。

    第五步:下载完毕,直接运行即可。以后,你也可以直接运行JWS客户端里已下载的应用程序。

    不出意外,应恭喜你已经开始享受JWS带来的乐趣了。








    常见问题

    通过上面的讲述,你一定能体会到JWS的易用性。或许事情并没有那么简单,以我的使用经验,还会有许多问题出现,在这里挑几个经常出现的问题,给出相应解决方法,让大家少走弯路,而享受更多的乐趣。

    问题一:JWS不能运行,JNLP文件像普通XML文件一样显示在Browser里

    解决办法:请修改tomcat里,发布程序的路径中的web.xml。

    在其中添加<mime-type>
    application/x-java-jnlp-file
    </mime-type>
    以支持JNLP文件。

    问题二:不能下载资源或下载资源失败

    解决办法:请卸载JWS的客户端,并将注册表里有关JWS的项目都删除,并确保program Files下的Java Web Start目录已被删除,然后,重装JWS。

    问题三:下载资源中有未签名文件

    解决办法:1:确保所有的jar包及其他资源都进行过签名。

    2:确保整个资源中,没有中文的命名。好像签名工具不支持中文命名的文件名,所以未签到名。这可让我郁闷了一下午哦。

    3:察看已经签名的jar包中,meta-inf路径下的jwstest.sf(jwstest是你在进行签名时-alias后的命名)文件,他详细的列出了所有已签名的文件,以分析签名失败的原因。



    参考资料

    详见 http://java.sun.com/products/javawebstart/

    http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/contents.html

  • 创建和发布web应用--tomcat

    2009-07-08 14:51:24

    本章介绍如何在Tomcat上创建和发布Web应用。这里首先讲解Tomcat的目录结构以
    及Web应用的目录结构,接着介绍如何将HTML、Servlet、JSP和Tag Library部署到Web
    应用中,然后介绍把整个Web 应用打包并发布的方法,最后介绍如何在Tomcat 上配置虚
    拟主机。
    本章侧重于讨论Web 应用的结构和发布方法,所以没有对本章的Servlet 和JSP 的例
    子进行详细解释,关于Servlet和JSP的技术可以分别参考第3 章和第4 章的内容。
    2.1 Tomcat 的目录结构
    在 Tomcat上发布Web应用之前,首先要了解Tomcat 的目录结构。Tomcat的目录结构
    参见表2-1,这些目录都是<CATALINA_HOME>的子目录。
    表2-1 Tomcat的目录结构
     目录 描述
     /bin  存放在Windows平台以及Linux平台上启动和关闭Tomcat的脚本文件
     /conf  存放Tomcat 服务器的各种配置文件,其中最重要的配置文件是server.xml
     /server  包含3 个子目录: classes、lib和webapps
     /server/lib  存放Tomcat 服务器所需的各种JAR 文件
    /server/webapps
    存放Tomcat 自带的两个Web应用: admin应用和manager应用
     /common/lib  存放Tomcat 服务器以及所有Web应用都可以访问的JAR 文件
     /shared/lib  存放所有Web应用都可以访问的JAR 文件
     /logs  存放Tomcat 的日志文件
     /webapps  当发布Web应用时,默认情况下把Web应用文件放于此目录下
     /work  Tomcat 把由JSP 生成的Servlet 放于此目录下

    从表2-1 可以看出,在/server/lib 目录、/common/lib 和/shared/lib 目录下都可以放JAR
    文件,它们的区别在于:
    l 在/server/lib 目录下的JAR文件只可被Tomcat服务器访问
    l 在/shared/lib 目录下的JAR 文件可以被所有的Web 应用访问,但不能被Tomcat
    服务器访问
    l 在/common/lib 目录下的JAR文件可以被Tomcat服务器和所有Web应用访问
    此外,对于下面将要介绍的Java Web应用,在它的WEB-INF目录下,也可以建立lib
    子目录,在lib 子目录下可以放各种JAR文件,这些JAR文件只能被当前Web 应用访问。
    (在以上提到的lib 目录下都只接受JAR文件,如果类压缩文件为ZIP文
    件,应该将它展开,重新打包为JAR文件再拷贝到lib 目录中。如果直接将
    ZIP文件拷贝到lib 目录,则会发现Tomcat服务器仍然找不到相关的类。打
    包命令参见2.2.8 节。)
    2.2 创建和发布 Web 应用
    Java Web应用由一组静态HTML页、Servlet、JSP和其他相关的class组成。每种组件
    在Web应用中都有固定的存放目录。Web应用的配置信息存放在web.xml文件中。在发布
    某些组件(如Servlet)时,必须在web.xml文件中添加相应的配置信息。
    2.2.1 Web应用的目录结构
    Web应用具有固定的目录结构,假定开发一个名为helloapp的Web应用。首先,应该
    在<CATALINA_HOME>/webapps目录下创建这个Web应用的目录结构,参见表2-2。
    表2-2 Web应用的目录结构
     目录 描述
     /helloapp  Web应用的根目录,所有的JSP 和HTML 文件都存放于此目录
     /helloapp/WEB-INF  存放Web应用的发布描述文件web.xml
     /helloapp/WEB-INF/classes  存放各种class文件,Servlet 类文件也放于此目录下
     helloapp/WEB-INF/lib/  存放Web应用所需的各种JAR文件。例如,在这个目录下,可以存放JDBC
    驱动程序的JAR 文件

    从表2-2 中,我们看到在classes 以及lib 子目录下,都可以存放Java 类文件。在运行
    过程中,Tomcat 的类装载器先装载classes 目录下的类,再装载lib 目录下的类。因此,如
    果两个目录下存在同名的类,classes目录下的类具有优先权。
    本章介绍的 helloapp 应用的目录结构如图2-1 所示,helloapp 应用在Windows 资源管
    理器中的展开如图2-2所示。
    在helloapp应用中创建了如下组件:
    l  HTML组件:index.htm
    l  JSP组件:login.jsp和hello.jsp
    l  Servlet组件:DispatcherServlet
    这些组件之间的链接关系为:
    index.htm→login.jsp→DispatcherServlet→hello.jsp






    2.2.2 web.xml文件
    Java Web 应用通过一个基于XML 的发布描述符文件来配置其发布信息,这个文件名
    为web.xml,它存放于WEB-INF子目录下。在附录B中将详细介绍web.xml的配置方法,
    在附录C中将介绍XML的基本知识。在web.xml文件中可包含如下配置信息:
    l  Servlet的定义
    l  Servlet的初始化参数
    l  Servlet以及JSP的映射
    l  安全域配置参数
    l  welcome文件清单
    l 资源引用
    l  环境变量的定义
    现在,创建一个默认的web.xml文件,并把这个文件放到WEB-INF目录中。
    <?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/j2ee/dtds/web-app_2_3.dtd'>
    <web-app>
    </web-app>
    以上web.xml 文件的第一行指定了XML 的版本和字符编码,第二行DOCTYPE 指定
    文档类型,接下来声明了一个<web-app>元素,所有关于Web 应用的配置元素都将加入到
    这个<web-app>元素中。
    2.2.3 在server.xml中加入<Context>元素
    <Context>元素是<CATLINA_HOME>/conf/server.xml 中使用最频繁的元素,它代表了
    运行在<Host>上的单个Web 应用。一个<Host>中可以有多个<Context>元素。每个Web 应
    用必须有惟一的URL路径,这个URL路径在<Context>元素的path属性中设定。
    例如,在名为“localhost”的<Host>元素中加入如下<Context>元素:
    <!-- Define the default virtual host -->
    <Host name="localhost" debug="0" appBase="webapps"
    unpackWARs="true" autoDeploy="true">
    ……
    ……
    <Context path="/helloapp" docBase="helloapp" debug="0"
    reloadable="true"/>
    </Host>
    Context元素的各个属性的说明参见表2-3。
    表2-3 Context元素的属性
     属性 描述
     path  指定访问该Web应用的URL 入口
     docBase  指定Web 应用的文件路径,可以给定绝对路径,也可以给定相对于Host 的appBase 属性的相对路径
    (关于Host 的appBase 属性参见2.3 节)。如果Web应用采用开放目录结构,则指定Web应用的根目录;
    如果Web应用是个WAR 文件,则指定WAR 文件的路径
    reloadable
    如果这个属性设为true,Tomcat 服务器在运行状态下会监视在WEB-INF/classes 和WEB-INF/lib 目录
    下class文件的改动。如果监测到有class文件被更新,服务器会自动重新加载Web应用

    (在开发阶段,将reloadable属性设为true,有助于调试Servlet和其他的
    class 文件。但是由于这一功能会加重服务器的运行负荷,因此建议在Web
    应用的产品发布阶段,将这个属性设为false。)

    2.2.4 部署HTML文件
    在 helloapp 目录下加入index.htm 文件,这个文件仅仅用来显示一串带链接的字符
    “Welcome to HelloApp”, 它链接到login.jsp文件。以下是index.htm文件的代码:
    <html>
      <head>
        <title>helloapp</title>
      </head>
      <body >
        <p><font size="7">Welcome to HelloApp</font></p>
        <p><a href="login.jsp?language=English">English version </a>
      </body>
    </html>
    访问index.htm 的URL 为http://localhost:8080/helloapp/index.htm,该页面的显示结果
    如图2-3所示。
    图2-3 :

    2.2.5 部署JSP
    接下来,创建两个JSP文件,其中一个是login.jsp(参见例程2-1),它显示登录页面,
    要求输入用户名和口令,这个页面链接到一个名为DispatcherServlet的Servlet。还有一个
    JSP文件是hello.jsp(参见例程2-2),这个JSP被DispatcherServlet调用,显示Hello页面。
    JSP 的语法将在第4 章详细讨论,本节侧重于介绍JSP 的发布过程。这两个JSP 文件都应
    放在helloapp目录下。
    例程2-1 login.jsp:
    <html>
         <head>
            <title>helloapp</title>
         </head>
         <body >
            <br>
            <form. name="loginForm" method="post" action="dispatcher">
               <table>
                  <tr>
                      <td><div align="right">User Name:</div></td>
                      <td> <input type="text" name="username"></td>
                  </tr>
                  <tr>
                      <td><div align="right">Password:</div></td>
                      <td><input type="password" name="password"></td>
                  </tr>
                  <tr>
                      <td></td>
                      <td><input type="Submit" name="Submit" value="Submit"></td>
                  </tr>
                </table>
              </form>
            </body>
    </html

    例程2-2 hello.jsp:
    <html>
       <head>
          <title>helloapp</title>
       </head>
       <body>
          <b>Welcome: <%= request.getAttribute("USER") %></b>
       </body>
    </html>
    login.jsp 中生成了一个loginForm表单,它有两个字段:username 和passoword。访问
    login.jsp的URL为http://localhost:8080/helloapp/login.jsp,它生成的页面如图2-4所示。
    图2-4 login.jsp网页

    2.2.6 部署Servlet
    下面,创建一个Servlet 文件,名为DispatcherServlet.java(参见例程2-3),它调用
    HttpServletRequest对象的getParameter 方法读取客户提交的loginForm表单数据,获取用户
    名和口令,然后将用户名和口令保存在HttpServletRequest对象的属性中,再把请求转发给
    hello.jsp。
    例程2-3 DispatcherServlet.java
    package mypack;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    public class DispatcherServlet extends HttpServlet {
    private String target = "/hello.jsp";
    public void init(ServletConfig config)
    throws ServletException {
    super.init(config);
    }
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    // If it is a get request forward to doPost()
    doPost(request, response);
    }
    public void doPost(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    // Get the username from the request
    String username = request.getParameter("username");
    // Get the password from the request
    String password = request.getParameter("password");
    // Add the user to the request
    request.setAttribute("USER", username);
    request.setAttribute("PASSWORD", password);
    // Forward the request to the target named
    ServletContext context = getServletContext();
    System.out.println("Redirecting to " + target);
    RequestDispatcher dispatcher =
    context.getRequestDispatcher(target);
    dispatcher.forward(request, response);
    }
    public void destroy() {
    }
    }

    编译并发布DispatcherServlet的步骤如下。
    (1)编译DispatcherServlet.java。编译时,需要将Java Servlet API 的JAR 文件
    (servlet-api.jar)设置为classpath,servlet-api.jar 文件位于<CATALINA_HOME>/common/lib
    目录下。
    ( 2 ) 把编译出来的class 文件拷贝到/helloapp/WEB_INF/classes 目录下。
    DispatcherServlet.class的存放位置为/helloapp/WEB_INF/classes/mypack/DispatcherServlet。
    在本例中,声明将DispatcherServlet 类放在包mypack 下,所以应该在
    /WEB_INF/classes 目录下先创建子目录/mypack,然后在子目录下放
    DispatcherServlet.class文件。
    (3)接下来在web.xml中为DispatcherServlet类加上<servlet>和<servlet-mapping>元素。
    <web-app>
    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>mypack.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/dispatcher</url-pattern>
    </servlet-mapping>
    </web-app>
    <servlet>元素的属性描述参见表2-4。
    在本例配置中,没有为DispatcherServlet设置load-on-startup属性,因此当Web应用启
    动时,Servlet 容器不会加载这个Servlet,只有当Web 客户首次访问这个Servlet 时才加载
    它。
    表2-4 <servlet>元素的属性:
    属性
    说明
     <servlet-name>  定义Servlet 的名字
     <servlet-class>  指定实现这个Servlet 的类
    <init-param>
    定义Servlet 的初始化参数(包括参数名和参数值),一个<servlet>元素中可以有
    多个<init-param>
    <load-on-startup>
    指定当Web 应用启动时,装载Servlet 的次序。当这个值为正数或零,Servlet 容
    器先加载数值小的Servlet,再依次加载其他数值大的Servlet。如果这个值为负数或
    者没有设定,那么Servlet 容器将在Web客户首次访问这个Servlet 时加载它

    <servlet-mapping>元素用来指定<servlet-name>和<url-pattern>映射。<url-pattern>是指访
    问Servlet的相对URL路径。
    根据以上<url-pattern>属性,访问DispatcherServlet 的URL 为http://localhost:8080/
    helloapp/dispatcher,DispatcherServlet接受到客户请求后,再把请求转发给hello.jsp,hello.jsp
    生成的页面如图2-5所示。
    图2-5 DispatcherServlet调用hello.jsp生成的网页
    2.2.7 部署JSP Tag Library
    最后,在Web应用中加入Tag Library(标签库)。Tag Library向用户提供了自定义JSP
    标签的功能。我们将定义一个名为mytaglib 的标签库,它包含了一个简单的hello标签,这
    个标签能够将JSP页面中所有的<mm:hello/>解析为字符串“hello”。
    以下是创建和发布mytaglib 标签库的步骤。
    (1)编写用于处理hello 标签的类HelloTag.java,例程2-4 列出了HelloTag.java 的源
    代码。
    例程2-4 HelloTag.java
    package mypack;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspTagException;
    import javax.servlet.jsp.tagext.TagSupport;
    public class HelloTag extends TagSupport
    {
    public void HelloTag() { }
    // Method called when the closing hello tag is encountered
    public int doEndTag() throws JspException {
    try {
    // We use the pageContext to get a Writer
    // We then print the text string Hello
    pageContext.getOut().print("Hello");
    }
    catch (Exception e) {
    throw new JspTagException(e.getMessage());
    }
    // We want to return SKIP_BODY because this Tag does not support
    // a Tag Body
    return SKIP_BODY;
    }
    public void release() {
    // Call the parent's release to release any resources
    // used by the parent tag.
    // This is just good practice for when you start creating
    // hierarchies of tags.
    super.release();
    }
    }

    编译HelloTag.java 时,需要将jsp-api.jar 文件添加到classpath中,这个JAR文件位于
    <CATALINA_HOME>/common/lib 目录下。编译生成的HelloTag.class 存放位置为
    /WEB-INF/classes/mypack/HelloTag.class。
    (2)创建Tag Library的描述文件mytaglib.tld文件,在这个文件中定义mytaglib 标签
    库和hello标签。这个文件存放位置为/WEB-INF/mytaglib.tld。例程2-5 列出了mytaglib.tld
    的源代码。
    例程2-5 mytaglib.tld
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE taglib
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
    "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    <!-- a tag library descriptor -->
    <taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.1</jspversion>
    <shortname>mytaglib</shortname>
    <uri>/mytaglib</uri>
    <tag>
    <name>hello</name>
    <tagclass>mypack.HelloTag</tagclass>
    <bodycontent>empty</bodycontent>
    <info>Just Says Hello</info>
    </tag>
    </taglib>
    (3)在web.xml文件中加入<taglib>元素,例程2-6列出了修改后的web.xml文件。
    例程2-6 加入<taglib>元素的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/j2ee/dtds/web-app_2_3.dtd'>
    <web-app>
    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>mypack.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/dispatcher</url-pattern>
    </servlet-mapping>
    <taglib>
    <taglib-uri>/mytaglib</taglib-uri>
    <taglib-location>/WEB-INF/mytaglib.tld</taglib-location>
    </taglib>
    </web-app>
    <taglib>中包含两个属性<taglib-uri>和<taglib-location>。其中<taglib-uri>指定Tag
    Library标示符;<taglib-location>指定Tag Library的描述文件(TLD)的位置。
    (4)在hello.jsp文件中加入hello标签。首先,在hello.jsp中加入引用mytaglib 的taglib
    指令:
    <%@ taglib uri="/mytaglib" prefix="mm" %>
    以上taglib 指令中,prefix 用来指定引用mytaglib标签库时的前缀,修改后的hello.jsp
    文件参见例程2-7。
    例程2-7 加入Tag标签的hello.jsp
    <%@ taglib uri="/mytaglib" prefix="mm" %>
    <html>
    <head>
    <title>helloapp</title>
    </head>
    <b><mm:hello/> : <%= request.getAttribute("USER") %></b>
    </body>
    </html>
    hello.jsp 修改后,再依次访问index.htm→login.jsp→DispatcherServlet→hello.jsp,最后
    生成的网页如图2-6所示。
    图2-6 带hello标签的hello.jsp生成的网页
    2.2.8 创建并发布WAR文件
    Tomcat既可以运行采用开放式目录结构的Web应用,也可以运行WAR文件。在本书
    配套光盘的sourcecode/chapter2/helloapp目录下提供了所有源文件,只要把整个helloapp目
    录拷贝到<CATALINA_HOME>/webapps目录下,即可运行开放式目录结构的helloapp应用。
    在 Web应用的开发阶段,为了便于调试,通常采用开放式的目录结构来发布Web应用,
    这样可以方便地更新或替换文件。如果开发完毕,进入产品发布阶段,应该将整个Web 应
    用打包为WAR文件,再进行发布。
    在本例中,按如下步骤发布helloapp。
    步骤:
    (1)进入helloapp应用的根目录<CATALINA_HOME>/webapps/helloapp。
    (2)把整个Web应用打包为helloapp.war 文件,命令如下:
    jar cvf helloapp.war *.*
    (在 JDK 的bin 目录下提供了打包程序jar.exe。如果要展开helloapp.war
    文件,命令为: jar xvf helloapp.war。)
    (3)把helloapp.war 文件拷贝到<CATALINA_HOME>/webapps目录下。
    (4)删除原先的helloapp目录。
    (5)启动Tomcat服务器。
    Tomcat 服务器启动时,会把webapps 目录下的所有WAR 文件自动展开为开放式的目
    录结构。所以服务器启动后,会发现服务器把helloapp.war 展开到<CATALINA_HOME>
    /webapps/helloapp目录中。
    2.3 配置虚拟主机
    在 Tomcat 的配置文件server.xml 中,Host 元素代表虚拟主机,在同一个Engine 元素
    下可以配置多个虚拟主机。例如,有两个公司的Web 应用都发布在同一个Tomcat 服务器
    上,可以为每家公司分别创建一个虚拟主机,它们的虚拟主机名分别为:
    www.mycompany1.com
    www.mycompany2.com
    这样当Web客户访问以上两个Web应用时,就好像这两个应用分别拥有各自的主机。
    此外,还可以为虚拟主机建立别名,例如,如果希望Web客户访问www.mycompany1.com
    或mycompany1.com都能连接到同一个Web,那么可以把mycompany1.com 作为虚拟主机
    的别名来处理。
    下面讲解如何配置www.mycompany1.com虚拟主机。
    步骤:
    (1)打开<CATALINA_HOME>/conf/server.xml 文件,会发现在<Engine>元素中已经
    有一个名为localhost 的<Host >元素,可以在它的后面(即</Host>后面)加入如下<Host>
    元素:
    <Host name="www.mycompany1.com" debug="0" appBase="C:\mycompany1"
    unpackWARs="true" autoDeploy="true">
    <alias>mycompany1.com</alias>
    <alias>mycompany1</alias>
    <Context path="/helloapp" docBase="helloapp" debug="0"
    reloadable="true" />
    </Host>
    (以上配置代码位于本书配套光盘的sourcecode/chapter2/virtualhost-configure.xml 文件
    中。)
    <Host>元素的属性描述参见表2-5。
    表2-5 <Host>元素的属性
     属性 描述
     name  指定虚拟主机的名字
     debug  指定日志级别
    appBase
    指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对
    目录。如果此项没有设定,默认值为<CATALINA_HOME>/webapps
    unpackWARs
    如果此项设为true,表示将把Web 应用的WAR 文件先展开为开放目录结构后再运行。如
    果设为false,则直接运行WAR 文件
    autoDeploy
    如果此项设为true,表示当Tomcat 服务器处于运行状态时,能够监测appBase 下的文件,
    如果有新的Web应用加入进来,则会自动发布这个Web应用
    alias
    指定虚拟主机的别名,可以指定多个别名
    deployOnStartup
    如果此项设为true,则表示Tomcat 服务器启动时会自动发布appBase 目录下所有的Web应
    用。如果Web应用在server.xml 中没有相应的<Context>元素,则将采用默认的Context 配置。
    deployOnStartup的默认值为true

    在<Host>的deployOnStartup 属性为true 的情况下,即使你没有在server.xml 中为
    helloapp应用加入<Context>元素,Tomcat服务器也可以自动发布和运行helloapp应用。在
    这种情况下,Tomcat使用默认的DefaultContext。关于DefaultContext的知识可以参考Tomcat
    文档:
    <CATALINA_HOME>/webapps/tomcat-docs/config/defaultcontext.html
    (2)把helloapp 应用(helloapp.war 文件或者是整个helloapp 目录)拷贝到appBase
    属性指定的目录C:\mycompany1 下。
    (3)为了使以上配置的虚拟主机生效,必须在DNS 服务器中注册以上的虚拟主机名
    和别名,使它们的IP地址都指向Tomcat服务器所在的机器。必须注册以下名字:
    www.mycompany1.com
    mycompany1.com
    mycompany1
    (4)重启Tomcat服务器,然后通过浏览器访问:
    http://www.mycompany1.com/helloapp/index.htm
    如果返回正常的页面就说明配置成功。还可以通过虚拟机的别名来访问helloapp应用:
    http://mycompany1.com/helloapp/index.htm
    http://mycompany1/helloapp/index.htm

    2.4 小 结
    本章通过helloapp Web 应用例子,介绍了在Tomcat 上创建和发布Web 应用的步骤。
    通过本章内容,读者可以学会创建Web应用的目录结构,创建web.xml文件,并且能够把
    HTML、Servlet、JSP和Tag Library部署到Web应用中。此外,读者还可以掌握将整个Web
    应用打包并发布的方法。本章还介绍了配置虚拟主机的方法。
    为了便于读者编译源程序,在本书配套光盘的sourcecode/chapter2 目录下提供了编译
    本章Java 程序的脚本compile.bat,它的内容如下:
    set catalina_home=C:\jakarta-tomcat
    set path=%path%;C:\j2sdk1.4.2\bin
    set currpath=.\
    if "%OS%" == "Windows_NT" set currpath=%~dp0%
    set src=%currpath%helloapp\src
    set dest=%currpath%helloapp\WEB-INF\classes
    set classpath= %catalina_home%\common\lib\servlet-api.jar;
    %catalina_home%\common\lib\jsp-api.jar
    javac -sourcepath %src% -d %dest% %src%\mypack\DispatcherServlet.java
    javac -sourcepath %src% -d %dest% %src%\mypack\HelloTag.java
    运行这个脚本时,只要重新设置以上Tomcat目录和JDK 的目录即可。
    在 javac 命令中,-sourcepath 设定Java 源文件的路径,-d 设定编译生成的类的存放路
    径。javac 命令的-classpath 参数可以设定classpath 路径,如果此项没有设定,将参照环境
    变量classpath的设置。
  • tomcat官方网站

    2009-07-07 17:44:19

    http://tomcat.apache.org/download-60.cgi
  • Mac OSX的一些使用

    2009-07-07 11:28:19

    一、如何打开终端窗口

    1、点击Dock上的“Finder”图标

    2、在弹出窗口中,选择左列表中的“Applications”

    3、进入右框中“Utilities”

    4、双击右框中的“Terminal”,运行终端程序。


    二、Mac OSX如何启用和使用root账户

    启动在 Mac OS X 系统中的 Terminal,输入以下命令:

    evrergreens-computer:~egtc$ currentuser% sudo passwd root

    系统会即时要求输入 root user 的新密码,然後再输入一次,以确保密码正确。

    接下就可以使用root用户了,在终端输入以下命令:

    evrergreens-computer:~egtc$ su

    password: *****

    evrergreens-computer:/root# ---表明切到root了。


    三、如何查看MAC的版本信息

    点击苹果机桌面左上角的小苹果按钮,在下拉菜单中选择“About This MAC...”, 就可以看到版本信息了。


    四、如何察看MAC OSX系统的内存大小及使用情况
    点击桌面左上角的苹果按钮,在下拉菜单中选择“About This MAC...”,会弹出一个对话框,上面有Memory的信息,如果要看详细信息,单击“More info...”按钮即可。
  • 如何清空各种浏览器缓存

    2009-07-03 14:14:14

    要清空 Internet Explorer 的缓存,请按以下步骤操作:

    1. 退出您的 AdSense 帐户。关闭所有其他打开的浏览器窗口。
    2. 单击浏览器顶部的"工具"菜单,并选择"Internet 选项"。
    3. 单击该对话框顶部的"常规"标签。
    4. 单击"Internet 临时文件"下面的"删除文件"。
    5. 选中"删除所有脱机内容"旁边的框。
    6. 单击"确定"。
    要清空 Mozilla Firefox 的缓存,请按以下步骤操作:
    1. 退出您的 AdSense 帐户。关闭所有其他打开的浏览器窗口。
    2. 单击浏览器顶部的"Tools"(工具)菜单,并选择"Options"(选项)。
    3. 单击"Privacy"(隐私)。
    4. 单击"Cache"(高速缓存)旁边的"Clear"(清空缓存)。
    5. 单击"OK"(确定)。
    要清空 Mozilla 和 Netscape 的缓存,请按以下步骤操作:
    1. 退出您的 AdSense 帐户。关闭所有其他打开的浏览器窗口。
    2. 单击浏览器顶部的"Edit"(编辑)菜单,然后选择"Preferences"(首选项)。
    3. 单击"Advanced"(高级)旁边的"+"。
    4. 单击"Advanced"(高级)下面的"Cache"(高速缓存)。
    5. 单击"Clear Cache"(清除高速缓存)。
    6. 单击"OK"(确定)。

    要清空 Safari 的缓存,请按以下步骤操作:

    1. 退出您的 AdSense 帐户。关闭所有其他打开的浏览器窗口。
    2. 打开浏览器工具栏中的"Safari"菜单。
    3. 选择"Empty Cache"(清空缓存)。
    4. 单击该对话框中的"Empty"(清空)。
761/41234>
Open Toolbar