java技术研究

统计

留言簿(3)

阅读排行榜

评论排行榜

#

struts2中s:select标签的使用(转)

1.第一个例子:
<s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00" headerValue="00"></s:select>
2.第二个例子:
<s:select list="#{1:'aa',2:'bb',3:'cc'}"  label="abc" listKey="key" listValue="value"  headerKey="0" headerValue="aabb">
3.第三个例子:
<%
java.util.HashMap map = new java.util.LinkedHashMap();
map.put(1,"aaa");
map.put(2,"bbb");
map.put(3,"ccc");
request.setAttribute("map",map);
request.setAttribute("aa","2");
%>
<s:select list="#request.map"  label="abc" listKey="key" listValue="value"
 value="#request.aa"  headerKey="0" headerValue="aabb"></
s:select
>
headerKey headerValue 为设置缺省值
摘抄自 http://www.cnblogs.com/modou/articles/1326683.html

4.第四个例子

public class Program implements Serializable {
    /**    serialVersionUID */
    private static final long serialVersionUID = 1L;
    private int programid;
    private String programName;
    public int getProgramid() {
        return programid;
    }
    public void setProgramid(int programid) {
        this.programid = programid;
    }
        public String getProgramName() {
        return programName;
    }
    public void setProgramName(String programName) {
        this.programName = programName;
    }
}

在 xxx extends  extends ActionSupport {
    private  List<Program> programs ;
       public List<Program> getPrograms() {
        return programs;
    }
    public void setPrograms(List<Program> programs) {
            this.programs = programs;
    }
}
在jsp页面
      <s:select list="programs "  listValue="programName " listKey="programid "  name="program" id="program"
             headerKey="0l" headerValue="    "   value="bean.programid "
             ></s:select>  
红色部分为在action里面的list,黄色为<option value="xxx">value</option>对应bean里面的字段programName 
绿色为<option value="xxx",对应bean里面的字段programid

紫色为设定select被选中的值,s:select 会自动在 bean选中 key对应的值

转自http://blog.csdn.net/moliqin/article/details/3753570

posted @ 2012-08-08 09:55 小秦 阅读(1345) | 评论 (0)编辑 收藏

关于架构优化的一些相关知识

1.浏览器,只能同时解析一个域名下的6个文件或图片所以,要区分域名01,02分别解析图片或者cs,js,这样浏览器就可以同时加载很多文件,缩短加载速度,也就是说每6个文件或图片,就用一个域名
css,js可以放到云服务器上

posted @ 2012-08-06 11:52 小秦 阅读(264) | 评论 (0)编辑 收藏

搭建Nginx+Java环境(转)

《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》第1章轻量级HTTP服务器Nginx,本章主要介绍了对高性能HTTP服务器Nginx的安装、配置、管理和使用,以及Nginx在性能优化方面的一些经验和技巧,并通过实例分别演示了Nginx与PHP整合,Nginx和Java、Perl整合的过程。本节为大家介绍搭建Nginx+Java环境。

AD:

    1.8.4 搭建Nginx+Java环境

    Apache对Java的支持很灵活,它们的结合度也很高,例如Apache+Tomcat和Apache+resin等都可以实现对Java应用的支持。Apache一般采用一个内置模块来和Java应用服务器打交道。与Apache相比,Nginx在配合Java应用服务器方面,耦合度很低,它只能通过自身的反向代理功能来实现与Java应用服务器的支持。但这恰恰是Nginx的一个优点,耦合度的降低,可以使Nginx与Java服务器的相互影响降到最低。

    接下来通过Nginx+Tomcat的实例来讲解Nginx对Java的支持。Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tomcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。

    Nginx可以通过以下两种方式来实现与Tomcat的耦合:

    将静态页面请求交给Nginx,动态请求交给后端Tomcat处理。

    将所有请求都交给后端的Tomcat服务器处理,同时利用Nginx自身的负载均衡功能进行多台Tomcat服务器的负载均衡。

    下面通过两个配置实例分别讲述这两种实现Nginx与Tomcat耦合的方式。

    1.动态页面与静态页面分离的实例

    这里假定Tomcat服务器的IP地址为192.168.12.130,同时Tomcat服务器开放的服务器端口为8080。Nginx相关配置代码如下:

    1. server {  
    2.       listen 80;  
    3.       server_name www.ixdba.net;  
    4.       root /web/www/html;  
    5.  
    6. location /img/ {  
    7.       alias /web/www/html/img/;  
    8. }  
    9.  
    10. location ~ (\.jsp)|(\.do)$ {  
    11.      proxy_pass http://192.168.12.130:8080;  
    12.      proxy_redirect off;  
    13.      proxy_set_header Host $host;  
    14.      proxy_set_header X-Real-IP $remote_addr;  
    15.      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    16.      client_max_body_size 10m;  
    17.      client_body_buffer_size 128k;  
    18.      proxy_connect_timeout 90;  
    19.      proxy_send_timeout 90;  
    20.      proxy_read_timeout 90;  
    21.      proxy_buffer_size 4k;  
    22.      proxy_buffers 4 32k;  
    23.      proxy_busy_buffers_size 64k;  
    24.      proxy_temp_file_write_size 64k;  
    25. }  
    26.  

     

    在这个实例中,首先定义了一个虚拟主机www.ixdba.net,然后通过location指令将/web/www/html/img/目录下的静态文件交给Nginx来完成。最后一个location指令将所有以.jsp、.do结尾的文件都交给Tomcat服务器的8080端口来处理,即http://192.168.12.130:8080

    需要特别注意的是,在location指令中使用正则表达式后,proxy_pass后面的代理路径不能含有地址链接,也就是不能写成http://192.168.12.130:8080/,或者类似http://192.168.12.130:8080/jsp的形式。在location指令不使用正则表达式时,没有此限制。

    2.多个Tomcat负载均衡的实例

    这里假定有3台Tomcat服务器,分别开放不同的端口,地址如下:

    1. 192.168.12.131:8000  
    2. 192.168.12.132:8080  
    3. 192.168.12.133:8090 

     

    Nginx的相关配置代码如下:
    1. upstream mytomcats {  
    2.       server 192.168.12.131:8000;  
    3.       server 192.168.12.132:8080;  
    4.       server 192.168.12.133:8090;  
    5. }  
    6.  
    7. server {  
    8.       listen 80;  
    9.       server_name www.ixdba.net;  
    10.  
    11. location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {  
    12.        root /web/www/html/;  
    13. }  
    14.  
    15. location / {  
    16.           proxy_pass http://mytomcats;  
    17.           proxy_redirect off;  
    18.           proxy_set_header Host $host;  
    19.           proxy_set_header X-Real-IP $remote_addr;  
    20.           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    21.           client_max_body_size 10m;  
    22.           client_body_buffer_size 128k;  
    23.           proxy_connect_timeout 90;  
    24.           proxy_send_timeout 90;  
    25.           proxy_read_timeout 90;  
    26.           proxy_buffer_size 4k;  
    27.           proxy_buffers 4 32k;  
    28.           proxy_busy_buffers_size 64k;  
    29.           proxy_temp_file_write_size 64k;  
    30. }  
    31.  

    在这个实例中,先通过upstream定义一个负载均衡组,组名为mytomcats,组的成员就是上面指定的3台Tomcat服务器;接着通过server指令定义一个www.ixdba.net的虚拟主机;然后通过location指令以正则表达式的方式将指定类型的文件全部交给Nginx去处理;最后将其他所有请求全部交给负载均衡组来处理。

    这里还有一点需要注意,如果在location指令使用正则表达式后再用alias指令,Nginx是不支持的。

    posted @ 2012-07-31 08:55 小秦 阅读(31731) | 评论 (1)编辑 收藏

    Varnish研究(转)

    麻烦你再研究一下Varnish,我所希望了解的事项是:
    1、 能否设置到URL级别。
    你可以以针对“2012潮流”页面的这两个链接进行测试:
    [IP]:[Port]/trend.html
    [IP]:[Port]/trend/findViewHotItemsAjax.html
    注意两个链接后面均可能存在参数,
    比如[IP]:[Port]/trend/findViewHotItemsAjax.html?ref=1&np=1
    这些参数是查询条件。

    可以支持,通过正则表达式区分路径,可以通配到URL级别的访问,在定义了路径后设置一些属性。

    2、 能否支持通配符
    比如
    [IP]:[Port]/trend*

    支持

    3、能否就每一个独立配置设置独立的缓存时间?
    我指的每一个独立配置是指比如某个URL。
    比如 /trend.html 缓存4分钟,而另外一个/trend/newest.html则缓存2分钟。

    如果不行,那么Varnish的缓存时间允许怎么设置?
     
    可以做到对于不同路径的缓存时间特性设置,但是需要在VCL语言中编写,类似C的语言,按照业务需求来写配置文件和处理流程……

    4、 清除Varnish缓存的命令是?
    方便做build后,人工或者通过脚本来调用该命令清除Varnish缓存。
    首先是要设置了管理的IP,通过Varnish管理端口,使用正则表达式批量清除缓存:
    (1)、例:清除类似
    http://www.elain.org/download/111.html的URL地址):
    /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 url.purge /download/
    (2)、例:清除类似
    http://www.elain.org/dl 的URL地址:
    /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 url.purge w*$
    (3)、例:清除所有缓存:
    /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 url.purge *$

    5、 如何监控Varnish,有可视化界面查看运行状态,命中率等等吗?
    1、查看Varnish服务器连接数与命中率:
    /elain/apps/varnish/bin/varnishstat
    cache_hit是命中率
    2、通过Varnish管理端口进行管理:
    用help看看可以使用哪些Varnish命令:
    /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 help
    [root@vanish ~]# /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 help
    help [command]
    ping [timestamp]
    auth response
    quit
    banner
    status
    start
    stop
    stats
    vcl.load <configname> <filename>
    vcl.inline <configname> <quoted_VCLstring>
    vcl.use <configname>
    vcl.discard <configname>
    vcl.list
    vcl.show <configname>
    param.show [-l] [<param>]
    param.set <param> <value>
    purge.url <regexp>
    purge <field> <operator> <arg> [&& <field> <oper> <arg>]...
    purge.list

    6、 有响应时间统计的报表吗?
    比如对某个URL设置了缓存,那么我能否获得该URL的响应时间统计。
    可以通过webbench测试URL的相应时间。
    root@zhouda webbench-1.5]# webbench -c 100 -t 60 http://10.112.5.219/info.php
    Webbench - Simple Web Benchmark 1.5
    Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
    Benchmarking: GET
    http://10.112.5.219/info.php
    100 clients, running 60 sec.
    Speed=695 pages/min, 612347 bytes/sec.
    Requests: 695 susceed, 0 failed.
    每秒钟响应请求数:695 pages/min,每秒钟传输数据量612347 bytes/sec.

    CRONTAB利做统计然后通过程序汇总成图表

    7、 其它的
    如果你在研究过程中,发现有比较有用的功能,也整理一下告诉我。

    http://www.oschina.net/question/222919_57985
    http://www.oschina.net/question/17_6406
    http://www.discuz.net/thread-730015-1-1.html
    https://www.varnish-cache.org/docs
    https://www.varnish-cache.org/docs/3.0/tutorial/vcl.html

    另外,目前最新的测试版本在:http://42.121.12.4 

    posted @ 2012-07-24 17:34 小秦 阅读(925) | 评论 (0)编辑 收藏

    Varnish安装部署文档

    网上的文档写的有些问题,只可以参考,可以按住我下边的总结的,安装外围包,然后再编译安装即可

     

    wget -c http://repo.varnish-cache.org/source/varnish-3.0.2.tar.gz

    yum instll -y automake
    yum instll -y autoconf
    yum instll -y libtool
    yum instll -y ncurses-devel
    yum instll -y libxslt
    yum instll -y groff
    yum instll -y pcre-devel
    yum instll -y pkgconfig
    yum instll -y automake
    yum instll -y  automake
    yum install -y autoconf
    yum install -y libtool
    yum install -y ncurses-devel
    yum install -y libxslt
    yum install -y groff
    yum install -y pcre-devel
    yum install -y pkgconfig
    groupadd www
    useradd www -g www -s /sbin/nologin

    yum -y install patch make gcc gcc-c++ gcc-g77 flex bison file
    yum -y install libtool libtool-libs autoconf kernel-devel
    yum -y install libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel
    yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel
    yum -y install glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel
    yum -y install ncurses ncurses-devel curl curl-devel e2fsprogs
    yum -y install e2fsprogs-devel krb5 krb5-devel libidn libidn-devel
    yum -y install openssl openssl-devel vim-minimal nano sendmail
    yum -y install fonts-chinese gettext gettext-devel
    yum -y install ncurses-devel
    yum -y install gmp-devel pspell-devel
    yum -y install unzip

    cd /varnish

    ./configure --prefix=/opt/varnish

    make ;make install

    启动:

    /opt/varnish/sbin/varnishd -f /opt/varnish/etc/varnish/killwin.vcl -a 42.121.12.4:80 -s malloc,256m  -T 127.0.0.1:2000 -p http_resp_hdr_len=8192
    下边的网络转载的

     

     

     

     

    简述:Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。

    系统环境:
    CentOS release 5.5 (Final) 64-bit

    所需软件:
    varnish-2.1.4.tar.gz

    Varnish官方网站:

    http://www.varnish-cache.org/

    安装前准备:

    创建www用户和组,以及Varnish缓存文件存放目录(/elain/data/vcache):
    /usr/sbin/groupadd www -g 600
    /usr/sbin/useradd -u 600 -g www www
    mkdir -p /elain/data/vcache
    chmod +w /elain/data/vcache
    chown -R www:www /elain/data/vcache

    创建Varnish日志目录(/elain/logs/varnish):
    mkdir -p /elain/logs/varnish
    chmod +w /elain/logs/varnish
    chown -R www:www /elain/logs/varnish

    安装:
    wget http://cdnetworks-kr-1.dl.sourceforge.net/project/pcre/pcre/8.12/pcre-8.12.tar.gz
    tar zxvf pcre-8.12.tar.gz
    cd pcre-8.12/
    ./configure --prefix=/elain/apps/pcre
    make && make install
    cd ../

    wget http://repo.varnish-cache.org/source/varnish-2.1.5.tar.gz
    tar zxvf varnish-2.1.5.tar.gz
    cd varnish-2.1.5
    export PKG_CONFIG_PATH=/elain/apps/pcre/lib/pkgconfig
    ./configure -prefix=/elain/apps/varnish
    make
    make install
    cd ..

    配置:
    默认配置文件样板:
    /elain/apps/varnish/etc/varnish/default.vcl

    cd /elain/apps/varnish/etc/varnish/
    cp default.vcl  elain_vcl.conf
    vi elain_vcl.conf
    #############################
    backend www {
    .host = "www.elain.org";
    .port = "80";
    }

    acl purge {
    "localhost";
    "127.0.0.1";
    "172.16.2.0"/24;
    }

    sub vcl_recv {
    if (req.restarts == 0) {
    if (req.http.x-forwarded-for) {
    set req.http.X-Forwarded-For =
    req.http.X-Forwarded-For ", " client.ip;
    } else {
    set req.http.X-Forwarded-For = client.ip;
    }
    }
    if (req.request != "GET" &&
    req.request != "HEAD" &&
    req.request != "PUT" &&
    req.request != "POST" &&
    req.request != "TRACE" &&
    req.request != "OPTIONS" &&
    req.request != "DELETE") {
    /* Non-RFC2616 or CONNECT which is weird. */
    return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
    /* We only deal with GET and HEAD by default */
    return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
    return (pass);
    }

    else {
    lookup;
    }
    return (lookup);
    }

    sub vcl_pipe {
    return (pipe);
    }

    sub vcl_pass {
    return (pass);
    }

    sub vcl_hash {
    set req.hash += req.url;
    if (req.http.host) {
    set req.hash += req.http.host;
    } else {
    set req.hash += server.ip;
    }
    return (hash);
    }

    sub vcl_hit {
    if (!obj.cacheable) {
    return (pass);
    }
    return (deliver);
    }

    sub vcl_miss {
    return (fetch);
    }

    sub vcl_fetch {
    if (!beresp.cacheable) {
    return (pass);
    }
    if (beresp.http.Set-Cookie) {
    return (pass);
    }
    return (deliver);
    }

    sub vcl_deliver {
    return (deliver);
    }

    sub vcl_error {
    set obj.http.Content-Type = "text/html; charset=utf-8";
    synthetic {"
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
    <title>"} obj.status " " obj.response {"</title>
    </head>
    <body>
    <h1>Error "} obj.status " " obj.response {"</h1>
    <p>"} obj.response {"</p>
    <h3>Guru Meditation:</h3>
    <p>XID: "} req.xid {"</p>
    <hr>
    <p>Varnish cache server</p>
    </body>
    </html>
    "};
    return (deliver);
    }
    ###################################
    配置文件解释:
    (1)、Varnish通过反向代理请求后端IP为172.16.2.223,端口为80的web服务器;
    (2)、Varnish允许localhost、127.0.0.1、172.16.2.233 三个来源IP通过PURGE方法清除缓存;
    (3)、Varnish对域名为www.elain.org的请求进行处理,非www.elain.org域名的请求则返回“elain Cache Server”;
    (4)、Varnish对HTTP协议中的GET、HEAD请求进行缓存,对POST请求透过,让其直接访问后端Web服务器。之所以这样配置,是因为POST请求一般是发送数据给服务器的,需要服务器接收、处理,所以不缓存;
    (5)、Varnish对以.txt和.js结尾的URL缓存时间设置1小时,对其他的URL缓存时间设置为30天。

    启动Varnish
    ulimit -SHn 65535
    /elain/apps/varnish/sbin/varnishd -f /elain/apps/varnish/etc/varnish/elain_vcl.conf -a 172.16.2.223:80 -s file,/elain/data/vcache,1G -w 1024,51200,10 -t 3600 -T 172.16.2.223:3500

    参数:
    -u 以什么用运行
    -g 以什么组运行
    -f varnish 配置文件
    -a 绑定 IP 和端口
    -s varnish 缓存文件位置与大小
    -w 最小,最大线程和超时时间
    -T varnish 管理端口,主要用来清除缓存

    启动varnishncsa用来将Varnish访问日志写入日志文件:
    /elain/apps/varnish/bin/varnishncsa  -w /elain/logs/varnish.log &

    停止Varnish
    pkill varnish

    配置开机自动启动Varnish
    vi /etc/rc.local
    在末尾增加以下内容:

    ulimit -SHn 65535
    /elain/apps/varnish/sbin/varnishd -f /elain/apps/varnish/etc/varnish/elain_vcl.conf -a 172.16.2.223:80 -s file,/elain/data/vcache,1G -w 1024,51200,10 -t 3600 -T 172.16.2.223:3500
    /elain/apps/varnish/bin/varnishncsa -n /elain/data/vcache -w /elain/logs/varnish.log &

    优化Linux内核参数
    vi /etc/sysctl.conf
    在末尾增加以下内容:

    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_keepalive_time = 300
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.ip_local_port_range = 5000    65000

    sysctl -p

    管理Varnish:
    1、查看Varnish服务器连接数与命中率:
    /elain/apps/varnish/bin/varnishstat

    2、通过Varnish管理端口进行管理:
    用help看看可以使用哪些Varnish命令:
    /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 help

    [root@vanish ~]# /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 help
    help [command]
    ping [timestamp]
    auth response
    quit
    banner
    status
    start
    stop
    stats
    vcl.load <configname> <filename>
    vcl.inline <configname> <quoted_VCLstring>
    vcl.use <configname>
    vcl.discard <configname>
    vcl.list
    vcl.show <configname>
    param.show [-l] [<param>]
    param.set <param> <value>
    purge.url <regexp>
    purge <field> <operator> <arg> [&& <field> <oper> <arg>]...
    purge.list

    3、通过Varnish管理端口,使用正则表达式批量清除缓存:
    (1)、例:清除类似http://www.elain.org/download/111.html的URL地址):
    /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 url.purge /download/

    (2)、例:清除类似http://www.elain.org/dl 的URL地址:
    /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 url.purge w*$

    (3)、例:清除所有缓存:
    /elain/apps/varnish/bin/varnishadm -T 172.16.2.223:3500 url.purge *$

    Varnish日志切割脚本
    cat /root/scripts/cut_varnish_log.sh

    #!/bin/sh
    # This script run at 00:00
    date=$(date -d "yesterday" +"%Y-%m-%d")
    pkill -9 varnishncsa
    mv /elain/logs/varnish/images.log /elain/logs/varnish/${date}.log
    /elain/apps/varnish/bin/varnishncsa -w /elain/logs/varnish/images.log &
    mkdir -p /elain/logs/varnish/logsbak/
    gzip -c /elain/logs/varnish/${date}.log > /elain/logs/varnish/logsbak/${date}.log.gz
    rm -f /elain/logs/varnish/${date}.log
    rm -f /elain/logs/varnish/logsbak/$(date -d "-1 month" +"%Y-%m*").log.gz

    chmod 700 /root/scripts/cut_varnish_log.sh

    设置在每天00:00定时执行:
    crontab -e

    # Info   : 每天切割varnish日志
    # Author : dingtm
    # CTime  : 2011.04.08
    0 0 * * *  /root/scripts/cut_varnish_log.sh

    官方文档:

    http://www.varnish-cache.org/docs/2.1/

    推荐参考文档见附件

    posted @ 2012-07-24 17:34 小秦 阅读(1350) | 评论 (0)编辑 收藏

    Java学习的30个目标以及系统架构师推荐的书(转)

    好老的文章了,今天把它挖出来了,其实在整个JAVA的学习中偶然性很多,改变你路线的东西也很多,很多东西是跟着工作的变化而变化的,因此关键在于把其中几个学精通,有个主方向,并要懂灵活变化。真个技术生涯还包括架构、做人、团队合作、管人、不断学习新技术,等
    第一阶段 
    2.你需要学习JAVA语言的基础知识以及它的核心类库 (collections,serialization,streams,networking, multithreading,reflection,event,handling,NIO,localization,以及其他)。 
    5.你需要学习java数据库技术,如JDBCAPI并且会使用至少一种persistence/ORM构架,例如Hibernate,JDO, CocoBase,TopLink,InsideLiberator(国产JDO红工厂软件)或者iBatis。 
    24.你应该熟练掌握一种JAVAIDE例如sunOne,netBeans,IntelliJIDEA或者Eclipse。(有些人更喜欢VI或EMACS来编写文件。随便你用什么了:) 
    26.你需要熟悉一种单元测试体系(JNunit),并且学习不同的生成、部署工具(Ant,Maven)。 
    27.你需要熟悉一些在JAVA开发中经常用到的软件工程过程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。 
    第二阶段 
    1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该十分了解UML,尤其是class,object,interaction以及statediagrams。 
    3.你应该了解JVM,classloaders,classreflect,以及垃圾回收的基本工作机制等。你应该有能力反编译一个类文件并且明白一些基本的汇编指令。 
    6.你还应该了解对象关系的阻抗失配的含义,以及它是如何影响业务对象的与关系型数据库的交互,和它的运行结果,还需要掌握不同的数据库产品运用,比如:oracle,mysql,mssqlserver。 
    7.你需要学习JAVA的沙盒安全模式(classloaders,bytecodeverification,managers,policyandpermissions, 
    codesigning, digitalsignatures,cryptography,certification,Kerberos,以及其他)还有不同的安全/认证 API,例如JAAS(JavaAuthenticationandAuthorizationService),JCE (JavaCryptographyExtension),JSSE(JavaSecureSocketExtension),以及JGSS (JavaGeneralSecurityService)。 
    第三阶段 
    10.你需要学习如何使用及管理WEB服务器,例如tomcat,resin,Jrun,并且知道如何在其基础上扩展和维护WEB程序。 
    8.你需要学习Servlets,JSP,以及JSTL(StandardTagLibraries)和可以选择的第三方TagLibraries。 
      4.如果你将要 写客户端程序,你需要学习WEB的小应用程序(applet),必需掌握GUI设计的思想和方法,以及桌面程序的SWING,AWT, SWT。你还应该对UI部件的JAVABEAN组件模式有所了解。JAVABEANS也被应用在JSP中以把业务逻辑从表现层中分离出来。(这条可有可 无) 
    9.你需要熟悉主流的网页框架,例如JSF,Struts,Tapestry,Cocoon,WebWork,以及他们下面的涉及模式,如MVC/MODEL2。 
    14.你应该学习如何利用JAVAAPI和工具来构建WebService。例如JAX- RPC(JavaAPIforXML/RPC),SAAJ (SOAPwithAttachmentsAPIforJava),JAXB(JavaArchitectureforXMLBinding),JAXM(JavaAPIforXMLMessaging), JAXR(JavaAPIforXMLRegistries),或者JWSDP(JavaWebServicesDeveloperPack)。 
    15.你需要学习一门轻量级应用程序框架,例如Spring,PicoContainer,Avalon,以及它们的IoC/DI风格(setter,constructor,interfaceinjection)。 
    20.你需要熟悉对不同有用的API和frame work等来为你服务。例如Log4J(logging/tracing),Quartz (scheduling),JGroups(networkgroupcommunication),JCache(distributedcaching), Lucene(full-textsearch),JakartaCommons等等。 
    25.JAVA(精确的说是有些配置)是冗长的,它需要很多的人工代码(例如EJB),所以你需要熟悉代码生成工具,例如XDoclet 
    第四阶段 
    16.你需要熟悉不同的J2EE技术,例如JNDI(JavaNamingandDirectoryInterface),JMS (JavaMessageService),JTA/JTS(JavaTransactionAPI /JavaTransactionService),JMX (JavaManagementeXtensions),以及JavaMail。 
    11.你需要学习分布式对象以及远程API,例如RMI和RMI/IIOP。 
    12.你需要掌握各种流行中间件技术标准和与java结合实现,比如Tuxedo、CROBA,当然也包括javaEE本身。 
    17.你需要学习企业级JavaBeans(EJB)以及它们的不同组件模 式:Stateless/StatefulSessionBeans,EntityBeans(包含Bean- ManagedPersistence[BMP]或者Container-ManagedPersistence[CMP]和它的EJB-QL),或者 Message-DrivenBeans(MDB)。 
    13.你需要学习最少一种的XMLAPI,例如JAXP(JavaAPIforXMLProcessing),JDOM(JavaforXMLDocumentObjectModel),DOM4J,或JAXR(JavaAPIforXMLRegistries)。 
    18.你需要学习如何管理与配置一个J2EE应用程序服务器,如WebLogic,JBoss等,并且利用它的附加服务,例如簇类,连接池以及分布式处理支援。你还需要了解如何在它上面封装和配置应用程序并且能够监控、调整它的性能。 
    第五阶段(优先级低) 
    19.你需要熟悉面向方面的程序设计以及面向属性的程序设计(这两个都被很容易混淆的缩写为AOP),以及他们的主流JAVA规格和执行。例如AspectJ和AspectWerkz。 
    21.如果你将要对接或者正和旧的系统或者本地平台,你需要学习JNI (JavaNativeInterface) and JCA (JavaConnectorArchitecture)。 
    22.你需要熟悉JINI技术以及与它相关的分布式系统,比如掌握CROBA。 
    23.你需要JavaCommunityProcess(JCP)以及他的不同JavaSpecificationRequests(JSRs),例如Portlets(168),JOLAP(69),DataMiningAPI(73),等等。 
    28.你需要能够深入了解加熟练操作和配置不同的操作系统,比如GNU/linux,sunsolaris,macOS等,做为跨平台软件的开发者。 
    29.你还需要紧跟java发展的步伐,比如现在可以深入的学习javaME,以及各种java新规范,技术的运用,如新起的web富客户端技术。 
    30.你必需要对opensource有所了解,因为至少java的很多技术直接是靠开源来驱动发展的,如java3D技术。
    ====================================================================
    附:
    JAVA系统架构师应该看的几本书 
    Thinking in Java 
    Effective Java 
    UML基础、案例与应用 
    UML入门提高 
    软件工匠
    设计模式——可复用面向对象软件的基础 
    重构-改善既有代码的设计 
    敏捷软件开发-原则、模式、实践 
    企业应用架构模式 
    Expert One-on-One J2EE Development without EJB 
    软件工程——实践者的研究方法 
    软件领导--成功开发软件的指导准则 
    后面的两本书,其实已经有点属于项目经理的范畴了,不过还不是很深入,看看对做成功的系统架构师是很有好处。 
    企业应用的系统架构师应该关注的几个方面 (具体情况具体分析,以下未必准确,只是参考)
    先来一些基础面试题,您答得出么?
    1、说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 
    2、用java怎么实现有每天有1亿条记录的DB存储?mysql上亿记录数据量的数据库如何设计? 
    3、mysql支持事务吗?DB存储引擎有哪些? 
    4、mvc原理,mvc模式的优缺点,如果让你设计你会怎么改造MVC? 
    5、hibernate支持集群吗?如何实现集群? 
    6、tomcat 最多支持并发多少用户? 
    7、map原理,它是如何快速查找key的?map与set区别? 
    8、描术算法,如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。内存只有1G??? 
    9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户? ----可以参考 位图索引的原理 
    10、Spring如何实现IOC与AOP的,说出实现原理?
    数据持久层的设计 
    在Spring和Hibernate,ibatis出来以前,几乎每家公司都有自己的一套方法和架构,而架构师的50%的精力也会集中到这上面,EJB只是增加架构师的负担。在Spring出来以后,基本上,大多数的架构师都从重复设计这个轮子的无用功中解脱出来了。Rod的轮子太好用了,基本上,大家只要套上去就行了,或者,剩下最重要的事情,是选择一个合适的数据库连接池的开源项目吧 
    MVC架构的具体设计 
    MVC只是个概要的概念,具体如何实现的具体技术很多,根据项目设计最恰当的架构 
    大并发性访问 
    太多了,包括从广域网到服务器到业务层再到架构再到程序、数据库的各种调优,如使用缓存,静态化,静动态server分离,在数据量达到一定程度时,使用集群技术,优先考虑利用服务器的集群,其次是硬件集群,最后才是应用本身加入集群功能 
    超大数据量返回结果 
    缓存命中率,分页,优化SQL语句,循环处理数据时尽可能共用对象,只保留关键数据,及时释放内存占用 
    超大文件的读取和生成 
    尽可能快的读取大文件,并进行分析。写入大文件时,如何及时释放内存。学会适当利用操作系统的命令行资源来更快完成任务。这方面经验比较少,以后有空研究。
    多线程的应用和管理 
    线程池的管理和监控,线程的启动(包括定时启动),结束,回收,线程资源的释放 ,这句话太简单了,待深入研究
    用户界面可用性设计 
    平衡速度和可用性,恰当的使用异步和同步技术,展现关键数据为重点 
    分布式的数据交流和集成 
    选择恰当的数据交互方式,从最泛滥低效的Web Service到最实用的文件共享 
    群集系统的管理 
    如何确保缓存的同步?如何确保对象唯一性?如何保证各台机器的同步? 
    是否采用EJB?如何利用J2EE的特性(例如JNDI) 
    复杂的业务规则 
    规则引擎和工作流引擎场景和应用 
    其实,作为一个真正的系统架构师,不应该局限于企业应用的系统,这种系统往往有数据库的局限性,有时候,应该考虑是否可以横向跨越,直接对其它系统做一些架构考虑,在没有丰富的实战经验的前提下,而只是看了其它人的系统和代码,就能够给出有效的设计指导。 
    例如对于一个下载软件,可以有如下考虑: 
    1. 未明和非法url的检验,已经下载失败的容许,信息记录 
    2. 多线程下载一个文件,文件的切分和拼合,部分切片丢失的拼合可能性 
    3. 下载线程管理 
    4. 服务器或者P2P的机器之间的通讯协议 
    5. 速度监控和限制 
    6. 下载进度的监控和显示 
    作为一个在线播放软件,可以做如下考虑 
    1. 播放速度的保证 
    机器的问题基本不存在了,关键是网络问题。如何在检测网络速度,根据影片的质量,并缓冲足够多的内容,保证播放一直尽可能顺利的完成。 
    2. 播放质量的保证 
    如何利用DirectX等技术,最快的进行渲染,是自己写底层,还是利用已有的API 
    由于没做过类似的项目,可以写的东西还是少很多了。 
    系统架构师应该有的素质: 
    1、 实际的编程经验 
    最少2年吧,多了就不说了,其实从大学就开始钻研的话, 
    2、 书面表达能力和口头交流能力 
    综合利用架构图,UML图,文字和代码片断,表达自己设计思想,至于是Word还是ppt,应该通吃 
    在开发人员中发现架构师的最有价值标准是有效的沟通。您需要技术娴熟、经验丰富的开发人员,这样的人员需要有就项目中的业务相关问题进行沟通的经历。架构师经常必须对理解方面的差距进行预计,然后才能有所贡献。他们必须愿意克服困难来确保技术和业务观点的融合。他们并不必对意见交换工作进行计划和协调;这仍然主要是项目经理的工作。他们的任务是确定表述系统设计时的最佳工具和构件,以促进有效的意见交换。他们必须能够判断当前方法显得不足而需要采用新方法的情况。写作技能也非常重要,还需要具有制作草图的技能或使用制图软件的能力。 
    3、 自觉主动;积极解决设计问题 
    架构师的日常工作目标经常并不明确。很多开发人员直接参考功能规范来列出任务清单。架构师通常则是向这些开发人员提供所需结构的人员,以便尽可能提高工作效率。好的候选者不仅进行沟通方面的工作,而且也会预计各种设计问题并加以解决——通常在没有任何具体指示的情况下自觉进行。无论所分配的职责如何,积极参与项目的开发人员都有机会从一起工作的人员中脱颖而出。 
    4、 抽象思维能力和总结能力 
    架构师,顾名思义,在系统未搭建好之前,就要能够有一个草图在心。而如果是对现有系统的改造,那么能在看过系统的文档(如果有的话)和代码后,就能总结出系统的架构特点。 
    架构师必须能够理解表述模糊的概念并将其变成相关各方能够理解的项目构件。他们必须能够理解抽象概念,并以具体的语言对其进行沟通。开发人员中好的候选者经常要求或自己主动解释开发生命周期中容易混淆的问题。他们能迅速评估各种想法并将其纳入后续工作的操作建议中。 
    开发人员经常具有很强的数学能力,而好的架构师则倾向于表现出更强的口头表达能力。管理人员经常说开发人员具有“工程意识”,而这是一个用于评估架构师的非常有意义的方面。架构师应该具有很强的解决技术问题的能力,但还必须能够准确获知更为全面的人员如何与技术交互的信息。这要求具有某种形式的抽象思维(而不再是代码的细节),这种思维能力可能较难形成。 
    5、 全面的技术资讯吸收能力和选择鉴别能力 
    作为开发人员出身,对于某一个具体问题的研究能力(虽然很多人总结为google能力),已经相当具备了。但是对技术资讯的全面接受和选择性深入了解能力,并且做出正确的判断,那些技术无非是厂家的噱头,而那些技术是真正可以用到项目,提高项目质量的好技术,这种能力确实至关重要的。

    posted @ 2012-07-07 17:12 小秦 阅读(313) | 评论 (0)编辑 收藏

    用java压缩文件夹/文件(转)

    转自:http://www.blogjava.net/mrcmd/archive/2007/08/24/138963.html
    用java压缩文件夹/文件
    压缩文件夹代码:
    import java.io.File;
    import org.apache.tools.zip.ZipOutputStream; //这个包在ant.jar里,要到官方网下载
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.zip.ZipInputStream;
    import java.util.zip.ZipEntry;

    public class CompressBook {
        public CompressBook() {}

        /*
        * inputFileName 输入一个文件夹
        * zipFileName 输出一个压缩文件夹
        
    */

        public void zip(String inputFileName) throws Exception {
            String zipFileName = "c:\\test.zip"; //打包后文件名字
            System.out.println(zipFileName);
            zip(zipFileName, new File(inputFileName));
        }


        private void zip(String zipFileName, File inputFile) throws Exception {
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
            zip(out, inputFile, "");
            System.out.println("zip done");
            out.close();
        }


        private void zip(ZipOutputStream out, File f, String base) throws Exception {
            if (f.isDirectory()) {
               File[] fl = f.listFiles();
               out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));
               base = base.length() == 0 ? "" : base + "/";
               for (int i = 0; i < fl.length; i++) {
               zip(out, fl[i], base + fl[i].getName());
             }

            }
    else {
               out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
               FileInputStream in = new FileInputStream(f);
               int b;
               System.out.println(base);
               while ( (b = in.read()) != -1) {
                out.write(b);
             }

             in.close();
           }

        }


        public static void main(String [] temp){
            CompressBook book = new CompressBook();
            try {
               book.zip("c:\\c");//你要压缩的文件夹
            }
    catch (Exception ex) {
               ex.printStackTrace();
           }

        }

    }

    压缩文件代码:
    import java.io.*;
    import java.util.zip.*;//ZipOutputStream这个流在这里
    import java.util.*;

    public class ZipOutputStreamTest
    {
         public static void main(String[] args) throws Exception
         {
           File f = new File("a.jpg");
           FileInputStream fis = new FileInputStream(f);
           BufferedInputStream bis = new BufferedInputStream(fis);
           byte[] buf = new byte[1024];
           int len;
           FileOutputStream fos = new FileOutputStream(f.getName()+".zip");
           BufferedOutputStream bos = new BufferedOutputStream(fos);
           ZipOutputStream zos = new ZipOutputStream(bos);//压缩包
           ZipEntry ze = new ZipEntry(f.getName());//这是压缩包名里的文件名
           zos.putNextEntry(ze);//写入新的 ZIP 文件条目并将流定位到条目数据的开始处

           while((len=bis.read(buf))!=-1)
           {
              zos.write(buf,0,len);
              zos.flush();
           }

           bis.close();
           zos.close(); 
         }

    }

    posted @ 2012-06-30 18:03 小秦 阅读(338) | 评论 (1)编辑 收藏

    (转)Java操作PDF文件(iText)

         摘要: (转)Java操作PDF文件(iText)2009-03-12 01:33:18标签:PDF Java 休闲 iText 文件原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xiaoduan.blog.51cto.com/502137/137930上次我们用jacob来...  阅读全文

    posted @ 2012-06-30 18:02 小秦 阅读(375) | 评论 (0)编辑 收藏

    oscache

    1、public boolean isCacheable(ServletRequest request) {
    boolean cachable = false;
    if (getTime() > 0) {
    /**
    * some AJAX application use post to get the page, need to specify a
    * cache=true parameter to enable cache. Known url includes:
    */
    if ("true".equals(request.getParameter("cache"))) {
    cachable = true;
    } else if (request.getParameter("noCache") == null
    && (request instanceof HttpServletRequest)) {
    HttpServletRequest req = (HttpServletRequest) request;
    String uri = req.getRequestURI();
    String contextPath = req.getContextPath();
    if(contextPath.length()>0)
    uri = uri.substring(contextPath.length());
    cachable = this.isCacheUris(uri);
    }
    }
    return cachable;
    }
    public void setCacheUris(List<String> cacheUris) {
    this.cacheUris = cacheUris;
    }
    private boolean isCacheUris(String uri){
    for(String _uri:cacheUris){
    if(uri.equals(_uri)){
    return true;
    }
    }
    return false;
    }



    2、<bean id="cacheFilterBean" class="com.ebizer.framework.core.filter.CacheFilter">
    <property name="cacheUris">
      <list>
        <value>/trend.html</value>
      </list>
      </property>
    </bean>

    posted @ 2012-06-08 17:05 小秦 阅读(210) | 评论 (0)编辑 收藏

    dtd未加载可能导致tomcat报找不到action

    tomcat有时报错不准,命名是dtd找不到了,但是却只报找不到action。
    本项目把dtd下载到项目中引入,程序直接找的是tomcat/bin目录下

    posted @ 2012-06-07 11:24 小秦 阅读(173) | 评论 (0)编辑 收藏

    仅列出标题
    共11页: First 上一页 2 3 4 5 6 7 8 9 10 下一页 Last