﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-J2EE,Documentum,GWT,EJB学习路程</title><link>http://www.blogjava.net/todd841026/</link><description>为了所爱的，和爱我的人努力</description><language>zh-cn</language><lastBuildDate>Fri, 01 May 2026 11:41:11 GMT</lastBuildDate><pubDate>Fri, 01 May 2026 11:41:11 GMT</pubDate><ttl>60</ttl><item><title>调整java 虚拟机</title><link>http://www.blogjava.net/todd841026/archive/2009/11/06/301376.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Fri, 06 Nov 2009 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2009/11/06/301376.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/301376.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2009/11/06/301376.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/301376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/301376.html</trackback:ping><description><![CDATA[<strong><br />
</strong>
<div class="blog_content">
<p>尽管 JVM 调整操作随 JVM 提供程序的不同而有所变化，但一般的调整概念适用于所有 JVM。这些一般的概念包括： <br />
编译器调整。在服务器运行时期间，所有 JVM 都使用即时（JIT）编译器来将 Java 字节码编译为本机指令。 <br />
Java 内存或堆调整。JVM 内存管理功能（即垃圾回收）为提高 JVM 性能提供了其中一种最大的可能性。 <br />
类装入调整。 <br />
过程 <br />
优化启动性能和运行时性能 <br />
在某些环境中，优化 WebSphere Application Server
的启动性能比优化运行时性能更重要。在另一些环境中，优化运行时性能更为重要。缺省情况下，IBM JVM 是针对运行时性能进行优化的，而基于
HotSpot 的 JVM 是针对启动性能进行优化的。 <br />
<br />
Java JIT
编译器在很大程度上决定了是优化启动性能还是优化运行时性能。编译器使用的初始优化级别影响编译类方法所耗用的时间以及启动服务器所耗用的时间。为了提高
启动速度，可以降低编译器所使用的初始优化级别。这意味着，由于现在使用较低的优化级别来编译类方法，所以应用程序的运行时性能可能会下降。 <br />
<br />
因为编译器在运行时执行阶段会根据自己的判断来重新编译类方法以提高性能，所以，很难提供一个有关特定的运行时性能影响的说明。最终，应用程序的持续时间
是影响运行时性能下降程度的主要原因。运行时间较短的应用程序的方法被重新编译的可能性较高。运行时间较长的应用程序的方法被重新编译的可能性较低。
IBM JVM 的缺省设置是使用高优化级别来执行初始编译。如果需要更改此行为，可以使用以下 IBM JVM 选项： <br />
<br />
-Xquickstart <br />
<br />
此设置影响 IBM JVM 使用较低优化级别来编译类方法的方式，这将提高服务器启动速度，但会使运行时性能下降。缺省情况下，如果未指定此参数，IBM JVM 最初将使用较高的初始优化级别来执行编译。此设置能够提高运行时性能，但会减慢服务器启动速度。 <br />
<br />
缺省值： 高初始编译器优化级别 <br />
建议值： 高初始编译器优化级别 <br />
用法： -Xquickstart 可以加快服务器启动速度。 <br />
<br />
基于 Sun 的 Hotspot 技术的 JVM 最初使用低优化级别来编译类方法。使用下列 JVM 选项来更改此行为： <br />
<br />
-server <br />
<br />
基于 Sun 的 Hotspot 技术的 JVM 最初使用低优化级别来编译类方法。这些 JVM 使用简单编译器和能够进行优化的 JIT
编译器。通常情况下，使用简单 JIT
编译器。然而，可以通过设置此选项来使用能够执行优化的编译器。此更改将显著提高服务器的性能，但使用能够执行优化的编译器时，服务器的预备时间将会较
长。 <br />
<br />
缺省值： 简单编译器 <br />
建议值： 能够执行优化的编译器 <br />
用法： -server 启用能够执行优化的编译器。 <br />
<br />
设置堆大小 下列命令行参数对于设置堆大小来说很有用。 <br />
-Xms <br />
此设置控制 Java 堆的初始大小。正确调整此参数有助于降低垃圾回收开销，从而缩短服务器响应时间并提高吞吐量。对于某些应用程序来说，此选项的缺省设置可能会太低，从而导致发生大量小型垃圾回收。 <br />
<br />
缺省值： 256 MB <br />
建议值： 随工作负载的不同而有所变化，但高于缺省值。 <br />
用法： -Xms256m 将初始堆大小设置为 256 兆字节 <br />
<br />
-Xmx <br />
此设置控制 Java 堆的最大大小。正确调整此参数有助于降低垃圾回收开销，从而缩短服务器响应时间并提高吞吐量。对于某些应用程序来说，此选项的缺省设置可能会太低，从而导致发生大量小型垃圾回收。 <br />
<br />
缺省值： 512 MB <br />
建议值： 随工作负载的不同而有所变化，但高于缺省值。 <br />
用法： -Xmx512m 将最大堆大小设置为 512 兆字节 <br />
<br />
-Xlp <br />
此设置可以与 IBM JVM 配合使用，以使用大页来分配堆。然而，如果使用此设置，那么必须将操作系统配置为支持大页。使用大页可以降低 CPU 跟踪堆内存时的开销，并且还允许创建较大的堆。 <br />
<br />
请参阅调整操作系统 以了解有关调整操作系统的更多信息。 <br />
<br />
应该指定的堆大小取决于不同时段的堆使用情况。在堆大小频繁更改的情况下，对 Xms 和 Xmx 参数指定相同的值可以提高性能。 <br />
<br />
调整 IBM JVM 的垃圾回收器。 <br />
使用 Java -X 选项来查看内存选项列表。 <br />
<br />
-Xgcpolicy <br />
将 gcpolicy 设置为 optthruput
会禁用并发标记。如果没有暂停时间问题（表现为应用程序响应时间不规律），那么应该使用此选项来实现最大吞吐量。将 gcpolicy 设置为
optavgpause
会使用缺省值来启用并发标记。此设置将减少由正常垃圾回收所引起的应用程序响应时间不规律情况。然而，此选项可能会降低整体吞吐量。 <br />
<br />
缺省值： optthruput  <br />
建议值： optthruput  <br />
用法： Xgcpolicy:optthruput <br />
<br />
-Xnoclassgc <br />
缺省情况下，当一个类没有任何活动实例时，JVM 就会从内存中卸装该类，但是这样会使性能下降。如果关闭类垃圾回收，就可以消除由于多次装入和卸装同一个类而造成的开销。 <br />
<br />
如果不再需要某个类，那么该类在堆中所占用的空间通常将用于创建新对象。但是，如果应用程序通过创建类的新实例来处理请求，并且该应用程序的请求是随机出
现的，那么可能会发生以下情况：先前请求者完成后，正常的类垃圾回收将通过释放这个类占用的堆空间来清除这个类，但当下一个请求出现时，又必须将这个类重
新实例化。在这种情况下，您可能想使用此选项来禁用类垃圾回收。 <br />
<br />
缺省值： 启用类垃圾回收 <br />
建议值： 禁用类垃圾回收 <br />
用法： Xnoclassgc 禁用类垃圾回收 <br />
<br />
有关其他信息，请参阅下列 DeveloperWorks 文章： <br />
http://www.ibm.com/developerworks/java/ <br />
调整 Sun JVM 的垃圾回收器 <br />
在 Solaris 平台上，WebSphere Application Server 在 Sun Hotspot JVM 上运行，而不是在 IBM JVM 上运行。对 Sun JVM 使用正确的调整参数以利用其性能优化功能十分重要。 <br />
<br />
Sun Hotspot JVM 依靠分代垃圾回收来实现最佳性能。下列命令行参数对于调整垃圾回收来说非常有用。 <br />
<br />
-XX:SurvivorRatio <br />
将 Java
堆划分为旧对象（长生命周期对象）区域和新对象区域。新对象区域进一步细分为两部分，第一部分用于分配给新对象（初始区域），第二部分存放那些经过其前几
次垃圾回收之后、但在被提升为旧对象之前仍在使用中的新对象（幸存者空间）。幸存者比率是堆的新对象区域中初始区域与幸存者空间的比率。增大此设置将针对
需要创建大量对象但仅保留少量对象的应用程序优化 JVM。与其他应用程序相比，WebSphere Application Server
会生成更多中等生命周期对象和长生命周期对象，因此，应该将此设置设置为小于缺省值。 <br />
<br />
缺省值： 32 <br />
建议值： 16 <br />
用法： -XX:SurvivorRatio=16 <br />
<br />
-XX:PermSize <br />
为永久生成对象保留的堆区域存储 JVM 的所有反射数据。对于动态地装入和卸装大量类的应用程序来说，应该增大此大小以优化它们的性能。通过将此参数设置为 128MB，可以消除增大此部分堆所需的开销。 <br />
<br />
建议值： 128 MB <br />
用法： XX:PermSize=128m 将 perm 大小设置为 128 兆字节。 <br />
<br />
-Xmn <br />
此设置控制允许新生成的对象在堆中耗用的空间量。正确调整此参数有助于降低垃圾回收开销，从而缩短服务器响应时间并提高吞吐量。此参数的缺省设置通常过
低，这将导致执行大量的小型垃圾回收操作。如果将此参数设置得过高，可能会导致 JVM
仅执行大型（全面）垃圾回收。这些垃圾回收操作通常会耗时几秒钟，这将严重影响服务器的整体性能。您必须保持将此参数设置为小于整个堆大小的一半，以避免
这种情况出现。 <br />
<br />
缺省值： 2228224 字节 <br />
建议值： 大约整个堆大小的 1/4 <br />
用法： -Xmn256m 将大小设置为 256 兆字节。 <br />
<br />
-Xnoclassgc <br />
缺省情况下，当一个类没有任何活动实例时，JVM 就会从内存中卸装该类，但是这样会使性能下降。如果关闭类垃圾回收，就可以消除由于多次装入和卸装同一个类而造成的开销。 <br />
<br />
如果不再需要某个类，那么该类在堆中所占用的空间通常将用于创建新对象。但是，如果应用程序通过创建类的新实例来处理请求，并且该应用程序的请求是随机出
现的，那么可能会发生以下情况：先前请求者完成后，正常的类垃圾回收将通过释放这个类占用的堆空间来清除这个类，但当下一个请求出现时，又必须将这个类重
新实例化。在这种情况下，您可能想使用此选项来禁用类垃圾回收。 <br />
<br />
缺省值： 启用类垃圾回收 <br />
建议值： 禁用类垃圾回收 <br />
用法： Xnoclassgc 禁用类垃圾回收 <br />
<br />
有关调整 Sun JVM 的其他信息，请参阅 Java HotSpot VM 的性能文档。 <br />
<br />
调整 HP JVM 的垃圾回收器 <br />
HP JVM 依靠分代垃圾回收来实现最佳性能。下列命令行参数对于调整垃圾回收来说非常有用。 <br />
<br />
-Xoptgc <br />
此设置针对包含许多短生命周期对象的应用程序优化 JVM。如果未指定此参数，那么 JVM 通常执行大型（全面）垃圾回收。全面垃圾回收会花费几秒钟时间，这将显著影响服务器性能。 <br />
<br />
缺省值： off <br />
建议值： on <br />
用法： -Xoptgc 启用优化的垃圾回收。 <br />
<br />
-XX:SurvivorRatio <br />
将 Java
堆划分为旧对象（长生命周期对象）区域和新对象区域。新对象区域进一步细分为两部分，第一部分用于分配给新对象（初始区域），第二部分存放那些经过其前几
次垃圾回收之后、但在被提升为旧对象之前仍在使用中的新对象（幸存者空间）。幸存者比率是堆的新对象区域中初始区域与幸存者空间的比率。增大此设置将针对
需要创建大量对象但仅保留少量对象的应用程序优化 JVM。与其他应用程序相比，WebSphere Application Server
会生成更多中等生命周期对象和长生命周期对象，因此，应该将此设置设置为小于缺省值。 <br />
<br />
缺省值： 32 <br />
建议值： 16 <br />
用法： -XX:SurvivorRatio=16 <br />
<br />
-XX:PermSize <br />
为永久生成对象保留的堆区域存储 JVM 的所有反射数据。对于动态地装入和卸装大量类的应用程序来说，应该增大此大小以优化它们的性能。通过将此参数指定为 128 兆字节，可以消除增大此部分堆所需的开销。 <br />
<br />
缺省值： 0 <br />
建议值： 128 兆字节 <br />
用法： -XX:PermSize=128m 将 PermSize 设置为 128 兆字节 <br />
<br />
-XX:+ForceMmapReserved <br />
缺省情况下，Java 堆以&#8220;惰性交换&#8221;方式进行分配。在此方式下，将根据需要来分配内存页，这样可以节省交换空间，但是也将强制使用 4KB
页。在大型堆系统中，这种内存分配方式允许堆包含数以十万计的页。此命令禁用&#8220;惰性交换&#8221;并允许操作系统使用较大的内存页，从而优化对构成 Java
堆的内存的访问。 <br />
<br />
缺省值： off <br />
建议值： on <br />
用法： -XX:+ForceMmapReserved 将禁用&#8220;惰性交换&#8221;。 <br />
<br />
-Xmn <br />
此设置控制允许新生成的对象在堆中耗用的空间量。正确调整此参数有助于降低垃圾回收开销，从而缩短服务器响应时间并提高吞吐量。此参数的缺省设置通常过低，这将导致执行大量的小型垃圾回收操作。 <br />
<br />
缺省值： 没有缺省值 <br />
建议值： 大约整个堆大小的 3/4 <br />
用法： -Xmn768m 将大小设置为 768 兆字节 <br />
<br />
虚拟页大小 <br />
通过将 Java 虚拟机的指令页大小和数据页大小设置为 64MB，可以提高性能。 <br />
<br />
缺省值： 4MB  <br />
建议值： 64MB  <br />
用法： 使用以下命令。命令输出提供了进程可执行文件的当前操作系统特征： <br />
chatr +pi64M +pd64M /opt/WebSphere/ <br />
AppServer/java/bin/PA_RISC2.0/ <br />
native_threads/java <br />
<br />
<br />
-Xnoclassgc <br />
缺省情况下，当一个类没有任何活动实例时，JVM 就会从内存中卸装该类，但是这样会使性能下降。如果关闭类垃圾回收，就可以消除由于多次装入和卸装同一个类而造成的开销。 <br />
<br />
如果不再需要某个类，那么该类在堆中所占用的空间通常将用于创建新对象。但是，如果应用程序通过创建类的新实例来处理请求，并且该应用程序的请求是随机出
现的，那么可能会发生以下情况：先前请求者完成后，正常的类垃圾回收将通过释放这个类占用的堆空间来清除这个类，但当下一个请求出现时，又必须将这个类重
新实例化。在这种情况下，您可能想使用此选项来禁用类垃圾回收。 <br />
<br />
缺省值： 启用类垃圾回收 <br />
建议值： 禁用类垃圾回收 <br />
用法： Xnoclassgc 禁用类垃圾回收 <br />
<br />
有关调整 HP 虚拟机的其他信息，请参阅 Java 技术软件 HP-UX 11i。 <br />
<br />
调整 HP 的 JVM for HP-UX 设置下列选项以提高应用程序性能： <br />
-XX:SchedulerPriorityRange=SCHED_NOAGE <br />
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.DevPollSelectorProvider <br />
-XX:-ExtraPollBeforeRead</p>
</div>
<img src ="http://www.blogjava.net/todd841026/aggbug/301376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2009-11-06 10:38 <a href="http://www.blogjava.net/todd841026/archive/2009/11/06/301376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在RED HAT ENTERPRICE LINUX4 上安装ORACLE 10G</title><link>http://www.blogjava.net/todd841026/archive/2009/10/13/298104.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Tue, 13 Oct 2009 11:28:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2009/10/13/298104.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/298104.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2009/10/13/298104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/298104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/298104.html</trackback:ping><description><![CDATA[在RED HAT ENTERPRICE LINUX4 上安装ORACLE 10G (10.2.0.1.0)
<p><br />
第一步 准备工作</p>
<p>?&nbsp;检查内存<br />
SZ_TOMCAT:/home/xjy/soft&gt; grep SwapTotal /proc/meminfo<br />
SwapTotal:&nbsp;&nbsp;&nbsp;&nbsp; 2031608 kB</p>
<p>?&nbsp;检查内核<br />
&nbsp;Linux reaky.com 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux</p>
<p>?&nbsp;检查软件包<br />
SZ_TOMCAT:/home/xjy/soft&gt; rpm -q gcc make binutils glibc libaio<br />
gcc-3.4.3-9.EL4<br />
make-3.80-5<br />
binutils-2.15.92.0.2-10.EL4<br />
glibc-2.3.4-2<br />
libaio-0.3.102-1</p>
<p>SZ_TOMCAT:/home/xjy/soft&gt; rpm -q openmotif<br />
openmotif-2.2.3-6.RHEL4.2<br />
setarch-1.6-1</p>
<p><br />
检查内核参数<br />
sysctl &#8211;a</p>
<p>然后在/ETC/sysctl.conf中添加<br />
kernel.shmall = 2097152<br />
kernel.shmmax = 2147483648<br />
kernel.shmmni = 4096<br />
kernel.sem = 250 32000 100 128<br />
fs.file-max = 65536<br />
net.ipv4.ip_local_port_range = 1024 65000<br />
net.core.rmem_default = 262144<br />
net.core.rmem_max = 1048576<br />
net.core.wmem_default = 262144<br />
net.core.wmem_max = 1048576</p>
<p>执行/sbin/sysctl &#8211;p</p>
<p>中文化显示工作</p>
<p>修改/etc/sysconfig/i18n文件,改为<br />
LANG="zh_CN.GB18030"<br />
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"<br />
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-:en_US:en"<br />
SYSFONT="lat0-sun16"修改/etc/sysconfig/i18n文件,改为<br />
LANG="zh_CN.GB18030"<br />
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"<br />
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-:en_US:en"<br />
SYSFONT="lat0-sun16"</p>
<p><br />
第二步:<br />
?&nbsp;创建用户<br />
su &#8211; root<br />
[root@reaky etc]# groupadd dba<br />
[root@reaky etc]# groupadd oinstall<br />
[root@reaky etc]# useradd -c "Oracle software owner" -g oinstall -G dba oracle</p>
<p>?&nbsp;设置环境<br />
编辑/home/oracle/.bash_profile<br />
# .bash_profile<br />
# Get the aliases and functions<br />
if [ -f ~/.bashrc ]; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . ~/.bashrc<br />
fi<br />
# User specific environment and startup programs<br />
alias ls='ls -CF'<br />
PS1='SZ_TOMCAT:$PWD&gt; '; export PS1<br />
umask 022<br />
set -o vi<br />
stty intr '^c'<br />
stty -istrip<br />
#if [ $USER = "oracle" ]; then<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ $SHELL = "/bin/ksh" ]; then<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ulimit -p 16384<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ulimit -n 65536<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ulimit -u 16384 -n 65536<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi<br />
#fi<br />
EDITOR=vi;&nbsp;&nbsp; export EDITOR<br />
TEMP=/tmp;&nbsp;&nbsp; export TEMP<br />
TMPDIR=/tmp; export TMPDIR<br />
### SETUP ORACLE ENVIRONMENT ###<br />
ORACLE_SID=ora10; export ORACLE_SID<br />
ORACLE_BASE=/home/oracle;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
export ORACLE_BASE<br />
ORACLE_HOME=/home/oracle/product/10.2.0;&nbsp;&nbsp;&nbsp;&nbsp; export ORACLE_HOME<br />
ORACLE_TERM=ansi;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
export ORACLE_TERM<br />
JAVA_FONTS=/usr/share/fonts/zh_CN/TrueType/; export JAVA_FONTS<br />
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export NLS_LANG<br />
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib<br />
export LD_LIBRARY_PATH<br />
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib<br />
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib<br />
export CLASSPATH<br />
PATH=.:$ORACLE_HOME/bin:$PATH<br />
export PATH<br />
### FOR ORACLE INSTALL ###<br />
export LC_ALL="en_US"<br />
export LC="en_US"</p>
<p><br />
第三步、安装Oracle10g<br />
&nbsp;&nbsp;&nbsp; <br />
1．开始Oracle普通安装<br />
&nbsp;&nbsp; 以oracle用户登录linux，加载oracle Oracle10g光盘， 在执行runInstaller前,确定Oracle环境变量已经设置,可以执行如下命令检验环境变量的设置:<br />
oracle 用户登陆<br />
$set<br />
在终端命令窗口，执行如下命令，开始oracle10g的安装:<br />
oracle$/mnt/cdrom/runInstaller<br />
2.在欢迎窗口界面: 点击&#8220;下一步&#8221;按钮<br />
3.指定Inventory 路径和身份证明窗口:<br />
&nbsp;&nbsp;&nbsp; inventory路径是: /home/oracle/oraInventory<br />
&nbsp; 指定操作系统组名: oinstall<br />
点击&#8220;下一步&#8221;按钮<br />
4．这时会弹出一个执行orainstRoot.sh 脚本的窗口:<br />
打开另一个终端，以root用户执行如下命令:<br />
su &#8211; root<br />
cd&nbsp; /home/oracle/oraInventory<br />
./orainstRoot.sh<br />
然后，切换到oracle安装窗口，点击&#8220;继续&#8221;按钮<br />
5．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在指定文件位置窗口弹出后，指定相应的路径:<br />
源:<br />
路径： /mnt/cdrom/stage/products.xml<br />
目的:<br />
名称:&nbsp; OraDb10g_home1<br />
路径: /home/oracle/product/10.1.0/db_1<br />
然后，点击&#8220;下一步&#8221;按钮<br />
6．选择安装类型:<br />
选择"企业版"选项，然后点击&#8220;下一步&#8221;按钮。安装程序验证系统是否符合安装和配置所选产品的所有最低要求<br />
7．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装程序验证系统是否符合安装和配置所选产品的所有最低要求。当检测完成并成功后，点击&#8220;下一步&#8221;按钮<br />
8．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择数据库设置:<br />
选择"通用"选项，然后点击&#8220;下一步&#8221;按钮<br />
9．指定数据库配置参数:<br />
全局数据库名称: "test".<br />
SID: "test".<br />
选中&#8220;创建带样本方案的数据库&#8221;复选框，然后，点击&#8220;下一步&#8221;按钮<br />
10．选择数据库管理设置:<br />
选择"使用 Database Control管理数据库"。<br />
然后，点击&#8220;下一步&#8221;<br />
11.指定数据库文件存储选项<br />
选择 "文件系统"选项.<br />
指定数据库路径: /home/oracle/oradata/<br />
然后点击&#8220;下一步&#8221;按钮，<br />
&nbsp; 12.指定备份和恢复选项:<br />
选择"不启用自动备份".<br />
点击 &#8220;下一步&#8221;按钮<br />
13．指定数据库方案口令:<br />
可以为SYS、SYSTEM、SYSMAN、DBSNMP单独指定口令,或选择"所有用户使用同一口令"选项.为这些用户指定同一个口令。<br />
指定口令不要以数字开始,否则会得到错误信息.然后点击 &#8220;下一步&#8221;按钮<br />
14．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 出现概要窗口后， 点击&#8220;安装&#8221;按钮<br />
15．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这时你会看到数据库安装过程窗口，然后会出现辅助设置窗口，再出现数据库创建窗口。<br />
16．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库创建完毕，弹出数据库创建完成窗口，点击Ok按钮。<br />
当弹出一个执行root.sh脚本的窗口时在另一个终端执行如下命令:<br />
su &#8211; root<br />
cd /home/oracle/product/10.1.0/db_1<br />
./root.sh<br />
点击确定&#8221;按钮</p>
<p>17．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在概要安装完毕，会报告一个发现$ORACLE_BASE/product/10.1.0/db_1/portlist.ini文件，这时点击OK按钮<br />
18．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装结束:<br />
点击&#8220;退出&#8221;按钮，结束安装程序。<br />
六、数据库的启动和停止<br />
要使数据库启动，执行如下命令:<br />
oracle$ sqlplus /nolog<br />
SQL&gt; connect / as sysdba<br />
SQL&gt; startup<br />
要使数据库停止，执行如下命令:<br />
oracle$ sqlplus /nolog<br />
SQL&gt; connect / as sysdba<br />
SQL&gt; shutdown<br />
&nbsp;</p>
<p><br />
删除oracle10g<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果oracle10ganzhuang过程中出现错误，需要重新安装，可以执行如下命令删除以前安装的oracle：<br />
su &#8211;oracle<br />
rm &#8211;rf /home/oracle/*<br />
rm &#8211;f&nbsp; /etc/oraInst.loc /etc/oratab&nbsp; /etc/oracle<br />
su &#8211;root<br />
export ORACLE_HOME=/home/oracle/product/10.1.0/db_1<br />
$ORACLE_HOME/bin/localconfig delete<br />
rm &#8211;f /etc/inittab.cssd<br />
rm &#8211;f /usr/local/bin/coraenv&nbsp; /usr/local/bin/dbhome <br />
rm &#8211;f /usr/local/bin/oraenv<br />
执行完上述命令后，重新启动系统，可以重新安装oracle10g数据库系统</p>
<p><br />
FAQ (在Linux平台安装Oracle比较常见的问题) <br />
1. 不能启动安装界面<br />
运行runInstaller提示信息类似如下:<br />
xlib:connection to "localhost:0.0" refused by server<br />
xlib:client is not authorized to connect to server<br />
Exception in thread "main" java.lang.InternalError:<br />
can't connect to x11 window server using "localhost:0.0" at .......<br />
解决办法: 设定你的DISPLAY环境参数.<br />
# export DISPLAY= your_IPaddress :0.0<br />
把your_IPaddress换成你的IP.或者用root简单的执行一下# xhost + (要注意这样会有安全上的隐患)<br />
2.安装界面显示很多"口口"样子的乱码<br />
解决办法:查看locale输出<br />
# locale<br />
LANG=en_US.UTF-8<br />
LC_CTYPE=zh_CN.GB18030<br />
LC_NUMERIC="en_US.UTF-8"<br />
LC_TIME="en_US.UTF-8"<br />
LC_COLLATE="en_US.UTF-8"<br />
LC_MONETARY="en_US.UTF-8"<br />
LC_MESSAGES="en_US.UTF-8"<br />
LC_PAPER="en_US.UTF-8"<br />
LC_NAME="en_US.UTF-8"<br />
LC_ADDRESS="en_US.UTF-8"<br />
LC_TELEPHONE="en_US.UTF-8"<br />
LC_MEASUREMENT="en_US.UTF-8"<br />
LC_IDENTIFICATION="en_US.UTF-8"<br />
LC_ALL=<br />
执行#export LC_CTYPE=en_US.UTF-8 然后重新调用安装程序.<br />
3. 用IE登录Linux服务器上的em出现乱码<br />
在Linux(Unix) 环境下成功安装了Oracle 10g,从windows下用IE浏览器登录 10g 的em, 按钮是"口口"这样的方框.<br />
解决办法: 参考:<br />
<a href="http://www.dbanotes.net/Oracle/Oracle-10g-font.properties.htm">http://www.dbanotes.net/Oracle/Oracle-10g-font.properties.htm</a><br />
4.创建数据库的时候出现ORA-03113的错误<br />
解决办法: 查看核心参数是否调整正确.参考:<br />
<a href="http://www.dbanotes.net/Oracle/ORA-03113.htm">http://www.dbanotes.net/Oracle/ORA-03113.htm</a><br />
5. RedHat 9 / FC1等系统10g不支持如何安装?<br />
解决办法：在10g不支持的Linux发行版上安装10g的解决方法<br />
1). 运行runInstaller -ignoreSysPrereqs，这样会跳过检查.<br />
2). 摘自 <a href="http://www.puschitz.com/">www.puschitz.com</a> 修改/etc/redhat-release文件：<br />
#su - root<br />
#cp /etc/redhat-release /etc/redhat-release.backup<br />
#cat &gt; /etc/redhat-release &lt;&lt;&nbsp;&nbsp; EOF<br />
Red Hat Enterprise Linux AS release 3 (Taroon)<br />
EOF<br />
安装完毕，执行如下操作：<br />
#su - root<br />
#cp /etc/redhat-release.backup /etc/redhat-release<br />
3). <a href="http://www.dbanotes.net/Oracle/10G-Beta-Install-Bug.htm">http://www.dbanotes.net/Oracle/10G-Beta-Install-Bug.htm</a><br />
同样的思路，我们可以修改Oracle 的install/oraparam.ini文件达到目的.<br />
6.如何关掉那些 ocssd.bin 进程？<br />
解决办法:编辑/etc/inittab文件(做好备份)<br />
注释掉这一行:<br />
h1:3:respawn:/etc/init.d/init.cssd run &gt;/dev/null 2&gt;................<br />
---------------------------------------------------------------------------------------------------------------------<br />
参考信息<br />
<a href="http://blog.csdn.net/itsdn/archive/2007/05/21/1619114.aspx">http://blog.csdn.net/itsdn/archive/2007/05/21/1619114.aspx</a><br />
：<br />
1、在 Linux x86 上安装Oracle数据库10g<br />
<a href="http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#rhel3">http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html#rhel3</a><br />
2、Oracle 10gR2 + RedHat Enterprise Linux AS4 安装<br />
<a href="http://www.linuxdiyf.com/viewarticle.php?id=11578">http://www.linuxdiyf.com/viewarticle.php?id=11578</a><br />
3、Oracle 10g For Linux安装手册<br />
<a href="http://bbs.database.ccidnet.com/htm_data/27/0607/112610.html">http://bbs.database.ccidnet.com/htm_data/27/0607/112610.html</a><br />
4、Installing Oracle 10g on RHEL AS 3 Step-by-Step<br />
<a href="http://www.dbanotes.net/Oracle/Install-Oracle10g-RHEL3.htm">http://www.dbanotes.net/Oracle/Install-Oracle10g-RHEL3.htm</a></p>
/etc/rc.d/init.d/dbora文件内容<br />
#http://staff.in2.hr/denis/oracle/10g1install_fedora3_en.html#n4_4<br />
# chkconfig: 0356 95 1<br />
# description: init script to start/stop oracle database 10g, TNS listener, EMS<br />
#<br />
#<br />
# match these values to your environment:<br />
export ORACLE_BASE=/u01/app/oracle<br />
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1<br />
export ORACLE_SID=CQRCDATA<br />
export PATH=$PATH:$ORACLE_HOME/bin<br />
export ORACLE_USER=oracle<br />
# see how we are called:<br />
case $1 in<br />
start)<br />
dltelecom&nbsp; - "$ORACLE_USER" -c "$ORACLE_HOME/bin/dbstart"<br />
dltelecom&nbsp; - "$ORACLE_USER" -c "$ORACLE_HOME/bin/emctl start dbconsole"<br />
dltelecom&nbsp; - "$ORACLE_USER" -c "SORACLE_HOME/bin/isqlplusctl start"<br />
;;<br />
stop)<br />
dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"<br />
dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"<br />
dltelecom - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"<br />
;;<br />
*)<br />
echo "Usage: $0 {start|stop}"<br />
;;<br />
esac
<img src ="http://www.blogjava.net/todd841026/aggbug/298104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2009-10-13 19:28 <a href="http://www.blogjava.net/todd841026/archive/2009/10/13/298104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 下安装JDK</title><link>http://www.blogjava.net/todd841026/archive/2009/10/13/298014.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Mon, 12 Oct 2009 17:58:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2009/10/13/298014.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/298014.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2009/10/13/298014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/298014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/298014.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">一、安装<span style="font-family: Times New Roman">JDK</span>：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">首先到<span style="font-family: Times New Roman">sun</span>官网下载安装包：</span></p>
<p style="margin: 0cm 0cm 0pt"><a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter"><span style="font-size: small; color: #800080; font-family: Times New Roman">https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter</a></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">分别下载：</span><span style="font-size: 7pt; color: black; font-family: Arial"><a href="http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u16-linux-i586-rpm.bin?BundledLineItemUUID=CudIBe.pB.4AAAEjmjQMmPSH&amp;OrderID=IotIBe.pJ9kAAAEjjTQMmPSH&amp;ProductID=Dx1IBe.prBgAAAEirRcTvuC_&amp;FileName=/jdk-6u16-linux-i586-rpm.bin"><span style="font-size: 10.5pt; font-family: 'Times New Roman'"><span style="color: #800080">jdk-6u16-linux-i586-rpm.bin</span></span></a> </span>和<span style="font-family: Times New Roman"><span style="font-size: 7pt; color: black; font-family: Arial"><a href="http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u16-linux-i586.bin?BundledLineItemUUID=ChpIBe.pGegAAAEjpDQMmPSH&amp;OrderID=IotIBe.pJ9kAAAEjjTQMmPSH&amp;ProductID=Dx1IBe.prBgAAAEirRcTvuC_&amp;FileName=/jdk-6u16-linux-i586.bin"><span style="font-size: 10.5pt; font-family: 'Times New Roman'"><span style="color: #800080">jdk-6u16-linux-i586.bin</span></span></a></span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">然后将这两个安装文件放到<span style="font-family: Times New Roman">:/usr/tmp </span>目录下，分别修改权限，命令如下：</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small"># chmod u+x ./jdk-6u16-linux-i586.bin</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small"># chmod u+x ./jdk-6u16-linux-i586-rpm.bin</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">解压文件（这两个文件可以自动解压）：</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small"># ./jdk-6u16-linux-i586.bin</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">创建目录<span style="font-family: Times New Roman">/usr/java:</span></span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small"># mkdir /usr/java</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">将解压出来的<span style="font-family: Times New Roman">jdk-6u16-linux-i586</span>目录复制到<span style="font-family: Times New Roman">/usr/java</span>目录下：</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small"># cp -fr jdk-6u16-linux-i586 /usr/java</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">解压文件</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small"># ./jdk-6u16-linux-i586-rpm.bin</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">安装软件会将<span style="font-family: Times New Roman">JDK</span>自动安装到<span style="font-family: Times New Roman"> /usr/java/jdk-6u16-linux-i586</span>目录下</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">二、配置环境变量</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small"><span style="font-family: Times New Roman">1.</span>修改用户环境变量</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">假设使用<span style="font-family: Times New Roman">java</span>的用户为<span style="font-family: Times New Roman"> guest</span>，编辑该用户的<span style="font-family: Times New Roman">.bashrc</span>文件进行环境变量设置。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman"># vi /home/ guest /.bashrc </span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">在<span style="font-family: Times New Roman"> .bashrc</span>文件中加入：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: red"><span style="font-family: Times New Roman"><span style="font-size: small">export JAVA_HOME=/usr/java/jdk1.6.0_16 </span></span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: red"><span style="font-family: Times New Roman"><span style="font-size: small">export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib </span></span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: red"><span style="font-family: Times New Roman"><span style="font-size: small">export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin</span></span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small"><span style="font-family: Times New Roman">2.</span>修改所有用户的环境变量</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman"># vi /etc/profile </span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">在该文件中加入<span style="font-family: Times New Roman">: </span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: red"><span style="font-family: Times New Roman"><span style="font-size: small">export JAVA_HOME=/usr/java/jdk1.6.0_16 </span></span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: red"><span style="font-family: Times New Roman"><span style="font-size: small">export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib </span></span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="color: red"><span style="font-family: Times New Roman"><span style="font-size: small">export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin</span></span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">注意<span style="font-family: Times New Roman">CLASSPATH</span>路径中加入了<span style="font-family: Times New Roman">$CLASSPATH</span>，这样可以避免将之前配置的路径被覆盖。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small"><span style="font-family: Times New Roman">profile</span>文件如下：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">############profile begin###########</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small"># /etc/profile</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman"># System wide environment and startup programs, for login setup</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman"># Functions and aliases go in /etc/bashrc</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">pathmunge () {</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ "$2" = "after" ] ; then</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PATH=$PATH:$1</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PATH=$1:$PATH</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">}</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman"># ksh workaround</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">if [ -z "$EUID" -a -x /usr/bin/id ]; then </span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EUID=`id -u`</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UID=`id -ru`</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">fi</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman"># Path manipulation</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">if [ "$EUID" = "0" ]; then</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pathmunge /sbin</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pathmunge /usr/sbin</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pathmunge /usr/local/sbin</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">fi</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman"># No core files by default</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">ulimit -S -c 0 &gt; /dev/null 2&gt;&amp;1</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">if [ -x /usr/bin/id ]; then</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USER="`id -un`"</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOGNAME=$USER</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MAIL="/var/spool/mail/$USER"</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">fi</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">HOSTNAME=`/bin/hostname`</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">HISTSIZE=1000</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp; INPUTRC=/etc/inputrc</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">fi</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">#java path</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">export JAVA_HOME=/usr/java/jdk1.6.0_16 </span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib </span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">for i in /etc/profile.d/*.sh ; do</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp; if [ -r "$i" ]; then</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . $i</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">&nbsp;&nbsp;&nbsp; fi</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">done</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">unset i</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">unset pathmunge</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman">############profile end###########</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">三、卸载<span style="font-family: Times New Roman">jkd</span>：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small"><span style="font-family: Times New Roman">1</span>、卸载系统自带的<span style="font-family: Times New Roman">jdk</span>版本：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">查看自带的<span style="font-family: Times New Roman">jdk</span>：</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small">#rpm -qa | grep gcj</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">看到如下信息：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">libgcj-4.1.2-44.el5</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">java-1.4.2-gcj-compat-1.4.2.0-40jpp.115</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">使用<span style="font-family: Times New Roman">rpm -e --nodeps </span>命令删除上面查找的内容：</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small">#rpm -e &#8211;nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small"><span style="font-family: Times New Roman">2</span>、卸载<span style="font-family: Times New Roman">rpm</span>安装的<span style="font-family: Times New Roman">jkd</span>版本</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">查看安装的<span style="font-family: Times New Roman">jdk</span>：</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: Times New Roman"><span style="font-size: small">#rpm -qa|grep jdk</span></span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">看到如下信息：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">java-1.6.0-openjdk-1.6.0.0-0.25.b09.el5</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: Times New Roman"><span style="font-size: small">jdk-1.6.0_16-fcs</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: small">卸载：</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-size: small"><span style="font-family: Times New Roman">#rpm -e --nodeps jdk-1.6.0_16-fcs</span></span></strong></p>
 <img src ="http://www.blogjava.net/todd841026/aggbug/298014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2009-10-13 01:58 <a href="http://www.blogjava.net/todd841026/archive/2009/10/13/298014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>twiki 安装</title><link>http://www.blogjava.net/todd841026/archive/2009/03/11/259167.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Wed, 11 Mar 2009 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2009/03/11/259167.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/259167.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2009/03/11/259167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/259167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/259167.html</trackback:ping><description><![CDATA[<h1 class="title_txt">twiki4.1.2的安装及配置<cite class="fav_csdnstylebykimi"><a href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&amp;u='+escape(d.location.href)+'&amp;c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();" class="fav_csdnstylebykimi" title="收藏到我的网摘中，并分享给我的朋友">收藏</a></cite></h1>
<div class="blogstory">
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; twiki 遵循 GPL 协议，软件定位为&#8220;灵活、强大、易于使用的企业协作平台&#8221;，运行于 Perl 环境，是很多大型商业公司首选的 wiki 平台。<br />
<div class="entry-more" id="more">
<p>安装过程及配置： </p>
<blockquote>#建立 twiki 目录<br />
mkdir&nbsp;/home/centeur/public_html/twiki<br />
cd&nbsp;/home/centeur/public_html/twiki<br />
#下载并解压<br />
wget&nbsp;http://twiki.org/p/pub/Codev/Release/TWiki-4.1.2.tgz<br />
tar&nbsp;-zxvf&nbsp;TWiki-4.1.2.tgz<br />
#权限限制<br />
cp&nbsp;root-htaccess.txt&nbsp;.htaccess<br />
cp&nbsp;pub-htaccess.txt&nbsp;pub/.htaccess<br />
cp&nbsp;subdir-htaccess.txt&nbsp;lib/.htaccess<br />
cp&nbsp;subdir-htaccess.txt&nbsp;data/.htaccess<br />
cp&nbsp;subdir-htaccess.txt&nbsp;locale/.htaccess<br />
cp&nbsp;subdir-htaccess.txt&nbsp;templates/.htaccess<br />
cp&nbsp;bin/.htaccess.txt&nbsp;bin/.htaccess
<p>&nbsp;</p>
<p>cp&nbsp;bin/LocalLib.cfg.txt&nbsp;bin/LocalLib.cfg<br />
#修改 bin/LocalLib.cfg，将 $twikiLibPath 改为合适的路径<br />
$twikiLibPath&nbsp;=&nbsp;"/home/centeur/public_html/twiki/lib";<br />
#修改 bin/.htaccess，将 {DataDir}和{Administrators} 修改为合适的内容<br />
AuthUserFile&nbsp;/home/centeur/public_html/twiki/data/.htpasswd<br />
AuthName&nbsp;'Enter&nbsp;your&nbsp;WikiName:&nbsp;(First&nbsp;name&nbsp;and&nbsp;last&nbsp;name,&nbsp;no&nbsp;space,&nbsp;no&nbsp;dots,&nbsp;capitalized,&nbsp;e.g.&nbsp;JohnSmith).&nbsp;Cancel&nbsp;to&nbsp;register&nbsp;if&nbsp;you&nbsp;do&nbsp;not&nbsp;have&nbsp;one.'<br />
AuthType&nbsp;Basic<br />
&lt;FilesMatch&nbsp;"configure.*"&gt;<br />
SetHandler&nbsp;cgi-script<br />
Order&nbsp;Deny,Allow<br />
Deny&nbsp;from&nbsp;all<br />
Allow&nbsp;from&nbsp;127.0.0.1,&nbsp;192.168.1.10<br />
Require&nbsp;user&nbsp;centeur<br />
Satisfy&nbsp;Any<br />
&lt;/FilesMatch&gt;<br />
#建立系统管理员帐户<br />
htpasswd&nbsp;-c&nbsp;data/.htpasswd&nbsp;centeur</p>
<p>#现在就可以在浏览器中键入 http://example.com/twiki/bin/configure 进行设置了，设置保存在 lib/LocalSite.cfg 中<br />
#提示缺少 CGI::Session 模块，进行安装<br />
mkdir&nbsp;/home/centeur/CPAN<br />
cd&nbsp;/home/centeur/CPAN<br />
wget&nbsp;http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/CGI-Session-4.10.tar.gz<br />
tar&nbsp;-zxvf&nbsp;CGI-Session-4.10.tar.gz<br />
cd&nbsp;CGI-Session-4.10<br />
perl&nbsp;Makefile.PL&nbsp;PREFIX=/home/centeur/CPAN<br />
make<br />
make&nbsp;install<br />
#拷贝模块到 twiki 的 lib 下<br />
cd&nbsp;/home/centeur/public_html/twiki<br />
cp&nbsp;-R&nbsp;/home/centeur/CPAN/lib/perl5/site_perl/5.8.8/CGI&nbsp;lib/CPAN/lib/CGI</p>
<p>#LocalSite.cfg 的部分设置内容<br />
$TWiki::cfg{DefaultUrlHost}&nbsp;=&nbsp;'http://example.com';<br />
$TWiki::cfg{ScriptUrlPath}&nbsp;=&nbsp;'/twiki/bin';<br />
$TWiki::cfg{PubUrlPath}&nbsp;=&nbsp;'/twiki/pub';<br />
$TWiki::cfg{PubDir}&nbsp;=&nbsp;'/home/centeur/public_html/twiki/pub';<br />
$TWiki::cfg{TemplateDir}&nbsp;=&nbsp;'/home/centeur/public_html/twiki/templates';<br />
$TWiki::cfg{DataDir}&nbsp;=&nbsp;'/home/centeur/public_html/twiki/data';<br />
$TWiki::cfg{LocalesDir}&nbsp;=&nbsp;'/home/centeur/public_html/twiki/locale';<br />
$TWiki::cfg{TempfileDir}&nbsp;=&nbsp;'/home/centeur/tmp';<br />
$TWiki::cfg{UseClientSessions}&nbsp;=&nbsp;1;<br />
$TWiki::cfg{LoginManager}&nbsp;=&nbsp;'TWiki::Client::TemplateLogin';<br />
$TWiki::cfg{MinPasswordLength}&nbsp;=&nbsp;6;<br />
$TWiki::cfg{Htpasswd}{FileName}&nbsp;=&nbsp;'/home/centeur/public_html/twiki/data/.htpasswd';<br />
$TWiki::cfg{Languages}{ru}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{sv}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{'zh-tw'}{Enabled}&nbsp;=&nbsp;1;<br />
$TWiki::cfg{Languages}{cs}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{'zh-cn'}{Enabled}&nbsp;=&nbsp;1;<br />
$TWiki::cfg{Languages}{es}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{nl}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{pl}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{fr}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{da}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{de}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{pt}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{Languages}{it}{Enabled}&nbsp;=&nbsp;0;<br />
$TWiki::cfg{DisplayTimeValues}&nbsp;=&nbsp;'servertime';<br />
$TWiki::cfg{Site}{Locale}&nbsp;=&nbsp;'zh_CN.UTF-8';<br />
$TWiki::cfg{Site}{LocaleRegexes}&nbsp;=&nbsp;1;<br />
$TWiki::cfg{StoreImpl}&nbsp;=&nbsp;'RcsLite';<br />
$TWiki::cfg{WebMasterEmail}&nbsp;=&nbsp;'lypdarling@gmail.com';<br />
$TWiki::cfg{UserInterfaceInternationalisation}&nbsp;=&nbsp;1;<br />
$TWiki::cfg{UseLocale}&nbsp;=&nbsp;1;<br />
$TWiki::cfg{Site}{CharSet}&nbsp;=&nbsp;'UTF-8';<br />
$TWiki::cfg{Site}{Lang}&nbsp;=&nbsp;'zh';<br />
$TWiki::cfg{Site}{FullLang}&nbsp;=&nbsp;'zh-cn';</p>
<p>#现在可以在浏览器中键入 http://example.com/twiki/bin/view 进入 twiki 页面了<br />
#编辑 TWIki&nbsp;&gt;&nbsp;Main 目录&nbsp;&gt;&nbsp;TWikiAdminGroup 页面，将 centeur 加入 GROUP<br />
*&nbsp;Member&nbsp;list:<br />
&nbsp;&nbsp;*&nbsp;Set&nbsp;GROUP&nbsp;=&nbsp;centeur<br />
*&nbsp;Persons/group&nbsp;who&nbsp;can&nbsp;change&nbsp;the&nbsp;list:<br />
&nbsp;&nbsp;*&nbsp;Set&nbsp;ALLOWTOPICCHANGE&nbsp;=&nbsp;TWikiAdminGroup<br />
#修改 .htaccess，进行重定向设置<br />
Redirect&nbsp;/twiki/index.html&nbsp;http://example.com/twiki/bin/view</p>
</blockquote></div>
</div>
<img src ="http://www.blogjava.net/todd841026/aggbug/259167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2009-03-11 17:22 <a href="http://www.blogjava.net/todd841026/archive/2009/03/11/259167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript call gwt method</title><link>http://www.blogjava.net/todd841026/archive/2008/12/17/246754.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Tue, 16 Dec 2008 16:45:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2008/12/17/246754.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/246754.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2008/12/17/246754.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/246754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/246754.html</trackback:ping><description><![CDATA[<p>这个有些变态的东西折磨了整两天（最头疼这种东西了），我遇到的是用gwt的frame的回来一个IOStream（html string），我要高亮html里的关键标记，并让他们有事件，所以，我在返回IOStream之前进行拦截，并repleace关键标记，加上了高亮的属性"background-color='yellow'", 加上了事件处理"onclick=\"javascript:window.top.clickFireEvent('Todd')" (就是这一块，最让我头疼了，因为是个frame所以他们不在同一个窗口下)；<br />
在gwt中：<br />
<br />
//gwt EntryPoint method<br />
public void onModuleLoad() {<br />
&nbsp;&nbsp;&nbsp; clickEventFire();<br />
&nbsp; }<br />
<br />
//This is jsni method</p>
&nbsp; private static native void clickEventFire()/*-{<br />
&nbsp;&nbsp; $wnd.clickEventFire = function(id){<br />
&nbsp;&nbsp; @com.todd.Main::fireScriptEvent(Ljava/lang/String;)(name);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }-*/;<br />
<br />
//This is a method for javascript call.<br />
public static void fireScriptEvent(String name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("My name is " + name);<br />
}<br />
<br />
别看短短几句，真的是很头疼的东西：）
<img src ="http://www.blogjava.net/todd841026/aggbug/246754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2008-12-17 00:45 <a href="http://www.blogjava.net/todd841026/archive/2008/12/17/246754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Debug</title><link>http://www.blogjava.net/todd841026/archive/2008/06/18/208971.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Wed, 18 Jun 2008 11:11:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2008/06/18/208971.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/208971.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2008/06/18/208971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/208971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/208971.html</trackback:ping><description><![CDATA[在编程的生涯中，最重要就是能Debug，我最近在玩documentum6.0的内置中间件weblogic，所以Remote Debug是少不了的。<br />
先说几个概念（这是我在网上查的）：<br />
<strong>&nbsp;&nbsp;&nbsp; 1.什么是JPDA：</strong><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
Java Platform Debugger Architecture(JPDA:Java平台调试架构) 由Java虚拟机后端和调试平台前端组成 ：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a.Java虚拟机提供了Java调试的功能 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b.调试平台通过调试交互协议向Java虚拟机请求服务以对在虚拟机中运行的程序进行调试 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  JPDA架构：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; JPDA通过两个接口和协议来完成如上的说明，分别是JVMTI（Java虚拟机工具接口）、JDWP（Java调试连线协议）和JDI（Java调试接口）。 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a.JVMTI定义了虚拟机应该提供的调试服务，包括调试信息（Information譬如栈信息）、调试行为（Action譬如客户端设置一个断点）和通知&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （Notification譬如到达某个断点时通知客户端），该接口由虚拟机实现者提供实现，并结合在虚拟机中 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b.JDWP定义调试服务和调试器之间的通信，包括定义调试信息格式和调试请求机制 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; c.JDI在语言的高层次上定义了调试者可以使用的调试接口以能方便地与远程的调试服务进行交互，Java语言实现，调试器实现者可直接使用该接口访问虚&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 拟机调试服务。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 运行方式：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  当虚拟机的调试服务运行时，虚拟机作为调试的服务提供端，监听一个连接，而调试器通过该连接与虚拟机进行交互。目前，Windows平台的JVM提供了两
种&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 方式的连接：共享内存和 Socket连接，共享内存的服务提供端和调试端只能位于同一台机，而Socket连接则支持不同异机调试，即远程调试。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 虚拟参数配置：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; a．启用调试服务 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; -Xdebug 启用调试 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; -Xrunjdwp:&lt;sub-options&gt; 加载JVM的JPDA参考实现库<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  b. Xrunjdwp子参数（sub-options）配置<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  Xrunjdwp子参数的配置格式如下<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  -Xrunjdwp:&lt;name1&gt;[=&lt;value1&gt;],&lt;name2&gt;[=&lt;value2&gt;]...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.例子<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -Xrunjdwp:transport=dt_socket,server=y,address=8000 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 在8000端口监听Socket连接，挂起VM并且不加载运行主函数直到调试请求到达 <br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; -Xrunjdwp:transport=dt_shmem,server=y,suspend=n <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 选择一个可用的共享内存（因为没有指address）并监听该内存连接，同时加载运行主函数 <br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; -Xrunjdwp:transport=dt_socket,address=myhost:8000 <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 连接到myhost:8000提供的调试服务（server=n，以调试客户端存在），挂起VM并且不加载运行主函数<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; -Xrunjdwp:transport=dt_shmem,address=mysharedmemory <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 通过共享内存的方式连接到调试服务，挂起VM并且不加载运行主函数 <br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; -Xrunjdwp:transport=dt_socket,server=y,address=8000,onthrow=java.io.IOException,launch=/usr/local/bin/debugstub <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 等待java.io.IOException被抛出，然后挂起VM并监听8000端口连接，在接到调试请求后以命令/usr/local/bin/debugstub dt_socket myhost:8000执行<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; -Xrunjdwp:transport=dt_shmem,server=y,onuncaught=y,launch=d:\bin\debugstub.exe <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 等待一个RuntimeException被抛出，然后挂起VM并监听一个可用的共享内存，在接到调试请求后以命令d:\bin\debugstub.exe dt_shmem &lt;address&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行, &lt;address&gt;是可用的共享内存<br />
<strong>&nbsp;&nbsp;&nbsp; 2.基本原理<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  </strong>服务器端在启动的服务器的同时，也把JPDA明确的启动起来，分配一个端口号，那么你在客户端只要连接上JPDA服务(sun称为工具平台)便能测试了。<br />
&nbsp;&nbsp;<strong>&nbsp; 3.Tomcat 实例<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </strong>打开tomcat的bin目录，找到catalina.bat, 用记事本打开它。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 找到set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%，<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 改为set JPDA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=5500,server=y,suspend=n<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 这样就打开了5500端口，然后你到bin目录下运行jpda start，你再去监听5500端口，就可以实现remote debug了。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />
<img src ="http://www.blogjava.net/todd841026/aggbug/208971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2008-06-18 19:11 <a href="http://www.blogjava.net/todd841026/archive/2008/06/18/208971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>节省使用httpsession（此文引用于Effective Enterprise java：39）</title><link>http://www.blogjava.net/todd841026/archive/2007/12/17/168150.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Mon, 17 Dec 2007 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2007/12/17/168150.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/168150.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2007/12/17/168150.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/168150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/168150.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 基于html/http的应用中，为了维护代表客户端的瞬时状态，servlet容器提供了一种称为会话空间的设施，被表示为HttpSession接口。这个思想本身是简单而直接的，servlet程序员可以将任意的可序列化对象置于会话空间，而下一次，同一个用户对同一个Web应用的任何部分发出请求时，servlet容器将确保同样的对象会处在HttpSession对象中。这使得servlet开发者可以为在服务器上的Web应用在多个HTTP请求之间维护每个客户端的状态信息；</p>
&nbsp;&nbsp;&nbsp; 遗憾的是，这种机制并非完全免费的。首先，在服务器端为每个客户端存储数据将会减少该服务器上的可用资源，这意味着服务器的最大负载能力会成比例下降。这个算式很简单：在会话空间中保存越多的数据，机器能够处理的会话就越少。由此推导出，为了令给定的机器能够支持尽可能多的客户端，必须将会话的存储量保持在最小。实际上，对于真正具备可扩展性的系统而言，无论何时都应该避免使用会话。如果在服务器端可以不产生任何为每个客户端进行处理的开销，那么机器的负载能力（在理论上）可以到达无限，能够支持任意多连接到它的客户端。<br />
<img src ="http://www.blogjava.net/todd841026/aggbug/168150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2007-12-17 10:04 <a href="http://www.blogjava.net/todd841026/archive/2007/12/17/168150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse plugin</title><link>http://www.blogjava.net/todd841026/archive/2007/11/29/163980.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Thu, 29 Nov 2007 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2007/11/29/163980.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/163980.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2007/11/29/163980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/163980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/163980.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">Jodeclipse 是Jode的Eclipse插件，JadClipse是Jad的Eclipse插件，它们都是非常好的反编译插件。<br />
<br />
Jode Eclipse Plugin 1.0.5 for Eclipse version 3.1 / 3.2<br />
<br />
安装方法<br />
<br />
（1）从如下地址下载：<br />
<br />
<a href="http://sourceforge.net/projects/jodeeclipse" target="_blank">http://sourceforge.net/projects/jodeeclipse</a><br />
<br />
把下载下来的文件jodeplugin_1.0.5.zip直接解压到eclipse的plugins目录下。<br />
<br />
（2）启动eclipse，help -&gt; Software Updates-&gt; Find and Install... -&gt; Search for new features to install,单击"New Remote Site..." 在URL栏输入 <a href="http://www.technoetic.com/eclipse/up" target="_blank">http://www.technoetic.com/eclipse/up</a>date然后下一步，就可以看到&#8220;jode decompiler plugin *.*&#8221;，选上安装就可以了。安装好后可以看到Window -&gt; Preferences...-&gt; Java -&gt; Jode Decompiler选项卡，okay，安装成功了。<br />
<br />
<br />
配置：Window-&gt; Preferences... -&gt; General -&gt; Editors -&gt; File Associations找到"*.class"在"Associated editors"里面可以看到"Jode class file viewer"选中它再单击Default按钮.<br />
<br />
<br />
JadClipse Eclipse Plugin for Eclipse version 3.1 / 3.2/3.3<br />
<br />
一、下载：<br />
下载插件：<br />
下载jadclipse_3.1.0.jar版本，该版本支持eclipse3.1M6～3.2M2<br />
下载jadclipse_3.2.0.jar版本，该版本支持eclipse3.2M3和eclipse3.2M4.<br />
下载jadclipse_3.2.4.jar版本，该版本支持eclipse3.2M5～3.3M5<br />
<br />
下载jadclipse_3.3.0.jar版本，该版本支持eclipse3.3M6以上版本<br />
<br />
下载Jad反编译工具：<br />
<a href="http://www.kpdus.com/jad.html" target="_blank">http://www.kpdus.com/jad.html</a>#download，在该页中找到适合自己操作系统平台的jad下载。下载后解压，然后将解压后的jad.exe文件复制到%JAVA_HOME%\bin目录下面（可以将jad.exe放到任意位置，只要记住其存放路径就好，下面要用到）。<br />
<br />
二、安装：<br />
<br />
Eclipse中的插件安装可以参考：Eclipse使用技巧(三)Eclipse中插件的安装<br />
&nbsp;&nbsp;&nbsp;&nbsp; 方法1、直接将jadclipse_x.x.x.jar（x.x.x.代表版本号）复制到%ECLIPSE_HOME%\plugins目录下。<br />
<br />
方法2、使用link方式安装，建立D：\Myplugins\jadclipse3.2.4\eclipse\plugins的目录结构，将jadclipse_3.2.4.jar放到plugins目录下面（注：其中D：\Myplugins为你自己定义的一个专门放置插件的目录）。再在%ECLIPSE_HOME%\links目录下面建立一个jadclipse3.2.4.link文件（该文件名随便取）。文件里面内容为：path=D：/Myplugins/jadclipse3.2.4.<br />
<br />
常见问题及解决：<br />
<br />
（一）启动eclipse，打开Window-&gt;Preferences-&gt;Java-&gt;JadClipse，如果没有找到JadClipse，即JadClipse插件没有激活。<br />
<br />
（1）检查插件安装的版本是否与你安装的eclipse版本对应<br />
<br />
（2）使用 &#8211;clean参数来启动eclipse<br />
<br />
&nbsp;&nbsp; （二）在使用JadClipse插件反编译class文件时出现如下类似错误：<br />
<br />
/*jadclipse*/<br />
<br />
<br />
<br />
/*<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECOMPILATION REPORT<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Decompiled from: D:\Program Files\Java\jdk1.5.0_06\jre\lib\rt.jar<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Total time: 16 ms<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jad reported messages/errors:<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit status: 0<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caught exceptions:<br />
<br />
java.io.IOException: CreateProcess: (...)<br />
<br />
<br />
<br />
请确保你的Jad路径在eclipse中正确制定。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 启动eclipse，打开：Window-&gt;Preferences-&gt;Java-&gt;JadClipse.<br />
1、Path to decompiler，这里设置反编译工具jad的全路径名，比如：%JAVA_HOME%\bin\jad.exe.<br />
2、Directory for temporary files，这里设置临时文件路径。<br />
<br />
至于Window-&gt;Preferences-&gt;Java-&gt;JadClipse目录下的Debug，Directives，Formatting，Misc目录中的参数设置，就不再罗嗦了。<br />
<br />
（三）安装完成后，eclipse没有自动将JadClipse Class File Viewer设置成class文件的缺省打开方式。<br />
<br />
如果没有默认，可以在Eclipse的Windows—&gt; Perference—&gt;General-&gt;Editors-&gt;File Associations中修改&#8220;*.class&#8221;默认关联的编辑器为&#8220;JadClipse Class File Viewer&#8221;。设置完成后，双击*.class文件，eclipse将自动反编译。</span> 
<img src ="http://www.blogjava.net/todd841026/aggbug/163980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2007-11-29 14:12 <a href="http://www.blogjava.net/todd841026/archive/2007/11/29/163980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE总结---JNDI技术          我的所有随笔属于个人总结，有不足之处请回复指出</title><link>http://www.blogjava.net/todd841026/archive/2007/04/09/JNDI.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Mon, 09 Apr 2007 00:16:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2007/04/09/JNDI.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/109315.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2007/04/09/JNDI.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/109315.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/109315.html</trackback:ping><description><![CDATA[&nbsp;
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>什么是</span><span>JNDI</span><span>（</span><span>Java Naming and Directory Interface</span><span>）</span></p>
<p><span>JNDI</span><span>是用于访问不同命名和目录服务的统一</span><span>API</span><span>接口；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>JNDI</span><span>的架构和原理</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>架构：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一层：</span><span>java</span><span>代码，是访问</span><span>JNDI</span><span>的代码；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二层：</span><span>JNDI API</span><span>：统一的命名和目录服务接口</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第三层：</span><span>JNDI Naming Manager</span><span>：</span><span>JNDI</span><span>管理器</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第四层：</span><span>JNDI SPI</span><span>：用于构建</span><span>JNDI</span><span>实现的框架，能够动态的插入命名和目录服务提供商的产品；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第五层：命名和目录服务提供商的产品；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命名和目录服务提供商的产品</span><span>,</span><span>例如：</span><span>DNS,LDAP,NIS,NDS&#8230;&#8230;..;</span><span>因为这些产品都是不同的提供商提供的产品，所以他们的命名和目录服务的标准不一致，各个目录服务采用的访问协议也是不一样的，所以，要是直接访问他们的话，就要编写不同的</span><span>java</span><span>代码来访问他们；因此，</span><span>JNDI SPI</span><span>就解决了这个问题，它能动态的插入这些命名和目录服务，能够将其协议专属的目录产品集成到系统中，使得我们能只需要调用一个统一的</span><span>javaAPI</span><span>就能够访问插入的产品了；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</span><span>．原理：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNDI</span><span>其实很好理解，他就是一个树状的结构，它的最顶是一个</span><span>initialContext</span><span>节点，然后它的下面就是绑定的一些对象或是一些</span><span>subContext</span><span>，用</span><span>JNDI</span><span>树就能够查找到树中每一个绑定上的节点上的对象的引用；</span></p>
<p><span>3.</span><span>怎样连接到</span><span>JNDI</span><span>上？</span> </p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Environment environment = new Environment() ;//</span><span>创建一个环境对象</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>environment.setProviderurl(&#8220;t3://www.blogjava.net&#8221;) ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>environment.setSecurityPrincipal(&#8220;todd&#8221;) ;//</span><span>认证的用户名</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>environment.setSecurityCredentials(&#8220;841026&#8221;) ;//</span><span>密码</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Context context = environment.getInitialContext() ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span>创建一个</span><span>subContext</span><span>并绑定一个对象：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Context subContext = context.createSubcontext(&#8220;subContext&#8221;) ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>subContext.rebind(&#8220;newObject&#8221;,object) ;//</span><span>绑定的对象必须是可序列化的</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>subContext.close() ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>context.close() ;</span></p>
<p><span>4.</span><span>如何通过</span><span>JNDI</span><span>查找</span><span>bind</span><span>的对象？</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object object = context.lookup(&#8220;User&#8221;) ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span>把</span><span>user</span><span>窄化到原型</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>User user = (User)javax.rmi.PortableRemoteObject.narrow(object, User.class) ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>context.close() ;</span></p>
<img src ="http://www.blogjava.net/todd841026/aggbug/109315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2007-04-09 08:16 <a href="http://www.blogjava.net/todd841026/archive/2007/04/09/JNDI.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE总结--Servlet技术               我的所有随笔属于个人总结，有不足之处请回复指出</title><link>http://www.blogjava.net/todd841026/archive/2007/04/08/Servlet.html</link><dc:creator>田亮</dc:creator><author>田亮</author><pubDate>Sun, 08 Apr 2007 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/todd841026/archive/2007/04/08/Servlet.html</guid><wfw:comment>http://www.blogjava.net/todd841026/comments/109227.html</wfw:comment><comments>http://www.blogjava.net/todd841026/archive/2007/04/08/Servlet.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/todd841026/comments/commentRss/109227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/todd841026/services/trackbacks/109227.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>Servlet</span><span>技术：</span></p>
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>什么是</span><span>servlet</span><span>？</span></p>
<p><span>Servlet</span><span>是一个</span><span>java</span><span>类，是一个提供基于协议请求和响应的</span><span>java</span><span>类；</span></p>
<p><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>它的生命周期</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>启动服务器时就会实例化并加载</span><span>servlet</span><span>实例；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>进行初始化：自动调用</span><span>init</span><span>（</span><span>ServletConfig servletConfig</span><span>）方法；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Servlet</span><span>就绪：调用</span><span>service</span><span>（</span><span>HttpServletRequest request</span><span>，</span><span>HttpServletResponse response</span><span>）方法（其&nbsp;&nbsp;&nbsp;中</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service</span><span>&nbsp;&nbsp;&nbsp;就是</span><span>dopost</span><span>（）或</span><span>doget</span><span>（）方法），这是客户提交时，自动调用的；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Servlet</span><span>销毁：自动调用调用</span><span>distory</span><span>（）</span> <span>；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;注意：在实例化并加载</span><span>servlet</span><span>后，步骤二和四只调用一次，而步骤三，是在每次客户端发出请求时都调用；</span></p>
<p><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>怎样部署一个</span><span>servlet</span><span>？</span></p>
<p><span>Servlet</span><span>类是必须在</span><span>web.xml</span><span>中注册才能使用的，例如，我有一个</span><span>MyServlet</span><span>类：</span></p>
<p><span>必须在</span><span>web.xml</span><span>中注册：</span></p>
<p><span>&lt;web-app&gt;</span></p>
<p><span>//-----------------------Servlet</span><span>声明</span><span>----------------------</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>&lt;servlet&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;servlet-name&gt;myServlet&lt;/servlet-name&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;servlet-class&gt;servletPakage.MyServlet&lt;/servlet-class&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/servlet&gt;</span></p>
<p><span>//------------------------Servlet</span><span>注册</span><span>(</span><span>镜像</span><span>)---------------</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;servlet-mapping&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;servlet-name&gt;myServlet&lt;/servlet-name&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;url-pattern&gt;myServletURL&lt;/ url-pattern &gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/servlet-mapping&gt;</span></p>
<p><span>&lt;/web-app&gt;</span></p>
<p><span>这样你在提交时的</span><span>Url</span><span>地址就是</span><span>/myServletURL</span><span>了；</span></p>
<p><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>什么是</span><span>service</span><span>（</span><span>HttpServletRequest request</span><span>，</span><span>HttpServletResponse response</span><span>）方法？</span></p>
<p><span>其中</span><span>service</span><span>（</span><span>HttpServletRequest request</span><span>，</span><span>HttpServletResponse response</span><span>）方法包括两种：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>doget</span><span>（</span><span>HttpServletRequest request</span><span>，</span><span>HttpServletResponse response</span><span>）方法：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这种方法被称为显式提交方法，主要原因是它的得到的参数放在</span><span>url</span><span>中，可以被看到，所以称为显示提&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;交；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如：有个表单：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form action<a href="http://www.blogjava.net/myServletURL?name=todd">=&#8221;/myServletURL?name=todd</a>&#8221; method=&#8221;get&#8221;&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这种方法其</span><span>request</span><span>获得的参数就是你看到的</span><span>name=todd</span><span>；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如：</span><span>String s=request.getParameter(&#8220;name&#8221;);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>其结果</span><span>s=&#8221;todd&#8221;;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>dopost</span><span>（</span><span>HttpServletRequest request</span><span>，</span><span>HttpServletResponse response</span><span>）方法：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这种方法被称为隐式提交方法，它的参数不会在</span><span>url</span><span>里得到，而是在请求数据体得到参数；</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例如：有个表单：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;form action=&#8221;/myServletURL&#8221; method=&#8221;post&#8221;&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;input type=&#8221;text&#8221; name=&#8221;name&#8221; value=&#8221;todd&#8221;&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这种方法其</span><span>request</span><span>获得的参数就是表单体的</span><span>name=todd</span><span>；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>例如：</span><span>String s=request.getParameter(&#8220;name&#8221;);</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>其结果</span><span>s=&#8221;todd&#8221;;</span></p>
<p><span><span>5.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>什么是</span><span>ServletContext?</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext</span><span>是一个接口，是</span><span>WebApplication</span><span>的视图，它的作用域时</span><span>Application</span><span>，它能访问</span><span>Application</span><span>中的初始化参数和属性，它不局限域一个</span><span>Servlet</span><span>，它属于整个</span><span>Application</span><span>；</span></p>
<p><span>ServletContext</span><span>的初始化参数：</span></p>
<p><span>在</span><span>web.xml</span><span>中：</span></p>
<p><span>&lt;web-app&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;context-param&gt;</span></p>
<p><span>&lt;param-name&gt;myBlog&lt;/param-name&gt;</span></p>
<p><span>&lt;param-value&gt;www.blogjava.net/todd841026&lt;/param-value&gt;</span></p>
<p><span>&lt;/context-param&gt;</span></p>
<p><span>&lt;/web-app&gt;</span></p>
<p>&nbsp;<span>这样在</span><span>application</span><span>中任意一个</span><span>Servlet</span><span>中可以得到这个参数，</span></p>
<p><span>例如：</span><span>ServletContext sc = getServletContext ();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;String s = sc.getInitParameter(&#8220;myBlog&#8221;);</span></p>
<p><span>那么结果</span><span>s</span><span>就是</span><span>&#8221;www.blogjava.net/todd841026&#8221;</span></p>
<p><span><span>6.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>什么是</span><span>ServletConfig</span><span>？</span></p>
<p><span>是单独的</span><span>Servlet</span><span>初始化配置；</span></p>
<p><span>例如：在</span><span>web.xml</span><span>中</span></p>
<p><span>&lt;web-app&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>&lt;servlet&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;servlet-name&gt;myServlet&lt;/servlet-name&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;servlet-class&gt;servletPakage.MyServlet&lt;/servlet-class&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/servlet&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;init-param&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param-name&gt;cache&lt;/param-name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;param-value&gt;off&lt;/param-value&gt;</span></p>
<p><span>&lt;/init-param&gt;</span></p>
<p><span>&lt;/web-app&gt;</span></p>
<p><span>在这个</span><span>Servlet</span><span>中：</span><span>ServletConfig sc = getServletConfig();</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>String s = sc.getInitParameter(&#8220;cache&#8221;);</span></p>
<p><span>那么结果</span><span>s</span><span>就是</span><span>&#8221;</span><span>off&#8221;;</span></p>
<p><span><span>7.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Servlet</span><span>怎样处理多线程</span></p>
<p><span>在默认的情况下，单个</span><span>Servlet</span><span>实例是可以处理多个并发请求的，所以要考虑到多线程的共享同一对象的问题，例如：</span></p>
<p><span>//</span><span>做个</span><span>Servlet</span><span>中产生了多少个</span><span>object</span><span>对象一个变量的例子</span></p>
<p><span>Private int count = 0 ;</span></p>
<p><span>Public void dopost(HttpServletRequest request,HttpServletResponse response){</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object object = new Object() ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>count++ ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(&#8220;count = &#8221; + count) ;</span></p>
<p><span>}</span></p>
<p><span>当有</span><span>5</span><span>个用户提交数据时，因为</span><span>Servlet</span><span>是处理多线程的，所以可能出现，第四个用户的程序已经执行了</span><span>count++</span><span>，而第五个用户刚执行完</span><span>Object object = new Object() </span><span>，就会出现数据不一致性，因为当前有</span><span>5</span><span>个</span><span>object</span><span>对象，但是</span><span>count</span><span>却是</span><span>4</span><span>；</span></p>
<p><span>解决方案一：</span></p>
<p><span>Private boolean flag = false </span><span>；</span></p>
<p><span>Private int count = 0 ;</span></p>
<p><span>Public void dopost(HttpServletRequest request,HttpServletResponse response){</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>synchronized(flag){</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object object = new Object() ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>count++ ;</span></p>
<p><span>}<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(&#8220;count = &#8221; + count) ;</span></p>
<p><span>}</span></p>
<p><span>用同步程序块解决多线程的问题，这样在同一时刻就只能有一个访问该程序块了；</span></p>
<p><span>解决方案二：</span></p>
<p><span>Private int count = 0 ;</span></p>
<p><span>Public void dopost(HttpServletRequest request,HttpServletResponse response)</span></p>
<p><span>Implements SingleThreadModel{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Object object = new Object() ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>count++ ;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.out.println(&#8220;count = &#8221; + count) ;</span></p>
<p><span>}</span></p>
<p><span>实现</span><span>SingleThreadModel</span><span>接口，可以解决多线程问题；</span></p>
<p><span><span>8.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>什么是</span><span>servlet</span><span>过滤器？</span></p>
<p><span>也是一个</span><span>java</span><span>类，只是它实现了</span><span>Filter</span><span>这个接口；</span></p>
<p><span><span>9.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>servlet</span><span>过滤器的生命周期；</span></p>
<p><span>初始化：自动调用</span><span>init(FilterConfig config)</span><span>方法</span></p>
<p><span>执行：自动调用</span><span>doFilter()</span><span>方法；</span></p>
<p><span>销毁：自动调用</span><span>destory()</span><span>方法；</span></p>
<p><span><span>10.<span>&nbsp;&nbsp; </span></span></span><span>servlet</span><span>过滤器有什么用途？</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;个人认为目前自己用到的Servlet</span><span>过滤器的主要用途：是安全性检查</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然过滤器在</span><span>Servlet</span><span>之前也可以修改请求，要是在</span><span>Servlet</span><span>之后，也可以修改响应；</span>&nbsp;</p>
<p><span><span>11.<span>&nbsp;&nbsp; </span></span></span><span>servlet</span><span>过滤器怎样部署？</span></p>
<p><span>在</span><span>web.xml</span><span>中：</span></p>
<p><span>&lt;web-app&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>&lt;filter&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;filter-name&gt;myFilter&lt;/filter-name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;filter-class&gt;filterPage.MyFilter&lt;/filter-class&gt;</span></p>
<p><span>&lt;/filter&gt;</span></p>
<p><span>&lt;filter-mapping&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;filter-name&gt;myFilter&lt;/filter-name&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;url-pattern&gt;/Todd/*&lt;/url-pattern&gt;</span></p>
<p><span>&lt;/filter-mapping&gt;</span></p>
<p><span>&lt;/web-app&gt;</span></p>
<p><span>这样就是说要访问</span><span>WEB-INF</span><span>下的</span><span>Todd</span><span>包下的</span><span>jsp</span><span>或</span><span>Servlet</span><span>的话，就必须要先通过</span><span>myFilter</span><span>这个类；</span></p>
<img src ="http://www.blogjava.net/todd841026/aggbug/109227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/todd841026/" target="_blank">田亮</a> 2007-04-08 13:31 <a href="http://www.blogjava.net/todd841026/archive/2007/04/08/Servlet.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>