??xml version="1.0" encoding="utf-8" standalone="yes"?>国产在亚洲线视频观看,亚洲熟妇av一区二区三区漫画,中文字幕亚洲无线码 http://www.tkk7.com/wangyugod/archive/2008/01/30/178483.html船夫 船夫 Wed, 30 Jan 2008 03:14:00 GMT http://www.tkk7.com/wangyugod/archive/2008/01/30/178483.html http://www.tkk7.com/wangyugod/comments/178483.html http://www.tkk7.com/wangyugod/archive/2008/01/30/178483.html#Feedback 5 http://www.tkk7.com/wangyugod/comments/commentRss/178483.html http://www.tkk7.com/wangyugod/services/trackbacks/178483.html 阅读全文 ]]> JSP~译q程 http://www.tkk7.com/wangyugod/archive/2007/12/18/168444.html船夫 船夫 Tue, 18 Dec 2007 04:06:00 GMT http://www.tkk7.com/wangyugod/archive/2007/12/18/168444.html http://www.tkk7.com/wangyugod/comments/168444.html http://www.tkk7.com/wangyugod/archive/2007/12/18/168444.html#Feedback 0 http://www.tkk7.com/wangyugod/comments/commentRss/168444.html http://www.tkk7.com/wangyugod/services/trackbacks/168444.html 很久以来Q都知道JSP其实是ServletQ今天心血来潮Q想把里面的具体代码看一遍,q记录心得?br />
一个编译好的JSPcd下:
public final class index_jsp extends HttpJspBase
implements JspSourceDependent
//上述cMؓ index.jsp被编译后得到的类
// HttpJspBase是extends HttpServlet的一个类
// JspSourceDependent是一个接口,只声明了一个方法、、getDependants(),q回当前page所依赖的文件的名称Q文件包括以下几U?br />
// 1) files that are included by page directives
// 2) files that are included by include-prelude and include-coda in jsp:config
// 3) files that are tag files and referenced
// 4) TLDs referenced
其核心方法ؓQ?br />
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
.
}
该方法重载HttpJspBase中的_jspServiceҎQ进行页面解析,包括对scriptlet的加载,html的生成,自定义Tag的解析等{?br />
HttpJspBase的service再对_jspService再进行调用,最l生成HTML面
]]> Annotation初步了解 http://www.tkk7.com/wangyugod/archive/2007/12/17/168264.html船夫 船夫 Mon, 17 Dec 2007 08:33:00 GMT http://www.tkk7.com/wangyugod/archive/2007/12/17/168264.html http://www.tkk7.com/wangyugod/comments/168264.html http://www.tkk7.com/wangyugod/archive/2007/12/17/168264.html#Feedback 1 http://www.tkk7.com/wangyugod/comments/commentRss/168264.html http://www.tkk7.com/wangyugod/services/trackbacks/168264.html
annotation实际上就是给一些特定的cd其属性,Ҏ{加上一些注?annotation),q些注释是以属性name,valueq行讄的,q些属性在Annotation Class中以Ҏ的Ş式存在,如下Q?
@Documented //是否需要生javadoc
@Target(java.lang.annotation.ElementType.METHOD) //应用目标Q这里是应用到field属性上?br />
@Retention(RetentionPolicy.RUNTIME) //该策略指明该注释会被加蝲到jvm中,卛_q行Ӟ我们可以得到该注释的内容Q另外两个策略,SOURCE, CLASS都不会加载到jvm?br />
public @ interface TestAnnoation {
String value(); //属性value
String time(); //属性time
}
以上定义的annotation,是应用在成员变量上的Q用该annotation情况如下
public class Test {
@TestAnnoation(time = " 12:30 " ,value = " 20 " )
public String test(){
System.out.println("test!");
return null;
};
}
可以使用java的反来q行获取Q通过Q?br />
Class cls = Class.forName( " Test " );
cls.isAnnotationPresent(AnnotationClass. class ); // 判断是否存在annotation
TestAnnotation ta = (TestAnnotation)cls.getAnnotation(AnnotationClass. class ); // 获得AnnotationClass实例Q后调用q个实例可以获得在AnnotationClass中定义的一些属?/span>
System.out.println(ta.time()); // 输出注释time内容
System.out.println(ta.value()); // 输出注释value内容
我个为annotation的好处是一些配|直接写在代码上Q很直观Q以前在使用hibernate的时候,PO对象和对应的mapping xml是分开的,不够直观Q若是用annotation׃很直观的看出q个对象的映属性以及它的一些特D属性(如lazy=trueQ之cȝQ在JPA中就把这U配|方式换成了annotation?br />
在JE上有很多关于使用annotation和xml的争论,我认为在规模用上可以使用annotationQ就像JPAq种Q每个PO上面都需要进行配|,即使用XML也不能简化;而在大规模用,如spring所l护的一些service的事务配|上避免使用annotationQ因为每个servicecM都需要配|,而用AOPҎXML配置可以一下就搞定?br />
关于ElementType的其他属性:
TYPE(cd), FIELD(属?, METHOD(Ҏ), PARAMETER(参数),
CONSTRUCTOR(构造函?,LOCAL_VARIABLE(局部变?,
ANNOTATION_TYPE,PACKAGE(?,其中的TYPE(cd)是指可以用在Class,Interface,Enum?
Annotationcd?
]]> XSL取得当前循环的位|?/title> http://www.tkk7.com/wangyugod/archive/2007/12/14/167723.html船夫 船夫 Fri, 14 Dec 2007 03:33:00 GMT http://www.tkk7.com/wangyugod/archive/2007/12/14/167723.html http://www.tkk7.com/wangyugod/comments/167723.html http://www.tkk7.com/wangyugod/archive/2007/12/14/167723.html#Feedback 0 http://www.tkk7.com/wangyugod/comments/commentRss/167723.html http://www.tkk7.com/wangyugod/services/trackbacks/167723.html
1 < xsl: for - each select = " QRoleInline-list/QRoleInline " >
2 < xsl: if test = " not(position() = 1) " >< xsl:text > , </ xsl:text ></ xsl: if >< xsl:value - of select = " @roleName " />
3 </ xsl: for - each >
使用position函数可以取得当前行在循环中的位置Q从1开始。上qC码是判断如果位置为第一个, 则需要加逗号?br />
q有一个函数current()是负责取到当前节点对象的?br />
]]> 走出ClassLoaderq局 --转至sharajava的博克http://www.tkk7.com/sharajava/archive/2006/07/25/59946.html http://www.tkk7.com/wangyugod/archive/2006/07/27/60363.html船夫 船夫 Thu, 27 Jul 2006 07:23:00 GMT http://www.tkk7.com/wangyugod/archive/2006/07/27/60363.html http://www.tkk7.com/wangyugod/comments/60363.html http://www.tkk7.com/wangyugod/archive/2006/07/27/60363.html#Feedback 0 http://www.tkk7.com/wangyugod/comments/commentRss/60363.html http://www.tkk7.com/wangyugod/services/trackbacks/60363.html
{?/span>
:
q个问题l常出现在编写框架代?/span>
,
需要动态加载很多类和资源的时?/span>
.
通常当你需要动态加载资源的时?/span>
,
你至有三个
ClassLoader
可以选择
:
̔
pȝcd载器或叫作应用类加蝲?/span>
(system classloader or application classloader)
̔
当前cd载器
̔
当前U程cd载器
上面的问题指的是最后一U类加蝲?/span>
.
哪种cd载器是正的选择?/span>
?
W一U选择可以很容易地排除
:
pȝcd载器
(system classloader).
q个cd载器处理
-classpath
下的cd载工?/span>
,
可以通过
ClassLoader.getSystemClassLoader()
Ҏ调用
. ClassLoader
下所有的
getSystemXXX()
的静态方法都是通过q个Ҏ定义?/span>
.
在你的代码中
,
你应该尽量少地调用这个方?/span>
,
以其它的cd载器作ؓ代理
.
否则你的代码只能工作在单的命o行应用中
,
q个时候系l类加蝲?/span>
(system classloader)
?/span>
JVM
最后创建的cd载器
.
一但你把代码移?/span>
EJB, Web
应用?/span>
Java Web Start
应用?/span>
,
一定会出问?/span>
.
所以我们来看第二种选择
:
当前上下文环境下的类加蝲?/span>
.
Ҏ定义
,
当前cd载器是你当前方法所属的cȝ加蝲?/span>
.
在运行时cM间动态联~?/span>
,
及调?/span>
Class.forName,() Class.getResource()
{类似方法时
,
q个cd载器会被隐含C?/span>
.
It is also used by syntactic constructs like X.class class literals.
U程上下文类型加载器是在Java 2 q_上被引入?span lang="EN-US">. 每一个线E都有一个类加蝲器与之对?span lang="EN-US">(除非q个U程是被本地代码创徏?span lang="EN-US">). q个cd载器是通过Thread.setContextClassLoaser() Ҏ讄?span lang="EN-US">. 如果你不在线E构造后调用q个Ҏ, q个U程从它的父线E中l承相应的上下文cd载器. 如果在整个应用中你不做Q何特D设|?span lang="EN-US">, 所有的U程都以系l类加蝲?span lang="EN-US">(system classloader)作ؓ自己的线E上下文cd载器. 自从Web ?span lang="EN-US">J2EE应用服务器用成熟的cd载器机制来实现诸?span lang="EN-US">JNDI, U程?span lang="EN-US">, lg热部|等功能以来, q种在整个应用中不做MU程cd载器讄的情况就很少?span lang="EN-US">.
Z么线E上下文cd载器存在于如此重要的位置?span lang="EN-US">? q个概念?span lang="EN-US">J2SE中的引入q不引h注目. 很多开发h员对q一概念qh的原因是Sun 公司在这斚w~Z适当的指引和文档.
事实?span lang="EN-US">, 上下文类加蝲器提供了cd载机制的后门, q一点也?span lang="EN-US">J2SE中被引入?span lang="EN-US">. 通常, ?span lang="EN-US">JVM中的所有类加蝲器被l织成了有承层ơ的l构, 每一个类加蝲?span lang="EN-US">(除了引导JVM 的原始类加蝲?span lang="EN-US">)都有一个父加蝲?span lang="EN-US">. 每当被请C加载类?span lang="EN-US">, cd载器都会首先h其父cd载器, 只有当父cd载器不能加蝲?span lang="EN-US">, 才会自己q行cd?span lang="EN-US">.
有时候这U类加蝲的顺序安排不能正常工?span lang="EN-US">, 通常当必d态加载应用程序开发h员提供的资源的时?span lang="EN-US">. ?span lang="EN-US">JNDIZ: 它的内容( ?span lang="EN-US">J2SE1.3开?span lang="EN-US">)在rt.jar 中的引导cM实现?span lang="EN-US">, 但是q些JNDI 核心c需要动态加载由独立厂商实现q|在应用E序?span lang="EN-US">classpath下的JNDI 提供?span lang="EN-US">. q种情况p求一个父classloader( 本例, 是引导cd载器) d载对于它其中一个子classloader( 本例, pȝcd载器) 可见的类. q时通常的类加蝲代理机制不能实现q个要求. 解决的办?span lang="EN-US">(workaround)是, ?span lang="EN-US">JNDI核心cM用当前线E上下文的类加蝲?span lang="EN-US">, q样, 基本的cd载代理机制的相反方向建立了一条有效的途径.
另外, 上面一D可能让你想起一些其它的事情: XML 解析Java API(JAXP). 是的, ?span lang="EN-US">JAXP 只是J2SE 的扩展进, 它很自然地用当前cd载器来引D析器的实?span lang="EN-US">. 而当JAXP 被加入到J2SE1.4 的核心类库中?span lang="EN-US">, 它的cd载也改成了用当前线E类加蝲?span lang="EN-US">, ?span lang="EN-US">JNDI的情况完全类?span lang="EN-US">(也很多E序员很qh). 明白Z么我说来?span lang="EN-US">Sun的指导很~Z了吧?
在以上的介绍之后, 我们来看关键问题: q两U选择( 当前cd载器和当前线E类加蝲?span lang="EN-US">) 都不是在所有环境下都适用. 有些为当前线E类加蝲器应该成为新的标准策?span lang="EN-US">. 但是, 如果q样, 当多个线E通过׃n数据q行交互的时, 会呈现Zq极其复杂的cd载的画面, 除非它们全部使用了同一个上下文的类加蝲?span lang="EN-US">. q一步说, 在某些遗留下来的解决Ҏ?span lang="EN-US">, 委派到当前类加蝲器的Ҏ已经是标?span lang="EN-US">. 比如?span lang="EN-US">Class.forName(String)的直接调?span lang="EN-US">(q也是我Z么推荐尽量避免对q个Ҏq行调用的原?span lang="EN-US">). 即你努力去只调用上下文相关的类加蝲?span lang="EN-US">, 仍然会有一些代码会不由你控?span lang="EN-US">. q种不受控制的类加蝲委派机制是入是很危险的.
更严重的问题, 某些应用服务器把环境上下文及当前cd载器讄C同的cd载器实例?span lang="EN-US">, 而这些类加蝲器有相同的类路径但却没有委派机制中的父子关系. xqؓ什么十分可?span lang="EN-US">. 要知道类加蝲器定义ƈ加蝲的类实例会带有一?span lang="EN-US">JVM内部?span lang="EN-US">ID?span lang="EN-US">. 如果当前cd载器加蝲一个类X 的实?span lang="EN-US">, q个实例调用JNDI 查找c?span lang="EN-US">Y的实?span lang="EN-US">, 些时的上下文的类加蝲器也可以定义了加载类Y 实例. q个c?span lang="EN-US">Y的定义就与当前类加蝲器看到的c?span lang="EN-US">Y的定义不?span lang="EN-US">. 如果q行强制cd转换, 则生异?span lang="EN-US">.
q种混ؕ的情况还在Java 中存在一D|?span lang="EN-US">. 对于那些需要动态加载资源的J2SE ?span lang="EN-US">API, 我们来猜惛_们的cd{略. 例如:
Ø
JNDI
使用U程上下文类加蝲?span lang="EN-US">
Ø
Class.getResource()
?span lang="EN-US">Class.forName() 使用当前cd载器
Ø
JAXP(J2SE 1.4
及之?span lang="EN-US">) 使用U程上下文类加蝲?span lang="EN-US">
Ø
java.util.ResourceBundle
使用调用者的当前cd载器
Ø
URL protocol handlers specified via java.protocol.handler.pkgs system property are looked up in the bootstrap and system classloaders only
Ø
Java
序列?span lang="EN-US">API 默认使用调用者当前的cd载器
q些cd资源的加载策略问?span lang="EN-US">, 肯定?span lang="EN-US">J2SE领域中文档最及说明最~Z的部分了.
]]>目中遇到的一个Spring事务理的问?/title> http://www.tkk7.com/wangyugod/archive/2006/07/24/59870.html船夫 船夫 Mon, 24 Jul 2006 10:40:00 GMT http://www.tkk7.com/wangyugod/archive/2006/07/24/59870.html http://www.tkk7.com/wangyugod/comments/59870.html http://www.tkk7.com/wangyugod/archive/2006/07/24/59870.html#Feedback 0 http://www.tkk7.com/wangyugod/comments/commentRss/59870.html http://www.tkk7.com/wangyugod/services/trackbacks/59870.html E序中抛出的异常?br />java.lang.IllegalStateException: No value for key [org.hibernate.impl.SessionFactoryImpl@7a3d45f0] bound to thread [Servlet.Engine.Transports : 0 ] 我发现是在我spring的seviceҎ中调用了他的Ҏ,他的Ҏ又调用了另一个serviceҎ,D出现了这个问? q个问题只要把他的那个方法修改一?或者从我的serviceҎ中移出就可以解决. 我想spring中肯定应该有些配|能使两个serviceҎ处于同一个事务中,但是我还没找?希望知道的高手能提点一?谢谢 ]]> 在WSAD 5.1中用log4j遇到的问?/title> http://www.tkk7.com/wangyugod/archive/2006/07/21/59308.html船夫 船夫 Thu, 20 Jul 2006 17:23:00 GMT http://www.tkk7.com/wangyugod/archive/2006/07/21/59308.html http://www.tkk7.com/wangyugod/comments/59308.html http://www.tkk7.com/wangyugod/archive/2006/07/21/59308.html#Feedback 4 http://www.tkk7.com/wangyugod/comments/commentRss/59308.html http://www.tkk7.com/wangyugod/services/trackbacks/59308.html 使用log4j作ؓ日志输出工具Q设|根U别为warnQ然后分别设|了hibernate和spring{的U别为debug,自己目的别也讄为debugQ但是很奇怪的事情出现了: 我启动wasd的测试服务器Q打出来的日志只有我本项目的debugU以上的信息Qspring和hibernate的都打不出来Q?br />我用main函数q行我项目中的一个方法,所有的debug信息Qspring和hibernate以及我本目的debug信息一样都没少?br />我的配置是绝Ҏ有问题的Q我实在想不出来怎么会出现这U问题,见鬼了,哪位高手遇到q这U情况,告知一下解x法,谢谢
]]> 表的外键U束[ZT] http://www.tkk7.com/wangyugod/archive/2006/03/16/35665.html船夫 船夫 Thu, 16 Mar 2006 07:44:00 GMT http://www.tkk7.com/wangyugod/archive/2006/03/16/35665.html http://www.tkk7.com/wangyugod/comments/35665.html http://www.tkk7.com/wangyugod/archive/2006/03/16/35665.html#Feedback 0 http://www.tkk7.com/wangyugod/comments/commentRss/35665.html http://www.tkk7.com/wangyugod/services/trackbacks/35665.html 1。创建测试表 SQL> create table lesson(lesson_name varchar2(20), classroom varchar2(10));
表已创徏?
SQL> create table teacher(name varchar2(20),lesson_name varchar2(20));
表已创徏?
SQL> alter table lesson add constraint pk_lesson primary key(lesson_name);
表已更改?
SQL> alter table teacher add constraint fk_lessonname foreign key(lesson_name) 2 references lesson(lesson_name);
表已更改?
2。插入测试数? SQL> insert into lesson values('english','class 1');
已创?1 行?
SQL> insert into lesson values('music','class 2');
已创?1 行?
3。测试有外键的字D|否可以ؓI? SQL> insert into teacher values('wang','hello'); insert into teacher values('wang','hello') * ERROR 位于W?1 ? ORA-02291: q反完整U束条g (SYSTEM.FK_LESSONNAME) - 未找到父关键字
SQL> insert into teacher values('wang','music');
已创?1 行?
SQL> insert into teacher values('wang',null);
已创?1 行?
l论Q有外键U束的字D可以ؓI。如果不为空的话Q则一定要满外键的约束关p?/P>
]]>java实现文g传输 http://www.tkk7.com/wangyugod/archive/2005/12/20/24733.html船夫 船夫 Tue, 20 Dec 2005 03:22:00 GMT http://www.tkk7.com/wangyugod/archive/2005/12/20/24733.html http://www.tkk7.com/wangyugod/comments/24733.html http://www.tkk7.com/wangyugod/archive/2005/12/20/24733.html#Feedback 4 http://www.tkk7.com/wangyugod/comments/commentRss/24733.html http://www.tkk7.com/wangyugod/services/trackbacks/24733.html 阅读全文 ]]> Velocity ?/title> http://www.tkk7.com/wangyugod/archive/2005/12/01/22057.html船夫 船夫 Thu, 01 Dec 2005 00:36:00 GMT http://www.tkk7.com/wangyugod/archive/2005/12/01/22057.html http://www.tkk7.com/wangyugod/comments/22057.html http://www.tkk7.com/wangyugod/archive/2005/12/01/22057.html#Feedback 0 http://www.tkk7.com/wangyugod/comments/commentRss/22057.html http://www.tkk7.com/wangyugod/services/trackbacks/22057.html 1.Velocity 的? Velocity是一个开放源吗的模版引擎Q由apache.org组负责开发,现在最新的版本是Velocity1.3.1Q?A target=_blank>http://jakarta.apache.org/velocity/index.html 可以了解Velocity的最C息? Velocity允许我们在模版中讑֮变量Q然后在q行Ӟ动态的数据插入到模版中,替换q些变量? 例如Q? <html> <body>HELLO $CUSTOMERNAME</body> </html> 我们可以在运行时得到客户的名字,然后把它插入到这个模版中替换变量$CUSTOMERNAMEQ整个替换过E是由Velocityq行控制的,而且java的调用代码也非常单,如我们可以在java代码中这栯? /***********************************************************/ //q个文g中设定了Velocity使用的log4j的配|和Velocity的模版文件所在的目录 Velocity.init("D:\\Template\\resource\\jt.properties"); //模版文g名,模版文g所在的路径在上一条语句中已经讄? Template template = Velocity.getTemplate("hello.vm", "gb2312"); //实例化一个Context VelocityContext context = new VelocityContext(); //把模版变量的D|到context? context.put("CUSTOMERNAME", "My First Template Engine ---- Velocity."); //开始模版的替换 template.merge(context, writer); //写到文g? PrintWriter filewriter = new PrintWriter(new FileOutputStream(outpath),true); filewriter.println(writer.toString()); filewriter.close(); /***********************************************************/ q就是整个java的代码,非常的简单。如果我们有多个模版变量Q我们仅需要把q些模版变量的D|到context中? 下面我们单的分析一下,Velocity引擎d模板文gӞ它直接输出文件中所有的文本Q但?字符开头的除外Q?W号标识着一个模版变量位|, context.put("CUSTOMERNAME", "My First Template Engine ---- Velocity."); ?Velocity 模板引擎解析q输出模板的l果Ӟ模板中所有出?CUSTOMERNAME的地斚w插入客L名字Q即被加入到VelocityContext的对象的toString()Ҏq回值将替代Velocity变量Q模板中?开头的变量Q? 模板引擎中最强大、用最频繁的功能之一是它通过内徏的映像(ReflectionQ引擎查扑֯象信息的能力。这个映像引擎允许用一U方便的Java?”类似的操作W,提取L加入到VelocityContext的对象的M公用Ҏ的|或对象的L数据成员? 映像引擎q带来了另外一个改q:快速引用JavaBean的属性。用JavaBean属性的时候,我们可以忽略getҎ和括受请看下面这个模板的例子? <html> <body> Name:$Customer.Name() Address:$Customer.Address() Age:$Customer.Age() </body> </html> java的代码: /***********************************************************/ //讄客户信息 Customer mycustomer = new Customer(); mycustomer.setName("Velocity"); mycustomer.setAddress("jakarta.apache.org/velocity/index.html"); mycustomer.setAge(2); //q个文g中设定了 Velocity 使用?Log4j 的配|和Velocity的模版文件所在的目录Velocity.init("D:\\Template\\resource\\jt.properties"); //模版文g名,模版文g所在的路径在上一条语句中已经讄? Template template = Velocity.getTemplate("hello.vm", "gb2312"); //实例化一个Context VelocityContext context = new VelocityContext(); //把模版变量的D|到context? context.put("Customer", mycustomer); //开始模版的替换 template.merge(context, writer); //写到文g? PrintWriter filewriter = new PrintWriter(new FileOutputStream(outpath),true); filewriter.println(writer.toString()); filewriter.close(); 输出l果Q? <html> <body> Name:Velocity Address:jakarta.apache.org/velocity/index.html Age:2 </body> </html> 除了替换变量之外Q象Velocity高引擎q能做其他许多事情,它们有用来比较和q代的内建指令,通过q些指o我们可以完成E序语言中的条g判断语句和@环语句等? 例如Q我们想要输出年龄等?的所有客L信息Q我们可以这样定义我们的模版 模版Q? <html> <body> <table> <tr> <td>名称</td> <td>地址</td> <td>q龄</td> </tr> #foreach ($Customer in $allCustomer) #if($Customer.Age()=="2") <tr> <td>$Customer.Name()</td> <td>$Customer.Address()</td> <td>$Customer.Age()</td> </tr> #end #end </table> </body> </html> java的代码: /******************************************************/ //讄客户信息 ArrayList allMyCustomer = new ArrayList(); //客户1 Customer mycustomer1 = new Customer(); mycustomer1.setName("Velocity"); mycustomer1.setAddress("jakarta.apache.org/velocity/index.html"); mycustomer1.setAge(2); //客户2 Customer mycustomer2 = new Customer(); mycustomer2.setName("Tomcat"); mycustomer2.setAddress("jakarta.apache.org/tomcat/index.html"); mycustomer2.setAge(3); //客户3 Customer mycustomer3 = new Customer(); mycustomer3.setName("Log4J"); mycustomer3.setAddress("jakarta.apache.org/log4j/docs/index.html"); mycustomer3.setAge(2); //d到allMyCustomer(ArrayList)? allMyCustomer.add(mycustomer1); allMyCustomer.add(mycustomer2); allMyCustomer.add(mycustomer3); //q个文g中设定了Velocity使用的log4j的配|和Velocity的模版文件所在的? Velocity.init("D:\\Template\\resource\\jt.properties"); //模版文g名,模版文g所在的路径在上一条语句中已经讄? Template template =Velocity.getTemplate("hello.vm", "gb2312"); //实例化一个Context VelocityContext context = new VelocityContext(); /** 注意q里我们仅仅需要给一个模版变量负?*/ context.put("allCustomer", allMyCustomer); //开始模版的替换 template.merge(context, writer); //写到文g? PrintWriter filewriter = new PrintWriter(new FileOutputStream(outpath),true); filewriter.println(writer.toString()); filewriter.close(); /******************************************************/ l果Q? <html> <body> <table> <tr> <td>名称</td> <td>地址</td> <td>q龄</td> </tr> <tr> <td>Velocity</td> <td>jakarta.apache.org/velocity/index.html</td> <td>2</td> </tr> <tr> <td>Log4J</td> <td>jakarta.apache.org/log4j/docs/index.html</td> <td>2</td> </tr> </table> </body> </html> #if 语句完成逻辑判断Q这个我想不用多说了? allCustomer对象包含零个或者多个Customer对象。由于ArrayList (List, HashMap, HashTable, Iterator, Vector{?属于Java Collections Framework的一部分Q我们可以用#foreach指oq代其内宏V我们不用担心如何定型对象的cd——映像引擎会为我们完成这个Q务?foreach指o的一般格式是?foreach in ”?foreach指oq代listQ把list中的每个元素攑օitem参数Q然后解?foreach块内的内宏V对于list内的每个元素Q?foreach块的内容都会重复解析一ơ。从效果上看Q它相当于告诉模板引擎说Q“把list中的每一个元素依ơ放入item变量Q每ơ放入一个元素,输出一?foreach块的内容”? 2.MVC设计模型 使用模板引擎最大的好处在于Q它分离了代码(或程序逻辑Q和表现Q输出)。由于这U分,你可以修改程序逻辑而不必担心邮件消息本w;cM圎ͼ你(或公关部门的职员Q可以在不重新编译程序的情况下,重新~写客户列表。实际上Q我们分Mpȝ的数据模式(Data ModelQ即提供数据的类Q、控制器QControllerQ即客户列表E序Q以及视图(ViewQ即模板Q。这U三层体pȝ为Model-View-Controller模型QMVCQ? 如果遵从MVC模型Q代码分成三个截然不同的层,化了软g开发过E中所有相关h员的工作? l合模板引擎使用的数据模式可以是MJava对象Q最好是使用Java Collection Framework的对象。控制器只要了解模板的环境(如VelocityContextQ,一般这U环境都很容易用? 一些关pL据库的“对?关系”映工兯够和模板引擎很好地协同,化JDBC操作Q对于EJBQ情形也cM?模板引擎与MVC中视图这一部分的关pL为密切。模板语a的功能很丰富、强大,以处理所有必需的视囑֊能,同时它往往很简单,不熟悉编E的Z可以使用它。模板语a不仅使得设计者从q于复杂的编E环境中解脱出来Q而且它保护了pȝQ避免了有意或无意带来危险的代码。例如,模板的编写者不可能~写出导致无限@环的代码Q或侵占大量内存的代码。不要轻估这些安全机制的价|大多数模板编写者不懂得~程Q从长远来看Q避免他们接触复杂的~程环境相当于节省了你自q旉?许多模板引擎的用L信,在采用模板引擎的Ҏ中,控制器部分和视图部分的明分,再加上模板引擎固有的安全机制Q得模板引擎以成为其他内容发布系l(比如JSPQ的替代Ҏ。因此,Java模板引擎最常见的用途是替代JSP也就不为奇了? 3.HTML处理 ׃ZL看重模板引擎用来替换JSP的作用,有时他们会忘记模板还有更q泛的用途。到目前为止Q模板引擎最常见的用途是处理HTML Web内容。但我还用模板引擎生成过SQL、email、XML甚至Java源代码?/DIV> ]]> IBATIS SQLMap详解 http://www.tkk7.com/wangyugod/archive/2005/11/09/19034.html船夫 船夫 Wed, 09 Nov 2005 11:17:00 GMT http://www.tkk7.com/wangyugod/archive/2005/11/09/19034.html http://www.tkk7.com/wangyugod/comments/19034.html http://www.tkk7.com/wangyugod/archive/2005/11/09/19034.html#Feedback 0 http://www.tkk7.com/wangyugod/comments/commentRss/19034.html http://www.tkk7.com/wangyugod/services/trackbacks/19034.html 阅读全文 ]]> [数据库]JDBCq接数据库经验技巧集萃(转蝲自Blog For EveryoneQ?/title> http://www.tkk7.com/wangyugod/archive/2005/11/08/18713.html船夫 船夫 Tue, 08 Nov 2005 03:46:00 GMT http://www.tkk7.com/wangyugod/archive/2005/11/08/18713.html http://www.tkk7.com/wangyugod/comments/18713.html http://www.tkk7.com/wangyugod/archive/2005/11/08/18713.html#Feedback 0 http://www.tkk7.com/wangyugod/comments/commentRss/18713.html http://www.tkk7.com/wangyugod/services/trackbacks/18713.html 一、连接各U数据库方式速查?/B> 下面|列了各U数据库使用JDBCq接的方式,可以作ؓ一个手册用? 1、Oracle8/8i/9i数据库(thin模式Q?
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID String user="test"; String password="test"; Connection conn= DriverManager.getConnection(url,user,password);
2、DB2数据?
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); String url="jdbc:db2://localhost:5000/sample"; //sampleZ的数据库? String user="admin"; String password=""; Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000数据?
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; //mydb为数据库 String user="sa"; String password=""; Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase数据?
Class.forName("com.sybase.jdbc.SybDriver").newInstance(); String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDBZ的数据库? Properties sysProps = System.getProperties(); SysProps.put("user","userid"); SysProps.put("password","user_password"); Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix数据?
Class.forName("com.informix.jdbc.IfxDriver").newInstance(); String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; user=testuser;password=testpassword"; //myDB为数据库? Connection conn= DriverManager.getConnection(url);
6、MySQL数据?
Class.forName("org.gjt.mm.mysql.Driver").newInstance(); String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" //myDB为数据库? Connection conn= DriverManager.getConnection(url);
7、PostgreSQL数据?
Class.forName("org.postgresql.Driver").newInstance(); String url ="jdbc:postgresql://localhost/myDB" //myDB为数据库? String user="myuser"; String password="mypassword"; Connection conn= DriverManager.getConnection(url,user,password);
8、access数据库直q用ODBC?BR>
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ; String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb"); Connection conn = DriverManager.getConnection(url,"",""); Statement stmtNew=conn.createStatement() ;
二、JDBCq接MySql方式 下面是用JDBCq接MySql的一个小的教E? 1、查N动程?BR> MySQL目前提供的java驱动E序为Connection/JQ可以从MySQL官方|站下蝲Qƈ扑ֈmysql-connector-java-3.0.15-ga-bin.jar文gQ此驱动E序为纯java驱动E序Q不需做其他配|?BR> 2、动态指定classpath 如果需要执行时动态指定classpathQ就在执行时采用Qcp方式。否则将上面?jar文g加入到classpath环境变量中?BR> 3、加载驱动程?BR>
try{ Class.forName(com.mysql.jdbc.Driver); System.out.println(Success loading Mysql Driver!); }catch(Exception e) { System.out.println(Error loading Mysql Driver!); e.printStackTrace(); }
4、设|连接的url
jdbcQmysqlQ?/localhost/databasename[?pa=va][Qpa=va]
三、以下列Z在用JDBC来连接Oracle数据库时可以使用的一些技?/B> 1、在客户端Y件开发中使用Thin驱动E序 在开发Java软g斚wQOracle的数据库提供了四U类型的驱动E序Q二U用于应用Y件、applets、servlets{客L软gQ另外二U用于数据库中的Java存储q程{服务器端Y件。在客户机端软g的开发中Q我们可以选择OCI驱动E序或Thin驱动E序。OCI驱动E序利用Java本地化接口(JNIQ,通过Oracle客户端Y件与数据库进行通讯。Thin驱动E序是纯Java驱动E序Q它直接与数据库q行通讯。ؓ了获得最高的性能QOracle在客L软g的开发中使用OCI驱动E序Q这g是正的。但我徏议用Thin驱动E序Q因为通过多次试发现Q在通常情况下,Thin驱动E序的性能都超q了OCI驱动E序?BR> 2、关闭自动提交功能,提高pȝ性能 在第一ơ徏立与数据库的q接Ӟ在缺省情况下Q连接是在自动提交模式下的。ؓ了获得更好的性能Q可以通过调用带布值false参数的ConnectioncȝsetAutoCommit()Ҏ关闭自动提交功能Q如下所C: conn.setAutoCommit(false); 值得注意的是Q一旦关闭了自动提交功能Q我们就需要通过调用Connectioncȝcommit()和rollback()Ҏ来h工的方式对事务进行管理?BR> 3、在动态SQL或有旉限制的命令中使用Statement对象 在执行SQL命oӞ我们有二U选择Q可以用PreparedStatement对象Q也可以使用Statement对象。无论多次C用同一个SQL命oQPreparedStatement都只对它解析和编译一ơ。当使用Statement对象Ӟ每次执行一个SQL命oӞ都会对它q行解析和编译。这可能会你认为,使用PreparedStatement对象比用Statement对象的速度更快。然而,我进行的试表明Q在客户端Y件中Q情况ƈ非如此。因此,在有旉限制的SQL操作中,除非成批地处理SQL命oQ我们应当考虑使用Statement对象?BR> 此外Q用Statement对象也得编写动态SQL命o更加单,因ؓ我们可以字W串q接在一P建立一个有效的SQL命o。因此,我认为,Statement对象可以使动态SQL命o的创建和执行变得更加单?BR> 4、利用helper函数对动态SQL命oq行格式?BR> 在创Z用Statement对象执行的动态SQL命oӞ我们需要处理一些格式化斚w的问题。例如,如果我们惛_Z个将名字O'Reilly插入表中的SQL命oQ则必须使用二个相连的?'”号替换O'Reilly中的?”号。完成这些工作的最好的Ҏ是创Z个完成替换操作的helperҎQ然后在q接字符串心服用公式表达一个SQL命oӞ使用创徏的helperҎ。与此类似的是,我们可以让helperҎ接受一个Date型的|然后让它输出ZOracle的to_date()函数的字W串表达式?BR> 5、利用PreparedStatement对象提高数据库的M效率 在用PreparedStatement对象执行SQL命oӞ命o被数据库q行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象Ӟ它就会被再解析一ơ,但不会被再次~译。在~冲Z可以发现预编译的命oQƈ且可以重C用。在有大量用L企业U应用Y件中Q经怼重复执行相同的SQL命oQ用PreparedStatement对象带来的编译次数的减少能够提高数据库的M性能。如果不是在客户端创建、预备、执行PreparedStatementd需要的旉长于StatementdQ我会徏议在除动态SQL命o之外的所有情况下使用PreparedStatement对象?BR> 6、在成批处理重复的插入或更新操作中用PreparedStatement对象 如果成批地处理插入和更新操作Q就能够显著地减它们所需要的旉。Oracle提供的Statement?CallableStatementq不真正地支持批处理Q只有PreparedStatement对象才真正地支持批处理。我们可以用addBatch()和executeBatch()Ҏ选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()Ҏ和标准的executeUpdate()Ҏ选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制Q可以以如下所C的方式调用setExecuteBatch()Q?BR>
PreparedStatement pstmt3D null; try { ((OraclePreparedStatement)pstmt).setExecuteBatch(30); ... pstmt.executeUpdate(); }
调用setExecuteBatch()时指定的值是一个上限,当达到该值时Q就会自动地引发SQL命o执行Q标准的executeUpdate()Ҏ׃被作为批处理送到数据库中。我们可以通过调用PreparedStatementcȝsendBatch()Ҏ随时传输批处理Q务?BR> 7、用Oracle locatorҎ插入、更新大对象QLOBQ?BR> Oracle的PreparedStatementcM完全支持BLOB和CLOB{大对象的处理,其是Thin驱动E序不支持利用PreparedStatement对象的setObject()和setBinaryStream()Ҏ讄BLOB的|也不支持利用setCharacterStream()Ҏ讄CLOB的倹{只有locator本n中的Ҏ才能够从数据库中获取LOBcd的倹{可以用PreparedStatement对象插入或更新LOBQ但需要用locator才能获取LOB的倹{由于存在这二个问题Q因此,我徏议用locator的方法来插入、更新或获取LOB的倹{?BR> 8、用SQL92语法调用存储q程 在调用存储过E时Q我们可以用SQL92或Oracle PL/SQLQ由于用Oracle PL/SQLq没有什么实际的好处Q而且会给以后l护你的应用E序的开发h员带来麻烦,因此Q我在调用存储过E时使用SQL92?BR> 9、用Object SQL对象模式{Ud数据库中 既然可以Oracle的数据库作ؓ一U面向对象的数据库来使用Q就可以考虑应用程序中的面向对象模式{到数据库中。目前的Ҏ是创建Java bean作ؓ伪装的数据库对象Q将它们的属性映到关系表中Q然后在q些bean中添加方法。尽这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的Q因此其他访问数据库的应用Y件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创徏一个新的数据库对象cd在数据库中模仿其数据和操作,然后使用JPublisher{工L成自qJava beancR如果用这U方式,不但Java应用E序可以使用应用软g的对象模式,其他需要共享你的应用中的数据和操作的应用Y件也可以使用应用软g中的对象模式?BR> 10、利用SQL完成数据库内的操?BR> 我要向大家介l的最重要的经验是充分利用SQL的面向集合的Ҏ来解x据库处理需求,而不是用Java{过E化的编E语a?BR> 如果~程人员要在一个表中查找许多行Q结果中的每个行都会查找其他表中的数据,最后,~程人员创徏了独立的UPDATE命o来成批地更新W一个表中的数据。与此类似的d可以通过在set子句中用多列子查询而在一个UPDATE命o中完成。当能够在单一的SQL命o中完成Q务,何必要让数据在网上流来流ȝQ我用户认真学习如何最大限度地发挥SQL的功能?/SPAN> ]]>
վ֩ģ壺
69˾ƷƵ |
þþþƷƵ |
99ƷѾþþþþ |
ۺϳ91Ʒ |
йڶѲ |
99ȳ˾ƷȾþ |
2019Ļ |
ٶ˽ȫֱ |
һѹۿ |
aaվ |
Ȱһ |
ҾƷѾþþþӰԺ
|
պһ |
˸߹ۿƵ |
ҹƷ |
˳ɫ4444߹ۿ |
ձػaѴƬ |
Ʒһߵ |
AëƬ߲ |
avҹƷר |
վѹۿ |
ĻһƵ |
ձ߹ۿ |
þþƷվ |
av |
岻 |
ƷƵ |
Ʒ |
Ʒרţţ |
Ʒ |
½һëƬƵۿi |
ƷƵ |
ˮƵ߹ۿѲŸ
|
йavƬ |
avһؼ |
aƵapp |
³˿Ƭһ |
Ʒ18þþþþ |
˽Ƶ75 |
ƷĻѹۿҹ |
þþþþƷӰԺ |