javawebコードとデータの分離ものがたり

今日はブログの記事を見ました。次のとおりです。

多くの場合、パッケージ化され、メンテナンスの経験に何人かの友人を持っている私たちのメンテナンスソフトウェアは、一般的に、コードの再構築を含め、達成するために、変数や定数、構造的な改造ソフトの内容から分離することができ、改善するために、JavaのWebアプリケーションを開発アプリケーションのディレクトリファイルの再構築など、レベル、次は私が簡単に私の最初の経験について話します。


       私たちのシステムは、Java Webアプリケーションであるが、すべてのクラスシステム内のファイル、JSP、JS、CSS、画像ファイル、およびシステムダイナミクスは、同じプロジェクトディレクトリにドキュメント、XLS、画像、WMVおよびその他のドキュメントをアップロードします。次のように詳細なディレクトリ構造は次のとおりです。

アプリケーション構成のコンテキストルートです/ MyAppに
MyAppに/ WEB-INF /
MyAppに/ ADMIN /
MyAppに/画像/
MyAppに/スタイル/
MyAppに/ファイル/
MyAppに/動画/
...

 

    1、問題がある
       実際には、ファイルは、動画フォルダは、ユーザーがシステムの動作中に定期的に更新の変更を発表し、新たなコンテンツを、アップロードして他の部分が変更されている間のみ際のシステム要件のリリースバージョンの変更、変更のこの2種類異なる、前者はシステム変更の結果であるシステムの通常の使用の結果であり、変更は別々の原則を変更しない、我々は、このクラスに分けて保存された2つのフォルダを願っています。
       我々は、Webアプリケーションのパッケージ(myapp.war)フォルダmyappの内のすべてのファイルが含まれているのアプリケーションコンテキストのルートディレクトリへの必要性を公開するとして、それは頻繁に動画が出て移動したファイルやフォルダを変更する必要があります。

 

    2、解決策を探るために
       、我々が知っていることを、サーブレットステアリングの二つの方法、1があるrequest.getRequestDispatcher(requestPath)の.forward(要求は、

レスポンス)、それはページへのリクエストJSP直接転送し、URLを変更しない、あるresonse.sendRedirect(URLパス)、改訂URLアドレス、別の要求へのジャンプ。しかし、それらの両方であっても、Webアプリケーションのコンテキスト(myappの)外サーブレット、およびフォルダmyappの内のすべてのファイルは、我々はmyapp.warにパッケージ化する必要があるので、矛盾があるディレクトリにアクセスしていませんでした。
       さらなる方法、ならびにjava.io.Fileの流れを使用してモードを原稿読取、その後サーブレット・オブジェクトは、ページの送信に書き込まれている応答を使用し、そのような方法は、操作場所(Tomcatなど)Webコンテナにアクセスすることができます(例えばDの窓など:/またはLinuxの/ usr *、など)ユーザシステムのルートディレクトリ、私たちはmyappに越えて移動したファイルや他のフォルダを置くことができるという。たとえば、Tomcatアプリケーションのコンテキストルートディレクトリがあるときには/ usr / tomcatに/ webappsに/私たちはmyapp.war詰めて、私たちは、しかし、むしろは/ usr /アップロード/ファイルに、ファイルmyappのを許可しない、単なるバージョン変更を読み込みますプログラムの最新バージョンは、ユーザーのアップロードファイルは実行するために、ファイルのアクセス時間を()を使用して、同じファイルに残っています。以下のような:
       ファイルF =新しい新しいファイル( "は/ usr /アップロード/ファイル/ 2010 / 3/15 / 010001.doc。")

使用のFileInputStreamは、ファイルを読み込み、その後、OUTSTREAMに流れる応答ページを使用してファイルを書き込みます。
       これらの問題の中で500メガバイトの大きなファイルがある場合、読み込みファイルは、JVMのヒープスペースを取り、その後、一般的なデフォルトのJVMのヒープスペースが十分ではありませんが、あなたはそれをファイルを保持するのに十分な大きさを作り、JVM起動時間にパラメータを設定する必要がありますもちろん、スケジュールにJVMを使用してファイルを読み書きする必要があり、明らかに効率がはるかに遅い直接読み取りよりも、相対的に低くなります。

 

    3、改良された方法
       フォルダの外myappの中で両方のファイルを作成する方法はありません、それはデータがそれをストリーミングファイルを読み込むには、Fileクラスを持っていませんか?Linuxでは、あなたはディレクトリを解決するためのショートカットを使用することができ、実際にソフト接続ファイルです。
       Linuxのファイルとフォルダで我々はすべて知っているが、同じデータエンティティであるとして、あなたはファイルやディレクトリの直接操作の役割に到達するために、作動別の場所にあるファイルまたはディレクトリとの接続を、行うために、同じ方法を使用することができます。
       まず、ソフト接続が確立された方法:
       LN -s DestinationPath sourcePathは
、このようなファイルのように、ルートフォルダを確立するための柔軟な接続としてフォルダのMyAppの外側にあるファイル、およびWebアプリケーションに特定の用途にに、:
       LN -sは/ usr /アップロードは/ usr /
tomcatに/ webappsに/ ROOT /アップロードコンテキストルート属性でとTomcatコンテナセット  allowLinking = "trueに"  、アクセスするには
       、このように、我々は直接のurlで、アプリケーションをmyappにすることができます次のようなコール、または道の応答をリダイレクトし、ファイル内のファイルへのアクセス、
       HTTP:// localhostを:8080 /アップロード/ファイル/ 2010年3月15日/ 010001.doc
       その結果、アップロードのショートカットへのアクセスは、アップロードフォルダを訪れることに等しいないだろう、どちらも外部リソースは、アクセス制限の許可、無読んでFileクラスを使用すると、書き込みデータ・ストリームを持っていない、制限なしのヒープスペースがあるだろう、私たちは、揮発性を実現しました個別のデータファイル、およびなしメモリ消費量。500MBのファイルの読み込みと書き込み、ヒープは、64がデフォルトすることができ、上の空間500を設定する必要はありません。
       要約すると、オペレーティング・システムの特性を使用して、 -ソフトの接続を、別のアプリケーションパッケージからデータファイルを達成するために、オペレーティング・システムの実装実装基礎となるオペレーティング・システムに属するファイルノードIを変更することにより、ディレクトリファイルアクセスジャンプ、ランタイムJVMは、スペースを節約し、10倍以上速く読むためにJVMクラスファイルを使用して、書き込みアプリケーション層に比べて。

    図4は、総括
       Linuxのファイルに対して、思考とFileクラスファイルストリーム方式のためのテストのサーブレットリダイレクト方式の試験後、メンテナンスの容易さ、アップロードされたファイルが別のプログラムコードとユーザデータの放出を可能にするために私のWebアプリケーションをファイルの保守と運用効率の問題に対処しながら、試験方法、ソフトの接続は、最高の、最後を使用することを決めています。


セクションを考えます:

それが分散されている場合はどのように行うには?データやプログラムは、同じサーバーを行う方法ではありませんか?

仮想ディレクトリ:実際には、Webコンテナは、独自のソリューションを持っています。データは、そのサーバに対応するプログラム限り、オンライン上の仮想ディレクトリへのデータポイントでのWebコンテナ上にない場合。仮想ディレクトリが共有することができます。


公開された29元の記事 ウォンの賞賛3 ビュー20000 +

おすすめ

転載: blog.csdn.net/yangleiGJ/article/details/54913797
おすすめ