joda-time, ThreeTen Backport

DateTimeUtils.toDate(LocalDateTime.now().minusDays(1).atZone(ZoneId.systemDefault()).toInstant()) DateTimeFormatter formatterYMDHMSS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); LocalDateTime localDateTime =LocalDateTime.now(); String str = localDateTime.format(formatterYMDHMSS); LocalDateTime localDateTime = LocalDateTime.of(2016, 12, 13, 14, 13, 01, 1000000); #local date time to milli. LocalDateTime ldt = LocalDateTime.of(2014, 5, 29, 18, 41, 16); ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles")); long millis = zdt.toInstant().toEpochMilli(); http://www.jianshu.com/p/efdeda608780 threeten backport LocalDatetime to java.util.date http://blog.joda.org/2014/07/threeten-backport-vs-joda-time.html http://www.threeten.org/threetenbp/ package com.baidu.test; import java.util.Date; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; public class TestJodaTime { public static void main(String[] args) { DateTime dt = new DateTime();// 取得当前时间 // 根据指定格式,将时间字符串转换成DateTime对象 DateTime dt2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1985-12-26 23:23:31"); // 年,月,日,时,分,秒,毫秒 DateTime dt3 = new DateTime(2011, 2, 13, 10, 30, 50, 333);// 2010年2月13日10点30分50秒333毫秒 // 判断是否闰月 DateTime dt4 = new DateTime(); org.joda.time.DateTime.Property month = dt4.monthOfYear(); System.out.println("是否闰月:" + month.isLeap()); // 取得 3秒前的时间 DateTime dt5 = dt.secondOfMinute().addToCopy(-3); dt.getSecondOfMinute();// 得到整分钟后,过的秒钟数 dt.getSecondOfDay();// 得到整天后,过的秒钟数 dt.secondOfMinute();// 得到分钟对象,例如做闰年判断等使用 // DateTime与java.util.Date对象,当前系统TimeMillis转换 DateTime dt6 = new DateTime(new Date()); Date date = dt.toDate(); DateTime dt7 = new DateTime(System.currentTimeMillis()); dt.getMillis(); // 将dt对象,按照指定格式输出字符串 System.out.println(dt.toString("yyyy-MM-dd HH:mm:ss")); } } 日期比较 ...

2012-05-28 · 1 min · 190 words · wiloon

java.lang.OutOfMemoryError, PermGen space

‘java.lang.OutOfMemoryError, PermGen space’ http://peak.iteye.com/blog/52606 JavaTomcatJVMLinuxWeb 这个问题是我的工程中加入了Birt报表在Linux环境下运行出现的问题,从网上搜索了一下看到这文章发现并不是由于Birt的原因造成的 引用 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出: 这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。 改正方法: -Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 在tomcat中redeploy时出现outofmemory的错误. 可以有以下几个方面的原因: 1,使用了proxool,因为proxool内部包含了一个老版本的cglib. 2, log4j,最好不用,只用common-logging 3, 老版本的cglib,快点更新到最新版。 4,更新到最新的hibernate3.2 这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。 一、java.lang.OutOfMemoryError: PermGen space PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小 超过了jvm默认的大小(4M)那么就会产生此错误信息了。 解决方法: 手动设置MaxPermSize大小 修改TOMCAT_HOME/bin/catalina.sh 在"echo “Using CATALINA_BASE: $CATALINA_BASE"“上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m 建议: 将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。 二、java.lang.OutOfMemoryError: Java heap space ...

2012-05-28 · 1 min · 138 words · -

进程优先级

进程优先级 linux 进程优先级 为什么要有进程优先级?这似乎不用过多的解释,毕竟自从多任务操作系统诞生以来,进程执行占用cpu的能力就是一个必须要可以人为控制的事情。因为有的进程相对重要,而有的进程则没那么重要。 本文作者: 邹立巍 Linux系统技术专家。目前在腾讯SNG社交网络运营部 计算资源平台组,负责内部私有云平台的建设和架构规划设计。 曾任新浪动态应用平台系统架构师,负责微博、新浪博客等重点业务的内部私有云平台架构设计和运维管理工作。 进程优先级起作用的方式从发明以来基本没有什么变化,无论是只有一个cpu的时代,还是多核cpu时代,都是通过控制进程占用cpu时间的长短来实现的。就是说在同一个调度周期中,优先级高的进程占用的时间长些,而优先级低的进程占用的短些。 从这个角度看,进程优先级其实也跟cgroup的cpu限制一样,都是一种针对cpu占用的QOS机制。我曾经一直很困惑一点,为什么已经有了优先级,还要再设计一个针对cpu的cgroup?得到的答案大概是因为,优先级这个值不能很直观的反馈出资源分配的比例吧? 不过这不重要,实际上从内核目前的进程调度器cfs的角度说,同时实现cpushare方式的cgroup和优先级这两个机制完全是相同的概念,并不会因为增加一个机制而提高什么实现成本。既然如此,而cgroup又显得那么酷,那么何乐而不为呢? 在系统上我们最熟悉的优先级设置方式是nice和renice命令。那么我们首先解释一个概念,什么是: NICE值 nice值应该是熟悉Linux/UNIX的人很了解的概念了,我们都知它是反应一个进程“优先级”状态的值,其取值范围是-20至19,一共40个级别。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。我们可以通过nice命令来对一个将要执行的命令进行nice值设置,方法是: [root@zorrozou-pc0 zorro]# nice -n 10 bash 这样我就又打开了一个bash,并且其nice值设置为10,而默认情况下,进程的优先级应该是从父进程继承来的,这个值一般是0。我们可以通过nice命令直接查看到当前shell的nice值 [root@zorrozou-pc0 zorro]# nice 10 对比一下正常情况: [root@zorrozou-pc0 zorro]# exit 推出当前nice值为10的bash,打开一个正常的bash: [root@zorrozou-pc0 zorro]# bash [root@zorrozou-pc0 zorro]# nice 0 另外,使用renice命令可以对一个正在运行的进程进行nice值的调整,我们也可以使用比如top、ps等命令查看进程的nice值,具体方法我就不多说了,大家可以参阅相关manpage。 需要大家注意的是,我在这里都在使用nice值这一称谓,而非优先级priority这个说法。当然,nice和renice的man手册中,也说的是priority这个概念,但是要强调一下,请大家真的不要混淆了系统中的这两个概念,一个是nice值,一个是priority值,他们有着千丝万缕的关系,但对于当前的Linux系统来说,它们并不是同一个概念。 我们看这个命令: [root@zorrozou-pc0 zorro]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 6924 5776 0 80 0 - 17952 poll_s pts/5 00:00:00 sudo 4 S 0 6925 6924 0 80 0 - 4435 wait pts/5 00:00:00 bash 0 R 0 12971 6925 0 80 0 - 8514 - pts/5 00:00:00 ps 大家是否真的明白其中PRI列和NI列的具体含义有什么区别?同样的,如果是top命令: ...

2012-05-26 · 5 min · 1065 words · -

getconf

getconf, 查看系统变量 我们时常需要查询系统相关的信息,比如页面大小,整数大小之类,如果编写程序去计算会比较繁琐,这里有一个很有用的命令,可以用来获取系统相关信息。它就是 getconf。 getconf 用途将系统配置变量值写入标准输出,比如: getconf PAGE_SIZE 查看系统内存分页大小 getconf LONG_BIT 看linux是32位还是64位最简单的方法 getconf -a 查看全部系统变量 getconf INT_MAX 2147483647 getconf LONG_BIT 64 可以取得的相关信息如下(参考相关资料,在又在版本上会有些不同): _CS_PATH Value for the PATH environment variable used to find commands. ARG_MAX Maximum length, in bytes, of the arguments for one of the exec subroutines, including environment data. ARG_MAX 值 不能改, 要修改只能重新编译内核 BC_BASE_MAX Maximum value allowed for the obase variable with the bc command. BC_DIM_MAX Maximum number of elements permitted in an array by the bc command. BC_SCALE_MAX Maximum value allowed for the scale variable with the bc command. BC_STRING_MAX Maximum length of a string constant accepted by the bc command. CHARCLASS_NAME_MAX Maximum number of bytes in a character class name. CHAR_BIT Number of bits in a type character. CHAR_MAX Maximum value of a type character. CHAR_MIN Minimum value of a type character. CHILD_MAX Maximum number of simultaneous processes for each real user ID. CLK_TCK Number of clock ticks per second returned by the time subroutine. COLL_WEIGHTS_MAX Maximum number of weights that can be assigned to an entry in the LC_COLLATE locale stanza in a locale-definition file. CS_PATH Value of the PATH environment variable used to find commands. EXPR_NEST_MAX Maximum number of expressions that can be nested within parentheses by the expr command. INT_MAX Maximum value of a type int. INT_MIN Minimum value of a type int. LINE_MAX Maximum length, in bytes, of a command's input line (either standard input or another file) when the utility is described as processing text files. The length includes room for the trailing new-line character. LONG_BIT Number of bits in a type long int. LONG_MAX Maximum value of a type long int. LONG_MIN Minimum value of a type long int. MB_LEN_MAX Maximum number of bytes in a character for any supported locale. NGROUPS_MAX Maximum number of simultaneous supplementary group IDs for each process. NL_ARGMAX Maximum value of digit in calls to the printf and scanf subroutines. NL_LANGMAX Maximum number of bytes in a LANG name. NL_MSGMAX Maximum message number. NL_NMAX Maximum number of bytes in an N-to-1 collation mapping. NL_SETMAX Maximum set number. NL_TEXTMAX Maximum number of bytes in a message string. NZERO Default process priority. OPEN_MAX Maximum number of files that one process can have open at one time. PATH Sequence of colon-separated path prefixes used to find commands. RE_DUP_MAX Maximum number of repeated occurrences of a regular expression permitted when using the interval-notation parameters, such as the m and n parameters with the ed command. SCHAR_MAX Maximum value of a type signed char. SCHAR_MIN Minimum value of a type signed char. SHRT_MAX Maximum value of a type short. SHRT_MIN Minimum value of a type short. SSIZE_MAX Maximum value of an object of type ssize_t. STREAM_MAX Number of streams that one process can have open at one time. TMP_MAX Minimum number of unique path names generated by the tmpnam subroutine. Maximum number of times an application can reliably call the tmpnam subroutine. TZNAME_MAX Maximum number of bytes supported for the name of a time zone (not the length of the TZ environment variable). UCHAR_MAX Maximum value of a type unsigned char. UINT_MAX Maximum value of a type unsigned int. ULONG_MAX Maximum value of a type unsigned long int. USHRT_MAX Maximum value of a type unsigned short int. WORD_BIT Number of bits in a word or type int https://www.cnblogs.com/wjoyxt/p/4815782.html

2012-05-26 · 3 min · 547 words · -

FTP的主动模式和被动模式

FTP的主动模式和被动模式 http://space.itpub.net/14075938/viewspace-495630 FTP两种工作模式: 主动****模式(ActiveFTP) 和被动模式(PassiveFTP) 在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口 (通常是20) 来连接客户端指定的端口N+1,进行数据传输。 在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。 总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。 被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过。因此,在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作。 win 下面设置ftp模式 一、什么是PASV和PORT方式 (1) PORT其实是Standard模式的另一个名字,又称为Active模式。中文意思是"主动模式。 (2) PASV也就是Passive的简写。中文就是"被动模式。 二、两者不同 不同之处是由于PORT (主动) 这个方式需要在接上TCP 21端口后,服务器通过自己的TCP 20来发出数据。并且需要建立一个新的连接来传送档案。而PORT的命令包含一些客户端没用的资料,所以有了PASv的出现。而PASV模式拥有PORT模式的优点,并去掉一些PORT的缺点。PASV运行方式就是当服务器接收到客户端连接请求时,就会自动从端口1024到5000中随机选择一个和客户端建立连接传递数据。由于被动且自动建立连接,容易受到攻击,所以安全性差。 三、常见的FTP客户端软件PORT方式与PASV方式的切换方法 大部分FTP客户端默认使用PASV方式。IE默认使用PORT方式。 在大部分FTP客户端的设置里,常见到的字眼都是"PASV"或"被动模式",极少见到"PORT"或"主动模式"等字眼。因为FTP的登录方式只有两种: PORT和PASV,取消PASV方式,就意味着使用PORT方式。 (1) IE: 工具 -> Internet选项 -> 高级 -> “使用被动FTP” (需要IE6.0以上才支持) 。 (2) CuteFTP: Edit -> Setting -> Connection -> Firewall -> “PASV Mode” 或File -> Site Manager,在左边选中站点 -> Edit -> “Use PASV mode” 。 (3) FlashGet: 工具 -> 选项 -> 代理服务器 -> 直接连接 -> 编辑 -> “PASV模式”。 ...

2012-05-26 · 2 min · 255 words · -

iptables防火墙与vsftpd的被动传输模式

iptables防火墙与vsftpd的被动传输模式 Linux服务器上开启了防火墙,并配置vsftpd,就出现了一些问题 可以连接,列出目录,但是无法下载/上传,经过检查,是受FTP传输模式影响导致。 iptables的配置策略往往就限制入站的目的端口,ftp服务器使用标准的21端口作为控制端口,但是数据的传输端口取决于传输模式 主动模式: 服务器以源端口20或随机端口向客户端的协商的随机端口发起链接,也就是说,这时两边防火墙的策略应该是: 服务器端应该允许目标端口为20的入站连接,允许所有随机端口的出站连接 当然,服务器是否以20为源端口连接,取决于/etc/vsftpd.conf是否设置 connect_from_port_20=YES 客户端应该允许所有源端口为20的入站连接,允许所有随机端口的出站连接 被动模式: 客户端以随机连接服务器的某个随机端口 (通过21端口协商得到) 如此, 如果客户端使用了NAT或是有防火墙,问题就变得复杂多了。 在主动模式下,服务器连接客户端 (即客户端NAT主机的公网IP) 随机端口,肯定会失败的,所以客户端使用NAT时,不能使用主动模式,同理,如果客户端使用防火墙,只允许指定的入站端口连接,那么也会失败。 如果使用被动模式呢?也有问题,因为客户端是连接服务器的随机端口(服务器只允许指定入站端口连接),也会出问题,那么对于vsftpd, 解决办法就是: 1.vsftpd 使用被动模式,并设定被动模式监听的端口范围 2.服务器防火墙允许到此范围端口的入站连接 对vsftpd的配置: pasv_enable=YES //使用被动模式,等待客户端连接 pasv_min_port=50000 //被动模式时监听的端口范围下限 pasv_max_port=50100//被动模式时监听的端口范围上限 对iptables的配置 -A RH-Firewall-1-INPUT -p tcp -m tcp -dport 50000:50100 -j ACCEPT 当然,客户端需要设置为被动方式连接 http://zhangxugg-163-com.iteye.com/blog/867422

2012-05-26 · 1 min · 42 words · -

debian VSFTPD

debian VSFTPD install vsftpd sudo apt-get install vsftpd 1. 匿名服务器的连接 (独立的服务器) 在/etc/vsftpd/vsftpd.conf配置文件中添加如下几项: Anonymous_enable=yes (允许匿名登陆) Dirmessage_enable=yes (切换目录时,显示目录下.message的内容) Local_umask=022 (FTP上本地的文件权限,默认是077) connect_from_port_20=YES 启用FTP数据端口的数据连接,http://www.wiloon.com/?p=3234 Xferlog_enable=yes (激活上传和下传的日志) Xferlog_std_format=yes (使用标准的日志格式) Ftpd_banner=XXXXX (欢迎信息) Pam_service_name=vsftpd (验证方式) * Listen=yes 这将告诉vsftpd工作于standalone模式。不要从inetd中运行该设定下的vsftpd,否则将不会工作,你将得到错误信息: could not bind listening socket. 功能: 只能连接FTP服务器,不能上传和下传 注: 其中所有和日志欢迎信息相关连的都是可选项,打了星号的无论什么帐户都要添加,是属于FTP的基本选项 2. 开启匿名FTP服务器上传权限 在配置文件中添加以下的信息即可: Anon_upload_enable=yes (开放上传权限) Anon_mkdir_write_enable=yes (可创建目录的同时可以在此目录中上传文件) Write_enable=yes (开放本地用户写的权限) Anon_other_write_enable=yes (匿名帐号可以有删除的权限) 3. 开启匿名服务器下传的权限 在配置文件中添加如下信息即可: Anon_world_readable_only=no 注: 要注意文件夹的属性,匿名帐户是其它 (other) 用户要开启它的读写执行的权限 (R) 读–下传 (W) 写–上传 (X) 执行–如果不开FTP的目录都进不去 4.普通用户FTP服务器的连接 (独立服务器) 在配置文件中添加如下信息即可: Local_enble=yes (本地帐户能够登陆) Write_enable=no (本地帐户登陆后无权删除和修改文件) ...

2012-05-26 · 3 min · 460 words · -

sysv-rc-conf

sysv-rc-conf sysv-rc-conf是一个强大的服务管理程序,群众的意见是sysv-rc-conf比chkconfig好用。 Ubuntu运行级别 Linux 系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作。 Ubuntu 的系统运行级别: 0 系统停机状态 1 单用户或系统维护状态 2~5 多用户状态 6 重新启动 查看当前运行级别,执行命令: runlevel ( runlevel 显示上次的运行级别和当前的运行级别,"N"表示没有上次的运行级别。) 切换运行级别,执行命令: init [0123456Ss] ( 即在 init 命令后跟一个参数,此参数是要切换到的运行级的运行级代号,如: 用 init 0 命令关机;用 init 6 命令重新启动。) 三、Linux 系统主要启动步骤: 1. 读取 MBR 的信息,启动 Boot Manager Windows 使用 NTLDR 作为 Boot Manager,如果您的系统中安装多个 版本的 Windows,您就需要在 NTLDR 中选择您要进入的系统。 Linux 通常使用功能强大,配置灵活的 GRUB 作为 Boot Manager。 2. 加载系统内核,启动 init 进程 init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。 3. 进程读取 init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别, 按顺序运行该运行级别对应文件夹下的脚本。脚本通常以 start 参数启 动,并指向一个系统中的程序。 通常情况下, /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是 /etc/rcN.d/ 目录。例如您设定的运行级别为 3,那么它对应的启动 目录为 /etc/rc3.d/ 。 4. 根据对应脚本启动服务器 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg Xwindow 为 Linux 下的图形用户界面系统。 5. 启动登录管理器,等待用户登录 Ubuntu 系统默认使用 GDM 作为登录管理器,您在登录管理器界面中 输入用户名和密码后,便可以登录系统。(您可以在 /etc/rc3.d/ 文件夹中找到一个名为 S13gdm 的链接) 四、安装sysv-rc-conf sudo apt-get install sysv-rc-conf 五、使用sysv-rc-conf sudo sysv-rc-conf 操作界面十分简洁,你可以用鼠标点击,也可以用键盘方向键定位,用空格键选择,用Ctrl+N翻下一页,用Ctrl+P翻上一页,用Q退出。其中,"X"表示开启该服务。 六 、部分服务优化推荐及介绍 acpi-support 这个是关于电源支持的默认是1,2,3,4,5下启动,我认为你可以把它调整到s级别。 acpid acpi的守护程序,默认是2-5开启,我认为可以不用管。 alsa alsa声音子系统,应该不用开启它。 alsa-utils 这个服务似乎取代了alsa,所以开启这个就可以了,我在S级别开启它。 anacron 这是一个用于执行到时间没有执行的程序的服务,我认为它无所谓,所以关了它,这个可以随便。 apmd 也是一种电源管理,我认为电脑如果不是很老,它就没有开启的必要了。 atd 和anacron类似,我把它关了。 bluez-utiles 传说中的蓝牙服务,然后遗憾我没有,所以关了。 bootlogd 似乎使用来写log的,安全期间开着他也许比较好。 cron 指定时间运行程序的服务,所以开着比较好的。 cupsys 打印机服务,所以如果你有,就开启吧。 dbus 消息总线系统,非常重要,一定要开。 dns-clean 拨号连接用的,如果不用,就关了它。 evms 企业卷管理系统,由于我并不明白什么叫做企业卷,所以我关了它。 fetchmail 用于邮件守护,我关了它。 gdm gnome桌面管理器,我关了它,然后用startx启动gnome。 halt 关机用的,不要更改 hdparm 这个我刚才有讲,如果没有ide硬盘也就不用开启它了。 hotkey-setup 这个是给某些品牌笔记本设计的热键映射,台式机用户请关了它 hotplug 这个是用于热插拔的,我已经测试过了,在某些电脑上关闭它会使声卡无效,请在S级别开启它。 hplip hp打印机专用的,应该可以关了它。 ifrename 网络接口重命名,好像没用,关了。 ifupdown 这个使用来打开网络的,开着它。 ifupdown-clean 同上。 klogd linux守护程序,接受来自内核和发送信息到syslogd的记录,并记录为一个文件,所以请开着它。 linux-restricted-modules-common 这个使用来使用受限制的模块的,你可以从/lib/linux-restricted-modules下查看,如果没有什么,你可以关掉它。 lvm 逻辑卷管理器,如果你没有请关了它。 makedev 用来创建设备到/dev/请不要动他。 mdamd 管理raid用,如果你没有请关闭它。 module-init-tools 从/etc/modules 加在扩展模块的,这个一般开着。 networking 增加网络接口和配置dns用,将它开启。 ntp-server 与ubuntu时间服务器进行同步的,关了。 pcmcia 激活pcmica设备,遗憾我有生以来都没有见过这样的设备,关了它。 powernowd 用于管理cpu的客户端程序,如果有变频功能,比如amd的quite' cool 那么就开启它吧。 ppp 拨号用的,我关了它。 ppp-dns 一样,也关了。 readahead 预加载服务,让我想起了win的预读,当然他们不同,它会使启动变慢3-4妙,所以我关了它。 reboot 重启用的,不要动。 rmnologin 如果发现nologin,就去除它,在笔记本上不用开启。 rsync rsync协议守护,请视情况而定。 screen-cleanup 一个清除开机屏幕的脚本,随便。 sendsigs 重启和关机时向所有进程发送消息。所以不要管它。 single 激活但用户模式,不用管它。 stop-bootlogd 从2,3,4,5级别停止bootlogd,不用管它。 sudo 这个不用说吧,不用管它。 sysklogd 用于记录系统日志信息,不用管它。 udev 用户空间dev文件系统,不用管它。 udev-mab 同上。 umountfs 用来卸载文件卷的,不用管它。 urandom 生成随即数的,不知道怎么用,不用管它。 usplash 那个漂亮的启动画面,但是我关了它,它也存在,所以想关他需要把内核起动参数中的splash一句删掉。 vbesave 显卡bios配置工具,不用管它。 xorg-common 设置x服务ice socket。不用管它。 ...

2012-05-26 · 2 min · 230 words · -

ubuntu vsftpd

ubuntu vsftpd sudo apt-get install vsftpd 查看是否打开21端口 $ sudo netstat -npltu | grep 21 VSFTPD的菜鸟篇 作者: 龙磊 这是我这个菜鸟学习LINUX所写的第一篇文章,是比较基础的FTP架设的应用,如果我写有什么问题请大家多指教,我后续会陆续出进阶篇把FTP中各种详细的配置跟大家一起进行探讨。 我所用的是LINUX AS+VSFTPD-1.2.0-4的系统架构,在这里说明的是如果对配置文件不是很熟悉,最好做个备份,以免误操作: 1. 匿名服务器的连接 (独立的服务器) 在/etc/vsftpd.conf配置文件中添加如下几项: Anonymous_enable=yes (允许匿名登陆) Dirmessage_enable=yes (切换目录时,显示目录下.message的内容) Local_umask=022 (FTP上本地的文件权限,默认是077) Connect_form_port_20=yes (启用FTP数据端口的数据连接) * Xferlog_enable=yes (激活上传和下传的日志) Xferlog_std_format=yes (使用标准的日志格式) Ftpd_banner=XXXXX (欢迎信息) Pam_service_name=vsftpd (验证方式) * Listen=yes (独立的VSFTPD服务器) * 功能: 只能连接FTP服务器,不能上传和下传 注: 其中所有和日志欢迎信息相关连的都是可选项,打了星号的无论什么帐户都要添加,是属于FTP的基本选项 2. 开启匿名FTP服务器上传权限 在配置文件中添加以下的信息即可: Anon_upload_enable=yes (开放上传权限) Anon_mkdir_write_enable=yes (可创建目录的同时可以在此目录中上传文件) Write_enable=yes (开放本地用户写的权限) Anon_other_write_enable=yes (匿名帐号可以有删除的权限) 3. 开启匿名服务器下传的权限 在配置文件中添加如下信息即可: Anon_world_readable_only=no 注: 要注意文件夹的属性,匿名帐户是其它 (other) 用户要开启它的读写执行的权限 (R) 读–下传 (W) 写–上传 (X) 执行–如果不开FTP的目录都进不去 ...

2012-05-25 · 3 min · 513 words · -

Java读取properties, getResourceAsStream

Java读取properties, getResourceAsStream http://lavasoft.blog.51cto.com/62575/62174 Java读取properties文件的方法比较多,网上我最多的文章是"Java读取properties文件的六种方法",但在Java应用中,最常用还是通过java.lang.Class类的getResourceAsStream(String name) 方法来实现,但我见到众多读取properties文件的代码中,都会这么干: // java object InputStream in = getClass().getResourceAsStream("资源Name"); // static method Class.class.getClassLoader().getResourceAsStream("foo.toml"); 这里面有个问题,就是getClass()调用的时候默认省略了this!我们都知道,this是不能在static (静态) 方法或者static块中使用的,原因是static类型的方法或者代码块是属于类本身的,不属于某个对象,而this本身就代表当前对象,而静态方法或者块调用的时候是不用初始化对象的。 问题是: 假如我不想让某个类有对象,那么我会将此类的默认构造方法设为私有,当然也不会写别的共有的构造方法。并且我这个类是工具类,都是静态的方法和变量,我要在静态块或者静态方法中获取properties文件,这个方法就行不通了。 那怎么办呢?其实这个类就不是这么用的,他仅仅是需要获取一个Class对象就可以了,那还不容易啊--取所有类的父类Object,用Object.class难道不比你的用你正在写类自身方便安全吗 ?呵呵,下面给出一个例子,以方便交流。 import java.util.Properties; import java.io.InputStream; import java.io.IOException; /** * 读取Properties文件的例子 * File: TestProperties.java * User: leizhimin * Date: 2008-2-15 18:38:40 */ public final class TestProperties { private static String param1; private static String param2; static { Properties prop = new Properties(); InputStream in = Object.class.getResourceAsStream("/test.properties"); try { prop.load(in); param1 = prop.getProperty("initYears1").trim(); param2 = prop.getProperty("initYears2").trim(); } catch (IOException e) { e.printStackTrace(); } } /** * 私有构造方法,不需要创建对象 */ private TestProperties() { } public static String getParam1() { return param1; } public static String getParam2() { return param2; } public static void main(String args[]){ System.out.println(getParam1()); System.out.println(getParam2()); } } 运行结果: ...

2012-05-25 · 1 min · 163 words · -

JAVA 随机数

JAVA 随机数 在Java中,随机数的概念从广义上将,有三种。 通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。 通过Math.random()返回一个0到1之间的double值。 通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。 int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 int nextInt(int n) 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0 (包括) 和指定值 (不包括) 之间均匀分布的 int值。 在Java中我们可以使用java.util.Random类来产生一个随机数发生器。它有两种形式的构造函数,分别是Random()和Random(long seed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(long seed)使用指定的seed作为发生器的种子。 随机数发生器(Random)对象产生以后,通过调用不同的method: nextInt()、nextLong()、nextFloat()、nextDouble()等获得不同类型随机数。 1>生成随机数 Random random = new Random(); Random random = new Random(100);//指定种子数100 random调用不同的方法,获得随机数。 如果2个Random对象使用相同的种子 (比如都是100) ,并且以相同的顺序调用相同的函数,那它们返回值完全相同。如下面代码中两个Random对象的输出完全相同 import java.util.*; class TestRandom { public static void main(String[] args) { Random random1 = new Random(100); System.out.println(random1.nextInt()); System.out.println(random1.nextFloat()); System.out.println(random1.nextBoolean()); Random random2 = new Random(100); System.out.println(random2.nextInt()); System.out.println(random2.nextFloat()); System.out.println(random2.nextBoolean()); } } 2>指定范围内的随机数 ...

2012-05-25 · 2 min · 285 words · -

readelf

readelf 功能:用于查看ELF格式的文件信息,常见的文件如在 Linux 上的可执行文件,动态库(.so) 或者静态库 (.a) 等包含 ELF 格式的文件。 示例: 查看静态库定义的函数 readelf -c xxx.a 查看静态库定义的函数 readelf -A xxx.so 版权声明:本文为CSDN博主「mayue_csdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mayue_web/article/details/103879976 ELF (Executable and Linkable Format) 即可执行连接文件格式,是一种比较复杂的文件格式,但其应用广泛。当你使用 file 命令发现某个文件是 ELF 文件时,你就可以使用 readelf 命令来读取这个文件的信息。 readelf -h /bin/pwd readelf 命令 用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档 (这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。 这个程序和 objdump 提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。 运行 readelf 的时候,除了 -v和 -H之外,其它的选项必须有一个被指定。 ELF文件类型 3种类型的ELF文件: 可重定位文件:用户和其他目标文件一起创建可执行文件或者共享目标文件,例如lib*.a文件。 可执行文件:用于生成进程映像,载入内存执行,例如编译好的可执行文件a.out。 共享目标文件:用于和其他共享目标文件或者可重定位文件一起生成elf目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。 ELF文件作用: ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序),所以可以从不同的角度来看待elf格式的文件: 如果用于编译和链接 (可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。 如果用于加载执行 (可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。 如果是共享文件,则两者都含有。 ELF文件总体组成: elf文件头描述elf文件的总体信息。包括:系统相关,类型相关,加载相关,链接相关。 系统相关表示:elf文件标识的魔术数,以及硬件和平台等相关信息,增加了elf文件的移植性,使交叉编译成为可能。 类型相关就是前面说的那个类型。 加载相关:包括程序头表相关信息。 链接相关:节头表相关信息。 选项 -a –all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I. ...

2012-05-24 · 13 min · 2732 words · -

go benchmark

go benchmark 稳定的测试环境 当我们尝试去优化代码的性能时,首先得知道当前的性能怎么样。Go 语言标准库内置的 testing 测试框架提供了基准测试(benchmark)的能力,能让我们很容易地对某一段代码进行性能测试。 性能测试受环境的影响很大,为了保证测试的可重复性,在进行性能测试时,尽可能地保持测试环境的稳定。 机器处于闲置状态,测试时不要执行其他任务,也不要和其他人共享硬件资源。 机器是否关闭了节能模式,一般笔记本会默认打开这个模式,测试时关闭。 避免使用虚拟机和云主机进行测试,一般情况下,为了尽可能地提高资源的利用率,虚拟机和云主机 CPU 和内存一般会超分配,超分机器的性能表现会非常地不稳定。 超分配是针对硬件资源来说的,商业上对应的就是云主机的超卖。虚拟化技术带来的最大直接收益是服务器整合,通过 CPU、内存、存储、网络的超分配(Overcommitment)技术,最大化服务器的使用率。例如,虚拟化的技能之一就是随心所欲的操控 CPU,例如一台 32U(物理核心)的服务器可能会创建出 128 个 1U(虚拟核心)的虚拟机,当物理服务器资源闲置时,CPU 超分配一般不会对虚拟机上的业务产生明显影响,但如果大部分虚拟机都处于繁忙状态时,那么各个虚拟机为了获得物理服务器的资源就要相互竞争,相互等待。Linux 上专门有一个指标,Steal Time(st),用来衡量被虚拟机监视器(Hypervisor)偷去给其它虚拟机使用的 CPU 时间所占的比例。 # 运行当前 package 内的用例, 只运行 test, 不运行 benchmark # go test 命令默认不运行 benchmark 用例 go test # 只运行 benchmark go test -bench=. -run=none go test -bench . -run none # 运行 test 和 benchmark go test -bench . # -bench 参数支持传入一个正则表达式,匹配到的用例才会得到执行,例如,只运行以 Fib 结尾的 benchmark 用例 go test -bench=Fib$ . go test -bench='Fib$' . https://geektutu.com/post/hpg-benchmark.html ...

2012-05-23 · 2 min · 242 words · -

各种文件系统的文件夹数量与容量限制

各种文件系统的文件夹数量与容量限制 http://blog.csdn.net/leonwei/article/details/3980179 今天写程序时,打算不断的将生成的图片文件放入一个文件夹中,但是每次当放入65534个文件后就无法再存入了,起初一位是程序的bug,后来才发现原来是文件系统对文件数目有限制。经过查阅发现 FAT16 对于FAT16文件系统,可以保存的文件体积最大值是 4 GB - 1 byte (2^32 bytes - 1 byte);卷的最大体积是4GB;每个卷上最多可以保存的文件数量是65,536个 (2^16);根目录下可以保存的文件和文件夹数量最大值是512个 (如果使用了长文件名,该数字还会减小) 对于FAT32文件系统, 可以保存的文件体积最大值是 4 GB - 1 byte (2^32 bytes - 1 byte);Windows自带的工具可以创建的卷的最大体积是32GB;每个卷中最多可以保存的文件数量是4,177,920个;一个特定文件夹中最多可以保存的子文件夹和文件的数量是65,534 (如果使用了长文件名,那么该数字会减小) 对于NTFS文件系统,可以保存的文件的大小的最大值,理论上是16EB - 1 KB (2^64 bytes - 1 KB)(1EB=1024PB=1024TB=1024GB) ,实际实现过的最大值是16TB - 64 KB (2^44 bytes - 64 KB);卷的体积最大值,理论上可以达到2^64个簇 - 1个簇,实际实现过的最大值是2^56 TB - 64 KB ( 2^32 个簇 - 1个簇);每个卷可以包含的文件个数的最大值是4,294,967,295个 (2^32 - 1) 其中长文件和短文件名文件是指过去的DOS操作系统下,因为8.3格式的限制,文件主档名超过8字节或扩展名超过3字节的文件名,都被称为"长文件名",一般在Windows下正常的文件名在DOS下会显示不正常。 (如"Program files"资料夹可能会显示成"Progra~1") 在微软的Windows NT3.5出来之后,“长文件名"问题得以解决,现在的Windows XP系统一般可以输入400多个字符作为文件名,或者400个字符扩展名。{fact} 而我用的是FAT32系统,里面最多就允许65534个文件,了解了这些,我就知道了应该对这种大批量的文件系统上的文件存储要适度的建立子文件夹。

2012-05-20 · 1 min · 69 words · -

debian 修改无线网卡的信道

debian 修改无线网卡的信道 查看无线网卡支持的信道 sudo iwlist channel #这个是我的thinkpad x60s, !!!不支持channel 12,13,14, #最后面有列出当前信道Current Frequency=xxx lo no frequency information. eth0 no frequency information. wlan0 24 channels in total; available frequencies : Channel 01 : 2.412 GHz Channel 02 : 2.417 GHz Channel 03 : 2.422 GHz Channel 04 : 2.427 GHz Channel 05 : 2.432 GHz Channel 06 : 2.437 GHz Channel 07 : 2.442 GHz Channel 08 : 2.447 GHz Channel 09 : 2.452 GHz Channel 10 : 2.457 GHz Channel 11 : 2.462 GHz Channel 36 : 5.18 GHz Channel 40 : 5.2 GHz Channel 44 : 5.22 GHz Channel 48 : 5.24 GHz Channel 52 : 5.26 GHz Channel 56 : 5.28 GHz Channel 60 : 5.3 GHz Channel 64 : 5.32 GHz Channel 149 : 5.745 GHz Channel 153 : 5.765 GHz Channel 157 : 5.785 GHz Channel 161 : 5.805 GHz Channel 165 : 5.825 GHz Current Frequency=2.462 GHz (Channel 11) tap0 no frequency information. 修改当前信道 ...

2012-05-19 · 1 min · 167 words · -

无线WI-FI路由器的信道选择

无线WI-FI路由器的信道选择 http://blog.solrex.org/articles/wifi-channel-choosing.html 很多人从来没有注意过路由器的 wifi 频道,以为只要笔记本电脑能连上,无线路由就没问题。但有个问题是很多移动设备不能支持全频道,其中即有功耗考虑,也有销售目标国家考虑。因此有条件时最好检测一下信噪比,选择一个最适合自己的频道,而不是让路由器启动时自己去选择。 但接着又有朋友说: "求普及..."。参考 Avinash Kaushik 在他的网站统计博客"Occam's Razor"成立 5 周年时的感慨 (这篇文章很值得一读,very inspiring) ,我想即使我不是专家,分享一下自己知道的这点儿事也不错。 切入正题,现在很多家庭都有了自己的无线 Wi-Fi 路由器,也有了各种接入互联网的移动设备: 笔记本、上网本、手机、平板电脑、电纸书、MID (已没落) 。很多移动设备联网时都会出现诡异问题,这篇文章仅仅关注其中一种诡异问题: 错误的信道 (Channel,也译为频道、频段) 配置导致无法联网或者信号较差。 精确的技术知识我就不解释了,感兴趣的同学可以去读 Wikipedia Wi-Fi 或者 IEEE 802.11 等词条。下面主要说明为什么需要配置无线信道以及如何选择无线信道。 为什么需要配置无线信道? 相信大家都使用过收音机。使用收音机时,都有一个选台的问题,无论你是用旋钮、按键或者触摸,你总要选定某个台,才能收听该台的节目。无线路由也一样。你家里的无线路由器会广播一个 SSID (就是你看到的无线连接名) ,点击该连接,就会使你的电脑调制到该连接所在信道进行通信。 但是使用收音机时,可能会有这样的问题: 1. 有些台根本收不到,比如你的收音机不是全波段的;2. 有些台杂音太大听不清,比如某些唢呐电台。同理到你的无线环境上,问题 1 转化为"笔记本电脑 (全波段收音机) 能连接无线路由器,但平板电脑 (非全波段收音机) 却无法连接";问题 2 转化为"能连接到无线路由器,但干扰太多,达不到最大的网速 (这个网速指 Wi-Fi 连接速度,与 ADSL 网速无关) "。 如果没有手动配置过,无线路由器会自动选择一个默认或者随机的信道进行广播和连接建立。在设备没有联网问题和周围没有别人使用时,这是 OK 的。 但如果你周围的人家都有无线设备,且大家用的都是同一款运营商赠送的无线路由器 (或无线猫) 时,那么极有可能所有人都选择了同一个信道进行通信。这就会造成很大的信号干扰,这一般影响不到网速——除非你家用的 ADSL 大于 4M,但会造成家里两台设备之间数据传输速度极慢,例如用豌豆荚往手机上无线发送视频文件时。 如果不巧的是你家无线路由器会随机选择信道,那么它极有可能选择到一个你设备不支持的信道。我就曾经遇到过爱国者某型号 MID 只支持信道 1-9 但无线路由器自己选择了信道 11 的情况,那是死活也连不上啊!移动设备出于降低功耗或其它考虑,不支持某些信道是很正常的;再加上不同国家对无线信道管制情况不同 (参见 List of WLAN Channels) ,其它国家的水货设备到了国内可能也会水土不服。 幸运的是,你不能控制广播电台的波段,却可以控制自家无线路由器的无线信道。修改无线信道的方法请参考各路由器厂商的帮助文档,或者在网上寻求帮助。不过在修改之前,你还面临着,我该改到哪个信道呢? 如何选择无线信道? 首先,要选择自己通信设备都支持的信道。不过在此之前,首先确认所有设备都支持同一协议,比如你移动终端不支持 IEEE 802.11n,你非得在路由器上用 802.11n 协议,这就是找不自在了。这些知识要参考设备的手册,或者自己尝试。在 Linux 系统中,可以用 iwlist channel 列出移动终端支持的所有信道,比如 Kindle 支持的信道就是 (看到这里我基本可以肯定那哥们 Kindle 问题不是因为信道了,除非他用的是日本产路由器) : [root@kindle root]# iwlist channel lo no frequency information. ...

2012-05-19 · 2 min · 245 words · -

linux mt4

linux mt4 download mt4 https://cn.nordfx.com/MetaTrader_4.html install wine mt4.exe MetaTrader 4平台显示的是哪里的时间 ? MT4服务器显示的是欧洲东部时间 (EET) 。欧洲东部夏令时间比格林尼治时间早3个小时 (GMT+3) ,欧洲东部冬令时间比格林尼治时间早2个小时 (GMT+2) 。 欧洲东部时间 (EET) 于3月最后1个星期日切换至夏令时,于10月最后1个星期日切换至冬令时。 夏令时 GMT: 0 EET: +3 冬令时 GMT: 0 EET: +2 How to install Metatrader 4 under Linux! There is a lot of interest out there in running Metatrader 4 on the Linux platform, however until Metaquotes does a native Linux version, the only option if you want to do it is to run it under WINE emulation. ...

2012-05-17 · 2 min · 274 words · -

jautodoc

jautodoc http://jautodoc.sourceforge.net/update/ ctrl+alt+j

2012-05-15 · 1 min · 3 words · -

java static import

java static import http://blog.csdn.net/ygc87/article/details/7371254 import static (静态导入) 是JDK1.5中的新特性,一般我们导入一个类都用 import com…..ClassName;而静态导入是这样: import static com…..ClassName.*;这里多了个static,还有就是类名ClassName后面多了个 .* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名的方式来调用。 例如,你在某个类中定义了一些简便的打印方法: print? package com.ygc.print; public class Print { // 打印,换行 public static void print(Object obj) { System.out.println(obj); } // 换行 public static void print() { System.out.println(); } // 打印 public static void printnb(Object obj) { System.out.print(obj); } } 然后你想在其他的类里面使用这些方法: print? package com.ygc; import static com.ygc.print.Print.*; class Test { public void println(String s) { print(s); } } java static import jdk1.5 static import static import static import就是允许在代码中直接引用别的类的static变量和方法 (当然,在权限许可范围内) ,我们可以简单的把它当成import的延续。 它的语法如下: import static CLASS_NAME.MEMBER_NAME; 或者 import static CLASS_NAME.×; 事实上,Tiger引入static import最主要考虑到两个需要,第一个就是对一些工具性的,常用的静态方法进行直接引用。 比如,java.lang.Math里的一大堆数学方法abs,exp等。 第二个就是对常数变量进行直接引用,其中也包扩对enum的直接引用 (参考上一篇文章Season的例子) [code] //StaticImportTest.java import static java.lang.Math.*; ...

2012-05-14 · 1 min · 174 words · -

Tomcat Port 8009 与AJP13协议

Tomcat Port 8009 与AJP13协议 由于tomcat的html和图片解析功能相对其他服务器如apche等较弱,所以,一般都是集成起来使用,只有jsp和servlet服务交由tomcat处理,而tomcat和其他服务器的集成,就是通过ajp协议来完成的。 AJP13(Apache JServ Protocol version 1.3)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过TCP连接和SERVLET容器连接。为了减少进程生成 socket的花费,WEB服务器和SERVLET容器之间尝试保持持久性的TCP连接,对多个请求/回复循环重用一个连接。一旦连接分配给一个特定的请 求,在请求处理循环结束之前不会在分配。换句话说,在连接上,请求不是多元的。这个是连接两端的编码变得容易,虽然这导致在一时刻会有很多连接。 一旦WEB服务器打开了一个到SERVLET容器的连接,连接处于下面的状态: ◆ 空闲 这个连接上没有处理的请求。 ◆ 已分派 连接正在处理特定的请求。 一旦一个连接被分配给一个特定的请求,在连接上发送的基本请求信息是高度压缩的。在这点,SERVLET容器大概准备开始处理请求,当它处理的时候,它能发回下面的信息给WEB服务器: ◆ SEND_HEADERS 发送一组头到浏览器。 ◆ SEND_BODY_CHUNK 发送一块主体数据到浏览器。 ◆ GET_BODY_CHUNK 从请求获得下一个数据如果还没有全部传输完,如果请求内容的包长度非常大或者长度不确定,这是非常必要的。例如上载文件。注意这和HTTP的块传输没有关联。 ◆ END_RESPONSE 结束请求处理循环。 Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。默认情况下,Tomcat在server.xml中配置了两种连接器: <!- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -> <!- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -> 第一个连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。 第二个连接器监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。 Web客户1直接访问Tomcat服务器上的JSP组件,他访问的URL为http://localhost:8080 /index.jsp。Web客户2通过HTTP服务器访问Tomcat服务器上的JSP组件。假定HTTP服务器使用的HTTP端口为默认的80端口, 那么Web客户2访问的URL为http://localhost:80/index.jsp 或者 http://localhost/index.jsp。 摘自: http://hikin.iteye.com/blog/555682 2.http://bbs.163jsp.com/posts/list/472.html http://tomcat.apache.org/connectors-doc-archive/jk2/common/AJPv13.html

2012-05-13 · 1 min · 66 words · -