摘要
我们在开发web应用特别是j2ee应用的时候,由于web页面是由不同的人所开发,所以开发出来的界面通常是千奇百怪,通常让项目管理人员苦笑不得。随着项目的进一步的开发,要求统一的界面风格的紧迫性逐渐浮现了出来。
虽说我们可以使用struts的ttiles,但tiles有着它的不足之处。本文介绍了一个基于web页面的布局、装饰以及应用整合的框架sitemesh。它能帮助你为你的应用创建一致的外观。
以前我通常使用旧式的方法来建立自己的web应用:手工排版,仔细使用每一个字节使其工作在Unicode下,同时使用make文件来适应不同的CPU……
或许现在我们可以换一种方式。
尽管我从没有感觉到需要使用assembly (CISC or RISC)来建立web应用,但也会偶尔觉得我的开发伙伴的工作相当繁琐。特别是我发现很多的开发者在痛苦的寻求一种比较好的方式来控制web应用的基本 模块:例如那些页头、页尾、导航栏、打印页面、手持设备的轻量级页面,以及其他更多的问题。到了最后,令人惊异的是大部分人都采用了落后的 includes和复制粘贴方式。
根据经验,我可以采用在 java.net 上开源的servlet 过滤器 SiteMeshn 来简单明了并优雅的解决这些问题。作为一种替代新的templating语言(XSLT)或部署您的页面到新的系统的解决方法,应用SiteMesh可以 相当容易处理你的页面,这一切只需要普通的HTML,JSP,servlet(包括Struts),以及其他常用的技术。
默认目录C:\Documents and Settings\kevin\.m2\repository
具体设置方式如 下:
1.运行eclipse
2.window-->references-->Java-->build path-->classpath variables
3.按"New",创建一个目录,指向C:\Documents and Settings\kevin\.m2\repository
<localRepository>c:\maven\.m2\repository</localRepository>
JAVA异常处理是程序开发的一个重要内容,异常处理的好坏关系到系统的健壮性和稳定度。异常处理看起来只有几个常用语句,故有些开发人员常常会对异常处 理轻视和在使用上思路模糊。近期笔者在一个开发项目中就体验到轻视异常处理的惨痛教训,因为对异常没有处理好,后果是严重影响系统稳定性。因此,笔者认为 异常处理并不是表面看起来的那么简单。本文分享在此项目过程中对异常处理的一些看法。
一. 什么是异常
在JAVA程序运行时,我们常常会出现一些非正常的现象,这种情况称为运行错误。根据其性质可以分为错误和异常。JAVA用面向对象的方法处理异常,首先 会建立类的层次。类 Throwable位于这一类层次的最顶层,只有它的后代才可以作为一个异常被抛弃。类Throwable有两个直接子类:Error和 Exception。
一般来说错误最常见的有程序进入死循环,内存泄漏等。这种情况,程序运行时本身无法解决,只能通过其他程序干预。JAVA对应的类为Error类。Error类对象由JAVA虚拟机生成并抛弃(通常JAVA程序不对这类异常进行处理)。
异常是程序执行时遇到的非正常情况或意外行为。一般以下这些情况都可以引发异常:代码或调用的代码(如共享库)中有错误,操作系统资源不可用,公共语言运 行库遇到意外情况(如无法验证代码)等等。常见的有数组下标越界,算法溢出(超出数值表达范围),除数为零,无效参数、内存溢出等。这种情况不像错误类那 样,程序运行时本身可以解决,由异常代码调整程序运行方向,使程序仍可继续运行直至正常结束。
JAVA对应的类为Exception类。Exception类对象是JAVA程序处理或抛弃的对象。它有各种不同的子类分别对应于不同类型的异常。 JAVA编译器要求程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做处理。其中类RuntimeException代表运行时由JAVA虚 拟机生成的异常,原因是编程错误。其它则为非运行时异常,原因是程序碰到了意外情况,如输入输出异常IOException等。
大家看文章标题就应该知道,我想用一篇文章,把大家从对freemaker的陌生直接带入到比较深入的境界,所以不想说一些基础性的东西,如果大家不习惯我的表达方法,大可通过google去找习惯于自己阅读方式的相关文章。
我用过velocity,最近才用freemaker,才知道我以前的选择是错了,因为velocity不支持过程的调用,所以我为velocity增加 了很多的东西,写了很多代码,而且脚本也累赘得要命。freemaker首先吸引我的是它强大的过程调用和递归处理能力,其次则是xml风格的语法结构有 着明显的边界,不象velocity要注意段落之间要留空格。所以我建议大家直接使用Freemaker,虽然freemaker没有.net版本,我想 不嵌入程序中使用的话,freemaker是绝对的首选。(题外话,谁有兴趣移植一个NFreeMaker?)
在使用之前我们先要设置运行环境,在使用Freemaker的时候,我们需要下载相关的程序:
freemaker: http://freemarker.sourceforge.net/
fmpp: http://fmpp.sourceforge.net/
其中fmpp是一个freemaker的辅助工具,有了它,我们可以实现更多的功能。以下例子必须fmpp辅助。
这里我们首先提出问题。大家看如下的一个xml文件,虽然freemaker的能力不仅在于处理xml文件,但是用xml作为例子更直观一些:
xml version='1.0' encoding="gb2312" ?>
<types xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:DruleForm-Lite.xsd">
<type name="Type1" >
<labels>
<label lang="zh-CN" value="投保单"/>
一、术语session
在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。
session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称 之为一个session。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭 这个期间①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登 录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义①, 其中的差别只能靠上下文来推断②。
然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前 要先建立一个通信的渠道,比如打电话,直到对方接了电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道 不一定能建立,但对发信人来说,通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来,使得消息之间可以互相依赖,比如一个服务员能 够认出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP session”或者“一个POP3 session”③。
而到了web服务器蓬勃发展的时代,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解 决方案④。有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里”⑤。由于各种用于web开发的语言在一定程度上都 提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java里提供的 javax.servlet.http.HttpSession简称为session⑥。
我们在使用struts的时候免不了生成大量的formBean,当有业务变化的时候还要修改大量的get、set方法,虽然IDE可以帮助生成这些 get、set方法,但是数量多的时候也比较麻烦!最近因为工作的需要找到了新版本struts(1.2.7)的一些新加特性,这部分特性可以使你摆脱以 前这些烦人的修改。下面我们可以看一些简单代码来了解这个新特性
//form.jsp
//*************************************************************
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ page contentType="text/html; charset=GBK" %>
<html:html>
<head>
<title>
Jsp
</title>
</head>
<body>
<html:form action="dynaAction.do" method="POST">
编号: <html:text property="custNo"/>
姓名: <html:text property="custName"/>
地址: <html:text property="address"/>
年龄: <html:text property="age"/>
Beans 绑定、Swing 应用程序框架以及您一直梦寐以求的 IDE 功能
自从 NetBeans 5.0 以来人们谈论最多的创新功能之一就是 Project Matisse 和 Form Editor。很多人都认为 Matisse 是各种 IDE 类别和技术中最好的用户界面设计器。由于这个原因,很多开发者都开始或已经开始使用 NetBeans。
有了这个软件,就有了改进和提高的无限空间。如本文中所述,在 NetBeans 6.0 中,熟练的开发者和新的开发者将发现很多新的 Matisse 功能,这些功能有助于改进 Swing 应用程序的开发。
Beans 绑定和 Swing 应用程序框架
基于最新的 JCP 规范 Beans 绑定 (SR 295) 和 Swing 应用程序框架 (JSR 296),桌面开发者们有了几个新的锦囊妙计;而且他们还能够进行更高效的开发。普通 Swing 应用程序开发者从 NetBeans 的 Swing 应用程序框架的改进中获得了更多利益,而平台开发者也不例外。平台开发者在 NetBeans 平台中已经具有一个基于 Swing 的应用程序框架,该框架比 JSR 296 提供的功能多多了。使用 Beans 绑定支持,开发人员获益良多。
jacob是java和windows下的com桥,通过它我们可以在java程序中调用COM组件。如果你的JDK是1.4,那你需要下载jacob1.9的jni库才能正常运行,早期版本在JDK1.4下有些问题。
package com;
/**
* 〈p〉Title:Word文档转html类〈/p〉
* 〈p〉Description: 〈/p〉
* 〈p〉Copyright:() 2002〈/p〉
* @author 舵手
* @version 1.0
*/
import com.jacob.com.*;
import com.jacob.activeX.*;
public class WordtoHtml {
/**
*文档转换函数
*@param docfile word文档的绝对路径加文件名(包含扩展名)
*@param htmlfile 转换后的html文件绝对路径和文件名(不含扩展名)
*/
public static void change(String docfile, String htmlfile) {
ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
try {
app.setProperty("Visible", new Variant(false));
//设置word不可见
Object docs = app.getProperty("Documents").toDispatch();
Object doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { docfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();
// 打开word文件
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Variant(8) }, new int[1]);
// 作为html格式保存到临时文件
Variant f = new Variant(false);
Dispatch.call(doc, "Close", f);
} catch (Exception e) {
e.printStackTrace();
} finally {
app.invoke("Quit", new Variant[]{});
}
}
public static void main(String[] strs){
WordtoHtml.change("c:\\a\\运输管理调度系统总体方案.doc", "c:\\a\\t");
}
}
本文来自于Blogjava,作者:D.S
普通的标签库(extends TagSupport)只能控制是否显示夹在标签库中间的内容是否显示而不能改变。但是有时候我们需要例如下面
<dlog:format>用户姓名: $1</dlog:format> ,我们需要format这个标签可以把$1替换成用户姓名,这时候我们就需要可以访问到夹于dlog:format之间的信息。