blogjava-凯发k8网页登录http://www.blogjava.net/alpha/category/1968.html多少春秋风雨改 多少崎岖不变爱zh-cnwed, 27 dec 2017 15:40:08 gmtwed, 27 dec 2017 15:40:08 gmt60ubuntu 14.04 安装 php nginx mysql jdk 8 svnhttp://www.blogjava.net/alpha/archive/2015/10/07/427653.htmlalphaalphawed, 07 oct 2015 07:28:00 gmthttp://www.blogjava.net/alpha/archive/2015/10/07/427653.htmlhttp://www.blogjava.net/alpha/comments/427653.htmlhttp://www.blogjava.net/alpha/archive/2015/10/07/427653.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/427653.htmlhttp://www.blogjava.net/alpha/services/trackbacks/427653.html安装 mysql 5 数据库

安装 mysql 运行命令:

sudo apt-get install mysql-server mysql-client

将mysql的datadir从默认的/var/lib/mysql 移到/app/data/mysql下,操作如下:
1.修改了/etc/mysql/my.cnf,改为:datadir = /app/data/mysql
2.cp -a /var/lib/mysql /app/data/
3./etc/init.d/mysql start


如果出现系统报错,无法启动mysql,日志显示为:can't find file: "./mysql/plugin.frm'(errno:13)
[error] can't open the mysql.plugin table. please run mysql_upgrade to create it.

修改系统的chroot,需要修改/etc/apparmor.d下的相关文件,这里以mysql为例,需要修改:usr.sbin.mysqld和abstractions/mysql两个文件。

1.修改usr.sbin.mysqld里面的两行内容:/var/lib/mysql/ r,改为:/app/data/mysql/ r,/var/lib/mysql/** rwk,改为:/app/data/mysql/** rwk,
2.修改abstractions/mysql中一行:/var/lib/mysql/mysql.sock rw,改为:/app/data/mysql/mysql.sock rw,
3.重新加载apparmor服务:/etc/init.d/apparmor reload

安装 nginx

在安装 nginx 之前,如果你已经安装 apache2 先删除在安装 nginx:

service apache2 stop
update-rc.d -f apache2 remove
sudo apt-get remove apache2

sudo apt-get install nginx

安装 php5

我们必须通过  才能让php5正常工作,安装命令:

sudo apt-get install php5-fpm

php-fpm是一个守护进程。

安装mysql和gd扩展

sudo apt-get install php5-gd libapache2-mod-auth-mysql php5-mysql openssl libssl-dev

sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

安装 jdk8

可以通过访问oracle凯发k8网页登录官网下载,或者直接通过命令行下载。

lxh@ubuntu:~$ wget -c http://download.oracle.com/otn-pub/java/jdk/8u11-b12/jdk-8u25-linux-x64.tar.gz

blogjava-凯发k8网页登录

lxh@ubuntu:~$ mkdir -p /usr/lib/jvm 
lxh@ubuntu:~$ sudo mv jdk-8u25-linux-x64.tar.gz /usr/lib/jvm
lxh@ubuntu:~$ cd /usr/lib/jvm
lxh@ubuntu:~$ sudo tar xzvf jdk-8u25-linux-x64.tar.gz

在系统中添加环境变量,主要是path、classpath和java_home。

lxh@ubuntu:~$ sudo vim ~/.profile

在文件最后加入

export java_home=/usr/lib/jvm/jdk1.8.0_25/
export jre_home=/usr/lib/jvm/jdk1.8.0_25/jre
export classpath=.:$java_home/lib/dt.jar:$java_home/lib/tools.jar:$java_home/lib:$jre_home/lib:$classpath
export path=$java_home/bin:$path

保存退出,并通过命令使脚本生效:

lxh@ubuntu:~$ $source ~/.profile

在有的系统中会预装openjdk,系统默认使用的是这个,而不是刚才装的。所以这一步是通知系统使用oracle的jdk,非openjdk。

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_25/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_25/bin/javac 300
sudo update-alternatives --config java

因为我是在虚拟机中安装的ubuntu 14.04,默认不安装openjdk,所以没有需要选择的jdk版本。如果是在物理机上安装的ubuntu版本,会出现几个候选项,可用于替换 java (提供 /usr/bin/java)。

====================================



2)添加权限
    $ sudo chmod x nginx
3)服务方式启动 如果配置服务前已启动,执行以下命令停止nginx。
    $ sudo service nginx stop
4)启动nginx
    $ sudo service nginx start

pastingnginx出现connect() to unix:/var/run/php5-fpm.sock failed (13: permission denied)的错误

处理方式是:编辑/etc/php5/fpm/pool.d/www.conf文件,

将以下的注释去掉:
    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660

然后重启php5-fpm
    $ sudo service php5-fpm restart


ubuntu 14.04快速搭建svn服务器及日常使用

svn相关命令了解
svn:命令行客户端
    svnadmin:用来创建、调整或修复版本库的工具
    svnserve:svn服务程序
    svndumpfilter:过滤svn版本库转储数据流的工具
    svnsync:svn数据同步工具,实现另外存一份相同的
    svnlook:用来查看办本科中不同的修订版和事务

直接安装
    # apt-get install subversion
创建版本库
    # sudo mkdir /app/svn
    # sudo svnadmin create /app/svn/prj

配置版本库
  # sudo vi svnserve.conf  #将以下参数去掉注释 
  [general] 
  anon-access = none    #匿名访问权限,默认read,none为不允许访问 
  auth-access = write  #认证用户权限  
  password-db = passwd  #用户信息存放文件,默认在版本库/conf下面,也可以绝对路径指定文件位置 
  authz-db = authz

  # sudo vi passwd    #格式是用户名=密码,采用明文密码 
  [users] 
  xiaoming = 123 
  zhangsan = 123 
   lisi = 123

# sudo vi authz  
  [groups]          #定义组的用户 
  manager = xiaoming 
  core_dev = zhangsan,lisi 
  [repos:/]          #以根目录起始的repos版本库manager组为读写权限 
  @manager = rw 
  [repos:/media]    #core_dev对repos版本库下media目录为读写权限 
  @core_dev = rw

     
 启动svn服务

  # sudo svnserve -d -r /app/svn
  # 查看是否启动成功,可看的监听3690端口
  # sudo netstat -antp |grep svnserve
  tcp    0      0 0.0.0.0:3690    0.0.0.0:*      listen    28967/svnserve 
  # 如果想关闭服务,可使用pkill svnserve

访问svn
  # 访问repos版本库地址
  svn://192.168.1.100/prj


备份与恢复
   svnadmin dump备份
  # 完整备份
  svnadmin dump /app/svn/prj > yymmdd_fully_backup.svn
  # 完整压缩备份
  svnadmin dump /app/svn/prj | gzip > yymmdd_fully_backup.gz
  # 备份恢复
  svnadmin load /app/svn/prj < yymmdd_fully_backup.svn
  zcat yymmdd_fully_backup.gz | svnadmin load repos
  ### 增量备份 ###
  # 先完整备份
  svnadmin dump /app/svn/prj -r 0:100 > yymmdd_incremental_backup.svn
  # 再增量备份
  svnadmin dump /app/svn/prj -r 101:200 --incremental > yymmdd_incremental_backup.svn
  
svnadmin hotcopy备份

  # 备份
  svnadmin hotcopy /app/svn/prj yymmdd_fully_backup --clean-logs
  # 恢复
  svnadmin hotcopy yymmdd_fully_backup /app/svn/prj


tomcat 内存优化

linux下修改jvm内存大小

要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的.

# os specific support. $var _must_ be set to either true or false.
java_opts="-server -xms512m -xmx512m -xss256k -djava.awt.headless=true -dfile.encoding=utf-8 -xx:permsize=64m -xx:maxpermsize=128m"
cygwin=false

 




alpha 2015-10-07 15:28
]]>
jsp页面中,jstl el表达式字符串比较常用方法http://www.blogjava.net/alpha/archive/2014/08/05/416592.htmlalphaalphatue, 05 aug 2014 07:24:00 gmthttp://www.blogjava.net/alpha/archive/2014/08/05/416592.htmlhttp://www.blogjava.net/alpha/comments/416592.htmlhttp://www.blogjava.net/alpha/archive/2014/08/05/416592.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/416592.htmlhttp://www.blogjava.net/alpha/services/trackbacks/416592.html阿里云服务器优惠券

fn:contains 判断字符串是否包含另外一个字符串
fn:containsignorecase 判断字符串是否包含另外一个字符串(大小写无关)
fn:endswith 判断字符串是否以另外字符串结束
fn:escapexml 把一些字符转成xml表示,例如 <字符应该转为< ${fn:escapexml(param:info)}
fn:indexof 子字符串在母字符串中出现的位置 ${fn:indexof(name, "-")}
fn:join 将数组中的数据联合成一个新字符串,并使用指定字符格开 ${fn:join(array, ";")}
fn:length 获取字符串的长度,或者数组的大小 ${fn:length(shoppingcart.products)}
fn:replace 替换字符串中指定的字符 ${fn:replace(text, "-", "?")}
fn:split 把字符串按照指定字符切分 ${fn:split(customernames, ";")}
fn:startswith 判断字符串是否以某个子串开始
fn:substring 获取子串 ${fn:substring(zip, 6, -1)}
fn:substringafter 获取从某个字符所在位置开始的子串  ${fn:substringafter(zip, "-")}
fn:substringbefore 获取从开始到某个字符所在位置的子串 ${fn:substringbefore(zip, "-")}
fn:tolowercase 转为小写 ${fn.tolowercase(product.name)}
fn:touppercase 转为大写字符 ${fn.uppercase(product.name)}
fn:trim 去除字符串前后的空格 ${fn.trim(name)}

函数 
描述
fn:contains(string, substring)
如果参数string中包含参数substring,返回true

fn:containsignorecase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true

fn:endswith(string, suffix)
如果参数 string 以参数suffix结尾,返回true

fn:escapexml(string)
将有特殊意义的xml (和html)转换为对应的xml character entity code,并返回

fn:indexof(string, substring)
返回参数substring在参数string中第一次出现的位置

fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。

fn:length(item)
返回参数item中包含元素的数量。参数item类型是数组、collection或者string。如果是string类型,返回值是string中的字符数。

fn:replace(string, before, after)
返回一个string对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果 

fn:split(string, separator)
返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素

fn:startswith(string, prefix)
如果参数string以参数prefix开头,返回true

fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符

fn:substringafter(string, substring)
返回参数substring在参数string中后面的那一部分字符串?? 

fn:substringbefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串

fn:tolowercase(string)
将参数string所有的字符变为小写,并将其返回

fn:touppercase(string)
将参数string所有的字符变为大写,并将其返回

fn:trim(string)


在jsp中 使用el表达式时,不可以使用java提供的功能,比如indexof()等。
 

报错 
the function valueof must be used with a prefix when a default namespace is not specified



alpha 2014-08-05 15:24 发表评论
]]>
lighttpd配置之代理、负载均衡(mod_proxy)http://www.blogjava.net/alpha/archive/2011/06/22/352846.htmlalphaalphawed, 22 jun 2011 15:20:00 gmthttp://www.blogjava.net/alpha/archive/2011/06/22/352846.htmlhttp://www.blogjava.net/alpha/comments/352846.htmlhttp://www.blogjava.net/alpha/archive/2011/06/22/352846.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/352846.htmlhttp://www.blogjava.net/alpha/services/trackbacks/352846.html使用proxy可以使lighttpd成为一个代理服务器。例如将java的请求全都转向给jboss来处理
mod_proxy有三个标签:
proxy.debug,0或者1. 表示是否启动调试模式。 1表示启动
proxy.balance,使用负载均衡的模式。可以使“hash”,“round-robin”,”fair”三种模式之一。
’round-robin’ 交替轮训, ‘hash’ 根据请求的url产生一个 hash值,来确保同样的请求的url都访问同样的主机
‘fair’ is the normal load-based, passive balancing.

语法结构

 ( =>
      ( [ => ]
        ( "host" => ,
          "port" => ),
        ( "host" => ,
          "port" => )
      ),
      => …
    )
 

* : 表示请求url的文件扩展名或者文件前缀 (如果以”/”开始); 可以是空 (“”) 表示所有的请求
* : 可选名称
* “host”: 被代理的服务器的ip
* “port”: 被代理服务器的端口,默认是80

如:

proxy.server = ( ".jsp" =>
                       ( (
                           "host" => "10.0.0.242",
                           "port" => 8080
                         ) )
                     )
 

再如:

$http["host"] == "www.domain.me" {
        proxy.server  = ( "" =>
        ( (
                "host" => "127.0.0.1",
                "port"=>"8080"  
        ) )
        )
}
 

负载均衡的例子,例如有8个squid缓存,需要用lighttpd做负载均衡

  $http["host"] == "www.example.org" {
    proxy.balance = "hash"
    proxy.server  = ( "" => ( ( "host" => "10.0.0.10" ),
                              ( "host" => "10.0.0.11" ),
                              ( "host" => "10.0.0.12" ),
                              ( "host" => "10.0.0.13" ),
                              ( "host" => "10.0.0.14" ),
                              ( "host" => "10.0.0.15" ),
                              ( "host" => "10.0.0.16" ),
                              ( "host" => "10.0.0.17" ) ) )
  }
 

当一个服务器宕机后,它上面的请求将被转移给其他设备server



alpha 2011-06-22 23:20
]]>
linux nginx tomcat负载均衡,实现session同步http://www.blogjava.net/alpha/archive/2011/06/21/352745.htmlalphaalphatue, 21 jun 2011 07:38:00 gmthttp://www.blogjava.net/alpha/archive/2011/06/21/352745.htmlhttp://www.blogjava.net/alpha/comments/352745.htmlhttp://www.blogjava.net/alpha/archive/2011/06/21/352745.html#feedback5http://www.blogjava.net/alpha/comments/commentrss/352745.htmlhttp://www.blogjava.net/alpha/services/trackbacks/352745.html阅读全文

alpha 2011-06-21 15:38 发表评论
]]>
classpathhttp://www.blogjava.net/alpha/archive/2011/05/09/349848.htmlalphaalphamon, 09 may 2011 08:29:00 gmthttp://www.blogjava.net/alpha/archive/2011/05/09/349848.htmlhttp://www.blogjava.net/alpha/comments/349848.htmlhttp://www.blogjava.net/alpha/archive/2011/05/09/349848.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/349848.htmlhttp://www.blogjava.net/alpha/services/trackbacks/349848.html catalina_home d:\tomcat
classpath .;d:\java\jdk1.6.0_24\lib;d:\java\jdk1.6.0_24\lib\dt.jar;d:\java\jdk1.6.0_24\lib\tools.jar;d:\tomcat\lib\servlet-api.jar
java_home d:\java\jdk1.6.0_24
path ;d:\java\jdk1.6.0_24\bin
tomcat_home d:\tomcat


alpha 2011-05-09 16:29
]]>
如何选择开源许可证?http://www.blogjava.net/alpha/archive/2011/05/03/349407.htmlalphaalphatue, 03 may 2011 01:05:00 gmthttp://www.blogjava.net/alpha/archive/2011/05/03/349407.htmlhttp://www.blogjava.net/alpha/comments/349407.htmlhttp://www.blogjava.net/alpha/archive/2011/05/03/349407.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/349407.htmlhttp://www.blogjava.net/alpha/services/trackbacks/349407.html

如何为代码选择开源许可证,这是一个问题。

世界上的开源许可证,大概有。很少有人搞得清楚它们的区别。即使在最流行的六种----、、、、和----之中做选择,也很复杂。

乌克兰程序员,画了一张分析图,说明应该怎么选择。这是我见过的最简单的讲解,只用两分钟,你就能搞清楚这六种许可证之间的最大区别。

下面是我制作的中文版,请点击看大图。




alpha 2011-05-03 09:05
]]>
utf-8项目生成javadoc 编码gbk 的不可映射字符http://www.blogjava.net/alpha/archive/2011/04/26/349024.htmlalphaalphatue, 26 apr 2011 03:15:00 gmthttp://www.blogjava.net/alpha/archive/2011/04/26/349024.htmlhttp://www.blogjava.net/alpha/comments/349024.htmlhttp://www.blogjava.net/alpha/archive/2011/04/26/349024.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/349024.htmlhttp://www.blogjava.net/alpha/services/trackbacks/349024.html

完善api-doc,用eclipse生成javadoc的时候发生“编码 gbk 的不可映射字符 ”其实是字符编码问题。
打开eclipse,project -> generate javadoc 一项一项的选你要输出javadoc的项目,最后一步中vm设置行中加入以下代码
-encoding utf-8 -charset utf-8 
-encoding utf-8 -charset utf-8 -j-xmx256m
这次操作,输出的html代码不会发生“编码 gbk 的不可映射字符 ”问题,而且html字符编码都设为了utf-8,问题彻底解决

alpha 2011-04-26 11:15
]]>
beanutils & propertyutils & methodutils类使用方法http://www.blogjava.net/alpha/archive/2010/05/10/320475.htmlalphaalphamon, 10 may 2010 06:07:00 gmthttp://www.blogjava.net/alpha/archive/2010/05/10/320475.htmlhttp://www.blogjava.net/alpha/comments/320475.htmlhttp://www.blogjava.net/alpha/archive/2010/05/10/320475.html#feedback1http://www.blogjava.net/alpha/comments/commentrss/320475.htmlhttp://www.blogjava.net/alpha/services/trackbacks/320475.html一、简介:

beanutils提供对 java反射和自省api的包装。其主要目的是利用反射机制对javabean的属性进行处理。我们知道,一个javabean通常包含了大量的属性,很多情况下,对javabean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

二、用法:

beanutils是这个包里比较常用的一个工具类,这里只介绍它的copyproperties()方法。该方法定义如下:
java代码
  1. public static void copyproperties(java.lang.object dest,java.lang.object orig)   
  2. throws java.lang.illegalaccessexception,   
  3.        java.lang.reflect.invocationtargetexception  


如果你有两个具有很多相同属性的javabean,一个很常见的情况就是struts里的po对象(持久对象)和对应的actionform,例如 teacher和teacherform。我们一般会在action里从actionform构造一个po对象,传统的方式是使用类似下面的语句对属性逐个赋值:

java代码
  1. //得到teacherform   
  2. teacherform teacherform=(teacherform)form;   
  3. //构造teacher对象   
  4. teacher teacher=new teacher();   
  5. //赋值   
  6. teacher.setname(teacherform.getname());   
  7. teacher.setage(teacherform.getage());   
  8. teacher.setgender(teacherform.getgender());   
  9. teacher.setmajor(teacherform.getmajor());   
  10. teacher.setdepartment(teacherform.getdepartment());   
  11.   
  12. //持久化teacher对象到数据库   
  13. hibernatedao=;   
  14. hibernatedao.save(teacher);   
  15.   
  16.   
  17. 而使用beanutils后,代码就大大改观了,如下所示:   
  18. //得到teacherform   
  19. teacherform teacherform=(teacherform)form;   
  20. //构造teacher对象   
  21. teacher teacher=new teacher();   
  22. //赋值   
  23. beanutils.copyproperties(teacher,teacherform);   
  24. //持久化teacher对象到数据库   
  25. hibernatedao=;   
  26. hibernatedao.save(teacher);  


如果teacher和teacherform间存在名称不相同的属性,则beanutils不对这些属性进行处理,需要程序员手动处理。例如 teacher包含modifydate(该属性记录最后修改日期,不需要用户在界面中输入)属性而teacherform无此属性,那么在上面代码的 copyproperties()后还要加上一句:

java代码
  1. teacher.setmodifydate(new date());  


怎么样,很方便吧!除beanutils外还有一个名为propertyutils的工具类,它也提供copyproperties()方法,作用与 beanutils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个javabean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些。beanutils支持的转换类型如下:


    * java.lang.bigdecimal
    * java.lang.biginteger
    * boolean and java.lang.boolean
    * byte and java.lang.byte
    * char and java.lang.character
    * java.lang.class
    * double and java.lang.double
    * float and java.lang.float
    * int and java.lang.integer
    * long and java.lang.long
    * short and java.lang.short
    * java.lang.string
    * java.sql.date
    * java.sql.time
    * java.sql.timestamp


这里要注意一点,java.util.date是不被支持的,而它的子类java.sql.date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.date类型。否则在转换时会提示argument mistype异常。

三、优缺点:

apache jakarta commons项目非常有用。我曾在许多不同的项目上或直接或间接地使用各种流行的commons组件。其中的一个强大的组件就是beanutils。我将说明如何使用beanutils将local实体bean转换为对应的value 对象:

java代码
  1. beanutils.copyproperties(avalue, alocal);  


上面的代码从alocal对象复制属性到avalue对象。它相当简单!它不管local(或对应的value)对象有多少个属性,只管进行复制。我们假设local对象有100个属性。上面的代码使我们可以无需键入至少100行的冗长、容易出错和反复的get和set方法调用。这太棒了!太强大了!太有用了!

beanutils.copyproperties 与 propertyutils.copyproperties 都是拷贝对象属性的方法,beanutils 支持类型转换,而 propertyutils 不支持。但是 beanutils 不允许对象的属性值为 null,propertyutils 可以拷贝属性值 null 的对象。
如果对象属性值为 null,beanutils.copyproperties 方法会报 commons.beanutils.conversionexception: no value specified 错误。

现在,还有一个坏消息:使用beanutils的成本惊人地昂贵!我做了一个简单的测试,beanutils所花费的时间要超过取数据、将其复制到对应的 value对象(通过手动调用get和set方法),以及通过串行化将其返回到远程的客户机的时间总和。所以要小心使用这种威力!


methodutils类使用方法:

java代码
  1. package rong.propertyutils;   
  2.   
  3. import java.util.map;   
  4. import org.apache.commons.beanutils.methodutils;   
  5. import org.apache.commons.beanutils.propertyutils;   
  6.   
  7. public class testpropertyutils {   
  8.        
  9.     public static void main(string[] args) throws exception{   
  10.            
  11.         entity entity = new entity();   
  12.            
  13.         //通过propertyutils的getproperty方法获取指定属性的值   
  14.         integer id = (integer)propertyutils.getproperty(entity, "id");   
  15.         string name = (string)propertyutils.getproperty(entity, "name");   
  16.         system.out.println("id = "   id   "  name = "   name);   
  17.            
  18.         //调用propertyutils的setproperty方法设置entity的指定属性   
  19.         propertyutils.setproperty(entity, "name""心梦帆影");   
  20.         system.out.println("name = "   entity.getname());   
  21.            
  22.         //通过propertyutils的describe方法把entity的所有属性与属性值封装进map中   
  23.         map map = propertyutils.describe(entity);   
  24.         system.out.println("id = "   map.get("id")   "  name = "   map.get("name"));   
  25.            
  26.         //通过methodutils的invokemethod方法,执行指定的entity中的方法(无参的情况)   
  27.         system.out.println( methodutils.invokemethod(entity, "haha"null) );   
  28.            
  29.         //通过methodutils的invokemethod方法,执行指定的entity中的方法(1参的情况)   
  30.         methodutils.invokemethod(entity, "sayhelle""心梦帆影");   
  31.            
  32.         //通过methodutils的invokemethod方法,执行指定的entity中的方法(多参的情况)   
  33.         object[] params = new object[]{new integer(10),new integer(12)};   
  34.         string msg = (string)methodutils.invokemethod(entity, "countages", params);   
  35.         system.out.println(msg);   
  36.            
  37.     }   
  38.   
  39. }  


alpha 2010-05-10 14:07
]]>
apache tomcat 日志分析http://www.blogjava.net/alpha/archive/2010/03/31/317082.htmlalphaalphawed, 31 mar 2010 08:55:00 gmthttp://www.blogjava.net/alpha/archive/2010/03/31/317082.htmlhttp://www.blogjava.net/alpha/comments/317082.htmlhttp://www.blogjava.net/alpha/archive/2010/03/31/317082.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/317082.htmlhttp://www.blogjava.net/alpha/services/trackbacks/317082.html最近在寻找这方面的资料:

 

1,查看apache进程:
ps aux | grep httpd | grep -v grep | wc -l

2,查看80端口的tcp连接:
netstat -tan | grep "established" | grep ":80" | wc -l

3,通过日志查看当天ip连接数,过滤重复:

cat access_log | grep "24/jul/2007" | awk '{print $2}' | sort | uniq -c | sort -nr

4,当天ip连接数最高的ip都在干些什么(原来是蜘蛛):
cat access_log | grep "24/jul/2007:00" | grep "61.135.166.230" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

5,当天访问页面排前10的url:

cat access_log | grep "24/jul/2007:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

6,用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -f"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr
接着从日志里查看该ip在干嘛:
cat access_log | grep 220.181.38.183| awk '{print $1"\t"$8}' | sort | uniq -c | sort -nr | less


7,查看某一时间段的ip连接数:
grep "2006:0[7-8]" www20060723.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l



alpha 2010-03-31 16:55
]]>
如何删除jsp编译后的空行http://www.blogjava.net/alpha/archive/2010/03/25/316505.htmlalphaalphathu, 25 mar 2010 02:12:00 gmthttp://www.blogjava.net/alpha/archive/2010/03/25/316505.htmlhttp://www.blogjava.net/alpha/comments/316505.htmlhttp://www.blogjava.net/alpha/archive/2010/03/25/316505.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/316505.htmlhttp://www.blogjava.net/alpha/services/trackbacks/316505.html
    当你在客户端用view source看jsp生成的代码时,会发现有很多空行,他们是由< %...% >后的回车换行而生成的,也就是说每一行由< %...% >包含的jsp代码到客户端都变成一个空行,虽然不影响浏览,但还是希望能把他们删掉。这里将为大家介绍如何删除jsp编译后的空行。

    删除jsp编译后的空行办法如下:

    1. 支持jsp 2.1 ,在每个要去空行的页面里包含下面代码:

            
    1. <%@ page trimdirectivewhitespaces="true" %> 

    在 tomcat 6.0.14下测试jsp编译成功

    2. 支持servlet 2.5 , 即 web.xml的 xsd版本为2.5,在web.xml中加入如下代码

            
    1. <jsp-config> 
    2. <jsp-property-group> 
    3. <url-pattern>*.jspurl-pattern> 
    4. <trim-directive-whitespaces>truetrim-directive-whitespaces> 
    5. jsp-property-group> 
    6. jsp-config> 

    在tomcat 6.0.14下测试jsp编译成功

    3. tomcat 5.5.x ,在tomcat安装目录/conf/web.xml中找到名叫"jsp"的servlet,添加下面一段代码:

            
    1. <init-param> 
    2. <param-name>trimspacesparam-name> 
    3. <param-value>trueparam-value> 
    4. init-param> 

    本人测过

    trimspaces          should white spaces in template text between  actions or directives be trimmed?  [false]

    在实际操作中我加入了5.5的配置到页面中并反复启动了几次tomcat但是还是没有成功,后来才想到jsp已经编译成servlet了所以没有能改变,进入到tomcat中的work目录把已经进行jsp编译的class全部删除,哇哈哈,整个世界清净了,成功删除空行

     

     



alpha 2010-03-25 10:12
]]>
java.lang.outofmemoryerror: permgen space及其解决方法http://www.blogjava.net/alpha/archive/2009/06/19/283242.htmlalphaalphafri, 19 jun 2009 08:04:00 gmthttp://www.blogjava.net/alpha/archive/2009/06/19/283242.htmlhttp://www.blogjava.net/alpha/comments/283242.htmlhttp://www.blogjava.net/alpha/archive/2009/06/19/283242.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/283242.htmlhttp://www.blogjava.net/alpha/services/trackbacks/283242.html1

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
2
在tomcat中redeploy时出现outofmemory的错误.
可以有以下几个方面的原因:
1,使用了proxool,因为proxool内部包含了一个老版本的cglib.
2, log4j,最好不用,只用common-logging
3, 老版本的cglib,快点更新到最新版
4,更新到最新的hibernate3.2

3

这里以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
heap size 设置
jvm堆的设置是指java程序运行过程中jvm可以调配使用的内存空间的设置.jvm在启动的时候会自动设置heap size的值,
其初始空间(即-xms)是物理内存的1/64,最大空间(-xmx)是物理内存的1/4可以利用jvm提供的-xmn -xms -xmx等选项可
进行设置heap size 的大小是young generation 和tenured generaion 之和
提示:在jvm中如果98%的时间是用于gc且可用的heap size 不足2%的时候将抛出此异常信息
提示:heap size 最大不要超过可用物理内存的80%,一般的要将-xms和-xmx选项设置为相同,而-xmn为1/4的-xmx值
解决方法:手动设置heap size
修改tomcat_home/bin/catalina.sh
在echo "using catalina_base: $catalina_base"上面加入以下行:
java_opts="-server -xms800m -xmx800m -xx:maxnewsize=256m"
三实例,以下给出1g内存环境下java jvm 的参数设置参考:
java_opts="-server -xms800m -xmx800m -xx:permsize=64m -xx:maxnewsize=256m -xx:maxpermsize=128m -djava.awt.headless=true "

三相关资料
题外话:经常看到网友抱怨tomcat的性能不如...,不稳定等,其实根据笔者几年的经验,从"互联星空到现在的房产门户网,我们
均使用tomcat作为web服务器,每天访问量百万多,tomcat仍然运行良好建议大家有问题多从自己程序入手,多看看java的doc文档
并详细了解jvm的知识这样开发的程序才会健壮


alpha 2009-06-19 16:04
]]>
jconsole的使用http://www.blogjava.net/alpha/archive/2008/11/20/241650.htmlalphaalphathu, 20 nov 2008 07:00:00 gmthttp://www.blogjava.net/alpha/archive/2008/11/20/241650.htmlhttp://www.blogjava.net/alpha/comments/241650.htmlhttp://www.blogjava.net/alpha/archive/2008/11/20/241650.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/241650.htmlhttp://www.blogjava.net/alpha/services/trackbacks/241650.htmljdk中jconsole的使用
2008-04-03 14:16
java应用程序打成jar包的部署方式:

一、local方式
1、cmd进入dos下,进入到应用程序所在目录,执行语句如下:
java -dcom.sun.management.jmxremote -jar 程序名.jar
(java -dcom.sun.management.jmxremote -jar java2demo.jar)(测试例子java2demo.jar在c:\program files\java\jdk1.6.0_02\demo\jfc\java2d\)

还出不来的话 直接 在dos里 jconsole 进程号

2、启动jdk_home\bin目录下的jconsole.exe就可以看到有一个

本地的连接在里面。点击连接就可以进入相应的监视界面了。

二、jmx方式(远程连接):
1、cmd进入dos下,进入到应用程序所在目录,执行语句如下:
java -dcom.sun.management.jmxremote.port=8903 -

dcom.sun.management.jmxremote.ssl=false -

dcom.sun.management.jmxremote.authenticate=false
-djava.rmi.server.hostname=192.168.***.***

2、启动jdk_home\bin目录下的jconsole.exe点高级。在jmx

url:中输入语句如下:

service:jmx:rmi:///jndi/rmi://192.168.***.***:8903/jmxr

mi
点连接就可以进行远程监控了



web应用程序在tomcat中部署jmx(示例:tomcat-6.0.14)
1、启动tomcat\bin目录下的tomcat6w.exe,在java_opts里设

置如下:
-dcom.sun.management.jmxremote.port=8903
-dcom.sun.management.jmxremote.ssl=false
-dcom.sun.management.jmxremote.authenticate=false
-djava.rmi.server.hostname=192.168.***.***

注意:不能有空格,不然tomcat不能启动。

2、tomcat启动成功后,就可以在另一台机器上启动

jdk_home\bin目录下的jconsole.exe点高级。在jmx url:中输

入语句如下:

service:jmx:rmi:///jndi/rmi://192.168.***.***:8903/jmxr

mi
点连接就可以进行远程监控了

以上是jmx基本部署,没有涉及到验证方面,如果使用的话,可

能会有漏洞,因为ssl和authenticate设置为false的话,那么

8903端口就有可能有暴露的危险。

如果想进行密码验证话,可以在网上找资料,自己进行调试。


我自己的应用:
1.修改linux下tomcat的bin目录下的catalina.sh文件
添加
java_opts=-dcom.sun.management.jmxremote.authenticate=false -dcom.sun.management.jmxremote.ssl=false
-dcom.sun.management.jmxremote.port=7080 
-dcom.sun.management.jmxremote
2.修改/etc/hosts文件下的localhost对应的ip(127.0.0.1)地址,改为linux自身的ip如10.0.0.157.
3.打开jconsole远程输入 10.0.0.157:7080



eden space (heap): 内存最初从这个线程池分配给大部分对象。
survivor space (heap):用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。
tenured generation (heap):用于保持已经在 survivor space内存池中存在了一段时间的对象。
permanent generation (non-heap): 保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。java虚拟机共享这些类数据。这个区域被分割为只读的和只写的,
code cache (non-heap):hotspot java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)

================================================

使用 jconsole 监控 tomcat6

catalina.bat

找到

set debug_opts=
set jpda=

在下面添加

set java_opts=%java_opts% -dcom.sun.management.jmxremote.port=1090 -dcom.sun.management.jmxremote.ssl=false -dcom.sun.management.jmxremote.authenticate=false

保存

通过startup。bat启动 tomcat

启动jconsole (jdk1.6.0_02\lib):输入

localhost:1090

用户名 口令 为空

进入 即可 查看




alpha 2008-11-20 15:00
]]>
log4j简介http://www.blogjava.net/alpha/archive/2008/03/01/183131.htmlalphaalphasat, 01 mar 2008 06:02:00 gmthttp://www.blogjava.net/alpha/archive/2008/03/01/183131.htmlhttp://www.blogjava.net/alpha/comments/183131.htmlhttp://www.blogjava.net/alpha/archive/2008/03/01/183131.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/183131.htmlhttp://www.blogjava.net/alpha/services/trackbacks/183131.html阅读全文

alpha 2008-03-01 14:02
]]>
java 读取 excel不同文件格式的内容(代码)http://www.blogjava.net/alpha/archive/2007/11/21/162024.htmlalphaalphawed, 21 nov 2007 02:29:00 gmthttp://www.blogjava.net/alpha/archive/2007/11/21/162024.htmlhttp://www.blogjava.net/alpha/comments/162024.htmlhttp://www.blogjava.net/alpha/archive/2007/11/21/162024.html#feedback2http://www.blogjava.net/alpha/comments/commentrss/162024.htmlhttp://www.blogjava.net/alpha/services/trackbacks/162024.html阅读全文

alpha 2007-11-21 10:29
]]>
windows下架设subversion服务器http://www.blogjava.net/alpha/archive/2007/08/29/141108.htmlalphaalphawed, 29 aug 2007 14:13:00 gmthttp://www.blogjava.net/alpha/archive/2007/08/29/141108.htmlhttp://www.blogjava.net/alpha/comments/141108.htmlhttp://www.blogjava.net/alpha/archive/2007/08/29/141108.html#feedback4http://www.blogjava.net/alpha/comments/commentrss/141108.htmlhttp://www.blogjava.net/alpha/services/trackbacks/141108.html阅读全文

alpha 2007-08-29 22:13
]]>
java 图片合成 解决图片失真问题http://www.blogjava.net/alpha/archive/2007/08/20/138171.htmlalphaalphamon, 20 aug 2007 08:01:00 gmthttp://www.blogjava.net/alpha/archive/2007/08/20/138171.htmlhttp://www.blogjava.net/alpha/comments/138171.htmlhttp://www.blogjava.net/alpha/archive/2007/08/20/138171.html#feedback3http://www.blogjava.net/alpha/comments/commentrss/138171.htmlhttp://www.blogjava.net/alpha/services/trackbacks/138171.html阅读全文

alpha 2007-08-20 16:01
]]>
java线程控制的图像分割与合成http://www.blogjava.net/alpha/archive/2007/08/20/138065.htmlalphaalphamon, 20 aug 2007 02:51:00 gmthttp://www.blogjava.net/alpha/archive/2007/08/20/138065.htmlhttp://www.blogjava.net/alpha/comments/138065.htmlhttp://www.blogjava.net/alpha/archive/2007/08/20/138065.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/138065.htmlhttp://www.blogjava.net/alpha/services/trackbacks/138065.html阅读全文

alpha 2007-08-20 10:51
]]>
[zt]java 在图像处理中的应用http://www.blogjava.net/alpha/archive/2007/08/08/135138.htmlalphaalphawed, 08 aug 2007 00:53:00 gmthttp://www.blogjava.net/alpha/archive/2007/08/08/135138.htmlhttp://www.blogjava.net/alpha/comments/135138.htmlhttp://www.blogjava.net/alpha/archive/2007/08/08/135138.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/135138.htmlhttp://www.blogjava.net/alpha/services/trackbacks/135138.html阅读全文

alpha 2007-08-08 08:53
]]>
[zt]java生成缩略图代码 http://www.blogjava.net/alpha/archive/2007/08/08/135137.htmlalphaalphawed, 08 aug 2007 00:51:00 gmthttp://www.blogjava.net/alpha/archive/2007/08/08/135137.htmlhttp://www.blogjava.net/alpha/comments/135137.htmlhttp://www.blogjava.net/alpha/archive/2007/08/08/135137.html#feedback1http://www.blogjava.net/alpha/comments/commentrss/135137.htmlhttp://www.blogjava.net/alpha/services/trackbacks/135137.html阅读全文

alpha 2007-08-08 08:51
]]>
httpservletrequest requesthttp://www.blogjava.net/alpha/archive/2007/07/17/130885.htmlalphaalphatue, 17 jul 2007 08:51:00 gmthttp://www.blogjava.net/alpha/archive/2007/07/17/130885.htmlhttp://www.blogjava.net/alpha/comments/130885.htmlhttp://www.blogjava.net/alpha/archive/2007/07/17/130885.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/130885.htmlhttp://www.blogjava.net/alpha/services/trackbacks/130885.html阅读全文

alpha 2007-07-17 16:51
]]>
httpclient 学习整理http://www.blogjava.net/alpha/archive/2007/01/22/95216.htmlalphaalphamon, 22 jan 2007 01:39:00 gmthttp://www.blogjava.net/alpha/archive/2007/01/22/95216.htmlhttp://www.blogjava.net/alpha/comments/95216.htmlhttp://www.blogjava.net/alpha/archive/2007/01/22/95216.html#feedback44http://www.blogjava.net/alpha/comments/commentrss/95216.htmlhttp://www.blogjava.net/alpha/services/trackbacks/95216.html阅读全文

alpha 2007-01-22 09:39 发表评论
]]>
[转]利用java编写html文件分析程序http://www.blogjava.net/alpha/archive/2007/01/18/94700.htmlalphaalphathu, 18 jan 2007 08:58:00 gmthttp://www.blogjava.net/alpha/archive/2007/01/18/94700.htmlhttp://www.blogjava.net/alpha/comments/94700.htmlhttp://www.blogjava.net/alpha/archive/2007/01/18/94700.html#feedback3http://www.blogjava.net/alpha/comments/commentrss/94700.htmlhttp://www.blogjava.net/alpha/services/trackbacks/94700.html阅读全文

alpha 2007-01-18 16:58
]]>
jfreechart在jsp中的应用实例http://www.blogjava.net/alpha/archive/2007/01/13/93569.htmlalphaalphasat, 13 jan 2007 03:08:00 gmthttp://www.blogjava.net/alpha/archive/2007/01/13/93569.htmlhttp://www.blogjava.net/alpha/comments/93569.htmlhttp://www.blogjava.net/alpha/archive/2007/01/13/93569.html#feedback29http://www.blogjava.net/alpha/comments/commentrss/93569.htmlhttp://www.blogjava.net/alpha/services/trackbacks/93569.html阅读全文

alpha 2007-01-13 11:08 发表评论
]]>
提升jsp应用程序的七大绝招http://www.blogjava.net/alpha/archive/2006/12/21/89192.htmlalphaalphathu, 21 dec 2006 01:19:00 gmthttp://www.blogjava.net/alpha/archive/2006/12/21/89192.htmlhttp://www.blogjava.net/alpha/comments/89192.htmlhttp://www.blogjava.net/alpha/archive/2006/12/21/89192.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/89192.htmlhttp://www.blogjava.net/alpha/services/trackbacks/89192.html阅读全文

alpha 2006-12-21 09:19
]]>
多级反向代理[squid]下获取客户端真实ip地址http://www.blogjava.net/alpha/archive/2006/07/12/57764.htmlalphaalphawed, 12 jul 2006 03:12:00 gmthttp://www.blogjava.net/alpha/archive/2006/07/12/57764.htmlhttp://www.blogjava.net/alpha/comments/57764.htmlhttp://www.blogjava.net/alpha/archive/2006/07/12/57764.html#feedback11http://www.blogjava.net/alpha/comments/commentrss/57764.htmlhttp://www.blogjava.net/alpha/services/trackbacks/57764.html阿里云服务器优惠券
在很多应用下都可能有需要将用户的真实ip记录下来,这时就要获得用户的真实ip地址,在jsp里,获取客户端的ip地址的方法是:request.getremoteaddr(),这种方法在大部分情况下都是有效的。但是在通过了apache,squid等反向代理软件就不能获取到客户端的真实ip地址了。

这段时间在做ip统计的程序设计,由于服务器作了集群,使用了反向代理软件,将的url反向代理为的url时,用request.getremoteaddr()方法获取的ip地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实ip。这是什么原因呢?

这是反向代理的原因。经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的ip,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的http头信息中,增加了x-forwarded-for信息。用以跟踪原有的客户端ip地址和原来客户端请求的服务器地址。当我们访问时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getremoteaddr()的方法获取的ip实际上是代理服务器的地址,并不是客户端的ip地址。

于是可得出获得客户端真实ip地址的方法一:

1 public string getipaddr(httpservletrequest request) {
2      string ip = request.getheader("x-forwarded-for");
3      if(ip == null || ip.length() == 0{
4            ip = request.getremoteaddr();
5        }

6        return ip;
7    }

可是当我访问时,返回的ip地址始终是unknown,也并不是如上所示的127.0.0.1 或 192.168.1.110了,而我访问时,则能返回客户端的真实ip地址,写了个方法去验证。

 1<%@ page import="java.util.*" %>
 2<table border=1 cellspacing=0 cellpadding=0 align=center> 
 3<tr> 
 4<th>nameth> 
 5<th>valueth> 
 6tr> 
 7<% 
 8enumeration enumnames; 
 9string strname,strvalue; 
10
11enumnames = request.getheadernames(); 
12while(enumnames.hasmoreelements()){ 
13    strname = (string)enumnames.nextelement(); 
14    strvalue = request.getheader(strname); 
15    
%> 
16    <tr> 
17    <td><%=strname%>td> 
18    <td><%=strvalue%>td> 
19    tr> 
20    <% 
21
22
%>
23<tr>
24table>
25


出来的结果:x-forwarded-for: unknown 。x-forwarded-for确实存在,但其值却为unknown,继续找原因。上网搜了搜,原因出在了squid上。

squid.conf 的配制文件 forwarded_for 项默认是为on,如果 forwarded_for 设成了 off  则:

x-forwarded-for: unknown

一查,发现forwarded_for 项设为了off,原因找到了,把forwarded_for 项设为了on,重启后,访问 获得的ip是客户端的真实ip。

于是可得出获得客户端真实ip地址的方法二:

 1    public string getipaddr(httpservletrequest request) {
 2        string ip = request.getheader("x-forwarded-for");
 3        if(ip == null || ip.length() == 0 || "unknown".equalsignorecase(ip)) {
 4            ip = request.getheader("proxy-client-ip");
 5        }

 6        if(ip == null || ip.length() == 0 || "unknown".equalsignorecase(ip)) {
 7            ip = request.getheader("wl-proxy-client-ip");
 8        }

 9        if(ip == null || ip.length() == 0 || "unknown".equalsignorecase(ip)) {
10            ip = request.getremoteaddr();
11        }

12        return ip;
13    }

14



可是,如果通过了多级反向代理的话,x-forwarded-for的值并不止一个,而是一串ip值,究竟哪个才是真正的用户端的真实ip呢?

答案是取x-forwarded-for中第一个非unknown的有效ip字符串。

如:
x-forwarded-for:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用户真实ip为: 192.168.1.110


 



alpha 2006-07-12 11:12 发表评论
]]>
linux下java中文字体问题[与jfreechart有关]http://www.blogjava.net/alpha/archive/2006/05/20/47162.htmlalphaalphasat, 20 may 2006 05:10:00 gmthttp://www.blogjava.net/alpha/archive/2006/05/20/47162.htmlhttp://www.blogjava.net/alpha/comments/47162.htmlhttp://www.blogjava.net/alpha/archive/2006/05/20/47162.html#feedback1http://www.blogjava.net/alpha/comments/commentrss/47162.htmlhttp://www.blogjava.net/alpha/services/trackbacks/47162.html最近要用jfreechart,在图表中会用到中文,
在windows环境下,不会发生乱码问题.
但是部署到linux下,就发生中文乱码问题,中文全变成方框,摸索了一段时间才将之解决。

为了确定你的linux环境下程序会使用的字体文件,先跑跑这个程序:from others

1 public   class  printlocale  {
2      public   static   void  main(string[] args)  {
3         system.out.println(system.getproperty( " user.language " ));
4         system.out.println(system.getproperty( " user.region " ));
5         system.out.println(system.getproperty( " file.encoding " ));
6         system.out.println(system.getproperty( " os.version " ));
7     }

8 }

9

访问顺序可以看:
 
比如: linux as 3.0 ,linux 7.3 same
会大概有如下的访问顺序:
 
font.properties.zh_cn.redhat
font.properties.zh_cn
font.properties.zh
font.properties
 
 
1 . 将此文件拷贝到%java_home%/jre/lib下面去

serif.0=-b&h-luxi serif-medium-r-normal--*-%d-*-*-p-*-iso8859-1
    serif.
1=-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
serif.italic.
0=-b&h-luxi serif-medium-i-normal--*-%d-*-*-p-*-iso8859-1
    serif.italic.
1=-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
    .
  略
  
   .appendedfontpath
=/usr/share/fonts/zh_cn/truetype


请注意 字符串-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1,除了中间什么*-%--*--c*--之外
必须跟 /usr/share/fonts/zh_cn/truetype/fonts.dir 中的完全一致。
如果把 zysong --> zysong 也是不行的。
 
2. 设置中文环境
   我是在程序中如下设置的:

system.setproperty("user.language","zh");     
   system.setproperty(
"user.region","cn");


3. 编译代码文件,要用
         javac -encoding gbk   xxxxxx.java
   如果是用ant工具,
      
          
            
        

         encoding="gbk"
>
            
         
     
 
 
可以访问这里的资源:


alpha 2006-05-20 13:10
]]>
linux下配置jfreecharthttp://www.blogjava.net/alpha/archive/2006/05/09/45213.htmlalphaalphatue, 09 may 2006 06:58:00 gmthttp://www.blogjava.net/alpha/archive/2006/05/09/45213.htmlhttp://www.blogjava.net/alpha/comments/45213.htmlhttp://www.blogjava.net/alpha/archive/2006/05/09/45213.html#feedback0http://www.blogjava.net/alpha/comments/commentrss/45213.htmlhttp://www.blogjava.net/alpha/services/trackbacks/45213.htmljava.lang.noclassdeffounderror
org.jfree.chart.axis.axis.(axis.java:180)
at org.jfree.chart.axis.categoryaxis.(categoryaxis.java:137)
at org.jfree.chart.axis.categoryaxis3d.(categoryaxis3d.java:78)
at org.jfree.chart.chartfactory.createbarchart3d(chartfactory.java:507)

解决的办法是:
编辑/etc/profile文件,在最后加入export catalina_opts='-djava.awt.headless=true'
即可




alpha 2006-05-09 14:58
]]>
java中获取mac地址&了解mac地址http://www.blogjava.net/alpha/archive/2006/04/18/41584.htmlalphaalphatue, 18 apr 2006 01:52:00 gmthttp://www.blogjava.net/alpha/archive/2006/04/18/41584.htmlhttp://www.blogjava.net/alpha/comments/41584.htmlhttp://www.blogjava.net/alpha/archive/2006/04/18/41584.html#feedback3http://www.blogjava.net/alpha/comments/commentrss/41584.htmlhttp://www.blogjava.net/alpha/services/trackbacks/41584.html

 1import java.io.*;
 2
 3public class test {
 4    public static void main(string[] args) {
 5        try {
 6            process process = runtime.getruntime().exec("ipconfig /all");
 7            inputstreamreader ir = new inputstreamreader(process
 8                    .getinputstream());
 9            linenumberreader input = new linenumberreader(ir);
10            string line;
11            while ((line = input.readline()) != null)
12                if (line.indexof("physical address"> 0{
13                    string macaddr = line.substring(line.indexof("-"- 2);
14                    system.out.println("mac address = ["  macaddr  "]");
15                }

16        }
 catch (java.io.ioexception e) {
17            system.err.println("ioexception "  e.getmessage());
18        }

19    }

20}
 
21

------------------------------------

顺便转一篇关于mac的文章:

      近来在网上经常见有人问起mac地址的问题,那么究竟mac地址是什么?在现行的网络中,扮演什么角色呢?下面我们就一同来探讨一下关于mac地址的知识。
       什么是mac地址?

  mac地址就是在媒体接入层上使用的地址,通俗点说就是网卡的物理地址,现在的mac地址一般都采用6字节48bit(在早期还有2字节16bit的mac地址)

  前24位由是生产厂家向ieee申请的厂商地址(这可是要花钱的哦!据说1000美元才能买一个地址块)。后24位就由生产厂家自行定以了。(早期的2字节的却不用申请)

  ip地址和mac地址有什么联系和区别

  大家都知道,现在有很多计算机都是通过先组建局域网,然后通过交换机和internet连接的(大学里的校园网就是这样)。然后给每个用户分配固定的ip地址,由管理中心统一管理,这样为了管理方便就需要使用mac地址来标志用户,防止发生混乱,明确责任(比如网络犯罪)。另外ip地址和mac地址是有区别的,虽然他们在局域网中是一一对应的关系。ip地址是跟据现在的ipv4标准指定的,不受硬件限制比较容易记忆的地址,而mac地址却是用网卡的物理地址,多少与硬件有关系,比较难于记忆。

  如何知道自己的mac地址

  方法比较多,也比较得简单,在这里介绍两种常用的方法,在win9x 可用:winipcfg获得,在2000、xp可用ipconfig -all获得。如果你已经给自己的网卡分配了ip还可以用 nbtstat -a 自己的ip 如下图,后者只能在2000/xp下使用。

如何获得别人的mac

  其实上面已经涉及到了,如果是2000/xp用户可以用 nbtstat -a ip地址(还可以获得别的东东啊,可别学坏啊)。另外同一局域网内的,你可以用ping ip 或者ping 主机名,然后用arp -a 来获得。

  如何修改自己的mac地址

  mac地址是保存在网卡的eprom里面,通过网卡生产厂家提供的修改程序可以更改存储器里的地址,即使网卡没有这样的设置我们也可以通过间接的方法修改,一般网卡发出的包的源mac地址并不是网卡本身写上去的,而是应用程序提供的,只是在通常的实现中,应用程序先从网卡上得到mac地址,每次发送的时候都用这个mac做为源mac而已,windows中,网卡的mac保存在注册表中,实际使用也是从注册表中提取的,所以只要修改注册表就可以简单的改变mac

  win9x中修改:

  打开注册表编辑器,在hkey_local_machine\system\currentcontrolset\service\class\net\下的0000,0001,0002 win2000/xp中的修改:同样打开注册表编辑器,hkey_local_machine\system\currentcontrolset\control\class\4d36e970-e325-11ce-bfc1-08002be10318 中的0000,0001,0002中的driverdesc,如果在0000找到,就在0000下面添加字符串变量,命名为"networkaddress",值为要设置的mac地址,例如:000102030405
完成上述操作后重启就好了。

  linux下的修改:

  1.必须关闭网卡设备,否则会报告系统忙,无法更改。

  命令是:"ifconfig eth0 down"

  2.修改mac地址,这一步较windows中的修改要简单。

  命令是:"ifconfig eth0 hw ether 00aabbccddee"

  3.重新启用网卡

  "ifconfig eth0 up"网卡的mac地址更改就完成了。

  现在还有很多软件提供了修改mac地址的功能,如:mac2001

  那么既然ip和mac地址都可以改,那么怎么防御呢?通过简单的交换机端口绑定(端口的mac表使用静态表项),可以在每个交换机端口只连接一台主机的情况下防止修改mac地址的盗用,如果是三层设备还可以提供:交换机端口-ip-mac 三者的绑定,防止修改mac的ip盗用,这种方法更有效!还有些方法如配置交换机的vlan,使用用户认证等,都略显复杂,再次不多浪费笔墨。





alpha 2006-04-18 09:52
]]>
几种所见所得的在线编辑器的分析http://www.blogjava.net/alpha/archive/2006/02/23/32077.htmlalphaalphathu, 23 feb 2006 03:04:00 gmthttp://www.blogjava.net/alpha/archive/2006/02/23/32077.htmlhttp://www.blogjava.net/alpha/comments/32077.htmlhttp://www.blogjava.net/alpha/archive/2006/02/23/32077.html#feedback1http://www.blogjava.net/alpha/comments/commentrss/32077.htmlhttp://www.blogjava.net/alpha/services/trackbacks/32077.html对于那些大型的cms开发者,一个好的编辑器能省了使用者很多不必要的操作,
而且使web代码更为规范,清晰
以上内容均属于一家之言,如有纰漏,请指出,欢迎大家讨论..


  

alpha 2006-02-23 11:04
]]>
动态生成html表单http://www.blogjava.net/alpha/archive/2005/10/27/17082.htmlalphaalphathu, 27 oct 2005 09:49:00 gmthttp://www.blogjava.net/alpha/archive/2005/10/27/17082.htmlhttp://www.blogjava.net/alpha/comments/17082.htmlhttp://www.blogjava.net/alpha/archive/2005/10/27/17082.html#feedback7http://www.blogjava.net/alpha/comments/commentrss/17082.htmlhttp://www.blogjava.net/alpha/services/trackbacks/17082.html阅读全文

alpha 2005-10-27 17:49
]]>
网站地图