梓聪's profile传说中的16号PhotosBlogListsMore Tools Help

Blog


    November 13

    转帖:把Java类注册成ActiveX组件

     
    方式一:把Java类注册成ActiveX组件
      步骤一:
      创建一个Java类,命名为Test.java
      public class Test
      {
            public String getWord()
            {
                return "Hello World";
            }
      }
      步骤二:
      编译成class文件,并拷贝到系统盘:\WINNT\java\trustlib目录下,然后注册成ActiveX组件javareg /reGISter /class:Test /progid:Test


      步骤三:
      在ASP中使用
      Set obj=CreateObject("Test")'"Test"就是注册时候的progid
      msgbox obj.getWord()


      方式二:直接使用
      步骤一:
      建立Test.java
      public class Test
      {
            public String getWord()
            {
                return "Hello World";
            }
      }
      步骤二:
      编译成class文件,并拷贝到系统盘:\WINNT\java\trustlib目录下



      步骤三:使用
      dim obj
      Set obj=GetObject("java:Test")
      msgbox obj.getWord()

    June 10

    这个异常

    不知道大家有没有碰到过这样的异常(如图所示):

    '/WebApplication1' アプリケーションでサーバー エラーが発生しました。

    危険な可能性のある Request.Form 値がクライアント (hidden="<aa>asdfasdf</aa>") から検出されました。

    説明 : 要求の検証により、危険性のあるクライアント入力値が検出されました。要求の処理は中止されました。この値は、クロス サイト スクリプト攻撃などのアプリケーションのセキュリティ問題を引き起こす可能性があります。ページ ディレクティブか、 構成セクションの validateRequest=false を設定することによって要求の検証を無効にできます。しかしこの場合、アプリケーションですべての入力を明示的に確認することをお勧めします。

    例外の詳細: System.Web.HttpRequestValidationException: 危険な可能性のある Request.Form 値がクライアント (hidden="<aa>asdfasdf</aa>") から検出されました。

    这是由提交页面的请求字符串包含有"<"或">"等这样的字符引起的。

    要解决这个问题,只需要在.aspx文件的头部,<%@ Page ...%>标签内加入validateRequest="false"即可。就是让.NET不去对Request的请求字符串进行检查。如下所示:

    <%@ Page language="c#" validateRequest="false" Codebehind="WebForm5.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm5" %>

    June 08

    随便说一句

    在html中有一个输入框,输入一个日文的”あ”,显示出来的效果在charset=shift-jis和charset=gb2312时,会是两种不同的效果(字体不一样),刚开始以为是不一样的两个字符,其实是一样的,它们的Unicode都是12354。呵呵。

    June 03

    JS如何校验半角字符

    在C#里面,校验半角字符似乎比较简单,使用这样的语句就可以实现了System.Text.Encoding.Default.GetByteCount(strInputString);

    其中,Default可以改成别的Encoding,例如GetEncoding("shift-jis")。

    但是,考虑到有可能做前台校验,所以,用JS去校验是一个不错的选择。但是JS里面没有这么方便的方法。网上有不少校验半角的JS方法,有一个最简单的方法是取每个字符的unicode(如:strInputString.charCodeAt(i)),然后判断是否在0-255之内,如果不是,则认为是全角字符。因为Unicode码是向下兼容ASCII码的(从别的资料上看到的),所以Unicode的0-255和ASCII的0-255是一样的,经过测试,确实是一样的。我的测试方法是这样的:

    JS://得到的是Unicode
    for(var i=0;i<255;i++){
        alert(String.fromCharCode(i));
        //本来想拼成一个字符串输出的,但是不行,呵呵。
    }
    
    C#://ASCII
    for(int i=0;i<255;i++)
    {
        System.Diagnostics.Debug.Write((char)i);//得到的是ASCII
        System.Diagnostics.Debug.Write(" "+i+" ");
        char[] temp = new char[1];
        temp[0] = (char)i;
        System.Diagnostics.Debug.WriteLine(System.Text.Encoding.Default.GetByteCount(temp));
    }
    

    结果在C#输出这些码的长度时,发现并不是所有的0-255之间的Unicode都是1个字节长的!!而且,后来又发现,日文的假名有半角的形式(Unicode是65377-65439,其中65381除外)!!然后再发现,并不是只有这些是半角的,还有很多字符也是半角的!!所以说,上面那个仅仅靠判断是不是在0-255里面是不行的。

    考虑到Unicode包括了所有国家的各种字符,而且这些字符又是全角半角交杂的,所以,不会有一个完美的JS方法来进行半角字符的校验。但是因为一般别的字符也用不上,以后做的多是对日项目,所以还是沿用0-255的方法,然后抠掉一些全角的,再加上对半角日文的校验,写成以下一个方法,供研究使用:

    function checkHalf(str){
     var flag = true;
    
     //unicode from 65377 to 65439 ,except 65381
     var HALF_KATAKANA = "。「」、ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚";
     for(var i=0;i<str.length;i++){
      var temp = str.charCodeAt(i);
      if( temp >= 0 && temp <= 254){
    
       //以下是0-255之内为全角的字符
       if( temp == 162
        || temp == 163
        || temp == 167
        || temp == 168
        || temp == 171
        || temp == 172
        || temp == 175
        || temp == 176
        || temp == 177
        || temp == 180
        || temp == 181
        || temp == 182
        || temp == 183
        || temp == 184
        || temp == 187
        || temp == 215
        || temp == 247){
        flag = false;
        break;
       }
      }else if( temp >= 65377 && temp <= 65439){
       if( temp == 65381 ){
        flag = false;
        break;
       }
      }else{
       flag = false;
       break;
      }
     }
     return flag;
    }

    为什么不用HALF_KATAKANA.indexOf(str.substr(i))这样的方法,而要使用Unicode呢?这也是没有办法,因为这些半角日文假名在JS代码里面不是占一个字符,就是说HALF_KATAKANA.length的值不是62,而是31,如果用alert()打印出来的话,将会是乱码,所以只能用Unicode。

    刚才发现了一个问题,上面写的这段红色的话是错的。因为这个JS是嵌在html页面里面的,我没有指定它的charset,所以,就造成了上面的情况。只要在页面加入<meta charset="shift-jis">,HALF_KATAKANA.length就是正常的62了。这样就可以用HALF_KATAKANA.indexOf(str.substr(i))这个方法了,呵呵。

    上面的方法正常来说应该是好用的,不排除例外,因为各种编码问题很痛苦,我也不想多看,看多了脑袋疼,所以,有什么不对的欢迎大家纠正,呵呵。

    在.NET下实现文件上传

    .NET下实现文件上传:

    1.在.aspx文件(页面)中加入<input type=”file” id=”File1” runat=”server”>,在form标记内加入属性encType="multipart/form-data",再加入一个按钮。

    2.在.aspx.cs文件中会自动生成

    protected System.Web.UI.HtmlControls.HtmlInputFile File1;

    然后在按钮响应方法里面添加代码:

    string strTemp = HttpContext.Current.Server.MapPath("../WebApplication1/");

    File1.PostedFile.SaveAs(strTemp+"dddd.txt");

    就可以了。

     

    还可以用这样的方法处理,这样可以获得文件流,可以对文件进行分析,分析完再保存下来:

    (需要using System.IO)

    HttpPostedFile aa = Request.Files.Get(0);

    Stream xx = aa.InputStream;

    StreamReader sr = new StreamReader(xx,Encoding.GetEncoding("shift-jis"));

    string strContent = "";

    while(strContent != null)

    {

            strContent = sr.ReadLine();

            System.Diagnostics.Debug.WriteLine(strContent);

    }

    sr.Close();

    xx.Close();

    May 30

    关于JS生成日期和校验日期

    以前写网页的时候,经常碰到选择日期的问题,其实就是判断某年某月有多少天。一般的做法是先判断是几月份,然后决定有多少天(一般用switch),如果是2月的话,还得判断选择的年份是不是闰年,再决定是28天还是29天。这样是一个很规矩的做法,而且也很符合逻辑。

    但是,如果是为了达到目的的话,是不用这么麻烦的:)。JS里面的new Date("xxxx/xx/xx")这个日期的构造方法有一个妙处,当你传入的是"xxxx/xx/0"(0号)的话,得到的日期是"xx"月的前一个月的最后一天("xx"月的最大取值是69,题外话),如果传入"1999/13/0",会得到"1998/12/31"。而且最大的好处是当你传入"xxxx/3/0",会得到xxxx年2月的最后一天,它会自动判断当年是否是闰年来返回28或29,不用自己判断,太方便了!!所以,我们想得到选择年选择月有多少天的话,只需要

    var temp=new Date("选择年/选择月+1/0");

    alert(temp.getDate());

    就可以了,是不是很方便?校验的话,也可以用这个方法:)

    下面是使用JS的一个模拟.NET里面的DaysInMonth(int year,int month)的方法:

    function getDaysInMonth(year,month){
          month = parseInt(month,10)+1;
          var temp = new Date(year+"/"+month+"/0");
          return temp.getDate();
    }