知人のJava Web
学習のJava Webシステムも週だし、今週に暴露の新しい概念を整理し、彼らは今週、JSP +サーブレット+ Java Beanが+ MySQLのメッセージボードのデモに基づいて完成学んだことをもとに
いくつかの概念
Tomcatの
我々は、ローカルコンピュータ、CSSでHTMLを書くときTomcatが、根底にあるソケットが短いコンテナJSP /サーブレット、あるプログラムであり、「Webアプリケーションサーバー」で、我々は、他の人をあなたが訪問したページを書くことができます我々は、リモートアクセス用のページを書きますが、他の人にTomcatにアクセスすることを許可することはできませんプログラムのページを書くことです
サーブレット/ JSP
一般的にサーブレットサーバアプレットを参照し、処理のためにサーバー上で動作し、クライアントの要求に応じて、それはサーブレットのライフサイクルは、5つのステップに分けることができ、Javaのクラスサーブレットの開発は、以下であります:
- ロードサーブレット:Tomcatは最初のサーブレットにアクセスすると、Tomcatはサーブレットのインスタンスを作成するための責任を負うことになります
- 初期化:サーブレットがインスタンス化されると、Tomcatがオブジェクトを初期化するために、init()メソッドを呼び出します
- 処理サービス:ブラウザがサーブレットにアクセスする場合は、サーブレットは、サービスの利用に加えて、ユーザの要求を処理するためのサービス()メソッドを呼び出します()統一プロセスのユーザー要求は、サーブレットは、ユーザーの要求に応答するための4つの異なる方法を提供します
- doPostメソッド:クライアントへの応答では、POSTを要求します
- doGetメソッド:クライアントに応答するための要求をGET
- doDelete:クライアントの要求に応じて、DELETE
- doPutメソッド:PUT要求応答クライアント
- 破壊:サーブレットからオフまたはTomcatのTomcatのリソースのシェアは例を解放するように削除を自動的に、Destoryは()メソッドを呼び出すときに検出
- アンインストール:サーブレットエンドDestoryは()メソッドを呼び出すとき、必要に応じて、ガベージコレクションを待って、再びサーブレットを使用するために、それは操作を初期化するためのinit()を再起動します
フルネームJSPのJavaサーバーページ、同時にHTMLとJavaコードが存在することを特徴とする、テキストベースのプログラムは、Webコンテナに配備された後、JSP、サーブレット、JSPの本質であると、Webコンテナは自動的に対応するJSPにコンパイルされますサーブレット。サーブレットの出力ページの直接の使用は非常に面倒なので、JSP、サーブレットではなく、HTMLページの出力があります。
MVC仕様の登場後、サーブレットの出力ページは、もはや他のロールにラベルを付けるか、再生する必要がないだけのコントローラとして、レイヤを表示
JavaBeanの
JavaBeanは、メンバー属性、引数なしのコンストラクタを提供しなければならない特別なJavaクラスです最高のこれらのプロパティにアクセスして操作するため、民間、および範囲のセッターを提供しています、getterメソッドとして定義されます。
反射
セルフコントロール、自己記述型:反射は、Java言語自体は、文を説明するための重要な動的メカニズムは、定義を反映していています。クラスが動的に反射情報、メソッド属性取得することができ、オブジェクトは、オブジェクトの特性および挙動を構築することができます。
例えば:
Apple 类
public class Apple {
private String name;
public Apple() {
}
public Apple(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
自描述(通过反射获取类,属性,方法的信息)
import java.lang.reflect.*;
public class Main {
public static void main(String[] args) {
Class clazz = Apple.class;
// 获取构造器信息
for (Constructor constructor : clazz.getConstructors()) {
System.out.println(constructor.getName() + " " + constructor.getParameterCount());
}
// 获取属性信息
for (Field field : clazz.getDeclaredFields()) {
System.out.println(field);
}
// 获取方法信息
for (Method method: clazz.getDeclaredMethods()) {
System.out.println(method);
}
}
}
输出
Apple 0
Apple 1
private java.lang.String Apple.name
public java.lang.String Apple.getName()
public void Apple.setName(java.lang.String)
自控制(构造对象并控制对象属性及行为)
import java.lang.reflect.*;
public class Main {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("Apple");
final Constructor constructor = clazz.getConstructor(String.class);
final Object appleInstance = constructor.newInstance("China Apple");
System.out.println("Is appleInstance type equals Apple: " + (appleInstance instanceof Apple));
Apple chinaApple = (Apple)appleInstance;
System.out.println("Apple name: " + chinaApple.getName());
final Method setNameMethod = clazz.getMethod("setName", String.class);
setNameMethod.invoke(appleInstance, "Japan Apple");
System.out.println("Apple name: " + chinaApple.getName());
final Field nameField = clazz.getDeclaredField("name");
nameField.setAccessible(true);
nameField.set(appleInstance, "USA Apple");
System.out.println("Apple name: " + chinaApple.getName());
}
}
输出
Is appleInstance type equals Apple: true
Apple name: China Apple
Apple name: Japan Apple
Apple name: USA Apple
Javaクラスの実質的に非反射は、プロセスを実行している:ソースファイルApple.javaの製造は、コンパイラは、反射モードでは、コンパイラのスタートをバイトコードファイルApple.classにそれをコンパイルし、最終的にはJVMの実行にロードそのタイプの無知、唯一のコンパイラを実行した後、その真のタイプを知っています。
2つの主な利点は、反射があります。
- いくつかのシナリオでは、この「不明」タイプが大幅に、実行時の柔軟性を増加させました
- 実際に、実行可能なオブジェクトのタイプを決定するために、そのような特性が大きく抽象と上下デカップルの多型、さらに具体的な実装を向上さ
コメント
コンセプトは非常によく似た注釈とラベルされ、注釈情報は、多くの場合、「反射」を実現するために解決されます
ウォールデモ
JSP +サーブレット+ JavaBeanのは、JSP層の実装ビューを達成し使用して、サーブレットは、制御層、データ格納用のMySQLデータベース接続を達成します