カスタム注釈、動的エージェントを使用してWebサイトの文字セット符号化の問題を解決する
8525 ワード
第1章環境の設定
OSのインストール、バックアップのインストール(ミラー):
Eclipseの設定
第2章カスタム注記
2.1注釈とは何ですか.
-注釈はインタフェース、クラスと同様にデータ型に属する.
開発中の地位:dom 4 jのようにXMLファイルを解析する.XMLファイルの解析プログラマは解析しない、配置XMLファイルの後期の開発では注釈をカスタマイズせず、注釈情報を反射して読み取る.
2.2注記作用
2.3注記の特徴
ソース期間有効: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カスタム注記
書式:
カスタム注記プロパティがサポートするタイプ:
基本データ型(4クラス8種)、String、Class、Annotation(注記型)、列挙型、および上記の1次元配列型
注記:
構成機能構成:開発時に一部の情報をプログラムに書き込むことを望まない、例えばデータベースのユーザー名とパスワードは、ユーザー名とパスワードを保存することができる.txt , .properties , .xmlファイルでは、プログラムを使用してファイルの内容を読み取ります.
フレームワーク:多くのツールクラスの組み合わせ、目的:プロジェクト開発後期の学習を加速し、フレームワーク部分hibernate、spring、struts 2の多くの情報を構成する必要があり、2つの形式構成(xml、注釈)を提供した.
注釈で構成するのはいつですか?構成情報がservletパスなどの変更されない場合は、注釈の形式を使用することをお勧めします.構成情報にデータベースのユーザー名やパスワード情報などの頻繁な変更が必要な場合は、従来の方法(.txt,.properties,.xml)を使用することをお勧めします.
カスタム注記を使用するテスト
バイトコードの注記情報を反射して読み込む
md.isAnnotationPresent(MyTest.class)
2.6ケース:シミュレーションJunit
1_カスタム注記@MyTest
2_UserDaoの定義
3_クラスの定義MyJunit
第3章動的エージェントを用いてウェブサイトの文字セット符号化問題を解決する
3.1設計モード
ソフトウェア開発の過程で、似たような問題に遭遇し、問題の解決方法をモデル(套路)を抽出する.
単一例、ファクトリ、アダプタ、装飾者、ダイナミックエージェント
3.2グーグル自動車シーン
JAvaは自動車開発の約束を設計した
Google Carを生態圏プラットフォームに接続する際、自動車の起動機能を強化したい
デコレーションモード
ダイナミックプロキシモード
バイトコードローダ:jdkにはいくつかのプログラムがあり、各種バイトコードファイルをメモリにロードする専門がある.これらのプログラムはバイトコードローダと略称される
バイトコードファイルclassファイルをメモリにロードするにはどうすればいいですか?IOストリームテクノロジーを使用して、ファイルにロードされたデータをメモリにロードする最下位の実装プロセス
バイトコードローダ:3種類のシステムブートローダ:
3.3ケース:動的代理店は全局の文字化けしの問題を解決する
ステップ
1_new DynamicWeb Project ___>Index.html
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をトランスコードして、放します
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つの新しい要素が追加されています.
@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
get
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をトランスコードして、放します