隨筆-95  評論-31  文章-10  trackbacks-0
           

          客戶端使用java
          服務端使用C#

          客戶端數據庫SqlServer2000編碼簡體中文GBK
          服務端數據庫SqlServer2008編碼SQL_Latin1_General_CP1_CI_AS

          客戶端取出數據使用new String("消息".getBytes("GBK"),"UTF-8");進行轉換
          發送的時候使用PrintWriter pw = new PrintWriter(socket.getOutputStream);
          服務端只接收UTF-8編碼顯示為亂碼。

          后來參考資料,才明白new String("消息".getBytes("GBK"),"UTF-8");這種方式只是在JVM內部轉換,那么一旦涉及到流比如數據庫、文件等就要使用java IO進行轉換。也就是說JVM內部編碼unicode和外部os編碼的轉換。
          使用下面方式就沒有問題了
          字符流方式發送
          PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream),"UTF-8")),false);
          字節流方式發送
          PrintStream ps = new PrintStream(socket.getOutputStream(),false,"UTF-8");
          false表示手動pw.flush();

          posted @ 2010-03-18 21:18 朔望魔刃 閱讀(1569) | 評論 (0)編輯 收藏
          首先下載java service wrapper工具
          http://sourceforge.net/project/showfiles.php?group_id=39428

          步驟:
          1、解壓縮java service wrapper包,假設目錄為:wrapper_home
          2、建立一個目錄比如:D盤server文件夾里面建立bin、conf、logs、lib文件夾。
          3、將wrapper_home/bin目錄里wrapper.exe
             將wrapper_home/src/bin目錄里App.bat.in
             將wrapper_home/src/bin目錄里InstallApp-NT.bat.in
             將wrapper_home/src/bin目錄里UninstallApp-NT.bat.in
             統一拷貝至server/bin目錄里,并去掉后綴名in。
             將wrapper_home/src/conf目錄wrapper.conf.in拷貝至server/conf目錄里去掉后綴名in
             再將wrapper_home/lib/目錄里面的wrapper.jar和wrapper.dll拷貝至server/lib目錄里面
          4、將你的應用程序打成jar包后放入server/lib目錄里面,如果程序依賴第三方架包,同樣將jar包放入該目錄下。
          5、配置server/conf/wrapper.conf文件。
          主要修改以下幾項即可:
          #你的JVM位置:
          wrapper.java.command=%JAVA_HOME%\bin\java
          #classpath:里面添加上你要執行的應用程序jar,以及依賴的第三方jar,有多個依次類推
          wrapper.java.classpath.1=../lib/應用程序.jar
          wrapper.java.classpath.2=../lib/wrapper.jar
          wrapper.java.classpath.3=../bin/第三方.jar
          # Java Library Path (location of Wrapper.DLL or libwrapper.so)
          wrapper.java.library.path.1=../lib
          #MAIN CLASS 此處決定了使用Java Service Wrapper的方式
          wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
          上面紅色字體不能修改成你的執行程序路徑比如
          service.server.Serverbegin 否則打成服務后啟動會提示如下錯誤:

          ERROR  | wrapper  | 2010/01/07 15:13:10 | JVM did not exit on request, terminated
          STATUS | wrapper  | 2010/01/07 15:13:15 | Launching a JVM...
          INFO   | jvm 3    | 2010/01/07 15:13:16 | [WARN]2010-01-07 15:13:16--服務端啟動
          ERROR  | wrapper  | 2010/01/07 15:13:45 | Startup failed: Timed out waiting for a signal from the JVM.
          ADVICE | wrapper  | 2010/01/07 15:13:45 | 
          ADVICE | wrapper  | 2010/01/07 15:13:45 | ------------------------------------------------------------------------
          ADVICE | wrapper  | 2010/01/07 15:13:45 | Advice:
          ADVICE | wrapper  | 2010/01/07 15:13:45 | The Wrapper consists of a native component as well as a set of classes
          ADVICE | wrapper  | 2010/01/07 15:13:45 | which run within the JVM that it launches.  The Java component of the
          ADVICE | wrapper  | 2010/01/07 15:13:45 | Wrapper must be initialized promptly after the JVM is launched or the
          ADVICE | wrapper  | 2010/01/07 15:13:45 | Wrapper will timeout, as just happened.  Most likely the main class
          ADVICE | wrapper  | 2010/01/07 15:13:45 | specified in the Wrapper configuration file is not correctly initializing
          ADVICE | wrapper  | 2010/01/07 15:13:45 | the Wrapper classes:
          ADVICE | wrapper  | 2010/01/07 15:13:45 |     service.hl7Server.HuaHaiHl7Server
          ADVICE | wrapper  | 2010/01/07 15:13:45 | While it is possible to do so manually, the Wrapper ships with helper
          ADVICE | wrapper  | 2010/01/07 15:13:45 | classes to make this initialization processes automatic.
          ADVICE | wrapper  | 2010/01/07 15:13:45 | Please review the integration section of the Wrapper's documentation
          ADVICE | wrapper  | 2010/01/07 15:13:45 | for the various methods which can be employed to launch an application
          ADVICE | wrapper  | 2010/01/07 15:13:45 | within the Wrapper:
          ADVICE | wrapper  | 2010/01/07 15:13:45 |     http://wrapper.tanukisoftware.org/doc/english/integrate.html
          #你的Java應用類,
          wrapper.app.parameter.1= service.Server.Serverbegin
          # 服務名
          wrapper.ntservice.name=server
          # Display name of the service
          wrapper.ntservice.displayname=server
          # 服務描述
          wrapper.ntservice.description=receive message
          其他的配置根據你的需要改變即可
          6.  對以上配置的App.bat進行測試,運行App.bat,dos窗口中顯示;
          7.  對以上配置的服務進行測試,運行server/bin/InstallApp-NT.bat將把你的應用(此處為server)安裝到Win32系統服務中了。
          8.  打開控制面板-管理程序-服務,看到server已經在系統服務中了,其他用法就與我們熟悉的Windows服務一樣了。

          bin/App.bat  控制臺方式運行程序

          bin/InstallApp-NT.bat  安裝服務

          bin/UninstallApp-NT.bat 刪除服務
          posted @ 2010-01-18 13:10 朔望魔刃 閱讀(3419) | 評論 (2)編輯 收藏
          網上流傳了大量大量的如何導出,結果都不太實用。
          網上流傳通用的js導出word代碼如下:
               function method1(){
                var oWD = new ActiveXObject("Word.Application"); 
                oWD.WindowState = 2; 
                var oDC = oWD.Documents.Add("",0,1); 
                var oRange =oDC.Range(0,1); 
                var sel = document.body.createTextRange(); 
                sel.moveToElementText(huahai);  //里面參數為div的id或者form的id或者table的id或者...表示將此范圍內輸出word
                sel.select(); 
                sel.execCommand("Copy"); 
                oRange.Paste(); 
                oWD.Application.Visible = true; 
                }
          <body>
          <div id="huahai">
          </div>
          </body>
          <input type="button" onclick="javascript:method1();" value="導出為WORD">
          以上方法可導出任意jsp(包括圖片)但是除了以下內容:
          凡是讓用戶輸入帶有<input>或者<textarea>等等等標簽輸入框地方就不能導出成word了。
          比如一個table(如下所示),如果使用上述辦法就不能導出。
          如果去掉<input>標簽那么就可以導出,但是問題就是我就是要全部導出.......
          <table id="table1">
          <tr>
          <td>姓名</td><td><input type="text" size="5"></td>
          <td>年齡</td><td><input type="text" size="5"></td>
          </tr>
          <table>
          解決辦法:
          下面給出一個JSP,里面包含div、form、table、image、以及各種<input>標簽導出為word
          <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          </head>
          <body>
          <form action="" id="huahai" >
            <div align="center">
             <div align="center" id="div_content">
              <h2>
               <font color="red">測試導出word</font>
              </h2>
              <h4>
               <font color="red">測試導出word</font>
              </h4>
              </div>
          <table id="table1">
          <tr>
          <td>姓名</td><td><input type="text" size="5"></td>
          <td>年齡</td><td><input type="text" size="5"></td>
          </tr>
          <table>
          <div id="img">
              <hr/>
              <img src="MM.jpg" height="45%" width="30%">
              </br>
          </div>
           <div id="text_area">
              <textarea name="warn_task" wrap="off" cols="80" rows="12">區域內容:</textarea>
              </textarea>
              <hr />
          </div>
          <input type="button" onclick="javascript:test();" value="測試">
          </div>
           </form>
          </body>
          </html>
          下面給出js代碼(加入<head>標簽之間):
          <script type="text/javascript">
             var oWD = new ActiveXObject("Word.Application");
             var oDC = oWD.Documents.Add("",0,1);
             var oRange =oDC.Range(0,1);
          function word(id,way){
             var sel = document.body.createTextRange();
             sel.moveToElementText(id);
             sel.select();
             sel.execCommand(way);
             oRange.Paste();
          }

          function test(){
             var table=document.getElementById('table1');
             var table_cells = table.rows[0].cells;
             var form_elements = document.getElementById('huahai');
             word(div_content,'Copy'); //調用word函數,將div_content范圍內容拷貝到word里面。
             for(i=0;i<table_cells.length;i++){
                 oRange =oDC.Range(oRange.End-1,oRange.End); //設定位置依次由上往下、從左往右
                 var sel = document.body.createTextRange();
                 sel.moveToElementText(table_cells[i]); //將單元格內容復制到word
                 sel.select();
                 sel.execCommand("Copy");
                 sel.moveEnd('character');  //不加這句導出不了,里面參數為character、不是copy
                 oRange.Paste();
                 oRange =oDC.Range(oRange.End-1,oRange.End);
             }
              oRange =oDC.Range(oRange.End-1,oRange.End); //復制不同的東西,需要寫這句繼續 寫死的這句話就是位置
              var img = document.getElementById('img');
              word(img,'Copy');//將img范圍內容拷貝到word里面。
              oRange =oDC.Range(oRange.End-1,oRange.End);
              var text_area = document.getElementById('text_area');
              word(text_area,'Copy');//將text_area范圍內容拷貝到word里面。
              oRange =oDC.Range(oRange.End-1,oRange.End);
              oWD.Application.Visible = true; //這句意思是所有操作完畢后,在顯示出來,如果寫在里面,會發現word打開后,什么標簽啊、內容啊就跟打字機一樣往里面填
          }
          </script>
           
          最后補充:IE工具設置,安全--啟動-對沒有標記為安全的Activex的控件進行初始化和腳本運行
          posted @ 2010-01-18 13:04 朔望魔刃 閱讀(6123) | 評論 (2)編輯 收藏
          僅列出標題
          共10頁: First 上一頁 2 3 4 5 6 7 8 9 10 
          主站蜘蛛池模板: 克东县| 吉安县| 牙克石市| 达拉特旗| 启东市| 元江| 台前县| 乌鲁木齐县| 天水市| 全州县| 水城县| 卢龙县| 大石桥市| 吉安市| 亳州市| 通城县| 安顺市| 治县。| 高安市| 同德县| 焦作市| 改则县| 阿瓦提县| 砀山县| 利津县| 富阳市| 阿克陶县| 苏尼特左旗| 临安市| 四会市| 日土县| 灌云县| 饶平县| 平阳县| 工布江达县| 五常市| 永宁县| 翼城县| 台州市| 黎川县| 江都市|