Jetty

Jetty Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行 (stand-alone) 的Java应用提供网络和web连接。 易用性 易用性是 Jetty 设计的基本原则,易用性主要体现在以下几个方面: 通过 XML 或者 API 来对 Jetty 进行配置;默认配置可以满足大部分的需求;将 Jetty 嵌入到应用程序当中只需要非常少的代码; 可扩展性 在使用了 Ajax 的 Web 2.0 的应用程序中,每个连接需要保持更长的时间,这样线程和内存的消耗量会急剧的增加。这就使得我们担心整个程序会因为单个组件陷入瓶颈而影响整个程序的性能。但是有了 Jetty: 即使在有大量服务请求的情况下,系统的性能也能保持在一个可以接受的状态。利用 Continuation 机制来处理大量的用户请求以及时间比较长的连接。 另外 Jetty 设计了非常良好的接口,因此在 Jetty 的某种实现无法满足用户的需要时,用户可以非常方便地对 Jetty 的某些实现进行修改,使得 Jetty 适用于特殊的应用程序的需求。 易嵌入性 Jetty 设计之初就是作为一个优秀的组件来设计的,这也就意味着 Jetty 可以非常容易的嵌入到应用程序当中而不需要程序为了使用 Jetty 做修改。从某种程度上,你也可以把 Jetty 理解为一个嵌入式的Web服务器。 Jetty 可以作为嵌入式服务器使用,Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从test case中控制其运行。从而可以使自动化测试不再依赖外部环境,顺利实现自动化测试。

2012-12-16 · 1 min · 50 words · -

java asm

java asm 什么是 ASM ? ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素: 类名称、方法、属性以及 Java 字节码 (指令) 。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。 与 BCEL 和 SERL 不同,ASM 提供了更为现代的编程模型。对于 ASM 来说,Java class 被描述为一棵树;使用 Visitor模式(访问者模式) 遍历整个二进制结构;事件驱动的处理方式使得用户只需要关注于对其编程有意义的部分,而不必了解 Java 类文件格式的所有细节: ASM 框架提供了默认的 “response taker"处理这一切。 为什么要动态生成 Java 类? 动态生成 Java 类与 AOP 密切相关的。AOP 的初衷在于软件设计世界中存在这么一类代码,零散而又耦合: 零散是由于一些公有的功能 (诸如著名的 log 例子) 分散在所有模块之中;同时改变 log 功能又会影响到所有的模块。出现这样的缺陷,很大程度上是由于传统的 面向对象编程注重以继承关系为代表的"纵向"关系,而对于拥有相同功能或者说方面 (Aspect) 的模块之间的"横向"关系不能很好地表达。例如,目前有一个既有的银行管理系统,包括 Bank、Customer、Account、Invoice 等对象,现在要加入一个安全检查模块, 对已有类的所有操作之前都必须进行一次安全检查。 http://www.ibm.com/developerworks/cn/java/j-lo-asm30/

2012-12-15 · 1 min · 65 words · -

cglib

CGLIB cglib是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO字节码的动态生成。 CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP和dynaop,为他们提供方法的interception (拦截) 。 最流行的OR Mapping工具hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联 (对集合的延迟抓取,是采用其他机制实现的) 。 EasyMock和jMock是通过使用模仿 (moke) 对象来测试java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿 (moke) 对象。 代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,但它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该怎么办?现在我们可以使用CGLIB包 CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。 除了CGLIB包,脚本语言例如Groovy和BeanShell,也是使用ASM来生成java的字节码。当然不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。 Hibernate用它来实现PO(Persistent Object 持久化对象)字节码的动态生成。 http://baike.baidu.com/view/1254036.htm?fr=aladdin

2012-12-15 · 1 min · 22 words · -

AspectJ

AspectJ AspectJ是一个面向方面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。 AspectJ 是一个基于 Java 语言的 AOP 框架,提供了强大的 AOP 功能,其他很多 AOP 框架都借鉴或采纳其中的一些思想。 AspectJ 是 Java 语言的一个 AOP 实现,其主要包括两个部分: 第一个部分定义了如何表达、定义 AOP 编程中的语法规范,通过这套语言规范,我们可以方便地用 AOP 来解决 Java 语言中存在的交叉关注点问题;另一个部分是工具部分,包括编译器、调试工具等。 AspectJ 是最早、功能比较强大的 AOP 实现之一,对整套 AOP 机制都有较好的实现,很多其他语言的 AOP 实现,也借鉴或采纳了 AspectJ 中很多设计。在 Java 领域,AspectJ 中的很多语法结构基本上已成为 AOP 领域的标准。 Spring AOP 与 AspectJ 相同的是,Spring AOP 同样需要对目标类进行增强,也就是生成新的 AOP 代理类;与 AspectJ 不同的是,Spring AOP 无需使用任何特殊命令对 Java 源代码进行编译,它采用运行时动态地、在内存中临时生成"代理类"的方式来生成 AOP 代理。 Spring 允许使用 AspectJ Annotation 用于定义方面 (Aspect) 、切入点 (Pointcut) 和增强处理 (Advice) ,Spring 框架则可识别并根据这些 Annotation 来生成 AOP 代理。Spring 只是使用了和 AspectJ 5 一样的注解,但并没有使用 AspectJ 的编译器或者织入器 (Weaver) ,底层依然使用的是 Spring AOP,依然是在运行时动态生成 AOP 代理,并不依赖于 AspectJ 的编译器或者织入器。 ...

2012-12-15 · 1 min · 97 words · -

Apache Shiro

Apache Shiro Apache Shiro (发音为"shee-roh",日语"堡垒 (Castle) “的意思) 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。 Shiro为解决下列问题 (我喜欢称它们为应用安全的四要素) 提供了保护应用的API: 认证 - 用户身份识别,常被称为用户"登录”; 授权 - 访问控制; 密码加密 - 保护或隐藏数据防止被偷窥; 会话管理 - 每用户相关的时间敏感的状态。 Shiro还支持一些辅助特性,如Web应用安全、单元测试和多线程,它们的存在强化了上面提到的四个要素。 Subject 在考虑应用安全时,你最常问的问题可能是"当前用户是谁?“或"当前用户允许做X吗?"。当我们写代码或设计用户界面时,问自己这些问题很平常: 应用通常都是基于用户故事构建的,并且你希望功能描述 (和安全) 是基于每个用户的。所以,对于我们而言,考虑应用安全的最自然方式就是基于当前用户。Shiro的API用它的Subject概念从根本上体现了这种思考方式。 Subject一词是一个安全术语,其基本意思是"当前的操作用户”。称之为"用户"并不准确,因为"用户"一词通常跟人相关。在安全领域,术语"Subject"可以是人,也可以是第三方进程、后台帐户 (Daemon Account) 或其他类似事物。它仅仅意味着"当前跟软件交互的东西"。但考虑到大多数目的和用途,你可以把它认为是Shiro的"用户"概念。在代码的任何地方,你都能轻易的获得Shiro Subject, http://www.infoq.com/cn/articles/apache-shiro http://kdboy.iteye.com/blog/1154644

2012-12-12 · 1 min · 38 words · -

word basic

word basic word 中更新目录 http://www.2word.com/word2010/2010Mulu/528.html 如果文档完成后发现有些地方必须要进行修改,修改后会发现标题章节标题所在页码已经发生了变化,而目录中的页码没有同步更新,这时您可以手动的更新目录。在word2010中更新目录的方法如下: 第一步、启动word,打开需要更新目录的文档; 第二步、切换到"引用"功能区,在"目录"组中点击"更新目录",如图一所示:

2012-12-12 · 1 min · 8 words · -

Quartz

Quartz Quartz 是个开源的作业调度框架 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔 (或天) 来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。虽然可以通过属性文件 (在属性文件中可以指定 JDBC 事务的数据源、全局作业和/或触发器侦听器、插件、线程池,以及更多) 配置 Quartz,但它根本没有与应用程序服务器的上下文或引用集成在一起。结果就是作业不能访问 Web 服务器的内部函数;例如,在使用 WebSphere 应用服务器时,由 Quartz 调度的作业并不能影响服务器的动态缓存和数据源。 Quartz任务调度CronTrigger配置格式详细说明 CronTrigger配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W ...

2012-12-11 · 2 min · 287 words · -

TDD, 测试驱动

TDD, 测试驱动 测试驱动设计确保对系统的更改不会导致系统丢失或破坏现有功能 测试驱动开发是敏捷开发中的一项核心实践和技术, 也是一种设计方法论。TDD 的原理是在开发功能代码之前, 先编写单元测试用例代码, 测试代码确定需要编写什么产品代码。TDD 虽是敏捷方法的核心实践, 但不只适用于XP (Extreme Programming), 同样可以适用于其他开发方法和过程。 TDD 的基本思路就是通过测试来推动整个开发的进行, 但测试驱动开发并不只是单纯的测试工作, 而是把需求分析, 设计, 质量控制量化的过程。 TDD 的重要目的不仅仅是测试软件, 测试工作保证代码质量仅仅是其中一部分, 而且是在开发过程中帮助客户和程序员去除模棱两可的需求。TDD 首先考虑使用需求 (对象、功能、过程、接口等), 主要是编写测试用例框架对功能的过程和接口进行设计, 而测试框架可以持续进行验证。 优缺点 优点: 在任意一个开发节点都可以拿出一个可以使用,含少量bug并具一定功能的产品。 缺点: 增加代码量。测试代码是系统代码的两倍或更多。 TDD = TFD + Refactoring (TFD - Test First Development) 计算机领域: Test Drived Develop

2012-12-10 · 1 min · 46 words · -

USB, Universal Serial Bus

USB, Universal Serial Bus USB 即"Universal Serial Bus",中文名称为通用串行总线。是在 PC 领域广为应用的新型接口技术。USB 接口具有传输速度更快,支持热插拔以及连接多个设备的特点。目前已经在各类外部设备中广泛的被采用。目前USB接口标准有: USB1.1, USB2.0, usb 3.0 USB1.1 传输速度 12Mbps/秒 USB2.0 速度 480Mbps, 向下兼容USB1.1。 USB3.0 为 5Gbps 全双工 usb 接口颜色 黑色插孔:黑色插孔就代表一般的普通USB插孔,没有特殊含义,早期的表示USB 1.0,现在多代表USB 2.0插孔。 蓝色插孔:蓝色插孔代表USB 3.0。USB 2.0 为 480Mbps 半双工,而 USB 3.0 为5Gbps 全双工,理论上能达到 USB 2.0 速度的10倍。 黄色插孔:黄色USB插孔又被称为Powered USB,一般为“USB 2.0 + 关机可充电"接口,支持在关闭电脑的时候,为USB提供电源。方便关机为手机、MP3等进行充电,而且还不会造成浪费。 USB 线序 G C D V, 黑 绿 白 红 USB接口有四根线,中间触点短的两根用于数据传输,外侧另两根供电。 红色: 电源线 (vcc+) , V 白色 (port-) : 负数据线, D 绿色 (prot+) : 正数据线, C ...

2012-12-09 · 1 min · 85 words · -

html DOCTYPE

html DOCTYPE 在 HTML 4.01 中, 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。 HTML5 不基于 SGML,所以不需要引用 DTD。 添加 声明,这样浏览器才能获知文档类型。 HTML Transitional DTD Transitional DTD 可包含 W3C 所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表 (CSS) 的浏览器以至于您不得不使用 HTML 的呈现特性时,请使用此类型: ```html html5只有一种DOCTYPE声明 ```html <!DOCTYPE html> ``` <!DOCTYPE> 声明没有结束标签。 <!DOCTYPE> 声明对大小写不敏感。 http://www.w3school.com.cn/tags/tag_doctype.asp

2012-12-08 · 1 min · 42 words · -

PropertyPlaceholderConfigurer

PropertyPlaceholderConfigurer http://callan.iteye.com/blog/161540 关于PropertyPlaceholderConfigurer与PropertyOverrideConfigurer PropertyPlaceholderConfigurer,允许在spring的配置文件中加入properties文件,可以将一些动态参数移到properties中. <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:config/jdoserver.properties"/> </bean> 但是好像在属性文件定义中却不支持多个属性文件的定义,比如不能这样用config/*.properties。 经过查看源码,发现可以使用locations属性定义多个配置文件: Java代码 <property name="locations"> <value>classpath:config/maxid.properties</value> <value>classpath:config/jdoserver.properties</value> </list> </property> 使用外部属性后如下: Java代码 <img src="http://callan.iteye.com/images/icon_star.png" alt="收藏代码" /> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.agent.driver}"/> <property name="url" value="${jdbc.agent.main.url}"/> </bean> PropertyOverrideConfigurer: 在spring所有的bean初使化以后,将bean的值强行改变 Xml代码 <img src="http://callan.iteye.com/images/icon_star.png" alt="收藏代码" /> <bean id="configBean" class="org.springframework.beans.factory.config.PropertyOverrideConfigurer"> <property name="location"> <value>hello.properties</value> </property> </bean> <bean id="helloBean" class="com.HelloBean"> <property name="word"> <value>Hello!</value> </property> </bean> 定义HelloBean,注入word的值为hello. 在hello.properties中 helloBean.word=Welcome! word初使为hello后,当bean全加载完,PropertyOverrideConfigurer将helloBean.word的值改成为welcome.

2012-12-08 · 1 min · 63 words · -

jdbc driver

jdbc driver jdbc driver: com.MySQL.jdbc.Driver oracle.jdbc.driver.OracleDriver jdbc url: jdbc:MySQL://localhost:3306/xxxxxx jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:xxxxxx

2012-12-08 · 1 min · 10 words · -

Debian 6 squeeze TightVNC Server

Debian 6 squeeze TightVNC Server 1 安装 如果已经安装了图形用户界面,只需要在bash中apt-get install tightvncserver。 sudo apt-get install tightvnc* vnc client: xtightvncviewer 2 运行 2.1 普通运行 在bash中输入tightvncserver,第一次运行需要设置访问密码。 每次启动tightvncserver都会返回一个编号。 编号在这句中: New 'X' desktop is wqvm-debian:2 可见启动的编号为2。使用VNC客户端去连接时,默认用这个编号+5900得到端口号去连接。 2.2 自动运行 写入rc.d即可。 2.3 终止运行 tightvncserver -kill :2 注意将上一行中的2修改为你在运行tightvncserver中得到的编号,即可关闭这个VNC Server的进程。 3 与vnc4server比较 貌似vnc4server最后一版是2005年发行,距今很久了。说明比较稳定,但是可能落后了。 我安装了vnc4server后不能直接从客户端连接,可能还需要更多的配置。 4 参考资料 http://news.metaparadigma.de/linux-setting-up-a-debian-vnc-server-237/ 英文的。 http://www.cnblogs.com/yangzhao/archive/2011/08/20/2147387.html

2012-12-08 · 1 min · 49 words · -

nginx rewrite

nginx rewrite 理解地址重写 与 地址转发 地址重写与地址转发是两个不同的概念。 地址重写 是为了实现地址的标准化,比如我们可以在地址栏中中输入 www.baidu.com. 我们也可以输入 www.baidu.cn. 最后都会被重写到 www.baidu.com 上。浏览器的地址栏也会显示www.baidu.com。 地址转发:它是指在网络数据传输过程中数据分组到达路由器或桥接器后,该设备通过检查分组地址并将数据转发到最近的局域网的过程。 因此地址重写和地址转发有以下不同点: 地址重写会改变浏览器中的地址,使之变成重写成浏览器最新的地址。而地址转发他是不会改变浏览器的地址的。 地址重写会产生两次请求,而地址转发只会有一次请求。 地址转发一般发生在同一站点项目内部,而地址重写且不受限制。 地址转发的速度比地址重定向快。 Rewrite 指令 该指令是通过正则表达式的使用来改变URI。可以同时存在一个或多个指令。需要按照顺序依次对URL进行匹配和处理。 该指令可以在server块或location块中配置,其基本语法结构如下: # Context: server, location, if server { # 规则:可以是字符串或者正则来表示想匹配的目标url rewrite {规则} {定向路径} {重写类型}; rewrite regex replacement [flag]; } rewrite:该指令是实现URL重写的指令。 regex:用于匹配 URI 的正则表达式。 replacement:将regex正则匹配到的内容替换成 replacement。 flag: flag标记。 例如客户端请求 http://foo.bar.com/foo/bar, nginx 送到 regex 匹配的字符串是 /foo/bar flag有如下值: last: 本条规则匹配完成后,继续向下匹配新的location URI 规则。(不常用) break: 本条规则匹配完成即终止,不再匹配后面的任何规则(不常用)。 redirect: 返回 302 临时重定向,浏览器地址会显示跳转新的URL地址。(默认值) permanent: 返回 301 永久重定向。浏览器地址会显示跳转新的URL地址。 比如如下列子: rewrite ^/(.*) http://www.baidu.com/$1 permanent; # 说明: # rewrite 为固定关键字,表示开始进行rewrite匹配规则。 # regex 为 ^/(.*)。 这是一个正则表达式,匹配完整的域名和后面的路径地址。 # replacement就是 http://www.baidu.com/1这块了,其中1是取regex部分()里面的内容。如果匹配成功后跳转到的URL。 # flag 就是 permanent,代表永久重定向的含义,即跳转到 http://www.baidu.com/$1 地址上。 Rewrite 指令可用的全局变量 $host: 变量中存放了请求的URL中的主机部分字段,比如 http://xxx.abc.com:8080/home 中的 xxx.abc.com. ngx_http_rewrite_module 模块用来使用正则表达式 (PCREs) 改变请求的 URI,返回重定向,并有条件地选择配置。 ...

2012-12-08 · 5 min · 863 words · -

SIteMesh

SIteMesh 转自:http://javauu.com/thread-27-1-1.html 一、SIteMesh介绍 一、SiteMesh简介 SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。 它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。与传统区别如下图: SIteMesh官方地址: http://www.opensymphony.com/sitemesh/index.html SIteMesh官方下载: http://www.opensymphony.com/sitemesh/download.html SIteMesh 2.3下载: http://www.javauu.com/downloads/resource/sitemesh-2.3.zip 二、SiteMesh原理 SiteMesh框架是OpenSymphony团队开发的一个非常优秀的页面装饰器框架,它通过对用户请求进行过滤,并对服务器向客户端响应也进行过滤,然后给原始页面加入一定的装饰(header,footer等),然后把结果返回给客户端。通过SiteMesh的页面装饰,可以提供更好的代码复用,所有的页面装饰效果耦合在目标页面中,无需再使用include指令来包含装饰效果,目标页与装饰页完全分离,如果所有页面使用相同的装饰器,可以是整个Web应用具有统一的风格。

2012-12-07 · 1 min · 15 words · -

FreeMarker

FreeMarker http://www.oecp.cn/hi/hailang/blog/146 一、 FreeMarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。 所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符,在模板运行时,由模板引擎来解析模板,并采用动态数据替换占位符部分的内容。 FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 文等。 二、 FreeMarker的优点和缺点 (一) FreeMarker的优点 1.使用FreeMarker的优点之一,可以彻底的分离表现层和业务逻辑。 使用JSP 开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。 FreeMarker根本不支持Java脚本代码。 FreeMarker的原理就是: 模板+数据模型=输出 ,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。 2.使用FreeMarker的优点之二,可以提高开发效率。 在我们以往的开发中,使用的都是JSP 页面来展示数据的,即所谓的表现层。我们都知道,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。相对于JSP来说,FreeMarker模板技术不存在编译和转换的问题,所以就不会存在上述问题。而且开发过程中,我们在不必在等待界面设计开发人员完成页面原形后,我们再来开发程序。 3.使用FreeMarker的优点之三,使得开发过程中的人员分工更加明确。 以往用JSP展现数据时,作为程序员的我们,并不熟悉界面设计技术,反之界面开发人员,也并不熟悉程序语言。对两者而言,交替性的工作本身就有难度。有时候稍有不慎,可能会将某个页面元素删除或去掉了某个程序符号,使得页面走样或程序错误,这样就需要双方相互沟通协作,解决出现的问题。有时候因为项目中的时间,任务量等因素的存在,可能这个工作就由一个人来完成,这样就可能加大某一方开发人员的工作量。 使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。 (二)FreeMarker的缺点 1.使用FreeMarker的缺点之一,应用FreeMarker模板技术,在修改模板后,可能会看到已经过期的数据。如: 生成静态的HTML页面后,如果一旦模板改变,而没有及时更新模板生成的HTML页面的话,用户看到的就是过期的数据。 2.使用FreeMarker的缺点之二,FreeMarker模板技术在应用过程中,FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判段,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。 3.使用FreeMarker的缺点之三,FreeMarker的map限定key必须是string,其他数据类型无法操作 4.使用FreeMarker的缺点之四,FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。 通过以上的阐述,希望可以令您清晰FreeMarker的优点和缺点,旨在抛砖引玉。有什么问题可以留下您的宝贵留言,我非常愿意与大家讨论。

2012-12-07 · 1 min · 33 words · -

serialVersionUID

serialVersionUID serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 有两种生成方式: 一个是默认的1L,比如: private static final long serialVersionUID = 1L; 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如: private static final long serialVersionUID = xxxxL; 当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个 提示功能告诉你去定义 。在Eclipse中点击类中warning的图标一下,Eclipse就会 自动给定两种生成的方式。如果不想定义它,在Eclipse的设置中也 可以把它关掉的,设置如下: Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==> Potential programming problems 将Serializable class without serialVersionUID的warning改成ignore即可。 如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别Serializable向后兼容。 如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题。 但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,可避开不兼容性问题。

2012-12-07 · 1 min · 45 words · -

Intellij IDEA CE 自动生成 serialVersionUID

Intellij IDEA CE 自动生成 serialVersionUID IDEA的Inspector对serialVersionUID检测默认是关闭的,因此如果你的class是Serialization,那么需要重新设置一下(IDEA 9.0): Setting->Inspections->Serialization issues->Serializable class without ‘serialVersionUID’ 选上以后,在你的class中: Alt+Enter就会提示自动创建serialVersionUID了。 http://blog.sina.com.cn/s/blog_728c25590100y33w.html

2012-12-07 · 1 min · 15 words · -

axel

axel Axel 通过打开多个 HTTP/FTP 连接来将一个文件进行分段下载,从而达到加速下载的目的。对于下载大文件,该工具将特别有用。 #安装: sudo apt-get install axel sudo pacman -S axel axel -s 102400 https://download.jetbrains.8686c.com/idea/ideaIU-2017.1.2.tar.gz -s: 限速: 如 -s 102400,即每秒下载的字节数,这里是 100 KB -n: 限制连接数: 如 -n 5,即打开 5 个连接 下载目录会有一个.st文件, 会自动断点续传 http://linuxtoy.org/archives/axel.html

2012-12-02 · 1 min · 35 words · -

Awesome

Awesome http://confusedfly.yo2.cn/articles/awesome%E7%AE%80%E4%BB%8B.html 什么是平铺窗口管理器 这里首先需要解释一下窗口管理器(Windows Manager)和桌面环境(Desktop Environment)的概念。窗口管理器负责绘制窗口的边框,处理窗口运行比如移动、最小化之类的行为。 而桌面环境则是窗口管理器的超集,它使用窗口管理器及其其他软件提供一个完整的工作环境。比如说,gnome就是一个桌面环境,默认使用metacity作为窗口管理器。 那么什么是平铺式窗口管理器?简单来说,所谓的平铺就是之所有的窗口都不会相互重叠,而是自动的被调整大小使得它们能够刚好占满整个屏幕。这和传统的桌面环境的概念相差很大,也许你会疑问这样的环境下如何工作? 事实上对于Linux这种需要大量使用命令行的操作系统来说平铺式窗口管理在很多情况下能够极大的提升你的工作效率。举个例子,很多时候你都需要打开好几个shell。在gnome底下这就意味着好几个会相互遮挡命令行窗口,大多数时候如果你想要同时看到这些窗口上面的内容就得费神费力的调整它们的位置和大小。而在平铺是窗口下面你完全不需要为这些事情烦心。 另外一个可能会促使你使用平铺的理由就是,用它来调整、切换窗口几乎可以不使用鼠标。这对于硬派的linux狂热者以及痛恨使用笔记本触控板的人来说也是一个不错的选择。 看看下面这个来我桌面的屏幕截图能对awesome有一个直观的印象 如果你是第一次看到Awesome这样的桌面截图一定会觉得手足无措,最常见的窗口边框不见了,你甚至都没法儿关闭或者是最小化一个窗口。事实上在Awesome中是用不着窗口边框的。它默认就提供了9个标签,你大可把不同的窗口分散在这9个标签中而不用去费神调整它们之间的位置,想要切换的时候简单的用快捷件就可以在各个虚拟桌面之间切换。 显然它并不像 gnome,KDE一样有眼花缭乱的桌面特效,但平铺式窗口关注的主要是在其下工作的效率。比如说在写php代码的时候我可以在一个标签中打开四五个shell运行vim同时修改多个文件,然后在另外一个标签中打开一个浏览器。这样可以很快速的输入代码和切换窗口,而你的手甚至不需要离开键盘! 为什么是Awesome 平铺式窗口管理器并不是一个新概念,根据维基百科里面的介绍早在施乐公司几十年前最早开始研究图形界面的时候就已经有了平铺的概念了 (尽管和现在我说的不太一样) ,linux下面也有不少成熟的平铺式窗口管理器-Ion, XMonad都是有名的平铺窗口管理器。但是比较之下Awesome有不少鲜明的特点: 体积小,运行迅速 不过在3.0以后的版本似乎向变得巨大和缓慢的方向发展的趋势 支持多种窗口布局 事实上awesome并不仅仅支持平铺,它还支持好几种各不相同的窗口布局方案 使用Lua脚本的配置文件使得它的灵活性非常高 由于lua脚本的强大能力,Awesome 3.0甚至把窗口管理器运行的逻辑部分放到了配置文件里面。好处是这使得很多其他窗口管理器里面不可能做到的用法在这里变成了可能,坏处是配置文件及其庞大和复杂。 更新迅速 它的作者一直在不停地完善awesome,每次版本升级都能带来一些方便的新特性。不过弊端是造成了awesome的配置文件一直都在改变,说不定什么时候自己以前的配置文件就不能用了 多显示器支持 事实上我一直很羡慕官方网站上awesome运行在多显示器机器上面的截图,口水流了一地。 对于喜欢折腾自己电脑的人来说Awesome是一个很不错的玩具 不过Awesome所依赖的几个底层库还没有进入稳定版本,而awesome自身也在频繁的更改当中,因此在ubuntu源中的awesome还是老旧的2.4版 (不过ArchLinux源里面倒是有最新版的包) ,想要用awesome的ubuntu用户还是得自己编译才行。编译方法将在以后的文章里面

2012-11-30 · 1 min · 34 words · -