随笔-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 朔望魔刃 阅读(1562) | 评论 (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 朔望魔刃 阅读(3402) | 评论 (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 朔望魔刃 阅读(6098) | 评论 (2)编辑 收藏
仅列出标题
共10页: First 上一页 2 3 4 5 6 7 8 9 10