Java Webプログラミングサーブレットテクノロジーはどれくらい知っていますか?
1。サーブレットの基本<br />サーブレットテクノロジー開発のために、Sun Companyはいくつかの列のインターフェイスとクラスを提供します。 2つの重要なパッケージは、javax.servletとjavax.servlet.httpです。サーブレットは、サーブレットインターフェイスを実装するクラスです。ユーザーリクエストを受信して応答するために、Webコンテナ(Tomcat/Jettyなど)によって呼ばれ、作成されます。 5つの要約メソッドは、サーブレットインターフェイスで定義されています。
サーブレットのトップレベルのクラス構造は次のとおりです。
2。最初のサーブレットプログラム
新しいJava Webプロジェクトを作成してから、新しいHelloクラスを作成します。 hello.javaソースコードは次のとおりです。
パッケージZzz; Import java.io.ioexception; Import java.io.printwriter; Import javax.servlet.http.httpservlet; Import javax.servlet.httpservletrequest; Import javax.servlet.http.httpservletresponseponse doget(httpservletrequest request、httpservletResponse応答)をスローIoException {//応答メッセージをエンコードする応答をエンコードします。 printwriter out = response.getWriter(); out.println( "hello world"); } @Override public void dopost(httpservletrequest request、httpservletResponse応答)IoException {this.doget(request、response); }}構成ファイルweb.xmlは次のとおりです。
<?xml version = "1.0" encoding = "utf-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://xmlns.jcp.org/xml/ns/javaee xsi:schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/ns/javaee id = "webapp_id"バージョン= "3.1"> <display-name> zzz </display-name> <servlet> < - > <Servlet-Name> hello </servlet-name> <! - サーブレット名を指定 - > <url-pattern>/hello </url-pattern> <! - サーブレットにアクセスする仮想パスを指定 - > </servlet-app> </web-app>
ブラウザディスプレイを次のように開始して実行します。
3。サーブレットライフサイクル
サーブレットのライフサイクルは、ほぼ3つのステージ、初期化段階、操作段階、破壊段階に分かれています。以下は、各段階の詳細な説明です。
初期化フェーズ:クライアントがサーブレットコンテナにサーブレットにアクセスするように要求すると、コンテナは最初にサーブレットオブジェクトがメモリにあるかどうか、および直接使用されるかどうかを確認するリクエストを解析します。それ以外の場合は、サーブレットオブジェクトを作成し、init()メソッドを呼び出します。 init()は、サーブレットの宣言サイクル全体でのみ1回呼び出されることに注意してください。
ランニングステージ:これはサーブレットの最も重要な段階です。この段階では、コンテナはパラメーターとしてサーブレクエストとサーブレスポンスオブジェクトを構築し、それをサーブレットサービス()メソッドに渡します。サーブレットにアクセスするたびに、サーブレットコンテナはService()メソッドを1回呼び出します。サービス()メソッドは、サーブレットのライフサイクル全体で複数回呼び出されます
破壊段階:サーバーが閉じられるか、コンテナからWebアプリケーションが削除された場合、この段階が入力されます。この時点で、Destroy()メソッドが呼び出されます。ライフサイクル全体で、Destroy()メソッドは1回のみ呼び出されます。クライアントが最初にサーブレットにアクセスすると、コンテナはサーブレットオブジェクトを作成しますが、Tomcatが起動するとすぐにサーブレットオブジェクトが開始されることが期待されます。これに対処する方法は?現時点では、web.xmlで<Load-on-startup>要素を使用するだけです。例の構成は次のとおりです。
<Servlet> <Servlet-Name> hello </servlet-name> <servlet-class> zzz.hello </servlet-class> <! - サーブレットプログラムの自動荷重 - > <load-on-startup> 1 </load-on-startup> </servlet> <servet-mapping> <servlet-name> hello> <urlterting-name> </urpertern>
4。ServletConfigおよびServletContext
ServletConfigインターフェイス中に、ファイルエンコーディング、サーブレットを使用する企業など、一部の補助情報が必要な場合、この情報はweb.xmlの<init-param>要素を使用して構成できます。 Tomcatがサーブレットを初期化すると、サーブレット構成情報がServletConfigオブジェクトにカプセル化され、init(servletconfig config)を介してサーブレットに渡されます。 ServletConfigは、構成情報を取得する一連の方法を定義します。
次に、この方法の使用を説明するための例としてgetInitParameter()を取得します。
web.xml構成ファイルは次のとおりです。
<?xml version = "1.0" encoding = "utf-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://xmlns.jcp.org/xml/ns/javaee xsi:schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/ns/javaee id = "webapp_id" version = "3.1"> <disple-name> zzz </display-name> <servlet> <servlet-name> hello </servlet-name> <servlet-class> zzz.hello </servlet-class> <init-name> <param-name> company </param-name> <param-value> <Servlet-Name> hello </servlet-name> <url-pattern>/hello </url-pattern> </servlet-mapping> </web-app>
hello.javaファイルは次のとおりです。
パッケージZZZ; Import java.io.ioexception; Import java.io.printwriter; Import javax.servlet.servletconfig; Import javax.servlet.servlet.servlet.http.httpservlet; Import javax.servlet.http.httpservletrequest; httpservlet {@override public void doget(httpservletrequest request、httpservletresponse応答)IoException {//応答をエンコードする応答メッセージを設定します。 printwriter out = response.getWriter(); servletconfig config = this.getServletConfig(); string param = config.getInitParameter( "Company"); out.println( "company:" + param); } @Override public void dopost(httpservletrequest request、httpservletResponse応答)IoException {this.doget(request、response); }} ServletContextインターフェイス
サーブレットコンテナが開始されると、現在のWebアプリケーションを表すために、各Webアプリケーションに一意のServletContextオブジェクトが作成されます。このオブジェクトは、Webアプリケーションのすべての情報をカプセル化するだけでなく、複数のサーブレットオブジェクト間でデータ共有を実装します。 web.xmlでは、サーブレットの初期化情報を構成するだけでなく、Webアプリケーション全体の初期化情報を構成することもできます。構成方法は次のとおりです。
<context-param> <param-name> name </param-name> <param-value> luoxn28 </param-value> </context-param> <context-param> <param-name> company </param-name> <param-value> dahua </param-value> </context-param>
注: <context-param>要素には<param-name>および<param-value>が1つしかありません。上記の構成は、web.xmlで<web-app>で構成されています。 hello.javaファイルは次のとおりです。
パッケージZzz; Import java.io.ioexception; Import java.io.printwriter; Import java.util.Enumeration; Import javax.servlet.servletcontext; Import javax.servlet.http.httpservlet; Import javax.servlet.http.httpservletletret; javax.servlet.http.httpservletResponse; public class hello extends httpservlet {@override public void doget(httpservletrequest request、httpservletresponse応答)ioexception {// set response endage endtype = html; html; html; html; html; html; html; html; printwriter out = response.getWriter(); ServletContext Context = this.getServletContext(); Enumeration <String> paramNames = Context.getInitParameterNames(); while(paramnames.hasmoreelements()){string name = paramnames.nextelement(); string value = context.getInitParameter(name); out.println(name + ":" + value + "<br/>"); }} @Override public void dopost(httpservletrequest request、httpservletresponse応答)throws ioexception {this.doget(request、response); }}Webアプリケーション内のすべてのサーブレットはServletContextオブジェクトを共有するため、ServletContextオブジェクトのドメインプロパティにWebアプリケーション内のすべてのサーブレットがアクセスできます。 ServletContextインターフェイスでは、ServletContextドメインプロパティを追加、削除、設定するために4つのメソッドが定義されています。
上記の方法により、複数のサーブレット間でデータの共有を実現できます。この特定の例は、コードでは投稿されません。クリックなど、オンラインで参照できる多くの情報があります。
Javaweb Servlet Development Summary(II)
上記はこの記事に関するものであり、Java Webのサーブレット技術を誰もが理解することが役立つことを願っています。
参照
1。 "Java Webプログラム開発の紹介"サーブレットテクノロジーの章