一度、今JSPとサーブレット:技術2の世界にJavaWeb

記事のこのシリーズは、GitHubのの「Javaのインタビューガイド」の倉庫に私に手配します、よりエキサイティングなコンテンツが私の倉庫のビューにアクセスしてください

https://github.com/h2pl/Java-Tutorial

そのトラブルのスポットスターカザフスタン下のように

記事は、最初に私の個人ブログに登場しました。

www.how2playlife.com

この記事では、ネットワークから、この記事の一部は、この記事の主題に明確かつ徹底的に話す、と私は技術のブログのコンテンツの優れた統合をたくさん考えている「JavaWeb技術の世界に」Javaテクノロジの川や湖[の]マイクロチャンネル公共番号ですその侵害は、作者に連絡してください場合は、良いブログの記事の数を挙げています。

このブログシリーズは、ステップバイステップの基礎を学び、開始した実際の戦闘を取得し、その後、頻繁に使用されるプロジェクトのJavaWebの技術的な要素を理解するためにJavaWeb、サーブレットからのフレームにして、SSMのSpringBootから、どのようにエントリから上級までを紹介します自分の知的枠組みを形成するために、あなたの全体JavaWeb技術システムのより完全な理解をするためにログコンポーネント、Mavenの、JUnitの、とはるかに、含みます。あなたの学習成果を要約し、テストするために、このシリーズは面接の質問に対応するすべての知識ポイントを提供し、答えを提案します。

あなたがこの記事のシリーズのための提案を持っている、またはご質問がある場合は、あなたが公共の川や湖[] Javaテクノロジ作者に連絡するために多くの懸念もすることができます、あなたはこのブログシリーズの作成・改訂に参加することを歓迎しています。

拡張JSPサーブレット技術として、多くの場合、誰かが、JSPとサーブレットますが混乱しました。本稿では、サーブレットとJSPの違いをもたらすだろう、と我々は手助けをしたいです。

サーブレットとJSPの違い

1、サーブレット出力HTMLコンテンツは、JavaコードでHttpServletResponseのオブジェクトによって動的にすることができます。

図2は、JSP、静的HTMLコンテンツにJavaコードを埋め込み、その後、Javaコードは、動的に後に実行されるHTMLコンテンツ生成しました。

JSPサーブレットとその特性

1、サーブレットよく組織のビジネス・ロジック・コードが、Javaソースファイル、それは仕方によって動的なHTMLコンテンツ文字列連結を生成しているので、コードの保守の問題、貧困層可読性につながることは容易であるのでけれども。

2、JSPサーブレットは、もののHTMLコンテンツを生成するという点で欠点を回避するが、HTMLで複雑なビジネスロジックの数が多いと混合しました。

MVCによる二つのアプローチ

JSPとサーブレットは、独自のアプリケーション環境を持っている、そして彼らが自分に有利に遊ばせする方法はありませんか?答えは、MVCパターンは、この問題に対する完全な解決策になることができ、そこケンあります。

MVCモデルは、短期のモデル - ビュー - コントローラのソフトウェアエンジニアリング・モード・ソフトウェア・アーキテクチャは、3つの基本的な部分、すなわち、に分割される:モデル(モデル)、ビュー(ビュー)とコントローラ(コントローラ):

要求を処理するための要求を転送する責任Controller--

インターフェイスディスプレイの責任View--

調製Model--ビジネス機能(例えば、アルゴリズム)、データベース設計とデータアクセス動作を実現

次のようにソフトウェアシステムJSP /サーブレット開発において、3つのセクションが記載されています。

229cf9ff5b1729eaf408fac56238eeb3_hd

図1に示すように、Webブラウザが、コントローラ(サーブレット)を取得し、プロセス、サーバにHTTPリクエストを送信する(例えば、パラメータ解析、転送を要求します)

2、コントローラー(サーブレット)はコアビジネスロジック--model一部を呼び出し、結果を得ます

図3に示すように、コントローラ論理処理結果を表示する(サーブレット)(JSP)、出力ダイナミックHTMLコンテンツ

ブラウザ表示に戻って4、動的に生成されたHTMLコンテンツ

JSPは、ビジネスコードの多くで満たされることはありませんしながら、MVCモデルは、Web開発における大きな利点を持っている、HTMLコードを生成することなく、ビジネスロジックを担当するだけでサーブレットを聞かせて、JSPとサーブレット自身の欠点を避けるために最適です、これは大幅にコードの可読性と保守性を向上させることができます。

JavaWebの基礎

まず、どのようなサーブレットのこと?

Javaは、 サーブレットは、HTTPサーバとWebブラウザまたはその他のHTTPクライアントからの要求であるWebサーバやアプリケーションサーバ上で動作するプログラムであり、データベースの中間層またはアプリケーション間。

サーブレットの使用は、あなたがデータベースや他のソースからレコードを示す、Webフォームからのユーザーの入力を収集することができ、あなたはまた、動的なWebページを作成することができます。

Javaの  通常サーブレットはCGIを使用して手順は、(共通ゲートウェイインターフェイスは、共通ゲートウェイ・インタフェース)は、同じ目的を達成するために実装することができます。しかし、CGIに比べて、サーブレットは、次のような利点があります。

  • 1、大幅に優れたパフォーマンス。
  • 2、Webサーバのアドレス空間内のサーブレットの実行。各クライアント要求を処理するために別のプロセスを作成する必要はありませんように。
  • これらはJavaで書かれているので、3、サーブレットは、プラットフォームに依存しています。
  • 図4は、サーバー上のJavaセキュリティマネージャは、サーバーコンピュータ上のリソースを保護するために制限のシリーズを実行します。したがって、サーブレットは信憑性があります。
  • 5、Javaクラスライブラリのすべての機能は、サーブレットのためにご利用いただけます。これは、ソケットとRMIのメカニズムやアプレット、データベースや他のソフトウェアを介して相互作用することができます。

二、サーブレットのライフサイクル

サーブレットのライフサイクルは、作成から破壊に全体のプロセスとして定義することができます。以下は、サーブレットに従う手順です:

  • 1は、サーブレットは、init()メソッドを呼び出すことによって初期化されます。
  • 2、サーブレットコールサービス()メソッドは、クライアント要求を処理します。
  • 3、destroy()メソッドを呼び出すことにより、サーブレットは終了する(エンド)。
  • 図4は、最終的には、サーブレットは、JVMのガベージコレクタによって収集されたごみです。

init()メソッド

initメソッドは、一度だけ呼び出すように設計されています。それは、あなたが最初にサーブレットを作成するときに呼び出され、それはもはや後続の各ユーザーの要求に応じて呼び出されません。したがって、アプレットのinitメソッドのように、一回の初期化のために使用されます。

サーブレットは、サーブレットのURLへの最初の呼び出しに対応するユーザを作成するときに、あなたはまた、サーバが最初に起動されたときにサーブレットがロードされている指定することができます。

サービス()メソッド

サービス()メソッドはメインメソッドが実際の作業を行います。サーブレットコンテナ(すなわち、Webサーバ)は、クライアント(ブラウザ)からの要求を処理するため、および、クライアントにフォーマットされた応答を書き込むためにサービス()メソッドを呼び出します。

サーバは、要求サーブレットを受信するたびに、サーバーは、新しいスレッドを生成し、サービスを呼び出します。サービス()メソッドは、適切なタイミングでのようなHTTPリクエスト(等、DELETE、POST、PUTをGET)の種類を確認し、doGetメソッドを呼び出し、doPostメソッド、doPutメソッド、doDelete。

 破壊()メソッド

破壊()メソッドは、サーブレットのライフサイクルの最後で呼ばれるように、一度だけ呼び出されます。破壊()メソッドを使用するには、サーブレットのデータベース接続をオフにし、バックグラウンドスレッドを停止し、リスト、またはクッキーカウンターをクリックすることができますディスクに書き込まれ、そして他の類似の清掃活動を行います。

()メソッドを破壊呼び出した後、サーブレットオブジェクトがガベージコレクションとしてマークされています。

 例

実行した後:

続けてリクエストした後:

可視準備要求サービス()メソッドが実行した場合にのみ!

関連インタビューの質問

どのようにマルチスレッドサーブレットの単一のインスタンスを理解するには?**

異なるユーザは、同じ事業(そのような登録など)の要求を発行し、この時間というコンテナには、いくつかのサーブレットインスタンスそれが生成されますか?

答えは:のみ1つのサーブレットのインスタンスメモリは、最初にアクセスし、インスタンス化されるときにサーブレットがロードされます。サーブレットの同じサービスインスタンスを共有するための要求。別のサービス要求は、通常、別のサーブレットに対応しています。

サーブレット/ JSPようにコードを書くときには、セキュリティの問題に非常に慎重に検討し、マルチスレッド、マルチスレッド実行モードを必要とし、デフォルトです。

JSPの既存のマルチスレッドの問題:

クライアントが最初にJSPファイルを要求すると、JSPのサーバーは、クラスファイルにコンパイルし、クラスのインスタンスを作成し、スレッド処理、クライアント側の要求を作成します。複数のクライアントがある場合は、同時にJSPファイルを要求し、サーバが複数のスレッドを作成します。スレッドに対応する各クライアント要求。マルチスレッド実行が大幅にシステムリソースの需要を減らし、同時実行性とシステムの応答時間を改善することができます。

使用JSPの可能な変数は以下の通りであります:

変数の例:インスタンス変数はヒープに割り当てられ、すべてのスレッドがインスタンスを共有するには、それがされて属しているスレッドセーフではありません。

JSP系统提供的8个类变量

JSP中用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT是线程安全的(因为每个线程对应的request,respone对象都是不一样的,不存在共享问题),APPLICATION在整个系统内被使用,所以不是线程安全的。

局部变量: 局部变量在堆栈中分配,因为每个线程都有它自己的堆栈空间,所以是线程安全的

静态类: 静态类不用被实例化,就可直接使用,也不是线程安全的

外部资源: 在程序中可能会有多个线程或进程同时操作同一个资源(如:多个线程或进程同时对一个文件进行写操作).此时也要注意同步问题.

Servlet单实例多线程机制:

Servlet采用多线程来处理多个请求同时访问。servlet依赖于一个线程池来服务请求。线程池实际上是一系列的工作者线程集合。Servlet使用一个调度线程来管理工作者线程。

当容器收到一个Servlet请求,调度线程从线程池中选出一个工作者线程,将请求传递给该工作者线程,然后由该线程来执行Servlet的service方法。

当这个线程正在执行的时候,容器收到另外一个请求,调度线程同样从线程池中选出另一个工作者线程来服务新的请求,容器并不关心这个请求是否访问的是同一个Servlet.当容器同时收到对同一个Servlet的多个请求的时候,那么这个Servlet的service()方法将在多线程中并发执行。

Servlet容器默认采用单实例多线程的方式来处理请求,这样减少产生Servlet实例的开销,提升了对请求的响应时间,对于Tomcat可以在server.xml中通过 元素设置线程池中线程的数目。 

如何开发线程安全的Servlet

1、实现 SingleThreadModel 接口

该接口指定了系统如何处理对同一个Servlet的调用。如果一个Servlet被这个接口指定,那么在这个Servlet中的service方法将不会有两个线程被同时执行,当然也就不存在线程安全的问题。这种方法只要将前面的Concurrent Test类的类头定义更改为:

Public class Concurrent Test extends HttpServlet implements SingleThreadModel { 
………… 
}  

同步对共享数据的操作

使用synchronized 关键字能保证一次只有一个线程可以访问被保护的区段

避免使用实例变量

本实例中的线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。

1) Struts2的Action是原型,非单实例的;会对每一个请求,产生一个Action的实例来处理

Struts1 Action是单实例的

mvc的controller也是如此。因此开发时要求必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。

2) Struts1的Action,Spring的Ioc容器管理的bean 默认是单实例的.

Spring的Ioc容器管理的bean 默认是单实例的。

Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)。

当Spring管理Struts2的Action时,bean默认是单实例的,可以通过配置参数将其设置为原型。(scope="prototype )

五、servlet与jsp的区别

1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.

3.Servlet中没有内置对象,内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

4.对于静态HTML标签,Servlet都必须使用页面输出流逐行输出

参考文章

https://www.w3cschool.cn/servlet/servlet-sxoy2p19.html
https://blog.csdn.net/qq_19782019/article/details/80292110
https://blog.csdn.net/qiuhuang_123/article/details/83617647
https://blog.csdn.net/zt15732625878/article/details/79951933
https://blog.csdn.net/android_hl/article/details/53228348

微信公众号

个人公众号:黄小斜

黄小斜是跨考软件工程的 985 硕士,自学 Java 两年,拿到了 BAT 等近十家大厂 offer,从技术小白成长为阿里工程师。

JAVAの著者は現在、プログラマ乾燥、体験学習、仕事の経験や生活プログラムを共有することに熱心、バックエンドテクノロジー・スタックに焦点を当て、小さな黄色の対角線CSDN 100万+ビューをブログ、ファンはほとんど2W +を知って、ネットワーク全体では10W +リーダーを持っています。

黄は、少し斜めのスラッシュの若者で、研究と執筆に準拠し、生涯学習の力を信じ、希望とより多くのプログラマが友人を作り、進歩と一緒に成長します!

オリジナルのeBook:
私のオリジナル電子書籍電子書籍「:白からアリババのJavaテクノロジー・エンジニアプログラマーズ新人練習マニュアル」を収集する[番号]黄斜め返信[元]の後に世間の注目

プログラマ3T技術学習リソース:リソースまくる技術を学ぶいくつかのプログラマは、世間の注目の数は、背景がキーワード返信「データ」は何のルーチンを無料で入手することはできません。

PubMedの情報確認:
コンピュータのPubMedまくるを、公共のコースとプロのビデオレビューを含むPubMedのレビューは、ここでみんなにそれをお勧めします私自身の使用のための検討材料の一部である、世間の注目の数は、背景がキーワード返信「のPubMed」で、無料でご利用いただけます。

公共技術いいえ:Java技術の川や湖

SSM、SpringBoot:あなたは私のリアルタイム更新記事とドライの共有に注力したい場合は、川や湖の私の公共の数に焦点を当てることができます] [Javaの技術のJava、テクニカルエンジニアアリステーション、著者黄斜めには、Javaの関連技術に焦点を当てMySQL、分散、ミドルウェア、クラスタ、Linuxでは、ネットワーク、マルチスレッド、時には完全なJavaスタックの開発に取り組ん学習経験を共有するポイントドッカー、ELKだけでなく、ドライ商品や技術を話します!

Javaのエンジニアは、学習リソースを必要と:一部のJavaエンジニアの一般的な学習リソースを、世間の注目の数は、背景がキーワードの返信の「Java」何のルーチンを無料で入手することがありません。

私の公共の番号

おすすめ

転載: www.cnblogs.com/AliCoder/p/11707342.html