﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-浪迹天涯-随笔分类-学习日记</title><link>http://www.blogjava.net/senlin-blog/category/10112.html</link><description>web报表设计器....</description><language>zh-cn</language><lastBuildDate>Sat, 06 Feb 2010 01:55:43 GMT</lastBuildDate><pubDate>Sat, 06 Feb 2010 01:55:43 GMT</pubDate><ttl>60</ttl><item><title>load runner8.1不能录制脚本的问题解决</title><link>http://www.blogjava.net/senlin-blog/archive/2010/02/05/312113.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Fri, 05 Feb 2010 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2010/02/05/312113.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/312113.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2010/02/05/312113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/312113.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/312113.html</trackback:ping><description><![CDATA[1.打开IE--&gt;Internet选项--&gt;高级--把"启用第三方浏览器扩展"前面的勾去掉.<br />2.打开IE--&gt;Internet选项--&gt;高级，把“禁用脚本调试（Internet Explorer）”和“禁用脚本调试（其它）”前面的勾去掉.<br />  建议使用使用IE6.<img src ="http://www.blogjava.net/senlin-blog/aggbug/312113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2010-02-05 15:15 <a href="http://www.blogjava.net/senlin-blog/archive/2010/02/05/312113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>控制你的网页进行翻页打印</title><link>http://www.blogjava.net/senlin-blog/archive/2008/04/10/191921.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Thu, 10 Apr 2008 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2008/04/10/191921.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &lt;%				@ page contentType				=				"				text/html; charset=UTF-8				"				 				%&gt;																								&lt;				Html				&gt;				 				&lt;				head				&gt;				 ...&nbsp;&nbsp;<a href='http://www.blogjava.net/senlin-blog/archive/2008/04/10/191921.html'>阅读全文</a><img src ="http://www.blogjava.net/senlin-blog/aggbug/191921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2008-04-10 17:00 <a href="http://www.blogjava.net/senlin-blog/archive/2008/04/10/191921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读取网卡的mac地址</title><link>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106160.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Sat, 24 Mar 2007 16:47:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106160.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/106160.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/106160.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/106160.html</trackback:ping><description><![CDATA[
		<p>package com.paiao.ReadMac;</p>
		<p>import java.io.BufferedReader;<br />import java.io.InputStreamReader;<br />import java.io.IOException;</p>
		<p>public class ReadMac {<br />    public ReadMac() {<br />    }</p>
		<p>    public static String getMACAddress() {</p>
		<p>        String address = "";<br />        String os = System.getProperty("os.name");<br />        if (os != null &amp;&amp; os.startsWith("Windows")) {<br />            try {<br />                String command = "cmd.exe /c ipconfig /all";<br />                Process p = Runtime.getRuntime().exec(command);<br />                BufferedReader br =<br />                        new BufferedReader(<br />                                new InputStreamReader(p.getInputStream()));<br />                String line;<br />                while ((line = br.readLine()) != null) {<br />                    if (line.indexOf("Physical Address") &gt; 0) {<br />                        int index = line.indexOf(":");<br />                        index += 2;<br />                        address = line.substring(index);<br />                        break;<br />                    }<br />                }<br />                br.close();<br />                return address.trim();<br />            } catch (IOException e) {}<br />        }<br />        return address;<br />    }</p>
		<p>public static void main(String[] args) {<br />    System.out.println("Mac:"+ReadMac.getMACAddress());<br />}<br />}<br /></p>
<img src ="http://www.blogjava.net/senlin-blog/aggbug/106160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2007-03-25 00:47 <a href="http://www.blogjava.net/senlin-blog/archive/2007/03/25/106160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断sever 2000数据库是否开启</title><link>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106159.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Sat, 24 Mar 2007 16:46:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106159.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/106159.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/106159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/106159.html</trackback:ping><description><![CDATA[            public boolean Check_DataBase_IsOpen(String fwqIP,String user,String password) {<br />              boolean m_boo = true;<br />              String url =  "jdbc:jtds:sqlserver:"+"//"+fwqIP+":1433;DatabaseName=master;lastupdatecount=true;SelectMethod=cursor";<br />              com.paiao.app.db.DbBase dbbase  =  com.paiao.app.db.DbBase.getInstance();<br />              Connection con = this.con(url,user,password);<br />              PreparedStatement pstm = null;<br />              String sqls1 = "create database shebei_paiao ";<br />              //String sqls1 = "select * from syscolumns ";<br />              try {<br />                pstm = con.prepareStatement(sqls1);<br />                pstm.execute();<br />                m_boo = true;<br />              }<br />              catch (Exception e) {<br />                m_boo = false;<br />                System.out.println("您的mssqlserver数据库没有启动!");<br />              }<br />              finally {<br />                dbbase.Release(pstm, con);<br />              }<br />              return m_boo;<br />            } <img src ="http://www.blogjava.net/senlin-blog/aggbug/106159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2007-03-25 00:46 <a href="http://www.blogjava.net/senlin-blog/archive/2007/03/25/106159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用setup Factory 7.0 制做安装文件时修改注册表的方法</title><link>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106158.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Sat, 24 Mar 2007 16:41:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106158.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/106158.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106158.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/106158.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/106158.html</trackback:ping><description><![CDATA[
		<p>--打包一个由jdk1.5,tomcat5.5下开发的项目,以前tomcat 4.1下很好处理jdk路径问题,只需要在startup.bat和shutdown.bat文件中加入如下两句就可以了:</p>
		<p>set CATALINA_HOME=..//在这句下面加入<br />//设定jdk的路径<br />set JAVA_HOME=..\..\%CATALINA_HOME%\jdk1.4<br />:gotHome  //=..//在这句上面加入</p>
		<p>但是用了tomcat5.5却没有了这两个文件,它将自已的安装路径和jdk的路径都写到注册表中了.</p>
		<p>这就需要在打包时动态的修改注册表,否则将不能正常使用.</p>
		<p>-- 安装路径:your_variable<br />--Dialog.Message(your_variable, your_variable, MB_OK, MB_ICONEXCLAMATION);</p>
		<p>-- 创建一个全局变量，并赋予一个字符串<br />your_variable1 = "";</p>
		<p>--Dialog.Message(your_variable, your_variable, MB_OK, MB_ICONEXCLAMATION);<br />-- 从注册表中导入的值:<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Tomcat");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Tomcat\\5.5");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters");<br />your_variable1=String.Replace("D:\\Software\\Tomcat 5.5","D:\\Software",your_variable,true);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Tomcat\\5.5", "InstallPath", your_variable1, 7);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Tomcat\\5.5", "Version", "5.5.12", 7);<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Java");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Log");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop");<br />your_variable1=String.Replace("D:\\Software\\jdk1.5\\bin\\client\\jvm.dll","D:\\Software",your_variable,true);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Java", "Jvm",your_variable1, 1);<br />your_variable1=String.Replace("D:\\Software\\Tomcat 5.5\\bin\\bootstrap.jar","D:\\Software",your_variable,true);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Java", "Classpath",your_variable1, 1);</p>
		<p>your_variable1=String.Replace("-Dcatalina.home=D:\\Software\\Tomcat 5.5|-Dcatalina.base=D:\\Software\\Tomcat 5.5|-Djava.endorsed.dirs=D:\\Software\\Tomcat 5.5\\common\\endorsed|-Djava.io.tmpdir=D:\\Software\\Tomcat 5.5\\temp|-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager|-Djava.util.logging.config.file=D:\\Software\\Tomcat 5.5\\conf\\logging.properties","D:\\Software",your_variable,true);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Java", "Options", your_variable1, 7);</p>
		<p>your_variable1=String.Replace("D:\\Software\\Tomcat 5.5\\logs","D:\\Software",your_variable,true);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Log", "Path",your_variable1 , 1);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Log", "StdError", "auto", 1);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Log", "StdOutput", "auto", 1);</p>
		<p>your_variable1=String.Replace("D:\\Software\\Tomcat 5.5","D:\\Software",your_variable,true);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start", "WorkingPath", your_variable1, 1);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start", "Class", "org.apache.catalina.startup.Bootstrap", 1);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start", "Params", "start", 7);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start", "Mode", "jvm", 1);</p>
		<p>your_variable1=String.Replace("D:\\Software\\Tomcat 5.5","D:\\Software",your_variable,true);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop", "WorkingPath", your_variable1, 1);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop", "Class", "org.apache.catalina.startup.Bootstrap", 1);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop", "Params", "stop", 7);<br />Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop", "Mode", "jvm", 1);</p>
		<p>
				<br />-- 从注册表中导入的值:<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "Type", "16", 4);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "Start", "3", 4);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "ErrorControl", "1", 4);<br />your_variable1=String.Replace("\"D:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\bin\\Tomcat5.exe\" //RS//Tomcat5","D:\\Program Files\\Apache Software Foundation",your_variable,true);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "ImagePath", your_variable1, 2);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "DisplayName", "Apache Tomcat", 7);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "ObjectName", "LocalSystem", 7);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "Description", "Apache Tomcat 5.5.12 Server - <a href="http://tomcat.apache.org/">http://tomcat.apache.org/</a>", 7);<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Enum");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Parameters");<br />Registry.CreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Security");<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Enum", "0", "Root\\LEGACY_Tomcat5\\0000", 7);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Enum", "Count", "1", 4);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Enum", "NextInstance", "1", 4);<br />Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Security", "Security", "01 00 14 80 90 00 00 00 9C 00 00 00 14 00 00 00 30 00 00 00 02 00 1C 00 01 00 00 00 02 80 14 00 FF 01 0F 00 01 01 00 00 00 00 00 01 00 00 00 00 02 00 60 00 04 00 00 00 00 00 14 00 FD 01 02 00 01 01 00 00 00 00 00 05 12 00 00 00 00 00 18 00 FF 01 0F 00 01 02 00 00 00 00 00 05 20 00 00 00 20 02 00 00 00 00 14 00 8D 01 02 00 01 01 00 00 00 00 00 05 0B 00 00 00 00 00 18 00 FD 01 02 00 01 02 00 00 00 00 00 05 20 00 00 00 23 02 00 00 01 01 00 00 00 00 00 05 12 00 00 00 01 01 00 00 00 00 00 05 12 00 00 00", 3);<br /></p>
<img src ="http://www.blogjava.net/senlin-blog/aggbug/106158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2007-03-25 00:41 <a href="http://www.blogjava.net/senlin-blog/archive/2007/03/25/106158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用java的ZipOutputStream类压缩文件或文件夹中的文件</title><link>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106157.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Sat, 24 Mar 2007 16:36:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106157.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/106157.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/106157.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/106157.html</trackback:ping><description><![CDATA[
		<p>package codemaking.util;</p>
		<p>import java.io.File;<br />import org.apache.tools.zip.ZipOutputStream;<br />import java.io.FileInputStream;<br />import java.io.FileOutputStream;<br />import java.util.zip.ZipInputStream;<br />import java.util.zip.ZipEntry;</p>
		<p>
				<br />public class CompressBook {<br />  public CompressBook() {<br />  }</p>
		<p>  /*<br />   * inputFileName 输入一个文件夹<br />   * zipFileName 输出一个压缩文件夹<br />   */<br />  public void zip(String inputFileName) throws Exception {<br />    String zipFileName = "c:\\test.zip"; //打包后文件名字<br />    System.out.println(zipFileName);<br />    zip(zipFileName, new File(inputFileName));<br />  }</p>
		<p>  private void zip(String zipFileName, File inputFile) throws Exception {<br />    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));<br />    zip(out, inputFile, "");<br />    System.out.println("zip done");<br />    out.close();<br />  }</p>
		<p>  private void zip(ZipOutputStream out, File f, String base) throws Exception {<br />    if (f.isDirectory()) {<br />      File[] fl = f.listFiles();<br />      out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));<br />      base = base.length() == 0 ? "" : base + "/";<br />      for (int i = 0; i &lt; fl.length; i++) {<br />        zip(out, fl[i], base + fl[i].getName());<br />      }<br />    }<br />    else {<br />      out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));<br />      FileInputStream in = new FileInputStream(f);<br />      int b;<br />      System.out.println(base);<br />      while ( (b = in.read()) != -1) {<br />        out.write(b);<br />      }<br />      in.close();<br />    }<br />  }</p>
		<p>  public static void main(String [] temp){<br />    CompressBook book = new CompressBook();<br />    try {<br />      book.zip("c:\\test",new File("c:\\test"));<br />    }<br />    catch (Exception ex) {<br />    }<br />  }<br />}</p>
<img src ="http://www.blogjava.net/senlin-blog/aggbug/106157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2007-03-25 00:36 <a href="http://www.blogjava.net/senlin-blog/archive/2007/03/25/106157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用java的ZipOutputStream类解压文件或文件夹中的文件</title><link>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106156.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Sat, 24 Mar 2007 16:35:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106156.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/106156.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2007/03/25/106156.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/106156.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/106156.html</trackback:ping><description><![CDATA[
		<p>package codemaking.util;</p>
		<p>import java.io.BufferedInputStream;<br />import java.io.BufferedOutputStream;<br />import java.io.File;<br />import java.io.FileInputStream;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.OutputStream;<br />import java.util.ArrayList;<br />import java.util.Enumeration;<br />import java.util.List;<br />import java.util.zip.ZipEntry;<br />import java.util.zip.ZipFile;<br />import java.util.zip.ZipOutputStream;<br />import java.util.zip.GZIPInputStream;<br />import java.io.DataInputStream;</p>
		<p> </p>
		<p>/**<br /> * Description: 此类用于...<br /> *<br /> * @author    wunaigang(2005-6-21)<br /> * @version   1.0.0<br /> */<br />public class ZipManager {</p>
		<p> </p>
		<p>        /**<br />         * zip压缩功能测试. 将d:\\temp\\zipout目录下的所有文件连同子目录压缩到d:\\temp\\out.zip.<br />         *<br />         * @param baseDir 所要压缩的目录名（包含绝对路径）<br />         * @param objFileName 压缩后的文件名<br />         * @throws Exception<br />         */<br />        public void createZip(String baseDir, String objFileName) throws Exception {<br />                File folderObject = new File(baseDir);</p>
		<p> </p>
		<p>                if (folderObject.exists()){<br />                        List fileList = getSubFiles(new File(baseDir));</p>
		<p> </p>
		<p>                        //压缩文件名<br />                        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFileName));</p>
		<p> </p>
		<p>                        ZipEntry ze = null;<br />                        byte[] buf = new byte[1024];<br />                        int readLen = 0;<br />                        for (int i = 0; i &lt; fileList.size(); i++) {<br />                                File f = (File) fileList.get(i);<br />                                System.out.println("Adding: " + f.getPath() + f.getName());</p>
		<p> </p>
		<p>                                //创建一个ZipEntry，并设置Name和其它的一些属性<br />                                ze = new ZipEntry(getAbsFileName(baseDir, f));<br />                                ze.setSize(f.length());<br />                                ze.setTime(f.lastModified());</p>
		<p> </p>
		<p>                                //将ZipEntry加到zos中，再写入实际的文件内容<br />                                zos.putNextEntry(ze);<br />                                InputStream is = new BufferedInputStream(new FileInputStream(f));<br />                                while ((readLen = is.read(buf, 0, 1024)) != -1) {<br />                                        zos.write(buf, 0, readLen);<br />                                }<br />                                is.close();<br />                                System.out.println("done...");<br />                        }<br />                        zos.close();<br />                }else{<br />                        throw new Exception("this folder isnot exist!");<br />                }<br />        }<br />        /**<br />         * zip压缩功能测试. 将指定文件压缩后存到一压缩文件中<br />         *<br />         * @param baseDir 所要压缩的文件名<br />         * @param objFileName 压缩后的文件名<br />         * @return 压缩后文件的大小<br />         * @throws Exception<br />         */<br />        public long createFileToZip(String zipFilename,String sourceFileName) throws Exception {</p>
		<p> </p>
		<p>                File  sourceFile = new File(sourceFileName);</p>
		<p> </p>
		<p>                byte[] buf = new byte[1024];</p>
		<p> </p>
		<p>                //压缩文件名<br />                File objFile = new File(zipFilename);</p>
		<p> </p>
		<p>                ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFile));</p>
		<p> </p>
		<p>                ZipEntry ze = null;<br />                //创建一个ZipEntry，并设置Name和其它的一些属性<br />                ze = new ZipEntry(sourceFile.getName());<br />                ze.setSize(sourceFile.length());<br />                ze.setTime(sourceFile.lastModified());</p>
		<p> </p>
		<p>                //将ZipEntry加到zos中，再写入实际的文件内容<br />                zos.putNextEntry(ze);</p>
		<p> </p>
		<p>                InputStream is = new BufferedInputStream(new FileInputStream(sourceFile));</p>
		<p> </p>
		<p>                int readLen = -1;<br />                while ((readLen = is.read(buf, 0, 1024)) != -1) {<br />                        zos.write(buf, 0, readLen);<br />                }<br />                is.close();<br />                zos.close();</p>
		<p> </p>
		<p>
				<br />                return objFile.length();<br />        }<br />        /**<br />         * zip压缩功能测试. 将指定文件压缩后存到一压缩文件中<br />         *<br />         * @param baseDir 所要压缩的文件名<br />         * @param objFileName 压缩后的文件名<br />         * @return 压缩后文件的大小<br />         * @throws Exception<br />         */<br />        public long createFileToZip(File sourceFile,File zipFile)throws IOException {</p>
		<p> </p>
		<p>
				<br />                byte[] buf = new byte[1024];</p>
		<p> </p>
		<p>                //压缩文件名<br />                File objFile = zipFile;</p>
		<p> </p>
		<p>                ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFile));</p>
		<p> </p>
		<p>                ZipEntry ze = null;<br />                //创建一个ZipEntry，并设置Name和其它的一些属性<br />                ze = new ZipEntry(sourceFile.getName());<br />                ze.setSize(sourceFile.length());<br />                ze.setTime(sourceFile.lastModified());</p>
		<p> </p>
		<p>                //将ZipEntry加到zos中，再写入实际的文件内容<br />                zos.putNextEntry(ze);</p>
		<p> </p>
		<p>                InputStream is = new BufferedInputStream(new FileInputStream(sourceFile));</p>
		<p> </p>
		<p>                int readLen = -1;<br />                while ((readLen = is.read(buf, 0, 1024)) != -1) {<br />                        zos.write(buf, 0, readLen);<br />                }<br />                is.close();<br />                zos.close();</p>
		<p> </p>
		<p>                return objFile.length();<br />        }</p>
		<p> </p>
		<p>        /**<br />         * 测试解压缩功能. 将d:\\download\\test.zip连同子目录解压到d:\\temp\\zipout目录下.<br />         *<br />         * @throws Exception<br />         */<br />        public void releaseZipToFile(String sourceZip, String outFileName)<br />                        throws IOException{<br />                      ZipFile zfile=new ZipFile(sourceZip);<br />                      System.out.println(zfile.getName());<br />                      Enumeration zList=zfile.entries();<br />                      ZipEntry ze=null;<br />                      byte[] buf=new byte[1024];<br />                      while(zList.hasMoreElements()){<br />                      //从ZipFile中得到一个ZipEntry<br />                      ze=(ZipEntry)zList.nextElement();<br />                      if(ze.isDirectory()){<br />                      continue;<br />                      }<br />                      //以ZipEntry为参数得到一个InputStream，并写到OutputStream中<br />                      OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(outFileName, ze.getName())));<br />                      InputStream is=new BufferedInputStream(zfile.getInputStream(ze));<br />                      int readLen=0;<br />                      while ((readLen=is.read(buf, 0, 1024))!=-1) {<br />                      os.write(buf, 0, readLen);<br />                      }<br />                      is.close();<br />                      os.close();<br />                      System.out.println("Extracted: "+ze.getName());<br />                      }<br />                      zfile.close();</p>
		<p>        }</p>
		<p> </p>
		<p>        /**<br />         * 取得指定目录下的所有文件列表，包括子目录.<br />         *<br />         * @param baseDir<br />         *            File 指定的目录<br />         * @return 包含java.io.File的List<br />         */<br />        private List getSubFiles(File baseDir) {<br />                List ret = new ArrayList();<br />                //File base=new File(baseDir);<br />                File[] tmp = baseDir.listFiles();<br />                for (int i = 0; i &lt; tmp.length; i++) {<br />                        if (tmp[i].isFile()) {<br />                                ret.add(tmp[i]);<br />                        }<br />                        if (tmp[i].isDirectory()) {<br />                                ret.addAll(getSubFiles(tmp[i]));<br />                        }<br />                }<br />                return ret;<br />        }</p>
		<p> </p>
		<p>        /**<br />         * 给定根目录，返回一个相对路径所对应的实际文件名.<br />         *<br />         * @param baseDir<br />         *            指定根目录<br />         * @param absFileName<br />         *            相对路径名，来自于ZipEntry中的name<br />         * @return java.io.File 实际的文件<br />         */<br />        private File getRealFileName(String baseDir, String absFileName) {<br />                String[] dirs = absFileName.split("/");<br />                //System.out.println(dirs.length);<br />                File ret = new File(baseDir);<br />                //System.out.println(ret);<br />                if (dirs.length &gt; 1) {<br />                        for (int i = 0; i &lt; dirs.length - 1; i++) {<br />                                ret = new File(ret, dirs[i]);<br />                        }<br />                }<br />                if (!ret.exists()) {<br />                        ret.mkdirs();<br />                }<br />                ret = new File(ret, dirs[dirs.length - 1]);<br />                return ret;<br />        }</p>
		<p> </p>
		<p>        /**<br />         * 给定根目录，返回另一个文件名的相对路径，用于zip文件中的路径.<br />         *<br />         * @param baseDir<br />         *            java.lang.String 根目录<br />         * @param realFileName<br />         *            java.io.File 实际的文件名<br />         * @return 相对文件名<br />         */<br />        private String getAbsFileName(String baseDir, File realFileName) {<br />                File real = realFileName;<br />                File base = new File(baseDir);<br />                String ret = real.getName();<br />                while (true) {<br />                        real = real.getParentFile();<br />                        if (real == null)<br />                                break;<br />                        if (real.equals(base))<br />                                break;<br />                        else {<br />                                ret = real.getName() + "/" + ret;<br />                        }<br />                }<br />                System.out.println("TTTTT" + ret);<br />                return ret;<br />        }</p>
		<p>
				<br />        public void testReadZip() throws Exception{<br />        String baseDir="d:\\temp\\zipout";<br />        ZipFile zfile=new ZipFile("d:\\download\\src.zip");<br />        System.out.println(zfile.getName());<br />        Enumeration zList=zfile.entries();<br />        ZipEntry ze=null;<br />        byte[] buf=new byte[1024];<br />        while(zList.hasMoreElements()){<br />        //从ZipFile中得到一个ZipEntry<br />        ze=(ZipEntry)zList.nextElement();<br />        if(ze.isDirectory()){<br />        continue;<br />        }<br />        //以ZipEntry为参数得到一个InputStream，并写到OutputStream中<br />        OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(baseDir, ze.getName())));<br />        InputStream is=new BufferedInputStream(zfile.getInputStream(ze));<br />        int readLen=0;<br />        while ((readLen=is.read(buf, 0, 1024))!=-1) {<br />        os.write(buf, 0, readLen);<br />        }<br />        is.close();<br />        os.close();<br />        System.out.println("Extracted: "+ze.getName());<br />        }<br />        zfile.close();<br />        }</p>
		<p>
				<br />   public static void main(String args[]){<br />     ZipManager manager = new ZipManager();<br />     try {<br />       //manager.releaseZipToFile("c:\\test.zip","c:\\test");<br />       manager.testReadZip();<br />     }<br />     catch (Exception e) {}<br />     System.out.println("over");<br />   }<br /> </p>
		<p>
				<br />}</p>
<img src ="http://www.blogjava.net/senlin-blog/aggbug/106156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2007-03-25 00:35 <a href="http://www.blogjava.net/senlin-blog/archive/2007/03/25/106156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在jboss 4.0中调用EJB组件</title><link>http://www.blogjava.net/senlin-blog/archive/2006/08/16/64014.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Wed, 16 Aug 2006 15:02:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2006/08/16/64014.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/64014.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2006/08/16/64014.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/64014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/64014.html</trackback:ping><description><![CDATA[JBoss 4.0自动集成了Tomcat 5.0，因而它不仅仅是专业的EJB容器，同时也成了专业的JSP/servlet容器和Web服务器。<br /><br />　　Tomcat 5.0 被集成在 jboss的下面这个目录中：<br /><br />　　JBOSS_HOME\server\default\deploy\jbossweb-tomcat50.sar<br /><br />　　里面提供了一个server.xml和web.xml文件，可以对Tomcat进行一些基本设置。但JBOSS的设计者建议用户甚至不要接触这个目录，更不用说修改和添加什么文件了，因为Tomcat与Jboss是如此紧密相连，以致于所有的设置工作都可以在Jboss自己的配置文件中完成。但是我还是发现了一个地方值得修改：修改server.xml中的端口号,比如由缺省的8080端口改为4000端口，因为我发现我的“百度下吧”软件常常占用了8080端口,而且我本来已经有了一个Tomcat 5.0。<br /><br />　　这样键入：<br /><br /><a href="http://localhost:4000/" target="_blank">http://localhost:4000/</a><br /><br />　　可以访问到Jboss的欢迎页面<br /><br />　　本文演示了JSP页面如何在jboss 4.0中调用EJB组件。<br /><br />　　总结构：<br /><br />J2EE应用/<br />|__EJB组件/(haiejb.jar)<br />| |__META-INF/<br />| | |__ejb-jar.xml<br />| | |__jboss.xml<br />| |__ejbs/<br />| |__HaiHome.class<br />| |__HaiClient.class<br />| |__HaiBean.class<br />|__WEB应用/(haiejb.war)<br />| |__haiejb.jsp<br />| |__WEB-INF/<br />| |__web.xml<br />| |__jboss-web.xml<br />|__META-INF/ <br />|_<a class="bluekey" href="http://www.yesky.com/key/3933/183933.html" target="_blank">_application</a>.xml<br /><br />　　<b>一、编译java文件为EJB类文件</b><br /><br />　　java文件编译：<br /><br />　　[假定在系统环境变量的CLASSPATH中包含了javax.ejb.*包，该包可以在以下地方找：<br /><br />　　JBOSS_HOME\server\default\lib\jboss-j2ee.jar<br /><br />　　JBOSS_HOME\client\jboss-j2ee.jar]<br /><br /><br />　　[java源<a class="bluekey" href="http://www.yesky.com/key/50/195050.html" target="_blank">文件目录</a>]＞:javac -classpath %classpath% -d [输出目录：EJB组件目录] *.java<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>HaiHome.java:<br />package ejbs;<br /><br />import <a class="bluekey" href="http://www.yesky.com/key/3366/183366.html" target="_blank">java.io</a>.Serializable;<br />import java.rmi.*;<br />import javax.ejb.*;<br /><br />public interface HaiHome extends EJBHome { <br />HaiClient create() throws RemoteException, CreateException; <br />}</td></tr></tbody></table><br />　　HaiClient.java:<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>package ejbs;<br /><br />import javax.ejb.*;<br />import java.rmi.RemoteException;<br />public interface HaiClient extends EJBObject { <br />　public String sayHai() throws RemoteException; <br />}<br />haiBean.java:<br />package ejbs;<br /><br />import javax.ejb.*;<br />import javax.naming.*;<br /><br />public class HaiBean implements SessionBean { <br /><br />　public String sayHai() { <br />　　return "Hai, EJB technology!"; <br />　} <br />　<br />　public void ejbCreate() throws EJBException {} <br />　public void ejbRemove() throws EJBException {} <br />　public void ejbPassivate() {} <br />　public void ejbActivate() {} <br />　public void setSessionContext(SessionContext sc) {}<br />}</td></tr></tbody></table><br />　　<b>二、创建EJB组件：</b><br /><br />　　haiejb.jar:(EJB组件）<br /><br />　　打包命令：[EJB组件目录]＞:jar cvf haiejb.jar META-INF/ ejbs/<br /><br /><br />|__META-INF/<br /><br />| |__ejb-jar.xml<br /><br />| |__jboss.xml<br /><br />|__ejbs/<br /><br />|__HaiHome.class<br /><br />|__HaiClient.class<br /><br />|__HaiBean.class<br /><br />　　ejb-jar.xml:<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>＜?xml <a class="bluekey" href="http://www.yesky.com/key/1693/206693.html" target="_blank">version</a>="1.0" encoding="UTF-8"?＞<br />＜!DOCTYPE ejb-jar PUBLIC ’-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN’ ’http://java.sun.com/dtd/ejb-jar_2_0.dtd’＞<br />＜ejb-jar＞<br />＜description＞Hai EJB instance.＜/description＞<br />＜display-name＞Hai EJB＜/display-name＞<br />＜enterprise-beans＞ <br />＜session＞ <br />＜ejb-name＞HaiEJB＜/ejb-name＞ <br />＜home＞ejbs.HaiHome＜/home＞ <br />＜remote＞ejbs.HaiClient＜/remote＞ <br />＜ejb-class＞ejbs.HaiBean＜/ejb-class＞ <br />＜session-type＞Stateless＜/session-type＞ <br />＜transaction-type＞Bean＜/transaction-type＞ <br />＜/session＞ <br />＜/enterprise-beans＞<br />＜/ejb-jar＞</td></tr></tbody></table><br />　　jboss.xml:<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>＜?xml version="1.0" encoding="UTF-8"?＞<br />＜jboss＞ <br />＜enterprise-beans＞ <br />＜session＞ <br />＜ejb-name＞HaiEJB＜/ejb-name＞ <br />＜jndi-name＞HaiEJB＜/jndi-name＞ <br />＜/session＞ <br />＜/enterprise-beans＞<br />＜/jboss＞</td></tr></tbody></table><br />　　<b>三、创建WEB应用</b><br /><br />　　haiejb.war:(WEB应用）<br /><br />　　打包命令：[WEB应用目录]＞:jar cvf haiejb.war haiejb.jsp WEB-INF/<br /><br />|__haiejb.jsp<br /><br />|__WEB-INF/<br /><br />|__web.xml<br /><br />|__jboss-web.xml<br /><br />　　haiejb.jsp:<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>＜%@ page contentType="text/html;charset=GBK" %＞<br />＜%@ page import="ejbs.*,javax.ejb.*,javax.naming.*,javax.rmi.PortableRemoteObject,java.rmi.RemoteException" %＞<br />＜html＞<br />＜body＞ <br />＜% String message = "nothing!"; <br />try { <br />　InitialContext ic = new InitialContext(); <br />　Object objRef = ic.lookup("HaiEJB"); <br />　HaiHome home = (HaiHome) PortableRemoteObject.narrow(objRef,ejbs.HaiHome.class); <br />　HaiClient haiRemote = home.create(); <br />　message = haiRemote.sayHai(); <br />} catch (RemoteException re) {<br />　re.printStackTrace(); <br />} catch (CreateException ce) { <br />　ce.printStackTrace(); <br />} catch (NamingException ne) { <br />　ne.printStackTrace(); <br />} <br />%＞ <br />＜h1＞＜%=message%＞＜/h1＞<br />＜/body＞ <br />＜/html＞ </td></tr></tbody></table><br />　　web.xml:<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>＜?xml version="1.0" encoding="UTF-8"?＞<br />＜!DOCTYPE web-app PUBLIC ’-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’ ’http://java.sun.com/dtd/web-app_2_3.dtd’＞<br />＜web-app＞ <br />＜ejb-ref＞ <br />＜ejb-ref-name＞HaiEJB＜/ejb-ref-name＞ <br />＜ejb-ref-type＞Session＜/ejb-ref-type＞ <br />＜home＞ejbs.HaiHome＜/home＞ <br />＜remote＞ejbs.HaiClient＜/remote＞ <br />＜/ejb-ref＞<br />＜/web-app＞ </td></tr></tbody></table><br />　　jboss-web.xml:<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>＜?xml version="1.0" encoding="UTF-8"?＞<br />＜jboss-web＞ <br />＜ejb-ref＞ <br />＜ejb-ref-name＞HaiEJB＜/ejb-ref-name＞ <br />＜jndi-name＞HaiEJB＜/jndi-name＞ <br />＜/ejb-ref＞<br />＜/jboss-web＞</td></tr></tbody></table><br />　　<b>四、创建J2EE应用程序</b><br /><br />　　haiejb.ear: (J2EE应用程序）<br /><br />　　把上面创建的haiejb.jar和haiejb.war包拷贝到你创建的J2EE应用主目录，新建一个META-INF目录并在里面创建application.xml文件：<br /><br />　　打包命令：[J2EE应用目录]＞:jar cvf haiejb.ear haiejb.jar haiejb.war META-INF/<br /><br />|__haiejb.jar<br /><br />|__haiejb.war<br /><br />|__META-INF/<br /><br />|__application.xml<br /><br />　　application.xml:<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>＜?xml version="1.0" encoding="UTF-8"?＞<br />＜application＞ <br />＜display-name＞HaiEJB J2EE Application＜/display-name＞ <br />＜module＞ <br />＜web＞ <br />＜web-<a class="bluekey" href="http://www.yesky.com/key/2849/177849.html" target="_blank">uri</a>＞haiejb.war＜/web-uri＞ <br />＜context-root＞/haiejb＜/context-root＞ <br />＜/web＞ <br />＜/module＞ <br />＜module＞ <br />＜ejb＞haiejb.jar＜/ejb＞ <br />＜/module＞<br />＜/application＞ </td></tr></tbody></table><br />　　<b>五、部署J2EE应用：</b><br /><br />　　把haiejb.ear拷贝到JBOSS_HOME\server\default\deploy\<br /><br />　　启动jboss 4.0,注意命令行窗口中有无异常，如果有异常情况，请查看log文件：<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>JBOSS_HOME\server\default\log\server.log</td></tr></tbody></table><br />　　从中查找分析问题所在，然后改正之,直到无异常显示<br /><br />　　最后在浏览器地址栏中键入：<br /><br /><a href="http://localhost:8080/haiejb/haiejb.jsp" target="_blank">http://localhost:8080/haiejb/haiejb.jsp</a><br /><br />　　结果：<br /><br />　　Hai, EJB technology! <br /><br />　　祝好运！ <img src ="http://www.blogjava.net/senlin-blog/aggbug/64014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2006-08-16 23:02 <a href="http://www.blogjava.net/senlin-blog/archive/2006/08/16/64014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic8.1下EJB的部署与调用 </title><link>http://www.blogjava.net/senlin-blog/archive/2006/08/16/64003.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Wed, 16 Aug 2006 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2006/08/16/64003.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/64003.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2006/08/16/64003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/64003.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/64003.html</trackback:ping><description><![CDATA[1、ejb-jar.xml <br />&lt; ?xml version="1.0" encoding="UTF-8"? &gt; <br />&lt; !DOCTYPE ejb-jar PUBLIC ''-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN'' ''" target=_blank &gt;http://java.sun.com/dtd/ejb-jar_2_0.dtd'' &gt; <br /><br /><br />&lt; !-- Generated XML! -- &gt; <br /><br />&lt; ejb-jar &gt; <br />&lt; display-name &gt;hello&lt; /display-name &gt; <br />&lt; enterprise-beans &gt; <br />&lt; session &gt; <br />&lt; display-name &gt;HelloBean&lt; /display-name &gt; <br />&lt; ejb-name &gt;Hello&lt; /ejb-name &gt; <br />&lt; home &gt;org.bromon.ejb.session.HelloHome&lt; /home &gt; <br />&lt; remote &gt;org.bromon.ejb.session.Hello&lt; /remote &gt; <br />&lt; local-home &gt;org.bromon.ejb.session.HelloLocalHome&lt; /local-home &gt; <br />&lt; local &gt;org.bromon.ejb.session.HelloLocal&lt; /local &gt; <br />&lt; ejb-class &gt;org.bromon.ejb.session.HelloBean&lt; /ejb-class &gt; <br />&lt; session-type &gt;Stateless&lt; /session-type &gt; <br />&lt; transaction-type &gt;Bean&lt; /transaction-type &gt; <br />&lt; security-identity &gt; <br />&lt; use-caller-identity/ &gt; <br />&lt; /security-identity &gt; <br /><br />&lt; /session &gt; <br />&lt; /enterprise-beans &gt; <br /><br />&lt; /ejb-jar &gt; <br /><br />2、weblogic-ejb-jar.xml(weblogic专署配置文件) <br />&lt; !DOCTYPE weblogic-ejb-jar PUBLIC ''-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN'' ''" target=_blank &gt;http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'' &gt; <br /><br /><br />&lt; !-- Generated XML! -- &gt; <br /><br />&lt; weblogic-ejb-jar &gt; <br />&lt; weblogic-enterprise-bean &gt; <br />&lt; ejb-name &gt;Hello&lt; /ejb-name &gt; <br />&lt; stateless-session-descriptor &gt; <br />&lt; pool &gt; <br />&lt; /pool &gt; <br /><br />&lt; stateless-clustering &gt; <br />&lt; /stateless-clustering &gt; <br /><br />&lt; /stateless-session-descriptor &gt; <br /><br />&lt; transaction-descriptor &gt; <br />&lt; /transaction-descriptor &gt; <br /><br />&lt; jndi-name &gt;Hello&lt; /jndi-name &gt; <br />&lt; local-jndi-name &gt;HelloLocal&lt; /local-jndi-name &gt; <br />&lt; /weblogic-enterprise-bean &gt; <br />&lt; /weblogic-ejb-jar &gt; <br /><br />3、HelloClient.java(客户端代码，最好和四个接口一起打包) <br />/* <br />* Created on 2004-5-11 <br />*/ <br />package org.bromon.ejb.session; <br />import javax.naming.*; <br />import javax.rmi.*; <br />import java.util.*; <br />/** <br />* @author Bromon <br />*/ <br />public class HelloClient <br />{ <br />public static void main(String args[]) <br />{ <br />try <br />{ <br />Properties prop=new Properties(); <br />prop.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");//加载weblogic上下文环境 <br />prop.put(Context.PROVIDER_URL,"t3://localhost:7001");//weblogic专用协议 <br /><br />Context ctx=new InitialContext(prop); <br />Object obj=ctx.lookup("Hello"); <br />HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class); <br />Hello hello=home.create(); <br />System.out.println(hello.say()); <br />hello.remove(); <br />}catch(Exception e) <br />{ <br />System.out.println(e); <br />} <br />} <br />}<img src ="http://www.blogjava.net/senlin-blog/aggbug/64003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2006-08-16 21:42 <a href="http://www.blogjava.net/senlin-blog/archive/2006/08/16/64003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse使用技巧</title><link>http://www.blogjava.net/senlin-blog/archive/2006/07/23/59620.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Sun, 23 Jul 2006 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2006/07/23/59620.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/59620.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2006/07/23/59620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/59620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/59620.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前言：				  				本来我都是使用				JBuilderX				当主力				IDE				、但使用了				Eclipse				后				  				发现				...Eclipse				原来也这么好用				...				渐渐的就爱上了它				......  Eclipse				优点：免费、程序代码排版功能、有中...&nbsp;&nbsp;<a href='http://www.blogjava.net/senlin-blog/archive/2006/07/23/59620.html'>阅读全文</a><img src ="http://www.blogjava.net/senlin-blog/aggbug/59620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2006-07-23 10:29 <a href="http://www.blogjava.net/senlin-blog/archive/2006/07/23/59620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>影像与工作流技术在银行业的应用</title><link>http://www.blogjava.net/senlin-blog/archive/2006/07/22/59525.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Sat, 22 Jul 2006 03:40:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2006/07/22/59525.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/59525.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2006/07/22/59525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/59525.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/59525.html</trackback:ping><description><![CDATA[
		<div id="head">
				<h1>
						<font size="2">
						</font> </h1>
		</div>
		<!--显示文章正文-->
		<table id="text">
				<tbody>
						<tr>
								<td>
										<!--<table border="0" align="right">
<tr><td valign="top">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="360" height="300" VIEWASTEXT>
			<param name="movie" value="/images/servers_article_large_rectangle_txt.swf">
			<param name="quality" value="high">
			<embed src="http://www.blogjava.net/images/servers_article_large_rectangle_txt.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="360" height="300"></embed>
			</object>
			</td></tr></table>-->
										<table class="pubnormal" width="100%" align="center" border="0">
												<tbody>
														<tr>
																<td>
																		<!-- <div align="center"><IFRAME MARGINHEIGHT=0 MARGINWIDTH=0 FRAMEBORDER=0 WIDTH=360 HEIGHT=300 SCROLLING=NO SRC="ad.htm"></IFRAME></div><br> -->
																		<table border="0">
																				<tbody>
																						<tr>
																								<td>
																										<br />
																										<font class="v15">
																												<p>
																												</p>
																												<p>
																														<b>业务需求</b>
																												</p>
																												<p>金融电子化的发展，令银行业务从纯粹的手工操作逐步实现了业务处理的电子化。银行原始单据上的部分信息被输入到计算机中，成为数字化的信息进行传递和处理，业务处理的效率和能力大为提高，一些在手工阶段无法实现的业务，如通存通兑成为了基本的金融业务。然而，大量的金融应用系统的处理都是基于手工输入数据信息的处理，由于手工输入、数据传递过程中可能出现的差错以及信息的不完整性(如数字化的凭证丢失了原始纸张凭证上的笔迹等信息)，使得目前的金融电子化系统并不能减少纸张凭证的运用，不得不继续进行大量纸张凭证的归档、存储以及运输，以便进行事后监督、审计。大量的纸张不仅占用人力、物力，而且非常不便于进行查询。于是人们开始运用影像技术对纸张进行处理。 </p>
																												<p>在我国目前金融行业的应用中，影像技术常常被用于进行原始凭证的影像化存储，也就是在业务处理结束后，将大量的纸张文档进行扫描等处理后变为影像进行存储，以便日后的查询。但是，影像技术仅仅用于对凭证的存储和查询，影像处理与业务处理两个过程是独立的，并不能解决数字化信息在采集和传递中的问题；而且对于一些专业技术要求较高的业务如贷款、国际结算、保险等，常常仍旧需要大量的纸张传递，业务处理效率难以提高，业务风险也不易控制。 </p>
																												<p>以目前发展很快的个人贷款业务为例。个人贷款的特点是金额小、笔数多、客户数量多而重复贷款的少。对银行而言，这种贷款的贷前资信了解、贷后日常管理比企业贷款更为复杂。这就意味着个人贷款的文档量大，相应的纸上作业过程，如贷款文件的准备、各种证明的收集等就形成繁重的负担。随之而来就是新员工(或新从事贷款业务的员工)的增加、员工的工作量增加、审批过程加长和风险增大。 </p>
																												<p>如果在个人贷款系统中运用影像和工作流技术，在各种业务系统处理过程从开始阶段都将原始凭证转化为影像文件，通过影像与数字化信息同时在各工作岗位间的传递来实现业务的处理流程，不仅可以使每个业务处理人员都能看到影像化的原始凭证，进行准确的业务处理，避免手工输入的错误，而且可以很好地实现业务的集中处理，可以提高业务处理的效率，将业务风险降到最低限度。可以说，将影像处理技术与工作流管理技术充分地结合起来，会形成新的有效的业务处理与业务监管的模式。这种方案在国外银行已经有不少成功的先例。 </p>
																												<p>
																														<b>技术实现</b>
																												</p>
																												<p>影像和工作流技术本身就包含了丰富的内容，一个包含影像和工作流技术的应用系统必须考虑到信息的采集、存储、检索、处理、发布等各个环节的技术问题，处理过程见下图。 </p>
																												<p align="center">
																														<img src="http://cnw2005.cnw.com.cn/issues/2001/15/images/15zj.gif" />
																												</p>
																												<p>
																												</p>
																												<p>1．文档输入系统 <br />文档输入系统是影像和工作流解决方案实施中的关键所在。文档输入可通过扫描仪、传真机或电子邮件系统将文件转为电子化文档存储。文档以压缩的数字影像方式或数字影像结合文本方式或数字影像结合缩微影像方式输入系统，其中，数字影像结合文本方式需要在扫描仪上安装字符识别(OCR)软件，或在文档输入软件中嵌入OCR软件。对于嵌入对象，如电子表格和字处理文件等的输入，可通过对象连接和嵌入(OLE)技术直接存储于影像系统。 </p>
																												<p>2．影像的压缩及存储 <br />组成影像的基本单位为像素，衡量影像质量的一个重要指标是分辨率，例如，分辨率为200dpi即是指每平方英寸有40000个像素。分辨率越高，影像越清晰，但对数据的存储、传输和硬件配置的要求也会越高。压缩后的文件大小由多方面因素决定，如文档的大小、色彩、灰度、底色、对比度、分辨率。通常，文本文件要求的分辨率为200dpi。 </p>
																												<p>图像的压缩和解压缩技术能够最大限度地减少影像文件对存储空间的消耗，又确保了影像解压后无损失地再显示。影像系统的影像压缩通常采用CCITTIV压缩协议。 </p>
																												<p>影像可以存储在硬盘、光盘、磁带等多种存储介质上。存储系统可以利用目录查找和定位文档，实现工作流作业文档和非工作流相关文档的集中存放，通过创建和配置文档分类，可根据文档的不同属性、类别和状态进行自动分类归档，不同类型的文件分别存储在各自的子目录下，也可存储于不同的文件系统，以实现不同的存储备份周期和策略。也可以实现从文件系统到其他廉价介质(光盘，磁带)的迁移，提供多种灵活的备份方式。 </p>
																												<p>对于存储和访问光盘上的影像作业，可以通过图形化用户接口对光盘塔或独立光盘驱动器中的光盘进行标记、插入、装载、卸出等操作，通过在数据库中跟踪并记录所有归档和未归档的影像作业的物理地址，选择光盘塔中合适的光盘，并响应来自用户的读写请求。 </p>
																												<p>3．建立索引及影像文档管理 <br />影像索引即输入能惟一识别和提取该影像的数据项。每种类型的文档都有相对应的索引表，索引表存放于相应的数据库，文档的类型和索引表在系统维护和管理工具中定义。索引信息可通过手工方式录入，或利用条码识别技术(BCR)与字符识别技术(OCR，ICR)，通过扫描条型码或识别影像字符自动录入。 </p>
																												<p>4．工作流和自动控制 <br />工作流系统为自动处理业务流程而设计，通过对业务处理路径的定义，来自动有序地管理文档在企业内各部门的处理。 </p>
																												<p>工作流系统软件可实现如下的功能： </p>
																												<ul class="v15">
																														<li>自动把作业递交给相关人员； 
</li>
																														<li>确认业务处理每一步必需的信息、应用、服务； 
</li>
																														<li>实现作业的并行处理； 
</li>
																														<li>把影像技术与业务处理流程集成； 
</li>
																														<li>监控处理流程，找出瓶颈，并优化业务分布和流程； 
</li>
																														<li>与原有的主机系统集成。 </li>
																												</ul>
																												<p>影像文档处理系统的工作流软件把文档和文件夹传送至企业内部合适的人员处理，工作流软件提供操作简单的工作界面，使用户可以图形化地定义文档的路径和操作流程,用户通过使用标准的剪切、复制和粘贴操作或对控件的拖拉来定义流程中每一个工作步骤，通过对系统或用户定义变量值的简单判别，自动地安排影像文档在银行内的作业流程处理。 </p>
																												<p>5．信息展现 <br />影像文档处理系统用无纸化的影像工作流程取代了有纸化的文档处理，所以，必须有友好的用户界面的仿真工作终端、图标和控制键等，使具有传统有纸化工作流程经验的操作员能迅速地适应和掌握无纸化工作流程。工作流终端管理工具可以针对用户的特殊业务需求设计终端界面，以简化多步骤的操作过程。 </p>
																												<p>随着互联网技术的发展，影像文档处理系统也为用户提供了基于标准的互联网技术的系统文档存取和管理。用户可以通过因特网或内部网以友好、易用的Web浏览器从任意网络平台或位置与服务器通信，访问影像和工作流系统，进行例如业务处理、系统维护等工作，管理人员应用Web能够在任何站点，通过任何Web浏览器，提供比传统的命令驱动的远程登录界面更直接、更易用的图形界面。 </p>
																												<p>
																														<b>应用前景</b>
																												</p>
																												<p>影像和工作流技术的运用是一个复杂的应用集成工作，必须考虑到： </p>
																												<ul class="v15">
																														<li>工作流程的重组与改进既要实现业务发展目标，又要保持和扩展客户群； 
</li>
																														<li>员工岗位的重大变化，由于影像和工作流技术的运用，可以实现业务处理一定程度的集中化，解决业务受理分散与业务处理集中的矛盾； 
</li>
																														<li>充分考虑各种技术的运用，如：分布式的存储可以减少影像文件的传输要求，降低对网络的压力，影像和工作流技术可以与浏览器技术结合，更方便地实现业务处理，但必须充分考虑安全技术的运用。 </li>
																												</ul>
																												<p>影像和工作流技术已经被国外金融以及其他行业广泛应用。在国外一项对130家银行的300名高级管理人员的调查中，56%的人认为“最重要的投资是技术投资，特别是网络与影像”。在我国，影像和工作流技术的应用与国外还有较大的差距，但随着金融电子化进程的深入，将会有更多的系统运用影像和工作流及其相关技术。 </p>
																												<p>影像和工作流技术的应用范围非常广泛，可以影像化的文档种类也十分丰富，例如：凭证、票据、各种申请或信用状况资料、图像、各种文件等。也就是说，影像与工作流技术可以被用于所有基于大量纸张文件处理的金融行业应用系统中，如国际结算、信贷、个人贷款、保险、人事管理、办公自动化等。我们相信随着IT技术的发展，影像和工作流技术可以被更加广泛地运用在金融以及其他行业。 </p>
																										</font>
																								</td>
																						</tr>
																				</tbody>
																		</table>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/senlin-blog/aggbug/59525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2006-07-22 11:40 <a href="http://www.blogjava.net/senlin-blog/archive/2006/07/22/59525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把cvs管理的工程文件移植到另外一台机子上</title><link>http://www.blogjava.net/senlin-blog/archive/2006/06/15/52990.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Thu, 15 Jun 2006 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2006/06/15/52990.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/52990.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2006/06/15/52990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/52990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/52990.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#333333">1.在要移植的机子上装的cvs服务器<br />2.将工程文件夹拷到要移植的机子上<br />3.在Repositories选项中,选择工程目录,然后,选择add,输入cvsdb<br />4.在Advanced选项中,前三项打了勾,下面两个分别选择<br />   Request Authentication<br />   Request Compression<br /></font>
				<font color="#333333">5.客户端访问时，修改一下IP地址.<br />这样就OK了</font>
		</p>
<img src ="http://www.blogjava.net/senlin-blog/aggbug/52990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2006-06-15 14:25 <a href="http://www.blogjava.net/senlin-blog/archive/2006/06/15/52990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA进阶：VO(DTO)与PO(DAO)之间的转换</title><link>http://www.blogjava.net/senlin-blog/archive/2006/06/08/51376.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Thu, 08 Jun 2006 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2006/06/08/51376.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/51376.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2006/06/08/51376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/51376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/51376.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 2em">PO即 Persistence Object<br />　　VO即 Value Object 
</p>
		<p>　VO和PO的主要区别在于：<br />　　VO是独立的Java Object。<br />　　PO是由Hibernate纳入其实体容器（Entity Map）的对象，它代表了与数据库中某条记录对应的Hibernate实体，PO的变化在事务提交时将反应到实际数据库中。</p>
		<p>　实际上，这个VO被用作Data Transfer Object，即所谓的DTO。想必，VO就是Data Access Object ---DAO了啦。为什么要有这二者之分呢？如在传统的MVC架构中，位于Model层的PO，是否允许被传递到其他层面。由于PO的更新最终将被映射到实际数据库中，如果PO在其他层面（如View层）发生了变动，那么可能会对Model层造成意想不到的破坏。</p>
		<p>　主要想说的还是如何进行二者之间的转换：<br />　　属性复制可以通过Apache Jakarta Commons Beanutils（<a href="http://jakarta.apache.org/commons/beanutils/">http://jakarta.apache.org/commons/beanutils/</a>）组件提供的属性批量复制功能，避免繁复的get/set操作。down下来之后，里面的API DOC一应俱全。</p>
		<p>　对于一些无需处理其它处理（如过滤）直接用BeanUtilsBean.copyProperties方法，其参考如下：</p>
		<p>public static void copyProperties(java.lang.Object dest,<br />                                  java.lang.Object orig)<br />                           throws java.lang.IllegalAccessException,<br />                                  java.lang.reflect.InvocationTargetExceptioCopy property values from the origin bean to the destination bean for all cases where the property names are the same.<br />　范例１：</p>
		<p>
				<br /> TUser user  =   new  TUser();<br />TUser anotherUser  =   new  TUser();<br />user.setName( " Emma " );<br />user.setUserType( 1 );<br /> try    {<br />BeanUtils.copyProperties(anotherUser,user);<br />System.out.println( " UserName =&gt;  " <br /> + anotherUser.getName()<br />);<br />System.out.println( " UserType =&gt;  " <br /> +  anotherUser.getUserType()<br />);<br />}   catch  (IllegalAccessException e)   {<br />e.printStackTrace();<br />}   catch  (InvocationTargetException e)   {<br />e.printStackTrace();<br />} 　<br /> </p>
		<p>
				<br />　也可以利用其中的一些方法在copy属性的时候达到自己的要求，如：</p>
		<p>　范例２</p>
		<p>  /** */ /** //*<br /> * Created on 2006-4-26<br />  */ <br /> package  com.util;</p>
		<p> import  java.beans.PropertyDescriptor;<br /> import  java.util.Collection;</p>
		<p> import  org.apache.commons.beanutils.PropertyUtils;</p>
		<p>
				<br /> /** */ /**   */ /** */ /** <br /> * CopyUtil<br /> *  @author  Jkallen<br />  */ <br />  public   class  CopyUtil   {<br />    <br />     /** */ /**   */ /** */ /** <br />     * Copy properties of orig to dest<br />     * Exception the Entity and Collection Type<br />     *  @param  dest<br />     *  @param  orig<br />     *  @return  the dest bean<br />      */ <br />      public   static  Object copyProperties(Object dest, Object orig)   {<br />         if  (dest  ==   null   ||  orig  ==   null )   {<br />             return  dest;<br />        } <br />        <br />        PropertyDescriptor[] destDesc  =  PropertyUtils.getPropertyDescriptors(dest);<br />         try    {<br />             for  ( int  i  =   0 ; i  &lt;  destDesc.length; i ++ )   {<br />                Class destType  =  destDesc[i].getPropertyType();<br />                Class origType  =  PropertyUtils.getPropertyType(orig, destDesc[i].getName());<br />                 if (destType  !=   null   &amp;&amp;  destType.equals(origType)<br />                         &amp;&amp;   ! destType.equals(Class. class ))   {<br />                     if ( ! Collection. class .isAssignableFrom(origType))  {                    <br />                         try  {<br />                            Object value  =  PropertyUtils.getProperty(orig, destDesc[i].getName());<br />                            PropertyUtils.setProperty(dest, destDesc[i].getName(), value);<br />                        } catch (Exception ex)  {                            <br />                        } <br />                    } <br />                } <br />            } <br />            <br />             return  dest;<br />        } catch (Exception ex)   {<br />             throw   new  CopyException(ex);<br /> //             return dest; <br />         } <br />    }     <br />    <br />     /** */ /**   */ /** */ /** <br />     * Copy properties of orig to dest<br />     * Exception the Entity and Collection Type<br />     *  @param  dest<br />     *  @param  orig<br />     *  @param  ignores<br />     *  @return  the dest bean<br />      */ <br />      public   static  Object copyProperties(Object dest, Object orig, String[] ignores)   {<br />         if  (dest  ==   null   ||  orig  ==   null )   {<br />             return  dest;<br />        } <br />        <br />        PropertyDescriptor[] destDesc  =  PropertyUtils.getPropertyDescriptors(dest);<br />         try    {<br />             for  ( int  i  =   0 ; i  &lt;  destDesc.length; i ++ )   {<br />                 if  (contains(ignores, destDesc[i].getName()))   {<br />                     continue ;<br />                } <br />                <br />                Class destType  =  destDesc[i].getPropertyType();<br />                Class origType  =  PropertyUtils.getPropertyType(orig, destDesc[i].getName());<br />                 if (destType  !=   null   &amp;&amp;  destType.equals(origType)<br />                         &amp;&amp;   ! destType.equals(Class. class ))   {<br />                     if ( ! Collection. class .isAssignableFrom(origType))  {<br />                        Object value  =  PropertyUtils.getProperty(orig, destDesc[i].getName());<br />                        PropertyUtils.setProperty(dest, destDesc[i].getName(), value);<br />                    } <br />                } <br />            } <br />            <br />             return  dest;<br />        } catch (Exception ex)   {<br />             throw   new  CopyException(ex);<br />        } <br />    } <br />    <br />     static   boolean  contains(String[] ignores, String name)   {<br />         boolean  ignored  =   false ;<br />         for  ( int  j  =   0 ; ignores  !=   null   &amp;&amp;  j  &lt;  ignores.length; j ++ )   {<br />             if  (ignores[j].equals(name))   {<br />                ignored  =   true ;<br />                 break ;<br />            } <br />        } <br />        <br />         return  ignored;<br />    } <br />} <br /> <br /> <br />　　</p>
		<p>　　可以看到，在范例１中通过方法copyProperties的时候，二者之间在的属性名必须相同（Copy property values from the origin bean to the destination bean for all cases where the property names are the same）。而在范例２中通过<br /> 　　Object value = PropertyUtils.getProperty(orig, destDesc[i].getName());<br />  　　PropertyUtils.setProperty(dest, destDesc[i].getName(), value);<br />　　也是将源与目的之间copy相同的属性名。而VO是在前台显示，所以难免会用到PO中所不存在的属性值。比如PO中可能是一个对象，而VO中则可能是此对象的全部属性。其中的一些转换则需要依据前台需要针对性地处理啦！</p>
		<p>Reference:  Apache DOC and &lt;&gt; <br /></p>
<img src ="http://www.blogjava.net/senlin-blog/aggbug/51376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2006-06-08 15:49 <a href="http://www.blogjava.net/senlin-blog/archive/2006/06/08/51376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>表现层框架Struts/Tapestry/JSF架构比较 </title><link>http://www.blogjava.net/senlin-blog/archive/2006/04/25/43040.html</link><dc:creator>JJCEA</dc:creator><author>JJCEA</author><pubDate>Tue, 25 Apr 2006 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/senlin-blog/archive/2006/04/25/43040.html</guid><wfw:comment>http://www.blogjava.net/senlin-blog/comments/43040.html</wfw:comment><comments>http://www.blogjava.net/senlin-blog/archive/2006/04/25/43040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/senlin-blog/comments/commentRss/43040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/senlin-blog/services/trackbacks/43040.html</trackback:ping><description><![CDATA[
		<h3 align="center">表现层框架Struts/Tapestry/JSF架构比较 </h3>
		<p align="center">
				<a href="http://www.jdon.com/aboutme.htm">板桥里人</a> http://www.jdon.com 2005/09/12</p>
		<p align="left">　　Struts/Tapestry/JSF是目前J2EE表现层新老组合的框架技术。从诞生时间上看，Struts应该比较早，使用得非常广泛，Tapestry 3.0逐渐引起广泛的重视，正当Tapestry即将大显身手时期，SUN推出JSF标准技术，虽然JSF一开始推出尚不成熟，留出了一段空白期，但是随着JSF1.1标准推出，JSF开始正面出击，粉面隆重登场了。</p>
		<p align="left">　　其实，JSF和Tapestry也并不是那种头碰头的相同竞争性技术，两者还是各有侧重点的，不过比较细微，但是这种细微点在实现一个大工程时可能带来不同的感受和变化。</p>
		<p align="left">　　首先，我们从一个高度来抽象一下表现层框架应有的技术架构，下图可以说所有表现层框架技术都必须实现的功能架构图：</p>
		<p align="center">
				<img height="236" src="http://www.jdon.com/artichect/images/jsf-struts-tapestry.jpg" width="219" />
		</p>
		<p align="left">　　当然，我们不必废话罗嗦MVC模式，MVC模式是基准模式，现在框架技术已经不必再拼是否是MVC模式了。 在上图MVC模式基础上，一个表现层框架无外乎要实现图中的三个功能：</p>
		<p align="left">1.在当前页面能够显示一个组件对象的内容；而不是象纯JSP那样，需要在Jsp页面写入“调用对象方法”的Java代码。</p>
		<p align="left">2.当用户按下页面的提交按扭或链接后，事件发生，这时应该触发服务器端并将当前页面的参数提交给服务器。这种机制表现在Form表单提交和有参数的链接&lt;a href=""&gt;&lt;/a&gt;</p>
		<p align="left">3.从一个页面视图直接跳转到另外一个页面视图，单纯的导航作用。</p>
		<p align="left">我们通过下表来比较这 三种框架在实现上图各个功能时技术细节，从而得出他们的异同点和偏重点。</p>
		<table cellspacing="1" cellpadding="1" width="100%" border="0">
				<tbody>
						<tr>
								<td bgcolor="#cccccc">
										<table width="100%" border="0">
												<tbody>
														<tr>
																<td width="16%"> </td>
																<td width="29%">Struts</td>
																<td width="33%">Tapestry3.0</td>
																<td width="22%">JSF</td>
														</tr>
														<tr bgcolor="#ffffff">
																<td bgcolor="#999999">在View显示的组件要求</td>
																<td>
																		<p>组件必须继承ActionForm</p>
																</td>
																<td>分显式调用和隐式调用<br />组件必须继承BaseComponent</td>
																<td>普通POJO<br />无需继承<br />Managed Bean</td>
														</tr>
														<tr bgcolor="#ffffff">
																<td bgcolor="#999999">组件在View显示粒度</td>
																<td>View页面只能显示与表单对应的ActionForm，配置中Action ActionForm 页面一般只能1:1:1关系。</td>
																<td>可将组件嵌入页面任何一行，对使用组件数量无限制。</td>
																<td>同Tapestry</td>
														</tr>
														<tr bgcolor="#ffffff">
																<td bgcolor="#999999">页面分区tiles</td>
																<td>使用Tiles标签库实现，需要另外tiles-def.xml配置文件</td>
																<td>组件有自己的视图页面，通过调用组件即直接实现多个页面组合。强大自然的页面组合是其特点。</td>
																<td>通过组件+标签库实现Subview,但如需重用Layout,还要结合Tiles.</td>
														</tr>
														<tr bgcolor="#ffffff">
																<td bgcolor="#999999">页面跳转</td>
																<td>使用标签库html:link中写明目标URL，URL名称需要对照配置文件的path命名,与组件Action耦合。</td>
																<td>URL名称是目标的组件名称，不涉及URL和路径等操作，方便稳固。</td>
																<td>类似Struts，也需要在配置文件中查找,与组件分离。</td>
														</tr>
														<tr bgcolor="#ffffff">
																<td bgcolor="#999999">参数传递</td>
																<td>使用html:link时传递参数超过一个以上处理麻烦。</td>
																<td>直接调用组件，直接赋予参数，没有参数个数限制</td>
																<td>参数分离传递给组件</td>
														</tr>
														<tr bgcolor="#ffffff">
																<td bgcolor="#999999">事件触发</td>
																<td>通过表单提交submit激活，不能细化到表单里字段。</td>
																<td>能够给于表单每个字段贴一个事件，事件组件必须实现PageListener接口</td>
																<td>
																		<span id="intelliTxt">
																				<code>同Tapestry，事件组件必须实习ActionListener 接口</code>
																		</span>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<strong>Struts组件编程模型</strong>
		</p>
		<p>　　Struts实现组件编程时有一些复杂：经常为一个页面中需要引入多个组件而头疼，因为Struts中无法直接引入多个组件，必须绕一些圈子:</p>
		<p>　　一般分两种情况：如果同一个Action就可以对付这些组件，那么在这种情况下有两个办法：</p>
		<p>1.将这多个组件装入一个ActionForm中，如使用<span class="unnamed3">MapForm</span>等机制；</p>
		<p>2.手工将多个组件装入request/session等scope中，然后根据其名称在jsp中获得。</p>
		<p>　　这两个方法都有缺点： 第一种办法经常一个ActionForm弄得面目全非，变成一个大杂烩，违反了OO分派封装的原则；第2种办法其实又回到jsp编程；</p>
		<p>　　第二种情况，如果这些组件必须有预先由不同的Action来处理，每个组件必须经过Action --&gt;ActionForm流程，在这种情况下有两种办法：</p>
		<p>1.使用Tiles, 不同流程输出到同一个页面的不同区域。是一种并行处理方式。</p>
		<p>2. 对多个流程首尾相连，第一Action forward结果是第二个Action，最后输出一个Jsp，在这个jsp中就可以使用前面多个流程的多个ActionForm了，这属于串行方式。</p>
		<p>
				<strong>Struts组件模型缺点</strong>
		</p>
		<p>　　Struts组件编程必须限定在Action/ActionForm/JSP这三个框框中做文章，难度相对比较大，而Tapestry/JSF则没有太多这些技术框框限制，两者在组件编程方面更让编程者自由一些，方便一些，这也是组件型框架的优势吧。</p>
		<p>
				<strong>Struts标签库</strong>
		</p>
		<p>　　在Struts中，经常需要使用标签库来显示组件ActionForm中内容，这就涉及到一个结合的问题，标签库是别人写的，参考Struts的标签库用法，而组件是自己的，难度和麻烦就体现在这个结合点上。</p>
		<p>　　JSF基本思路和Struts差不多，只不过换了不同标签库，也需要标签库+组件的结合思考，不过因为组件这里是通用组件，没有什么限制，所以这样比Struts要轻松一些。</p>
		<p>　　Tapestry使用了组件库概念替代了标签库，没有标签库概念，这样就没有标签库和自己的组件需要结合的问题，都是组件的使用，组件中分Tapestry标准组件和自己定义的组件，这也是接触了Jsp体系的人学习Tapestry面临的一个思路转换。</p>
		<p>　　具体以页面跳转为例子，页面跳转是靠链接&lt;a href="目标"&gt;&lt;/a&gt; 实现，链接是页面经常使用的元素。</p>
		<p>　　Struts提供的html:link在频繁使用就特别不方便，尤其在传递多个参数时：其中html:link的page值，是跳转对方页面或Action的path，这个path一般需要到struts-config.xml查找Action的相应path,一旦配置文件path值修改，涉及到这个所有相关页面都要修改。</p>
		<p>　　JSF将链接概念划分两个方面：导航性质和事件激活，在导航方面还是需要到配置faces-config查询Navigation的from-outcome的值。</p>
		<p>　　由于Tapestry没有标签库概念，只有组件或页面两个概念，因此，链接跳转目标要么是组件，要么是页面，简洁简单，它没有多余的path概念，就是组件名，也就是对象名称，组件名称和path名称合二为一。</p>
		<p>
				<strong>总结</strong>
		</p>
		<p>　　JSF在很大程度上类似Struts，而不是类似Tapestry，可以说是一种Struts 2.0，都是采取标签库+组件的形式，只是JSF的组件概念没有象Struts那样必须继承ActionForm的限制；JSF在事件粒度上要细腻，不象Struts那样，一个表单一个事件，JSF可以细化到表单中的每个字段上。</p>
		<p>　　JSF只有在组件和事件机制这个概念上类似Tapestry，但是不似Tapestry那样是一个完全组件的框架，所以，如果你做一个对页面要求灵活度相当高的系统，选用Tapestry是第一考虑。</p>
		<p>　　Struts/JSF则适合在一般的数据页面录入的系统中，对于Struts和JSF的选用，我目前个人观点是：如果你是一个新的系统，可以直接从JSF开始；如果你已经使用Struts，不必转换，如果需要切换，可以将JSF和Tapestry一起考虑。</p>
		<p>　　另外，JSF/Tapestry不只是支持Html，也支持多种客户端语言如WML或XUI等。</p>
		<p>　　这三者之间关系：如果说Struts是左派；那Tapestry则是右派；而JSF则是中间派，中庸主义是SUN联盟的一贯策略。</p>
<img src ="http://www.blogjava.net/senlin-blog/aggbug/43040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/senlin-blog/" target="_blank">JJCEA</a> 2006-04-25 15:49 <a href="http://www.blogjava.net/senlin-blog/archive/2006/04/25/43040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>