カスタム注釈、動的エージェントを使用してWebサイトの文字セット符号化の問題を解決する

8525 ワード

第1章環境の設定
OSのインストール、バックアップのインストール(ミラー):
JDK:       
Eclipse:     
   Eclipse           
                
Tomcat:          
MySql:  :     utf8


Eclipseの設定
1_  TOMCAT
       ,      (    tomcat),
  *_  servers    tomcat
  *_Project Explorer      server
  *_    window--->preferences-->servers--->runtime-->tomcat


第2章カスタム注記
2.1注釈とは何ですか.
-注釈はインタフェース、クラスと同様にデータ型に属する.
開発中の地位:dom 4 jのようにXMLファイルを解析する.XMLファイルの解析プログラマは解析しない、配置XMLファイルの後期の開発では注釈をカスタマイズせず、注釈情報を反射して読み取る.
2.2注記作用
  1_    
  2_   (      *)
  3_      


2.3注記の特徴
*_       ,  ,     

*_               @Override  @Test(timeout=1000)

*_       (  ,    ,    )


ソース期間有効:Stringクラスの上@Author,@Since,@See----役割:コマンドjavadocコマンドを使用して現在のソースコードをヘルプファイルに生成し、Stringクラスの関連注釈を識別します.
コンパイル期間有効:@Override@Deprescated@Suppresswarning----役割:コンパイラに一部の情報を伝える
実行期間有効:@Test----役割:現在のコードでJunit方式で実行すると、Junitは@Test注記を含むメソッドを実行します.
2.4 JDKに出てくる3つの注釈を振り返る
@Override
@Overrideの役割は、親のメソッド、例えばtoString()メソッドを書き換える場合は、メソッドの前に@Overrideシステムを付けることで、メソッドの正確性をチェックすることができます.
Overrideの使い方:Override:java.lang.Overrideはmarker annotationタイプで、寸法方法として使用されます.親クラスを再ロードする方法を説明し,断言の役割を果たす.
@Deprecated
注記@Deprescatedは、Java APIのステータスをマークできます.
  • で使用すると、エラーが発生する可能性があります.
  • は、将来のバージョンでは
  • と互換性がない可能性があります.
  • は、将来のバージョンで
  • を削除する可能性があります.
  • より良い、より効率的なスキームがそれに取って代わった.

  • Java 9の注釈にはsinceとforRemovalの2つの新しい要素が追加されています.
  • since:要素は、注釈されたAPI要素が破棄されたバージョンを指定します.
  • forRemoval:要素は注釈のAPI要素が将来のバージョンで削除されることを示し、APIを移行すべきである.

  • @Suppresswarning
    Java.lang.SuppressWarningsはJ 2 SE 5である.0の標準的なAnnotationの1つです.
    クラス、フィールド、メソッド、パラメータ、構築メソッド、およびローカル変数に寸法を付けることができます.
    さぎょう
    エディタに指定した警告を無視し、コンパイルが完了した後に警告情報が表示されないように伝えます.
    使用
    @ SuppressWarnings(“”)
    @ SuppressWarnings({ })
    @ SuppressWarnings(value={})
    注意:
    @SuppressWarnings(value={"unchecked","deprecation"})は@SuppressWarnings("unchecked","deprecation")に等しい
    複数の抑制警告タイプが必要な場合は、@SuppressWarnings(value={"unchecked","boxing"})をカンマで区切ることができます.
    2.5カスタム注記
    書式:
    public @interface     { 
      public          1();
      public          2() default    ;
     }
    

    カスタム注記プロパティがサポートするタイプ:
    基本データ型(4クラス8種)、String、Class、Annotation(注記型)、列挙型、および上記の1次元配列型
    注記:
    構成機能構成:開発時に一部の情報をプログラムに書き込むことを望まない、例えばデータベースのユーザー名とパスワードは、ユーザー名とパスワードを保存することができる.txt , .properties , .xmlファイルでは、プログラムを使用してファイルの内容を読み取ります.
    フレームワーク:多くのツールクラスの組み合わせ、目的:プロジェクト開発後期の学習を加速し、フレームワーク部分hibernate、spring、struts 2の多くの情報を構成する必要があり、2つの形式構成(xml、注釈)を提供した.
    注釈で構成するのはいつですか?構成情報がservletパスなどの変更されない場合は、注釈の形式を使用することをお勧めします.構成情報にデータベースのユーザー名やパスワード情報などの頻繁な変更が必要な場合は、従来の方法(.txt,.properties,.xml)を使用することをお勧めします.
    
     
      s002
      
       124324 
       12342143 
      
      
    
    

    カスタム注記を使用するテスト
     @MyAnno01(timeout=100,c=java.util.Date.class,strs={"aaa","bbb"})
     public void test01(){
     }
    

    バイトコードの注記情報を反射して読み込む
    md.isAnnotationPresent(MyTest.class)
    2.6ケース:シミュレーションJunit
    1_カスタム注記@MyTest
         @Rentention @Target               ,      ,                
    

    2_UserDaoの定義
      4   addUser delUser uptUser getUser ,           
    

    3_クラスの定義MyJunit
      JUnit  UserDao.class       ,                    ,            @MyTest            @MyTest,       
    

    第3章動的エージェントを用いてウェブサイトの文字セット符号化問題を解決する
    3.1設計モード
    ソフトウェア開発の過程で、似たような問題に遭遇し、問題の解決方法をモデル(套路)を抽出する.
    単一例、ファクトリ、アダプタ、装飾者、ダイナミックエージェント
    3.2グーグル自動車シーン
    JAvaは自動車開発の約束を設計した
    interface ICar{
     start run stop
    } 
    class GoogleCar implements ICar{
    
    } 
    

    Google Carを生態圏プラットフォームに接続する際、自動車の起動機能を強化したい
    デコレーションモード
      :       ,       ,         ,                 . 
      :            GoogleCar        
        :          ICar  ,               
    
      :              ,           
    

    ダイナミックプロキシモード
      :             MyCar.class  
        MyCar.class       :
      1_                 
      2_                
    

    バイトコードローダ:jdkにはいくつかのプログラムがあり、各種バイトコードファイルをメモリにロードする専門がある.これらのプログラムはバイトコードローダと略称される
    バイトコードファイルclassファイルをメモリにロードするにはどうすればいいですか?IOストリームテクノロジーを使用して、ファイルにロードされたデータをメモリにロードする最下位の実装プロセス
          
        :         ClassLoader       ,    JVM            ,  :             ,JVM              ,              。
        :      ClassLoader       ,    this.getClass.getClassLoader().loadClass()  Class.forName()。
    
    JDK          ClassLoader
    Bootstrp loader
    Bootstrp     C++    ,   Java          ,       %JAVA_HOME%/jre/lib,-Xbootclasspath         %JAVA_HOME%/jre/classes   。
    
    ExtClassLoader  
    Bootstrp loader  ExtClassLoader,   ExtClassLoader        Bootstrp loader.ExtClassLoader  Java  ,       sun.misc.Launcher$ExtClassLoader,ExtClassLoader    %JAVA_HOME%/jre/lib/ext,       classes    java.ext.dirs            。
    
    AppClassLoader 
    Bootstrp loader   ExtClassLoader ,    AppClassLoader,   AppClassLoader         ExtClassLoader。AppClassLoader   Java   ,       sun.misc.Launcher$AppClassLoader,      ClassLoader   getSystemClassLoader  ,        AppclassLoader.AppClassLoader      classpath           jar  ,   Java         。
    
    ClassLoader      
      .class              
         ,Class       ,           
                          
                   ?
                ,             ,      ClassLoader     。       ,      ,           ,              String     java  api      ,             ,        ,         ,  String              (Bootstrcp ClassLoader)  ,        ClassLoader             String,     JDK ClassLoader        。
    
       ClassLoader
    package com.asiainfo.crm.engine.multi;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    /**
     * 
     * 
     * @ClassName: PathClassLoader
     * @Description: java     
     * @Author:    main()  
     * @CreateDate: 2019/2/26 18:46
     * @UpdateUser:    
     * @UpdateDate: 2019/2/26 18:46
     * @UpdateRemark:     
     * @Version: 1.0
     */
    
    public class PathClassLoader extends ClassLoader{
        public static final String drive = "d://";
        public static final String fileType = ".class";
    
        public static void main(String[] args) throws Exception
        {
            PathClassLoader loader = new PathClassLoader();
            Class> objClass = loader.loadClass("CommonServiceMultiController", true);
            Object obj = objClass.newInstance();
            System.out.println(objClass.getName());
            System.out.println(objClass.getClassLoader());
            System.out.println(obj.getClass().toString());
        }
        @Override
        public Class> findClass(String name)
        {
            byte[] data = loadClassData(name);
            return defineClass(name, data, 0, data.length);//     byte       Class//     
        }
        public byte[] loadClassData(String name)
        {
            FileInputStream fis = null;
            byte[] data = null;
            try
            {
                fis = new FileInputStream(new File(drive + name + fileType));
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                int ch = 0;
                while ((ch = fis.read()) != -1)
                {
                    baos.write(ch);
                }
                data = baos.toByteArray();
            } catch (IOException e)
            {
                e.printStackTrace();
            }
            return data;
        }
    
    }
    ————————————————
        :   CSDN  「min  」     ,   CC 4.0 BY-SA     ,               。
        :https://blog.csdn.net/weixin_40403930/article/details/87941340
    

    バイトコードローダ:3種類のシステムブートローダ:
    3.3ケース:動的代理店は全局の文字化けしの問題を解決する
    ステップ
    1_new DynamicWeb Project ___>Index.html

    post

    User:

    get

    User:

    2_ServletDemo
    post/getメソッドにおいても、以下の文を実行しても中国語の文字化けしの問題はないString um=request.getParameter("username"); System.out.println(um);
    3_フィルタではrequest上のgetParameter()機能を強化
    考え方:現在のリクエストがget/post requestであると判断する.getMethod();
    postであれば、一言:request.setCharacterEncoding(“utf-8”); ,に道を教える
    getの場合、元のString v=requestを呼び出す.getParameter(name); vをトランスコードして、放します