伊人久久亚洲综合影院,亚洲第一中文字幕,亚洲综合色一区二区三区http://www.tkk7.com/senlin-blog/category/10112.htmlweb報表設(shè)計器....zh-cnSat, 06 Feb 2010 01:55:43 GMTSat, 06 Feb 2010 01:55:43 GMT60load runner8.1不能錄制腳本的問題解決http://www.tkk7.com/senlin-blog/archive/2010/02/05/312113.htmlJJCEAJJCEAFri, 05 Feb 2010 07:15:00 GMThttp://www.tkk7.com/senlin-blog/archive/2010/02/05/312113.htmlhttp://www.tkk7.com/senlin-blog/comments/312113.htmlhttp://www.tkk7.com/senlin-blog/archive/2010/02/05/312113.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/312113.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/312113.html2.打開IE-->Internet選項-->高級,把“禁用腳本調(diào)試(Internet Explorer)”和“禁用腳本調(diào)試(其它)”前面的勾去掉.
? 建議使用使用IE6.

JJCEA 2010-02-05 15:15 發(fā)表評論
]]>
控制你的網(wǎng)頁進行翻頁打印http://www.tkk7.com/senlin-blog/archive/2008/04/10/191921.htmlJJCEAJJCEAThu, 10 Apr 2008 09:00:00 GMThttp://www.tkk7.com/senlin-blog/archive/2008/04/10/191921.html閱讀全文

JJCEA 2008-04-10 17:00 發(fā)表評論
]]>
讀取網(wǎng)卡的mac地址http://www.tkk7.com/senlin-blog/archive/2007/03/25/106160.htmlJJCEAJJCEASat, 24 Mar 2007 16:47:00 GMThttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106160.htmlhttp://www.tkk7.com/senlin-blog/comments/106160.htmlhttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106160.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/106160.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/106160.htmlpackage com.paiao.ReadMac;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class ReadMac {
??? public ReadMac() {
??? }

??? public static String getMACAddress() {

??????? String address = "";
??????? String os = System.getProperty("os.name");
??????? if (os != null && os.startsWith("Windows")) {
??????????? try {
??????????????? String command = "cmd.exe /c ipconfig /all";
??????????????? Process p = Runtime.getRuntime().exec(command);
??????????????? BufferedReader br =
??????????????????????? new BufferedReader(
??????????????????????????????? new InputStreamReader(p.getInputStream()));
??????????????? String line;
??????????????? while ((line = br.readLine()) != null) {
??????????????????? if (line.indexOf("Physical Address") > 0) {
??????????????????????? int index = line.indexOf(":");
??????????????????????? index += 2;
??????????????????????? address = line.substring(index);
??????????????????????? break;
??????????????????? }
??????????????? }
??????????????? br.close();
??????????????? return address.trim();
??????????? } catch (IOException e) {}
??????? }
??????? return address;
??? }

public static void main(String[] args) {
??? System.out.println("Mac:"+ReadMac.getMACAddress());
}
}



JJCEA 2007-03-25 00:47 發(fā)表評論
]]>
判斷sever 2000數(shù)據(jù)庫是否開啟http://www.tkk7.com/senlin-blog/archive/2007/03/25/106159.htmlJJCEAJJCEASat, 24 Mar 2007 16:46:00 GMThttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106159.htmlhttp://www.tkk7.com/senlin-blog/comments/106159.htmlhttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106159.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/106159.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/106159.html????????????? boolean m_boo = true;
????????????? String url =? "jdbc:jtds:sqlserver:"+"http://"+fwqIP+":1433;DatabaseName=master;lastupdatecount=true;SelectMethod=cursor";
????????????? com.paiao.app.db.DbBase dbbase? =? com.paiao.app.db.DbBase.getInstance();
????????????? Connection con = this.con(url,user,password);
????????????? PreparedStatement pstm = null;
????????????? String sqls1 = "create database shebei_paiao ";
????????????? //String sqls1 = "select * from syscolumns ";
????????????? try {
??????????????? pstm = con.prepareStatement(sqls1);
??????????????? pstm.execute();
??????????????? m_boo = true;
????????????? }
????????????? catch (Exception e) {
??????????????? m_boo = false;
??????????????? System.out.println("您的mssqlserver數(shù)據(jù)庫沒有啟動!");
????????????? }
????????????? finally {
??????????????? dbbase.Release(pstm, con);
????????????? }
????????????? return m_boo;
??????????? }

JJCEA 2007-03-25 00:46 發(fā)表評論
]]>
用setup Factory 7.0 制做安裝文件時修改注冊表的方法http://www.tkk7.com/senlin-blog/archive/2007/03/25/106158.htmlJJCEAJJCEASat, 24 Mar 2007 16:41:00 GMThttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106158.htmlhttp://www.tkk7.com/senlin-blog/comments/106158.htmlhttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106158.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/106158.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/106158.html--打包一個由jdk1.5,tomcat5.5下開發(fā)的項目,以前tomcat 4.1下很好處理jdk路徑問題,只需要在startup.bat和shutdown.bat文件中加入如下兩句就可以了:

set CATALINA_HOME=..//在這句下面加入
//設(shè)定jdk的路徑
set JAVA_HOME=..\..\%CATALINA_HOME%\jdk1.4
:gotHome? //=..//在這句上面加入

但是用了tomcat5.5卻沒有了這兩個文件,它將自已的安裝路徑和jdk的路徑都寫到注冊表中了.

這就需要在打包時動態(tài)的修改注冊表,否則將不能正常使用.

-- 安裝路徑:your_variable
--Dialog.Message(your_variable, your_variable, MB_OK, MB_ICONEXCLAMATION);

-- 創(chuàng)建一個全局變量,并賦予一個字符串
your_variable1 = "";

--Dialog.Message(your_variable, your_variable, MB_OK, MB_ICONEXCLAMATION);
-- 從注冊表中導(dǎo)入的值:
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Tomcat");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Tomcat\\5.5");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters");
your_variable1=String.Replace("D:\\Software\\Tomcat 5.5","D:\\Software",your_variable,true);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Tomcat\\5.5", "InstallPath", your_variable1, 7);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Tomcat\\5.5", "Version", "5.5.12", 7);
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Java");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Log");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop");
your_variable1=String.Replace("D:\\Software\\jdk1.5\\bin\\client\\jvm.dll","D:\\Software",your_variable,true);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Java", "Jvm",your_variable1, 1);
your_variable1=String.Replace("D:\\Software\\Tomcat 5.5\\bin\\bootstrap.jar","D:\\Software",your_variable,true);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Java", "Classpath",your_variable1, 1);

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);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Java", "Options", your_variable1, 7);

your_variable1=String.Replace("D:\\Software\\Tomcat 5.5\\logs","D:\\Software",your_variable,true);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Log", "Path",your_variable1 , 1);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Log", "StdError", "auto", 1);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Log", "StdOutput", "auto", 1);

your_variable1=String.Replace("D:\\Software\\Tomcat 5.5","D:\\Software",your_variable,true);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start", "WorkingPath", your_variable1, 1);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start", "Class", "org.apache.catalina.startup.Bootstrap", 1);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start", "Params", "start", 7);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Start", "Mode", "jvm", 1);

your_variable1=String.Replace("D:\\Software\\Tomcat 5.5","D:\\Software",your_variable,true);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop", "WorkingPath", your_variable1, 1);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop", "Class", "org.apache.catalina.startup.Bootstrap", 1);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop", "Params", "stop", 7);
Registry.SetValue(3, "Software\\Apache Software Foundation\\Procrun 2.0\\Tomcat5\\Parameters\\Stop", "Mode", "jvm", 1);


-- 從注冊表中導(dǎo)入的值:
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "Type", "16", 4);
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "Start", "3", 4);
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "ErrorControl", "1", 4);
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);
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "ImagePath", your_variable1, 2);
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "DisplayName", "Apache Tomcat", 7);
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "ObjectName", "LocalSystem", 7);
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5", "Description", "Apache Tomcat 5.5.12 Server - Registry.CreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Enum");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Parameters");
Registry.CreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Security");
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Enum", "0", "Root\\LEGACY_Tomcat5\\0000", 7);
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Enum", "Count", "1", 4);
Registry.SetValue(3, "SYSTEM\\CurrentControlSet\\Services\\Tomcat5\\Enum", "NextInstance", "1", 4);
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);



JJCEA 2007-03-25 00:41 發(fā)表評論
]]>
利用java的ZipOutputStream類壓縮文件或文件夾中的文件http://www.tkk7.com/senlin-blog/archive/2007/03/25/106157.htmlJJCEAJJCEASat, 24 Mar 2007 16:36:00 GMThttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106157.htmlhttp://www.tkk7.com/senlin-blog/comments/106157.htmlhttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106157.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/106157.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/106157.htmlpackage codemaking.util;

import java.io.File;
import org.apache.tools.zip.ZipOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipEntry;


public class CompressBook {
? public CompressBook() {
? }

? /*
?? * inputFileName 輸入一個文件夾
?? * zipFileName 輸出一個壓縮文件夾
?? */
? public void zip(String inputFileName) throws Exception {
??? String zipFileName = "c:\\test.zip"; //打包后文件名字
??? System.out.println(zipFileName);
??? zip(zipFileName, new File(inputFileName));
? }

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

? private void zip(ZipOutputStream out, File f, String base) throws Exception {
??? if (f.isDirectory()) {
????? File[] fl = f.listFiles();
????? out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));
????? base = base.length() == 0 ? "" : base + "/";
????? for (int i = 0; i < fl.length; i++) {
??????? zip(out, fl[i], base + fl[i].getName());
????? }
??? }
??? else {
????? out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
????? FileInputStream in = new FileInputStream(f);
????? int b;
????? System.out.println(base);
????? while ( (b = in.read()) != -1) {
??????? out.write(b);
????? }
????? in.close();
??? }
? }

? public static void main(String [] temp){
??? CompressBook book = new CompressBook();
??? try {
????? book.zip("c:\\test",new File("c:\\test"));
??? }
??? catch (Exception ex) {
??? }
? }
}



JJCEA 2007-03-25 00:36 發(fā)表評論
]]>
利用java的ZipOutputStream類解壓文件或文件夾中的文件http://www.tkk7.com/senlin-blog/archive/2007/03/25/106156.htmlJJCEAJJCEASat, 24 Mar 2007 16:35:00 GMThttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106156.htmlhttp://www.tkk7.com/senlin-blog/comments/106156.htmlhttp://www.tkk7.com/senlin-blog/archive/2007/03/25/106156.html#Feedback2http://www.tkk7.com/senlin-blog/comments/commentRss/106156.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/106156.htmlpackage codemaking.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import java.util.zip.GZIPInputStream;
import java.io.DataInputStream;

?

/**
?* Description: 此類用于...
?*
?* @author??? wunaigang(2005-6-21)
?* @version?? 1.0.0
?*/
public class ZipManager {

?

??????? /**
???????? * zip壓縮功能測試. 將d:\\temp\\zipout目錄下的所有文件連同子目錄壓縮到d:\\temp\\out.zip.
???????? *
???????? * @param baseDir 所要壓縮的目錄名(包含絕對路徑)
???????? * @param objFileName 壓縮后的文件名
???????? * @throws Exception
???????? */
??????? public void createZip(String baseDir, String objFileName) throws Exception {
??????????????? File folderObject = new File(baseDir);

?

??????????????? if (folderObject.exists()){
??????????????????????? List fileList = getSubFiles(new File(baseDir));

?

??????????????????????? //壓縮文件名
??????????????????????? ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFileName));

?

??????????????????????? ZipEntry ze = null;
??????????????????????? byte[] buf = new byte[1024];
??????????????????????? int readLen = 0;
??????????????????????? for (int i = 0; i < fileList.size(); i++) {
??????????????????????????????? File f = (File) fileList.get(i);
??????????????????????????????? System.out.println("Adding: " + f.getPath() + f.getName());

?

??????????????????????????????? //創(chuàng)建一個ZipEntry,并設(shè)置Name和其它的一些屬性
??????????????????????????????? ze = new ZipEntry(getAbsFileName(baseDir, f));
??????????????????????????????? ze.setSize(f.length());
??????????????????????????????? ze.setTime(f.lastModified());

?

??????????????????????????????? //將ZipEntry加到zos中,再寫入實際的文件內(nèi)容
??????????????????????????????? zos.putNextEntry(ze);
??????????????????????????????? InputStream is = new BufferedInputStream(new FileInputStream(f));
??????????????????????????????? while ((readLen = is.read(buf, 0, 1024)) != -1) {
??????????????????????????????????????? zos.write(buf, 0, readLen);
??????????????????????????????? }
??????????????????????????????? is.close();
??????????????????????????????? System.out.println("done...");
??????????????????????? }
??????????????????????? zos.close();
??????????????? }else{
??????????????????????? throw new Exception("this folder isnot exist!");
??????????????? }
??????? }
??????? /**
???????? * zip壓縮功能測試. 將指定文件壓縮后存到一壓縮文件中
???????? *
???????? * @param baseDir 所要壓縮的文件名
???????? * @param objFileName 壓縮后的文件名
???????? * @return 壓縮后文件的大小
???????? * @throws Exception
???????? */
??????? public long createFileToZip(String zipFilename,String sourceFileName) throws Exception {

?

??????????????? File? sourceFile = new File(sourceFileName);

?

??????????????? byte[] buf = new byte[1024];

?

??????????????? //壓縮文件名
??????????????? File objFile = new File(zipFilename);

?

??????????????? ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFile));

?

??????????????? ZipEntry ze = null;
??????????????? //創(chuàng)建一個ZipEntry,并設(shè)置Name和其它的一些屬性
??????????????? ze = new ZipEntry(sourceFile.getName());
??????????????? ze.setSize(sourceFile.length());
??????????????? ze.setTime(sourceFile.lastModified());

?

??????????????? //將ZipEntry加到zos中,再寫入實際的文件內(nèi)容
??????????????? zos.putNextEntry(ze);

?

??????????????? InputStream is = new BufferedInputStream(new FileInputStream(sourceFile));

?

??????????????? int readLen = -1;
??????????????? while ((readLen = is.read(buf, 0, 1024)) != -1) {
??????????????????????? zos.write(buf, 0, readLen);
??????????????? }
??????????????? is.close();
??????????????? zos.close();

?


??????????????? return objFile.length();
??????? }
??????? /**
???????? * zip壓縮功能測試. 將指定文件壓縮后存到一壓縮文件中
???????? *
???????? * @param baseDir 所要壓縮的文件名
???????? * @param objFileName 壓縮后的文件名
???????? * @return 壓縮后文件的大小
???????? * @throws Exception
???????? */
??????? public long createFileToZip(File sourceFile,File zipFile)throws IOException {

?


??????????????? byte[] buf = new byte[1024];

?

??????????????? //壓縮文件名
??????????????? File objFile = zipFile;

?

??????????????? ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(objFile));

?

??????????????? ZipEntry ze = null;
??????????????? //創(chuàng)建一個ZipEntry,并設(shè)置Name和其它的一些屬性
??????????????? ze = new ZipEntry(sourceFile.getName());
??????????????? ze.setSize(sourceFile.length());
??????????????? ze.setTime(sourceFile.lastModified());

?

??????????????? //將ZipEntry加到zos中,再寫入實際的文件內(nèi)容
??????????????? zos.putNextEntry(ze);

?

??????????????? InputStream is = new BufferedInputStream(new FileInputStream(sourceFile));

?

??????????????? int readLen = -1;
??????????????? while ((readLen = is.read(buf, 0, 1024)) != -1) {
??????????????????????? zos.write(buf, 0, readLen);
??????????????? }
??????????????? is.close();
??????????????? zos.close();

?

??????????????? return objFile.length();
??????? }

?

??????? /**
???????? * 測試解壓縮功能. 將d:\\download\\test.zip連同子目錄解壓到d:\\temp\\zipout目錄下.
???????? *
???????? * @throws Exception
???????? */
??????? public void releaseZipToFile(String sourceZip, String outFileName)
??????????????????????? throws IOException{
????????????????????? ZipFile zfile=new ZipFile(sourceZip);
????????????????????? System.out.println(zfile.getName());
????????????????????? Enumeration zList=zfile.entries();
????????????????????? ZipEntry ze=null;
????????????????????? byte[] buf=new byte[1024];
????????????????????? while(zList.hasMoreElements()){
????????????????????? //從ZipFile中得到一個ZipEntry
????????????????????? ze=(ZipEntry)zList.nextElement();
????????????????????? if(ze.isDirectory()){
????????????????????? continue;
????????????????????? }
????????????????????? //以ZipEntry為參數(shù)得到一個InputStream,并寫到OutputStream中
????????????????????? OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(outFileName, ze.getName())));
????????????????????? InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
????????????????????? int readLen=0;
????????????????????? while ((readLen=is.read(buf, 0, 1024))!=-1) {
????????????????????? os.write(buf, 0, readLen);
????????????????????? }
????????????????????? is.close();
????????????????????? os.close();
????????????????????? System.out.println("Extracted: "+ze.getName());
????????????????????? }
????????????????????? zfile.close();

??????? }

?

??????? /**
???????? * 取得指定目錄下的所有文件列表,包括子目錄.
???????? *
???????? * @param baseDir
???????? *??????????? File 指定的目錄
???????? * @return 包含java.io.File的List
???????? */
??????? private List getSubFiles(File baseDir) {
??????????????? List ret = new ArrayList();
??????????????? //File base=new File(baseDir);
??????????????? File[] tmp = baseDir.listFiles();
??????????????? for (int i = 0; i < tmp.length; i++) {
??????????????????????? if (tmp[i].isFile()) {
??????????????????????????????? ret.add(tmp[i]);
??????????????????????? }
??????????????????????? if (tmp[i].isDirectory()) {
??????????????????????????????? ret.addAll(getSubFiles(tmp[i]));
??????????????????????? }
??????????????? }
??????????????? return ret;
??????? }

?

??????? /**
???????? * 給定根目錄,返回一個相對路徑所對應(yīng)的實際文件名.
???????? *
???????? * @param baseDir
???????? *??????????? 指定根目錄
???????? * @param absFileName
???????? *??????????? 相對路徑名,來自于ZipEntry中的name
???????? * @return java.io.File 實際的文件
???????? */
??????? private File getRealFileName(String baseDir, String absFileName) {
??????????????? String[] dirs = absFileName.split("/");
??????????????? //System.out.println(dirs.length);
??????????????? File ret = new File(baseDir);
??????????????? //System.out.println(ret);
??????????????? if (dirs.length > 1) {
??????????????????????? for (int i = 0; i < dirs.length - 1; i++) {
??????????????????????????????? ret = new File(ret, dirs[i]);
??????????????????????? }
??????????????? }
??????????????? if (!ret.exists()) {
??????????????????????? ret.mkdirs();
??????????????? }
??????????????? ret = new File(ret, dirs[dirs.length - 1]);
??????????????? return ret;
??????? }

?

??????? /**
???????? * 給定根目錄,返回另一個文件名的相對路徑,用于zip文件中的路徑.
???????? *
???????? * @param baseDir
???????? *??????????? java.lang.String 根目錄
???????? * @param realFileName
???????? *??????????? java.io.File 實際的文件名
???????? * @return 相對文件名
???????? */
??????? private String getAbsFileName(String baseDir, File realFileName) {
??????????????? File real = realFileName;
??????????????? File base = new File(baseDir);
??????????????? String ret = real.getName();
??????????????? while (true) {
??????????????????????? real = real.getParentFile();
??????????????????????? if (real == null)
??????????????????????????????? break;
??????????????????????? if (real.equals(base))
??????????????????????????????? break;
??????????????????????? else {
??????????????????????????????? ret = real.getName() + "/" + ret;
??????????????????????? }
??????????????? }
??????????????? System.out.println("TTTTT" + ret);
??????????????? return ret;
??????? }


??????? public void testReadZip() throws Exception{
??????? String baseDir="d:\\temp\\zipout";
??????? ZipFile zfile=new ZipFile("d:\\download\\src.zip");
??????? System.out.println(zfile.getName());
??????? Enumeration zList=zfile.entries();
??????? ZipEntry ze=null;
??????? byte[] buf=new byte[1024];
??????? while(zList.hasMoreElements()){
??????? //從ZipFile中得到一個ZipEntry
??????? ze=(ZipEntry)zList.nextElement();
??????? if(ze.isDirectory()){
??????? continue;
??????? }
??????? //以ZipEntry為參數(shù)得到一個InputStream,并寫到OutputStream中
??????? OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(baseDir, ze.getName())));
??????? InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
??????? int readLen=0;
??????? while ((readLen=is.read(buf, 0, 1024))!=-1) {
??????? os.write(buf, 0, readLen);
??????? }
??????? is.close();
??????? os.close();
??????? System.out.println("Extracted: "+ze.getName());
??????? }
??????? zfile.close();
??????? }


?? public static void main(String args[]){
???? ZipManager manager = new ZipManager();
???? try {
?????? //manager.releaseZipToFile("c:\\test.zip","c:\\test");
?????? manager.testReadZip();
???? }
???? catch (Exception e) {}
???? System.out.println("over");
?? }
?


}



JJCEA 2007-03-25 00:35 發(fā)表評論
]]>
如何在jboss 4.0中調(diào)用EJB組件http://www.tkk7.com/senlin-blog/archive/2006/08/16/64014.htmlJJCEAJJCEAWed, 16 Aug 2006 15:02:00 GMThttp://www.tkk7.com/senlin-blog/archive/2006/08/16/64014.htmlhttp://www.tkk7.com/senlin-blog/comments/64014.htmlhttp://www.tkk7.com/senlin-blog/archive/2006/08/16/64014.html#Feedback1http://www.tkk7.com/senlin-blog/comments/commentRss/64014.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/64014.html
  Tomcat 5.0 被集成在 jboss的下面這個目錄中:

  JBOSS_HOME\server\default\deploy\jbossweb-tomcat50.sar

  里面提供了一個server.xml和web.xml文件,可以對Tomcat進行一些基本設(shè)置。但JBOSS的設(shè)計者建議用戶甚至不要接觸這個目錄,更不用說修改和添加什么文件了,因為Tomcat與Jboss是如此緊密相連,以致于所有的設(shè)置工作都可以在Jboss自己的配置文件中完成。但是我還是發(fā)現(xiàn)了一個地方值得修改:修改server.xml中的端口號,比如由缺省的8080端口改為4000端口,因為我發(fā)現(xiàn)我的“百度下吧”軟件常常占用了8080端口,而且我本來已經(jīng)有了一個Tomcat 5.0。

  這樣鍵入:

http://localhost:4000/

  可以訪問到Jboss的歡迎頁面

  本文演示了JSP頁面如何在jboss 4.0中調(diào)用EJB組件。

  總結(jié)構(gòu):

J2EE應(yīng)用/
|__EJB組件/(haiejb.jar)
| |__META-INF/
| | |__ejb-jar.xml
| | |__jboss.xml
| |__ejbs/
| |__HaiHome.class
| |__HaiClient.class
| |__HaiBean.class
|__WEB應(yīng)用/(haiejb.war)
| |__haiejb.jsp
| |__WEB-INF/
| |__web.xml
| |__jboss-web.xml
|__META-INF/
|__application.xml

  一、編譯java文件為EJB類文件

  java文件編譯:

  [假定在系統(tǒng)環(huán)境變量的CLASSPATH中包含了javax.ejb.*包,該包可以在以下地方找:

  JBOSS_HOME\server\default\lib\jboss-j2ee.jar

  JBOSS_HOME\client\jboss-j2ee.jar]


  [java源文件目錄]>:javac -classpath %classpath% -d [輸出目錄:EJB組件目錄] *.java

HaiHome.java:
package ejbs;

import java.io.Serializable;
import java.rmi.*;
import javax.ejb.*;

public interface HaiHome extends EJBHome {
HaiClient create() throws RemoteException, CreateException;
}

  HaiClient.java:

package ejbs;

import javax.ejb.*;
import java.rmi.RemoteException;
public interface HaiClient extends EJBObject {
 public String sayHai() throws RemoteException;
}
haiBean.java:
package ejbs;

import javax.ejb.*;
import javax.naming.*;

public class HaiBean implements SessionBean {

 public String sayHai() {
  return "Hai, EJB technology!";
 }
 
 public void ejbCreate() throws EJBException {}
 public void ejbRemove() throws EJBException {}
 public void ejbPassivate() {}
 public void ejbActivate() {}
 public void setSessionContext(SessionContext sc) {}
}

  二、創(chuàng)建EJB組件:

  haiejb.jar:(EJB組件)

  打包命令:[EJB組件目錄]>:jar cvf haiejb.jar META-INF/ ejbs/


|__META-INF/

| |__ejb-jar.xml

| |__jboss.xml

|__ejbs/

|__HaiHome.class

|__HaiClient.class

|__HaiBean.class

  ejb-jar.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC ’-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN’ ’http://java.sun.com/dtd/ejb-jar_2_0.dtd’>
<ejb-jar>
<description>Hai EJB instance.</description>
<display-name>Hai EJB</display-name>
<enterprise-beans>
<session>
<ejb-name>HaiEJB</ejb-name>
<home>ejbs.HaiHome</home>
<remote>ejbs.HaiClient</remote>
<ejb-class>ejbs.HaiBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>

  jboss.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>HaiEJB</ejb-name>
<jndi-name>HaiEJB</jndi-name>
</session>
</enterprise-beans>
</jboss>

  三、創(chuàng)建WEB應(yīng)用

  haiejb.war:(WEB應(yīng)用)

  打包命令:[WEB應(yīng)用目錄]>:jar cvf haiejb.war haiejb.jsp WEB-INF/

|__haiejb.jsp

|__WEB-INF/

|__web.xml

|__jboss-web.xml

  haiejb.jsp:

<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="ejbs.*,javax.ejb.*,javax.naming.*,javax.rmi.PortableRemoteObject,java.rmi.RemoteException" %>
<html>
<body>
<% String message = "nothing!";
try {
 InitialContext ic = new InitialContext();
 Object objRef = ic.lookup("HaiEJB");
 HaiHome home = (HaiHome) PortableRemoteObject.narrow(objRef,ejbs.HaiHome.class);
 HaiClient haiRemote = home.create();
 message = haiRemote.sayHai();
} catch (RemoteException re) {
 re.printStackTrace();
} catch (CreateException ce) {
 ce.printStackTrace();
} catch (NamingException ne) {
 ne.printStackTrace();
}
%>
<h1><%=message%></h1>
</body>
</html>

  web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC ’-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’ ’http://java.sun.com/dtd/web-app_2_3.dtd’>
<web-app>
<ejb-ref>
<ejb-ref-name>HaiEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>ejbs.HaiHome</home>
<remote>ejbs.HaiClient</remote>
</ejb-ref>
</web-app>

  jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<ejb-ref>
<ejb-ref-name>HaiEJB</ejb-ref-name>
<jndi-name>HaiEJB</jndi-name>
</ejb-ref>
</jboss-web>

  四、創(chuàng)建J2EE應(yīng)用程序

  haiejb.ear: (J2EE應(yīng)用程序)

  把上面創(chuàng)建的haiejb.jar和haiejb.war包拷貝到你創(chuàng)建的J2EE應(yīng)用主目錄,新建一個META-INF目錄并在里面創(chuàng)建application.xml文件:

  打包命令:[J2EE應(yīng)用目錄]>:jar cvf haiejb.ear haiejb.jar haiejb.war META-INF/

|__haiejb.jar

|__haiejb.war

|__META-INF/

|__application.xml

  application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<application>
<display-name>HaiEJB J2EE Application</display-name>
<module>
<web>
<web-uri>haiejb.war</web-uri>
<context-root>/haiejb</context-root>
</web>
</module>
<module>
<ejb>haiejb.jar</ejb>
</module>
</application>

  五、部署J2EE應(yīng)用:

  把haiejb.ear拷貝到JBOSS_HOME\server\default\deploy\

  啟動jboss 4.0,注意命令行窗口中有無異常,如果有異常情況,請查看log文件:

JBOSS_HOME\server\default\log\server.log

  從中查找分析問題所在,然后改正之,直到無異常顯示

  最后在瀏覽器地址欄中鍵入:

http://localhost:8080/haiejb/haiejb.jsp

  結(jié)果:

  Hai, EJB technology!

  祝好運!

JJCEA 2006-08-16 23:02 發(fā)表評論
]]>
weblogic8.1下EJB的部署與調(diào)用 http://www.tkk7.com/senlin-blog/archive/2006/08/16/64003.htmlJJCEAJJCEAWed, 16 Aug 2006 13:42:00 GMThttp://www.tkk7.com/senlin-blog/archive/2006/08/16/64003.htmlhttp://www.tkk7.com/senlin-blog/comments/64003.htmlhttp://www.tkk7.com/senlin-blog/archive/2006/08/16/64003.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/64003.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/64003.html< ?xml version="1.0" encoding="UTF-8"? >
< !DOCTYPE ejb-jar PUBLIC ''-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN'' ''" target=_blank >http://java.sun.com/dtd/ejb-jar_2_0.dtd'' >


< !-- Generated XML! -- >

< ejb-jar >
< display-name >hello< /display-name >
< enterprise-beans >
< session >
< display-name >HelloBean< /display-name >
< ejb-name >Hello< /ejb-name >
< home >org.bromon.ejb.session.HelloHome< /home >
< remote >org.bromon.ejb.session.Hello< /remote >
< local-home >org.bromon.ejb.session.HelloLocalHome< /local-home >
< local >org.bromon.ejb.session.HelloLocal< /local >
< ejb-class >org.bromon.ejb.session.HelloBean< /ejb-class >
< session-type >Stateless< /session-type >
< transaction-type >Bean< /transaction-type >
< security-identity >
< use-caller-identity/ >
< /security-identity >

< /session >
< /enterprise-beans >

< /ejb-jar >

2、weblogic-ejb-jar.xml(weblogic專署配置文件)
< !DOCTYPE weblogic-ejb-jar PUBLIC ''-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN'' ''" target=_blank >http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd'' >


< !-- Generated XML! -- >

< weblogic-ejb-jar >
< weblogic-enterprise-bean >
< ejb-name >Hello< /ejb-name >
< stateless-session-descriptor >
< pool >
< /pool >

< stateless-clustering >
< /stateless-clustering >

< /stateless-session-descriptor >

< transaction-descriptor >
< /transaction-descriptor >

< jndi-name >Hello< /jndi-name >
< local-jndi-name >HelloLocal< /local-jndi-name >
< /weblogic-enterprise-bean >
< /weblogic-ejb-jar >

3、HelloClient.java(客戶端代碼,最好和四個接口一起打包)
/*
* Created on 2004-5-11
*/
package org.bromon.ejb.session;
import javax.naming.*;
import javax.rmi.*;
import java.util.*;
/**
* @author Bromon
*/
public class HelloClient
{
public static void main(String args[])
{
try
{
Properties prop=new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");//加載weblogic上下文環(huán)境
prop.put(Context.PROVIDER_URL,"t3://localhost:7001");//weblogic專用協(xié)議

Context ctx=new InitialContext(prop);
Object obj=ctx.lookup("Hello");
HelloHome home=(HelloHome)PortableRemoteObject.narrow(obj,HelloHome.class);
Hello hello=home.create();
System.out.println(hello.say());
hello.remove();
}catch(Exception e)
{
System.out.println(e);
}
}
}

JJCEA 2006-08-16 21:42 發(fā)表評論
]]>
Eclipse使用技巧http://www.tkk7.com/senlin-blog/archive/2006/07/23/59620.htmlJJCEAJJCEASun, 23 Jul 2006 02:29:00 GMThttp://www.tkk7.com/senlin-blog/archive/2006/07/23/59620.htmlhttp://www.tkk7.com/senlin-blog/comments/59620.htmlhttp://www.tkk7.com/senlin-blog/archive/2006/07/23/59620.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/59620.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/59620.html閱讀全文

JJCEA 2006-07-23 10:29 發(fā)表評論
]]>
影像與工作流技術(shù)在銀行業(yè)的應(yīng)用http://www.tkk7.com/senlin-blog/archive/2006/07/22/59525.htmlJJCEAJJCEASat, 22 Jul 2006 03:40:00 GMThttp://www.tkk7.com/senlin-blog/archive/2006/07/22/59525.htmlhttp://www.tkk7.com/senlin-blog/comments/59525.htmlhttp://www.tkk7.com/senlin-blog/archive/2006/07/22/59525.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/59525.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/59525.html

?


業(yè)務(wù)需求

金融電子化的發(fā)展,令銀行業(yè)務(wù)從純粹的手工操作逐步實現(xiàn)了業(yè)務(wù)處理的電子化。銀行原始單據(jù)上的部分信息被輸入到計算機中,成為數(shù)字化的信息進行傳遞和處理,業(yè)務(wù)處理的效率和能力大為提高,一些在手工階段無法實現(xiàn)的業(yè)務(wù),如通存通兌成為了基本的金融業(yè)務(wù)。然而,大量的金融應(yīng)用系統(tǒng)的處理都是基于手工輸入數(shù)據(jù)信息的處理,由于手工輸入、數(shù)據(jù)傳遞過程中可能出現(xiàn)的差錯以及信息的不完整性(如數(shù)字化的憑證丟失了原始紙張憑證上的筆跡等信息),使得目前的金融電子化系統(tǒng)并不能減少紙張憑證的運用,不得不繼續(xù)進行大量紙張憑證的歸檔、存儲以及運輸,以便進行事后監(jiān)督、審計。大量的紙張不僅占用人力、物力,而且非常不便于進行查詢。于是人們開始運用影像技術(shù)對紙張進行處理。

在我國目前金融行業(yè)的應(yīng)用中,影像技術(shù)常常被用于進行原始憑證的影像化存儲,也就是在業(yè)務(wù)處理結(jié)束后,將大量的紙張文檔進行掃描等處理后變?yōu)橛跋襁M行存儲,以便日后的查詢。但是,影像技術(shù)僅僅用于對憑證的存儲和查詢,影像處理與業(yè)務(wù)處理兩個過程是獨立的,并不能解決數(shù)字化信息在采集和傳遞中的問題;而且對于一些專業(yè)技術(shù)要求較高的業(yè)務(wù)如貸款、國際結(jié)算、保險等,常常仍舊需要大量的紙張傳遞,業(yè)務(wù)處理效率難以提高,業(yè)務(wù)風(fēng)險也不易控制。

以目前發(fā)展很快的個人貸款業(yè)務(wù)為例。個人貸款的特點是金額小、筆數(shù)多、客戶數(shù)量多而重復(fù)貸款的少。對銀行而言,這種貸款的貸前資信了解、貸后日常管理比企業(yè)貸款更為復(fù)雜。這就意味著個人貸款的文檔量大,相應(yīng)的紙上作業(yè)過程,如貸款文件的準備、各種證明的收集等就形成繁重的負擔(dān)。隨之而來就是新員工(或新從事貸款業(yè)務(wù)的員工)的增加、員工的工作量增加、審批過程加長和風(fēng)險增大。

如果在個人貸款系統(tǒng)中運用影像和工作流技術(shù),在各種業(yè)務(wù)系統(tǒng)處理過程從開始階段都將原始憑證轉(zhuǎn)化為影像文件,通過影像與數(shù)字化信息同時在各工作崗位間的傳遞來實現(xiàn)業(yè)務(wù)的處理流程,不僅可以使每個業(yè)務(wù)處理人員都能看到影像化的原始憑證,進行準確的業(yè)務(wù)處理,避免手工輸入的錯誤,而且可以很好地實現(xiàn)業(yè)務(wù)的集中處理,可以提高業(yè)務(wù)處理的效率,將業(yè)務(wù)風(fēng)險降到最低限度。可以說,將影像處理技術(shù)與工作流管理技術(shù)充分地結(jié)合起來,會形成新的有效的業(yè)務(wù)處理與業(yè)務(wù)監(jiān)管的模式。這種方案在國外銀行已經(jīng)有不少成功的先例。

技術(shù)實現(xiàn)

影像和工作流技術(shù)本身就包含了豐富的內(nèi)容,一個包含影像和工作流技術(shù)的應(yīng)用系統(tǒng)必須考慮到信息的采集、存儲、檢索、處理、發(fā)布等各個環(huán)節(jié)的技術(shù)問題,處理過程見下圖。

1.文檔輸入系統(tǒng)
文檔輸入系統(tǒng)是影像和工作流解決方案實施中的關(guān)鍵所在。文檔輸入可通過掃描儀、傳真機或電子郵件系統(tǒng)將文件轉(zhuǎn)為電子化文檔存儲。文檔以壓縮的數(shù)字影像方式或數(shù)字影像結(jié)合文本方式或數(shù)字影像結(jié)合縮微影像方式輸入系統(tǒng),其中,數(shù)字影像結(jié)合文本方式需要在掃描儀上安裝字符識別(OCR)軟件,或在文檔輸入軟件中嵌入OCR軟件。對于嵌入對象,如電子表格和字處理文件等的輸入,可通過對象連接和嵌入(OLE)技術(shù)直接存儲于影像系統(tǒng)。

2.影像的壓縮及存儲
組成影像的基本單位為像素,衡量影像質(zhì)量的一個重要指標是分辨率,例如,分辨率為200dpi即是指每平方英寸有40000個像素。分辨率越高,影像越清晰,但對數(shù)據(jù)的存儲、傳輸和硬件配置的要求也會越高。壓縮后的文件大小由多方面因素決定,如文檔的大小、色彩、灰度、底色、對比度、分辨率。通常,文本文件要求的分辨率為200dpi。

圖像的壓縮和解壓縮技術(shù)能夠最大限度地減少影像文件對存儲空間的消耗,又確保了影像解壓后無損失地再顯示。影像系統(tǒng)的影像壓縮通常采用CCITTIV壓縮協(xié)議。

影像可以存儲在硬盤、光盤、磁帶等多種存儲介質(zhì)上。存儲系統(tǒng)可以利用目錄查找和定位文檔,實現(xiàn)工作流作業(yè)文檔和非工作流相關(guān)文檔的集中存放,通過創(chuàng)建和配置文檔分類,可根據(jù)文檔的不同屬性、類別和狀態(tài)進行自動分類歸檔,不同類型的文件分別存儲在各自的子目錄下,也可存儲于不同的文件系統(tǒng),以實現(xiàn)不同的存儲備份周期和策略。也可以實現(xiàn)從文件系統(tǒng)到其他廉價介質(zhì)(光盤,磁帶)的遷移,提供多種靈活的備份方式。

對于存儲和訪問光盤上的影像作業(yè),可以通過圖形化用戶接口對光盤塔或獨立光盤驅(qū)動器中的光盤進行標記、插入、裝載、卸出等操作,通過在數(shù)據(jù)庫中跟蹤并記錄所有歸檔和未歸檔的影像作業(yè)的物理地址,選擇光盤塔中合適的光盤,并響應(yīng)來自用戶的讀寫請求。

3.建立索引及影像文檔管理
影像索引即輸入能惟一識別和提取該影像的數(shù)據(jù)項。每種類型的文檔都有相對應(yīng)的索引表,索引表存放于相應(yīng)的數(shù)據(jù)庫,文檔的類型和索引表在系統(tǒng)維護和管理工具中定義。索引信息可通過手工方式錄入,或利用條碼識別技術(shù)(BCR)與字符識別技術(shù)(OCR,ICR),通過掃描條型碼或識別影像字符自動錄入。

4.工作流和自動控制
工作流系統(tǒng)為自動處理業(yè)務(wù)流程而設(shè)計,通過對業(yè)務(wù)處理路徑的定義,來自動有序地管理文檔在企業(yè)內(nèi)各部門的處理。

工作流系統(tǒng)軟件可實現(xiàn)如下的功能:

  • 自動把作業(yè)遞交給相關(guān)人員;
  • 確認業(yè)務(wù)處理每一步必需的信息、應(yīng)用、服務(wù);
  • 實現(xiàn)作業(yè)的并行處理;
  • 把影像技術(shù)與業(yè)務(wù)處理流程集成;
  • 監(jiān)控處理流程,找出瓶頸,并優(yōu)化業(yè)務(wù)分布和流程;
  • 與原有的主機系統(tǒng)集成。

影像文檔處理系統(tǒng)的工作流軟件把文檔和文件夾傳送至企業(yè)內(nèi)部合適的人員處理,工作流軟件提供操作簡單的工作界面,使用戶可以圖形化地定義文檔的路徑和操作流程,用戶通過使用標準的剪切、復(fù)制和粘貼操作或?qū)丶耐侠瓉矶x流程中每一個工作步驟,通過對系統(tǒng)或用戶定義變量值的簡單判別,自動地安排影像文檔在銀行內(nèi)的作業(yè)流程處理。

5.信息展現(xiàn)
影像文檔處理系統(tǒng)用無紙化的影像工作流程取代了有紙化的文檔處理,所以,必須有友好的用戶界面的仿真工作終端、圖標和控制鍵等,使具有傳統(tǒng)有紙化工作流程經(jīng)驗的操作員能迅速地適應(yīng)和掌握無紙化工作流程。工作流終端管理工具可以針對用戶的特殊業(yè)務(wù)需求設(shè)計終端界面,以簡化多步驟的操作過程。

隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,影像文檔處理系統(tǒng)也為用戶提供了基于標準的互聯(lián)網(wǎng)技術(shù)的系統(tǒng)文檔存取和管理。用戶可以通過因特網(wǎng)或內(nèi)部網(wǎng)以友好、易用的Web瀏覽器從任意網(wǎng)絡(luò)平臺或位置與服務(wù)器通信,訪問影像和工作流系統(tǒng),進行例如業(yè)務(wù)處理、系統(tǒng)維護等工作,管理人員應(yīng)用Web能夠在任何站點,通過任何Web瀏覽器,提供比傳統(tǒng)的命令驅(qū)動的遠程登錄界面更直接、更易用的圖形界面。

應(yīng)用前景

影像和工作流技術(shù)的運用是一個復(fù)雜的應(yīng)用集成工作,必須考慮到:

  • 工作流程的重組與改進既要實現(xiàn)業(yè)務(wù)發(fā)展目標,又要保持和擴展客戶群;
  • 員工崗位的重大變化,由于影像和工作流技術(shù)的運用,可以實現(xiàn)業(yè)務(wù)處理一定程度的集中化,解決業(yè)務(wù)受理分散與業(yè)務(wù)處理集中的矛盾;
  • 充分考慮各種技術(shù)的運用,如:分布式的存儲可以減少影像文件的傳輸要求,降低對網(wǎng)絡(luò)的壓力,影像和工作流技術(shù)可以與瀏覽器技術(shù)結(jié)合,更方便地實現(xiàn)業(yè)務(wù)處理,但必須充分考慮安全技術(shù)的運用。

影像和工作流技術(shù)已經(jīng)被國外金融以及其他行業(yè)廣泛應(yīng)用。在國外一項對130家銀行的300名高級管理人員的調(diào)查中,56%的人認為“最重要的投資是技術(shù)投資,特別是網(wǎng)絡(luò)與影像”。在我國,影像和工作流技術(shù)的應(yīng)用與國外還有較大的差距,但隨著金融電子化進程的深入,將會有更多的系統(tǒng)運用影像和工作流及其相關(guān)技術(shù)。

影像和工作流技術(shù)的應(yīng)用范圍非常廣泛,可以影像化的文檔種類也十分豐富,例如:憑證、票據(jù)、各種申請或信用狀況資料、圖像、各種文件等。也就是說,影像與工作流技術(shù)可以被用于所有基于大量紙張文件處理的金融行業(yè)應(yīng)用系統(tǒng)中,如國際結(jié)算、信貸、個人貸款、保險、人事管理、辦公自動化等。我們相信隨著IT技術(shù)的發(fā)展,影像和工作流技術(shù)可以被更加廣泛地運用在金融以及其他行業(yè)。



JJCEA 2006-07-22 11:40 發(fā)表評論
]]>
把cvs管理的工程文件移植到另外一臺機子上http://www.tkk7.com/senlin-blog/archive/2006/06/15/52990.htmlJJCEAJJCEAThu, 15 Jun 2006 06:25:00 GMThttp://www.tkk7.com/senlin-blog/archive/2006/06/15/52990.htmlhttp://www.tkk7.com/senlin-blog/comments/52990.htmlhttp://www.tkk7.com/senlin-blog/archive/2006/06/15/52990.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/52990.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/52990.html 1.在要移植的機子上裝的cvs服務(wù)器
2.將工程文件夾拷到要移植的機子上
3.在Repositories選項中,選擇工程目錄,然后,選擇add,輸入cvsdb
4.在Advanced選項中,前三項打了勾,下面兩個分別選擇
?? Request Authentication
?? Request Compression
5.客戶端訪問時,修改一下IP地址.
這樣就OK了



JJCEA 2006-06-15 14:25 發(fā)表評論
]]>
JAVA進階:VO(DTO)與PO(DAO)之間的轉(zhuǎn)換http://www.tkk7.com/senlin-blog/archive/2006/06/08/51376.htmlJJCEAJJCEAThu, 08 Jun 2006 07:49:00 GMThttp://www.tkk7.com/senlin-blog/archive/2006/06/08/51376.htmlhttp://www.tkk7.com/senlin-blog/comments/51376.htmlhttp://www.tkk7.com/senlin-blog/archive/2006/06/08/51376.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/51376.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/51376.htmlPO即 Persistence Object
  VO即 Value Object

 VO和PO的主要區(qū)別在于:
  VO是獨立的Java Object。
  PO是由Hibernate納入其實體容器(Entity Map)的對象,它代表了與數(shù)據(jù)庫中某條記錄對應(yīng)的Hibernate實體,PO的變化在事務(wù)提交時將反應(yīng)到實際數(shù)據(jù)庫中。

 實際上,這個VO被用作Data Transfer Object,即所謂的DTO。想必,VO就是Data Access Object ---DAO了啦。為什么要有這二者之分呢?如在傳統(tǒng)的MVC架構(gòu)中,位于Model層的PO,是否允許被傳遞到其他層面。由于PO的更新最終將被映射到實際數(shù)據(jù)庫中,如果PO在其他層面(如View層)發(fā)生了變動,那么可能會對Model層造成意想不到的破壞。

 主要想說的還是如何進行二者之間的轉(zhuǎn)換:
  屬性復(fù)制可以通過Apache Jakarta Commons Beanutils(http://jakarta.apache.org/commons/beanutils/)組件提供的屬性批量復(fù)制功能,避免繁復(fù)的get/set操作。down下來之后,里面的API DOC一應(yīng)俱全。

 對于一些無需處理其它處理(如過濾)直接用BeanUtilsBean.copyProperties方法,其參考如下:

public static void copyProperties(java.lang.Object dest,
????????????????????????????????? java.lang.Object orig)
?????????????????????????? throws java.lang.IllegalAccessException,
????????????????????????????????? java.lang.reflect.InvocationTargetExceptioCopy property values from the origin bean to the destination bean for all cases where the property names are the same.
 范例1:


?TUser user? =?? new? TUser();
TUser anotherUser? =?? new? TUser();
user.setName( " Emma " );
user.setUserType( 1 );
?try??? {
BeanUtils.copyProperties(anotherUser,user);
System.out.println( " UserName =>? "
?+ anotherUser.getName()
);
System.out.println( " UserType =>? "
?+? anotherUser.getUserType()
);
}?? catch? (IllegalAccessException e)?? {
e.printStackTrace();
}?? catch? (InvocationTargetException e)?? {
e.printStackTrace();
}  
?


 也可以利用其中的一些方法在copy屬性的時候達到自己的要求,如:

 范例2

? /** */ /** //*
?* Created on 2006-4-26
? */
?package? com.util;

?import? java.beans.PropertyDescriptor;
?import? java.util.Collection;

?import? org.apache.commons.beanutils.PropertyUtils;


?/** */ /**?? */ /** */ /**
?* CopyUtil
?*? @author? Jkallen
? */
? public?? class? CopyUtil?? {
???
???? /** */ /**?? */ /** */ /**
???? * Copy properties of orig to dest
???? * Exception the Entity and Collection Type
???? *? @param? dest
???? *? @param? orig
???? *? @return? the dest bean
????? */
????? public?? static? Object copyProperties(Object dest, Object orig)?? {
???????? if? (dest? ==?? null?? ||? orig? ==?? null )?? {
???????????? return? dest;
??????? }
???????
??????? PropertyDescriptor[] destDesc? =? PropertyUtils.getPropertyDescriptors(dest);
???????? try??? {
???????????? for? ( int? i? =?? 0 ; i? <? destDesc.length; i ++ )?? {
??????????????? Class destType? =? destDesc[i].getPropertyType();
??????????????? Class origType? =? PropertyUtils.getPropertyType(orig, destDesc[i].getName());
???????????????? if (destType? !=?? null?? &&? destType.equals(origType)
???????????????????????? &&?? ! destType.equals(Class. class ))?? {
???????????????????? if ( ! Collection. class .isAssignableFrom(origType))? {???????????????????
???????????????????????? try? {
??????????????????????????? Object value? =? PropertyUtils.getProperty(orig, destDesc[i].getName());
??????????????????????????? PropertyUtils.setProperty(dest, destDesc[i].getName(), value);
??????????????????????? } catch (Exception ex)? {???????????????????????????
??????????????????????? }
??????????????????? }
??????????????? }
??????????? }
???????????
???????????? return? dest;
??????? } catch (Exception ex)?? {
???????????? throw?? new? CopyException(ex);
?//???????????? return dest;
???????? }
??? }????
???
???? /** */ /**?? */ /** */ /**
???? * Copy properties of orig to dest
???? * Exception the Entity and Collection Type
???? *? @param? dest
???? *? @param? orig
???? *? @param? ignores
???? *? @return? the dest bean
????? */
????? public?? static? Object copyProperties(Object dest, Object orig, String[] ignores)?? {
???????? if? (dest? ==?? null?? ||? orig? ==?? null )?? {
???????????? return? dest;
??????? }
???????
??????? PropertyDescriptor[] destDesc? =? PropertyUtils.getPropertyDescriptors(dest);
???????? try??? {
???????????? for? ( int? i? =?? 0 ; i? <? destDesc.length; i ++ )?? {
???????????????? if? (contains(ignores, destDesc[i].getName()))?? {
???????????????????? continue ;
??????????????? }
???????????????
??????????????? Class destType? =? destDesc[i].getPropertyType();
??????????????? Class origType? =? PropertyUtils.getPropertyType(orig, destDesc[i].getName());
???????????????? if (destType? !=?? null?? &&? destType.equals(origType)
???????????????????????? &&?? ! destType.equals(Class. class ))?? {
???????????????????? if ( ! Collection. class .isAssignableFrom(origType))? {
??????????????????????? Object value? =? PropertyUtils.getProperty(orig, destDesc[i].getName());
??????????????????????? PropertyUtils.setProperty(dest, destDesc[i].getName(), value);
??????????????????? }
??????????????? }
??????????? }
???????????
???????????? return? dest;
??????? } catch (Exception ex)?? {
???????????? throw?? new? CopyException(ex);
??????? }
??? }
???
???? static?? boolean? contains(String[] ignores, String name)?? {
???????? boolean? ignored? =?? false ;
???????? for? ( int? j? =?? 0 ; ignores? !=?? null?? &&? j? <? ignores.length; j ++ )?? {
???????????? if? (ignores[j].equals(name))?? {
??????????????? ignored? =?? true ;
???????????????? break ;
??????????? }
??????? }
???????
???????? return? ignored;
??? }
}
?
?
  

  可以看到,在范例1中通過方法copyProperties的時候,二者之間在的屬性名必須相同(Copy property values from the origin bean to the destination bean for all cases where the property names are the same)。而在范例2中通過
?  Object value = PropertyUtils.getProperty(orig, destDesc[i].getName());
?   PropertyUtils.setProperty(dest, destDesc[i].getName(), value);
  也是將源與目的之間copy相同的屬性名。而VO是在前臺顯示,所以難免會用到PO中所不存在的屬性值。比如PO中可能是一個對象,而VO中則可能是此對象的全部屬性。其中的一些轉(zhuǎn)換則需要依據(jù)前臺需要針對性地處理啦!

Reference:? Apache DOC and <>



JJCEA 2006-06-08 15:49 發(fā)表評論
]]>
表現(xiàn)層框架Struts/Tapestry/JSF架構(gòu)比較 http://www.tkk7.com/senlin-blog/archive/2006/04/25/43040.htmlJJCEAJJCEATue, 25 Apr 2006 07:49:00 GMThttp://www.tkk7.com/senlin-blog/archive/2006/04/25/43040.htmlhttp://www.tkk7.com/senlin-blog/comments/43040.htmlhttp://www.tkk7.com/senlin-blog/archive/2006/04/25/43040.html#Feedback0http://www.tkk7.com/senlin-blog/comments/commentRss/43040.htmlhttp://www.tkk7.com/senlin-blog/services/trackbacks/43040.html表現(xiàn)層框架Struts/Tapestry/JSF架構(gòu)比較

板橋里人 http://www.jdon.com 2005/09/12

  Struts/Tapestry/JSF是目前J2EE表現(xiàn)層新老組合的框架技術(shù)。從誕生時間上看,Struts應(yīng)該比較早,使用得非常廣泛,Tapestry 3.0逐漸引起廣泛的重視,正當Tapestry即將大顯身手時期,SUN推出JSF標準技術(shù),雖然JSF一開始推出尚不成熟,留出了一段空白期,但是隨著JSF1.1標準推出,JSF開始正面出擊,粉面隆重登場了。

  其實,JSF和Tapestry也并不是那種頭碰頭的相同競爭性技術(shù),兩者還是各有側(cè)重點的,不過比較細微,但是這種細微點在實現(xiàn)一個大工程時可能帶來不同的感受和變化。

  首先,我們從一個高度來抽象一下表現(xiàn)層框架應(yīng)有的技術(shù)架構(gòu),下圖可以說所有表現(xiàn)層框架技術(shù)都必須實現(xiàn)的功能架構(gòu)圖:

  當然,我們不必廢話羅嗦MVC模式,MVC模式是基準模式,現(xiàn)在框架技術(shù)已經(jīng)不必再拼是否是MVC模式了。 在上圖MVC模式基礎(chǔ)上,一個表現(xiàn)層框架無外乎要實現(xiàn)圖中的三個功能:

1.在當前頁面能夠顯示一個組件對象的內(nèi)容;而不是象純JSP那樣,需要在Jsp頁面寫入“調(diào)用對象方法”的Java代碼。

2.當用戶按下頁面的提交按扭或鏈接后,事件發(fā)生,這時應(yīng)該觸發(fā)服務(wù)器端并將當前頁面的參數(shù)提交給服務(wù)器。這種機制表現(xiàn)在Form表單提交和有參數(shù)的鏈接<a href=""></a>

3.從一個頁面視圖直接跳轉(zhuǎn)到另外一個頁面視圖,單純的導(dǎo)航作用。

我們通過下表來比較這 三種框架在實現(xiàn)上圖各個功能時技術(shù)細節(jié),從而得出他們的異同點和偏重點。

? Struts Tapestry3.0 JSF
在View顯示的組件要求

組件必須繼承ActionForm

分顯式調(diào)用和隱式調(diào)用
組件必須繼承BaseComponent
普通POJO
無需繼承
Managed Bean
組件在View顯示粒度 View頁面只能顯示與表單對應(yīng)的ActionForm,配置中Action ActionForm 頁面一般只能1:1:1關(guān)系。 可將組件嵌入頁面任何一行,對使用組件數(shù)量無限制。 同Tapestry
頁面分區(qū)tiles 使用Tiles標簽庫實現(xiàn),需要另外tiles-def.xml配置文件 組件有自己的視圖頁面,通過調(diào)用組件即直接實現(xiàn)多個頁面組合。強大自然的頁面組合是其特點。 通過組件+標簽庫實現(xiàn)Subview,但如需重用Layout,還要結(jié)合Tiles.
頁面跳轉(zhuǎn) 使用標簽庫html:link中寫明目標URL,URL名稱需要對照配置文件的path命名,與組件Action耦合。 URL名稱是目標的組件名稱,不涉及URL和路徑等操作,方便穩(wěn)固。 類似Struts,也需要在配置文件中查找,與組件分離。
參數(shù)傳遞 使用html:link時傳遞參數(shù)超過一個以上處理麻煩。 直接調(diào)用組件,直接賦予參數(shù),沒有參數(shù)個數(shù)限制 參數(shù)分離傳遞給組件
事件觸發(fā) 通過表單提交submit激活,不能細化到表單里字段。 能夠給于表單每個字段貼一個事件,事件組件必須實現(xiàn)PageListener接口 同Tapestry,事件組件必須實習(xí)ActionListener 接口

Struts組件編程模型

  Struts實現(xiàn)組件編程時有一些復(fù)雜:經(jīng)常為一個頁面中需要引入多個組件而頭疼,因為Struts中無法直接引入多個組件,必須繞一些圈子:

  一般分兩種情況:如果同一個Action就可以對付這些組件,那么在這種情況下有兩個辦法:

1.將這多個組件裝入一個ActionForm中,如使用MapForm等機制;

2.手工將多個組件裝入request/session等scope中,然后根據(jù)其名稱在jsp中獲得。

  這兩個方法都有缺點: 第一種辦法經(jīng)常一個ActionForm弄得面目全非,變成一個大雜燴,違反了OO分派封裝的原則;第2種辦法其實又回到j(luò)sp編程;

  第二種情況,如果這些組件必須有預(yù)先由不同的Action來處理,每個組件必須經(jīng)過Action -->ActionForm流程,在這種情況下有兩種辦法:

1.使用Tiles, 不同流程輸出到同一個頁面的不同區(qū)域。是一種并行處理方式。

2. 對多個流程首尾相連,第一Action forward結(jié)果是第二個Action,最后輸出一個Jsp,在這個jsp中就可以使用前面多個流程的多個ActionForm了,這屬于串行方式。

Struts組件模型缺點

  Struts組件編程必須限定在Action/ActionForm/JSP這三個框框中做文章,難度相對比較大,而Tapestry/JSF則沒有太多這些技術(shù)框框限制,兩者在組件編程方面更讓編程者自由一些,方便一些,這也是組件型框架的優(yōu)勢吧。

Struts標簽庫

  在Struts中,經(jīng)常需要使用標簽庫來顯示組件ActionForm中內(nèi)容,這就涉及到一個結(jié)合的問題,標簽庫是別人寫的,參考Struts的標簽庫用法,而組件是自己的,難度和麻煩就體現(xiàn)在這個結(jié)合點上。

  JSF基本思路和Struts差不多,只不過換了不同標簽庫,也需要標簽庫+組件的結(jié)合思考,不過因為組件這里是通用組件,沒有什么限制,所以這樣比Struts要輕松一些。

  Tapestry使用了組件庫概念替代了標簽庫,沒有標簽庫概念,這樣就沒有標簽庫和自己的組件需要結(jié)合的問題,都是組件的使用,組件中分Tapestry標準組件和自己定義的組件,這也是接觸了Jsp體系的人學(xué)習(xí)Tapestry面臨的一個思路轉(zhuǎn)換。

  具體以頁面跳轉(zhuǎn)為例子,頁面跳轉(zhuǎn)是靠鏈接<a href="目標"></a> 實現(xiàn),鏈接是頁面經(jīng)常使用的元素。

  Struts提供的html:link在頻繁使用就特別不方便,尤其在傳遞多個參數(shù)時:其中html:link的page值,是跳轉(zhuǎn)對方頁面或Action的path,這個path一般需要到struts-config.xml查找Action的相應(yīng)path,一旦配置文件path值修改,涉及到這個所有相關(guān)頁面都要修改。

  JSF將鏈接概念劃分兩個方面:導(dǎo)航性質(zhì)和事件激活,在導(dǎo)航方面還是需要到配置faces-config查詢Navigation的from-outcome的值。

  由于Tapestry沒有標簽庫概念,只有組件或頁面兩個概念,因此,鏈接跳轉(zhuǎn)目標要么是組件,要么是頁面,簡潔簡單,它沒有多余的path概念,就是組件名,也就是對象名稱,組件名稱和path名稱合二為一。

總結(jié)

  JSF在很大程度上類似Struts,而不是類似Tapestry,可以說是一種Struts 2.0,都是采取標簽庫+組件的形式,只是JSF的組件概念沒有象Struts那樣必須繼承ActionForm的限制;JSF在事件粒度上要細膩,不象Struts那樣,一個表單一個事件,JSF可以細化到表單中的每個字段上。

  JSF只有在組件和事件機制這個概念上類似Tapestry,但是不似Tapestry那樣是一個完全組件的框架,所以,如果你做一個對頁面要求靈活度相當高的系統(tǒng),選用Tapestry是第一考慮。

  Struts/JSF則適合在一般的數(shù)據(jù)頁面錄入的系統(tǒng)中,對于Struts和JSF的選用,我目前個人觀點是:如果你是一個新的系統(tǒng),可以直接從JSF開始;如果你已經(jīng)使用Struts,不必轉(zhuǎn)換,如果需要切換,可以將JSF和Tapestry一起考慮。

  另外,JSF/Tapestry不只是支持Html,也支持多種客戶端語言如WML或XUI等。

  這三者之間關(guān)系:如果說Struts是左派;那Tapestry則是右派;而JSF則是中間派,中庸主義是SUN聯(lián)盟的一貫策略。



JJCEA 2006-04-25 15:49 發(fā)表評論
]]>
主站蜘蛛池模板: 97视频热人人精品免费| 在线免费观看伊人三级电影| 亚洲国产午夜精品理论片 | 又长又大又粗又硬3p免费视频| 亚洲高清乱码午夜电影网| 亚洲偷自拍另类图片二区| 亚洲日韩精品A∨片无码加勒比| 精品久久亚洲中文无码| 亚洲国产日韩视频观看| 亚洲一区二区三区丝袜| 亚洲AV无码精品国产成人| 国产亚洲视频在线| 一进一出60分钟免费视频| 国产福利电影一区二区三区,免费久久久久久久精 | 久久笫一福利免费导航| 成年男女免费视频网站| 成年女人午夜毛片免费看| 午夜男人一级毛片免费| 国产jizzjizz视频全部免费| 亚洲国产成人久久精品99 | 噼里啪啦电影在线观看免费高清| 最近中文字幕无吗免费高清 | 一区二区三区在线免费看| 88av免费观看| 成年女性特黄午夜视频免费看| 免费看大美女大黄大色| 免费又黄又硬又爽大片| 亚洲一区二区女搞男| 久久精品国产亚洲av高清漫画 | 亚洲日韩在线观看免费视频| 亚洲永久精品ww47| 亚洲精品成人图区| 亚洲人成电影网站免费| eeuss在线兵区免费观看| 国产午夜免费高清久久影院| 精品国产污污免费网站aⅴ | 久久精品成人免费网站| 日韩欧毛片免费视频| 亚洲第一视频在线观看免费| 亚洲产国偷V产偷V自拍色戒| 亚洲AV无码成人专区|