About  jCIFS

[不指定 2007/09/03 13:56 | by ipaddr ]

jCIFS是一个完全用Java开发的SMB客户端库。它紧密地遵循CIFS规范(是Microsoft Windows平台标准文件共享协议),支持Unicode,命令管道,批处理,线程化调用者的IO复用,加密认证,完整事务,域/工作组/主机/共享/文件枚举,NetBIOS 套接字和名称服务,smb:// URL协议处理器,一个类API的java.io.File ,RAP调用,NTLM HTTP鉴别。它广泛用于企业内部网络。

JCIFS: The Java CIFS Client Library
http://jcifs.samba.org/

很多公司都希望WEB登陆与域用户结合起来,实现单点登陆,使用jcifs.jar可以非常好实现,下载一个最新的jcifs.jar,放到WEB-INFlib下面,现在是1.27版,然后修改web.xml,加入下面:

<filter>
<filter-name>NtlmHttpFilter</filter-name>
<filter-class>jcifs.http.NtlmHttpFilter</filter-class>
<init-param>
<param-name>jcifs.http.domainController</param-name>
<param-value>192.168.0.90</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>NtlmHttpFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

192.168.0.90是你AD服务器,然后在你的登陆的代码中使用
request.getRemoteUser(),就可以得到当前域用户的用户名了

如何屏蔽sqlServer触发器

[不指定 2007/09/01 15:50 | by ipaddr ]

---

--禁用单个触发器:
ALTER TABLE trig_example DISABLE TRIGGER trig1
GO
--恢复单个触发器:
ALTER TABLE trig_example ENABLE TRIGGER trig1
GO

---

--禁用某个表上的所有触发器
ALTER TABLE 你的表 DISABLE TRIGGER all

--启用某个表上的所有触发器
ALTER TABLE 你的表 enable TRIGGER all

--禁用所有表上的所有触发器
exec sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER all'

--启用所有表上的所有触发器
exec sp_msforeachtable 'ALTER TABLE ? enable TRIGGER all'

使用同样的方式,可以禁用和恢复约束:
exec sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

exec sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

在.Net1.1的时代,一般是使用OpenSMTP来发送邮件的,到了.Net 2.0,自带了SMTPClient类,一般用自带的SmtpClient来发送信件。

但.Net 2.0自带的SMTPClient有点问题,在SMTP登录时,将用户名直接跟在Auth Login后面(AUTH LOGIN USERNAME),有些SMTP服务器不支持这种认证,比如,21cn.com, tom.com的邮件服务器,使用.net 2.0自带的SMTPClient,即使用户名密码正确,也无法发送成功。

所以,某些情况下,还是需要使用OpenSMTP来发送邮件,OpenSMTP的不足是不支持SSL,所以给Gmail发信时,我一般采用SMTPClient,而给其它邮局发信时,我一般采用OpenSMTP

OpenSMTP的另外一个缺点就是,发送中文名的附件时,附名名乱码,出现这种情况的原因,是OpenSMTP未对附件的文件名进行合适的BASE64编码,以下是OpenSMTP的Attachment.cs里的ToMime函数的代码:

sb.Append("Content-Type: " + mimeType + ";\r\n");
sb.Append(" name=\"" + MailEncoder.ConvertToQP(name,null) + "\"\r\n");
sb.Append("Content-Transfer-Encoding: " + encoding + "\r\n");
sb.Append("Content-Disposition: attachment;\r\n");
sb.Append(" filename=\"" + MailEncoder.ConvertToQP(name,null) + "\"\r\n\r\n");

网上也有一些解决方法,不过大多是制标不制本,以下给出一种较合理的方案:

//Fixed by Admin.net(a)163.com
//Chinese Windows:Encoding.Default=GB2312

byte[] bFName = System.Text.Encoding.Default.GetBytes(name.ToCharArray());
string sFName = System.Convert.ToBase64String(bFName);
String fname = "=?" + System.Text.Encoding.Default.BodyName + "?B?" + sFName + "?=";


//Fixed by Admin.net(a)163.com
sb.Append("Content-Type: " + mimeType + ";\r\n");
sb.Append(" name=\"" + fname + "\"\r\n");
sb.Append("Content-Transfer-Encoding: " + encoding + "\r\n");
sb.Append("Content-Disposition: attachment;\r\n");
sb.Append(" filename=\"" + fname + "\"\r\n\r\n");


此方法适用于简体中文的Windows,也适用于其它所有的非英文Windows.


测试了一天,终于可以工作了,配置大致如下:

Apache2.2+moj_jk1.2+tomcat5.5.9


在将SQLServer的数据迁移到Oracle时,常常会碰到一个这样的问题,SQLServer的表格名称是小写的,但Oracle默认是大写的,如果未做特别处理的话,SQLServer和tblIpaddr导到Oracle里变成了"tblIpaddr" (有引号,Oracle区别大小写,与TBLIPADDR有区别),所在,需要在迁移前,将SQLServer的所有表格名改为大写:

EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE
go

UPDATE sysobjects SET name=upper(name) WHERE type='U';
go

EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
go

---------------------
以上方法只适合于SQLServer2000,SQLServer2005不允许直接更改系统表,以下SQL兼容2000和2005:

DECLARE @oldTName varchar(50)
DECLARE @newTName varchar(50)
--Author: ipaddr, 鱼漂

DECLARE tableList CURSOR FOR
SELECT name FROM sysobjects WHERE type='U' ORDER BY name

OPEN tableList
FETCH NEXT FROM tableList INTO @oldTName
WHILE @@FETCH_STATUS=0
BEGIN

SET @newTName=upper(@oldTName)
EXEC sp_rename @oldTName,@newTName

FETCH NEXT FROM tableList INTO @oldTName

END

CLOSE tableList
DEALLOCATE tableList

C#(dotNet 2.0)中读写配置文件

[不指定 2007/08/18 17:21 | by ipaddr ]

C#(dotNet 2.0)中读写配置文件

dotNet已推荐使用新的方法读写配置文件,假设配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <appSettings>
  <add key="DBPath" value="data.mdb" />
 </appSettings>
</configuration>

首先,加入对System.configuration的引用(在资源管理器中,加入引用)

使用如下的方法读入配置:

using System.Configuration;

private Configuration config;
private AppSettingsSection appConfig;

config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
appConfig = config.AppSettings;
MessageBox.Show(appConfig.Settings["DBPath"].Value);

在Windows下安装CVSNT

[不指定 2007/08/17 10:09 | by ipaddr ]

在Windows下安装CVSNT

1 首先从www.cvsnt.org下载CVS服务器软件,文件名为cvsnt-2.5.01.1976.msi,CVSNT需要使用NTFS的文件格式,所以确保CVSNT和库安装在NTFS上,然后将CVSNT的主目录下的bin目录添见到系统的path路径中。

2 CVSNT的设置。打开CVSNT Control Panel,点击“Server Settings”,这里我们需要设置一下“Run as”和“Default”,分别是运行CVSNT程序的用户和计算机名称,这里可以设置系统的administrator即可。

3 接下来我们需要设置CVS库,只需在设置面板中选择“Repositories”,然后创建相关的库即可。然后我们就可以通过 :pserver:username@localhost:/reposname去引用这个库。

4 设置库的权限。下面我们需要设置访问CVS库的用户信息,这里我们需要添加新的用户。在服务器端,设置一下CVSROOT,这里CVSROOT为库所在的目录,如d:\respository\cvs\respo1,然后执行cvs passwd命令即可,如下:

> cvs passwd –a –r administrator username

这样就添加了一个新的访问特定库的新用户。如果不设置CVSROOT,可以通过cvs –d d:\respository\cvs\respo1 直接访问库。关于cvs的passwd的命令,请参考 cvs passwd –help

5 创建CVS 库的管理员,只需将CVS的用户名称写如CVSROOT/admin文件中即可(一行一个用户名称,最后一个用户后添见一个空白行)。其他设置读取或写入权限,只需设置 readers 和 writers文件即可。

6 其他相关的设置,请参考CVS标准设置。

cd CVSROOT
cvs chown cvsadmin   //更改所有者为cvsadmin
cvs chacl default:n   //默认权限为n
cvs chacl cvsadmin:rwc  //添加cvsadmin

cd CVSROOT
cvs chown cvsadmin
cvs chacl -u default -p n
cvs chacl -u cvsadmin -p rwc

Reflector for .NET 下载地址http://www.aisto.com/roeder/dotnet/

1.下载Reflector.FileDisassembler.zip,
Reflector.FileDisassembler.zip下载地址: 
http://www.denisbauer.com/NETTools/FileDisassembler.aspx 
解压后得到一些文件,其中Reflector.FileDisassembler.dll是已经编译好的,其它是它源码;
2.打开Reflector,在view菜单下的Add-Ins,将Reflector.FileDisassembler.dll添加到里面;
3.open一个dll,exe,或mcl为后缀的文件,当然要支持.net的
4.选择要反编译的dll(会在列表中显示),选择Tools->File Disassembler,在右窗口会出现设置存放源码位置的路径,点击产生就可以了!

唾手可得的宝藏:Mono源码

[不指定 2007/08/15 18:31 | by ipaddr ]
“源码是最好的文档”,有了源码,任何软件系统在开发人员面前就毫无“神秘”可言了...

今天需要做一个上传文件的Web页面,在调用HttpPostedFile.SaveAs(String filename)方法将文件写到服务器磁盘上时,想到如果此文件已经存在于磁盘上,这个方法会如何处理呢?直接覆盖?抛出异常?

翻一下.NET Framework文档,可惜里面没有对这个情况进行说明。于是进入Mono源码目录,定位到HttpPostedFile.cs文件,用记事本打开,找到SaveAs(String filename)方法,第一句就是:

FileStream File = new FileStream(filename, FileMode.Create);

OK,确切答案就是如果已经存在同名文件会直接覆写。

我猜一定有人会想,“万一Mono的实现和.Net Framework不同怎么办?”其实我过后就这么想了,于是用Reflector打开了System.Web.dll,定位这个方法,呵呵,.Net Framework的实现也是“FileMode.Create”。不过.Net Framework使用了一个try...catch来保证关闭这个FileStream,而Mono的实现里面则没有,嗯,这是不是意味着Mono的稳定性仍有不少改进之处呢?

Load Balancing For Tomcat

[不指定 2007/08/13 14:39 | by ipaddr ]

要求支持Sticky Session功能,主要有以下几种方案:

分页: 30/57 第一页 上页 25 26 27 28 29 30 31 32 33 34 下页 最后页 [ 显示模式: 摘要 | 列表 ]