最近 Web パーツの学習を終えたところ、個々のパーツは常に理解しやすいものもありますが、それらをすべてごちゃ混ぜにまとめると、常に混乱しやすい知識ポイントがいくつかあることがわかりました。実際、勤勉なポーターが不足しているわけではありませんが、インターネット上には十分な情報があります。しかし、最終的な目標は私たち自身を理解することだけではないでしょうか?私たちが理解しているものだけが真に私たちのものです。おまけとして、まず JSP の 9 つの暗黙的な オブジェクト に注目してみましょう。
下の図で、JSP の 9 つの暗黙オブジェクトを見てみましょう。これらは教師によって常に重要なポイントであると言われています。
範囲 ------- 名前が示すように、機能するサイズ範囲です。知識ポイントを独学で学習している場合、知識ポイントを知り、理解し、習得したとみなされるためには、どのような目標を達成する必要がありますか?ビアン博士の観察、聞き取り、質問から、データベースの追加、削除、変更、検索に至るまで、すべては同じ質問から始まります。用途は何ですか?使い方?なぜこのように使用できるのでしょうか?したがって、以下のような課題を把握し、それを踏まえて学習し、自分の欠点を発見することが最善の学習法であると考えます。
1) スコープの実際のサイズ。 (何ですか?)
2) スコープの役割。 (何に使うの?)
3) これらのスコープの使用方法。 (使い方は?)
4) このような実装原理を使います。 (なぜこのように使用できるのでしょうか?)
一つずつ分析してみましょう:
1) スコープの実際のサイズ。 (それは何ですか?)
servletcontext ドメインのスコープは、Web アプリケーション全体です。
データ生成後は、後から利用するだけでなく、他の人も利用する場合はservletcontextを利用してください。
4つのドメインの中で最大のドメインです。
2) スコープの役割。 (何の役に立つの? )
Web アプリケーション内のすべてのサーブレットは同じ servletcontext オブジェクトを共有するため、複数のサーブレットは servletcontext オブジェクトを通じて異なるサーブレット間でデータを共有できます。
3) これらのスコープの使用方法。 (使い方?)
a)はプログラミングを通じてバインドすることも、Webアプリケーションのグローバル変数として使用して、すべてのサーブレットとJSPからアクセスすることもできます
设置Context属性: ServletContext application=this.getServletContext(); application.setAttribute("person1",new Person("Jim")); application.setAttribute("person2",new Person("Green")); 获取Context属性: ServletContext application=this.getServletContext(); Enumberation persons=application.getAttributeNames(); while(persons.hasMoreElements()){ String name=(String)persons.nextElement(); Person p=(Person)persons.getAttribute(name); application.removeAttribute(name); }
b) Web アプリケーション全体のコンテキスト ドメインを構成します:
< param-value>Hello world !
&lt;/context -param&gt; ("データ"));
ServletContext インターフェースを使用して、Web アプリケーション内の 静的コンテンツ ドキュメント構造 (HTML、GIF、JPEG ファイルなど) に直接アクセスします。次のメソッドなど: .getResource() .getResourceAsStream()
これら 2 つのメソッドのパラメータは、「/」で始まる
文字列
で、コンテキスト ルートを基準としたリソースの相対パスを示します。ドキュメント構造が存在する可能性があります。サーバーファイル システム上、war パッケージ内、リモート サーバー、またはその他の場所上にあります。 getResource("/index.jsp") などの動的リソースの取得には使用できません。このメソッドは、動的ページではなく、jsp ファイルのソース コードを返します。動的コンテンツを取得するには、「リクエストのディスパッチ」を使用します。 Web アプリケーションをリストする アクセスできるリソースについては、getResourcePaths(String path) メソッドを使用できます。
4) この方法での実装の原則または利点と欠点。 (なぜこのような使い方ができるのでしょうか?)
サーブレットはデータ出力には向いていないので、データを美化用のJSPファイルに転送してからクライアントに出力する必要があります。
JSPにJavaコードを埋め込むことができ、Javaデータを受け取ることが可能になります。同時に、servletcontext ドメインでは Web アプリケーション全体でデータを共有できるため、「スレッド セキュリティ
」の問題も転送されるデータに影響するため、リクエスト ドメインを使用する必要があります。
(2) Httpsession ドメイン (セッションドメイン)
HTTPSession のスコープは: セッションです。
データが生成された後、後で使用する必要がある場合は、Httpsession ドメインを使用します。
它是四个域中范围第二大的域。
2) 作用域的作用。(有什么用?)
(会话范围)在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session。如果没有,就在内存中创建一个session并返回。当一短时间内(默认30分钟)session没有被使用,则服务器会销毁该session。若服务器非正常关闭,未到期的session也会跟着销毁。若调用session提供的invalidate()方法,可以立即销毁session。
3)怎么使用这些作用域。(怎么用?)
a) jsp中操作session (String)request.getSession().getAttribute("username"); // 获取 request.getSession().setAttribute("username", "xxx"); // 设置 b) java中操作session //servlet中 request.getSession(); session.getAttribute("username"); session.setAttribute("username", "xxx"); session.setMaxInactiveInterval(30*60); session.invalidate(); //struts中方法1 ServletActionContext.getRequest().getSession().setAttribute("username", "xxx"); ServletActionContext.getRequest().getSession().getAttribute("username"); ServletActionContext.getRequest().getSession().setMaxInactiveInterval(30*60); ServletActionContext.getRequest().getSession().invalidate(); //struts中方法2 ActionContext.getContext().getSession().put("username", "xxx"); ActionContext.getContext().getSession().get("username"); ActionContext.getContext().getSession().clear(); c) web.xml中操作session <session-config> <session-timeout>30</session-timeout> </session-config> d) tomcat-->conf-->conf/web.xml <session-config> <session-timeout>30</session-timeout> </session-config></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,255); font-family:'courier new',courier">4)它这样使用实现的原理。(为什么可以这么用?)</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> HttpSession在服务器中,为浏览器创建独一无二的内存空间,在其中保存了会话相关的信息。服务器创建session出来后,会把session的id号,以<a href="http://www.php.cn/wiki/422.html" target="_blank">cookie</a>的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都 会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。如果要问我为什么,我也不知道啊!</span></p> <h2 class="titName SG_txta" style="margin:20px 0px; padding:0px; font-size:21px; line-height:1.5; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(255,0,0); font-family:'courier new',courier">(三)ServletRequest域(request域)</span></h2> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,255); font-family:'courier new',courier">1)作用域的实际大小。(是什么?)</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> <span style="margin:0px; padding:0px">ServletRequset域</span>是:整个请求链(请求转发也存在)。</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> 数据产生之后,只需要使用一次,这种情况下请使用ServletRequset域。<br></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> <span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px">4つのドメインの中で3番目に大きいドメインです。 </span></span></span></span></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,255); font-family:'courier new',courier">2) スコープの役割。 (何の役に立つの?) </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> リクエストチェーン全体でデータを共有します。 </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> 最も一般的に使用される方法: サーブレットで処理されたデータは、表示のために JSP に渡されます。このとき、パラメーターを <span style="margin:0px; padding:0px">ServletRequset フィールド</span> に配置して持ち込むことができます。 </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,255); font-family:'courier new',courier">3) これらのスコープの使用方法。 (使い方は?) </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> a)クライアント情報を取得するメソッド<br> getRequestURLメソッドは、クライアントがリクエストを行うと完全なURLを返します。 <br> getRequestURI メソッドは、リクエスト行のリソース名の部分を返します。 <br> getQueryStringメソッドはリクエストラインのパラメータ部分を返します。 <br> getRemoteAddrメソッドはリクエストを行ったクライアントのIPアドレスを返します<br> getRemoteHostメソッドはリクエストを行ったクライアントの完全なホスト名を返します<br> getRemotePortメソッドはクライアントが使用するネットワークポート番号を返します<br> getLocalAddrメソッドはWEBサーバーのIPアドレス。 <br> getLocal<a href="http://www.php.cn/php/php-name.html" target="_blank">Nameメソッド</a>WEBサーバーのホスト名を返す<br> getMethodはクライアントリクエストメソッドを取得する<br> b)クライアントリクエストヘッダを取得する<br> get<a href="http://www.php.cn/html/html-HEAD-2.html" target="_blank">Head</a>er(文字列名)メソッド<br> getHeaders(文字列名)メソッド<br> getHeaderNamesメソッド<br> c ) クライアント<a href="http://www.php.cn/php/php-tp-parameter.html" target="_blank">リクエストパラメータの取得</a>(クライアントが送信したデータ) <br> getParameter(name)メソッド <br> getParameterValues (String name)メソッド <br> getParameterNamesメソッド <br> getParameter<a href="http://www.php.cn/code/9794.html" target="_blank">Map</a>メソッド </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,255); font-family:'courier new',courier">4) 実装されていますこの原理のように。 (なぜこのような使い方ができるのでしょうか?) </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> serviceメソッドが呼び出される前にサーバーによって作成され、serviceメソッドに渡されます。リクエスト全体が終了し、リクエストの存続期間が終了します。 </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; font-family:'courier new',courier"> </span></p> <h2 class="titName SG_txta" style="margin:20px 0px; padding:0px; font-size:21px; line-height:1.5; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(255,0,0); font-family:'courier new',courier">(四)PageContext域(page域)</span></h2> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,255); font-family:'courier new',courier">1)作用域的实际大小。(是什么?)</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> PageContext域的作用范围是:整个JSP页面。</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> <span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px"><span style="margin:0px; padding:0px">它是四个域中范围最小的一个域。</span></span></span></span></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"><span style="margin:0px; padding:0px; color:rgb(0,0,255)">2) 作用域的作用。(有什么用?)</span> <br> a) 它可以获取<a href="http://www.php.cn/java/java-alibaba-qita.html" target="_blank">其它</a>八大隐式对象,可以认为它是一个入口对象。</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> b) 获取其它所有域中的数据。<br></span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> c) 跳转到其它资源。其身上提供了<a href="http://www.php.cn/wiki/125.html" target="_blank">for</a>word和s<a href="http://www.php.cn/wiki/1048.html" target="_blank">end</a>Re<a href="http://www.php.cn/wiki/1275.html" target="_blank">dir</a>ect方法,简化了转发和重定向的操作。 </span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,255); font-family:'courier new',courier">3)怎么使用这些作用域。(怎么用?)</span></p> <p style="margin:10px auto; padding-top:0px; padding-bottom:0px; color:rgb(51,51,51); font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; line-height:25.2000007629395px"><span style="margin:0px; padding:0px; font-size:14pt; color:rgb(0,0,0); font-family:'courier new',courier"> 以下以一个简单的JSP页面程序为例:</span></p> <pre style="margin-top:0px; margin-bottom:0px; padding:0px; white-space:pre-wrap; word-wrap:break-word; font-family:'Courier New'!important"><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>pageContext对象_例1</title></head><body><br><%//使用pageContext设置属性,该属性默认在page范围内 pageContext.setAttribute("name","地球"); request.setAttribute("name","太阳系"); session.setAttribute("name","银河系");//session.putValue("name","麦哲伦系"); application.setAttribute("name","宇宙");%>page设定的值:<%=pageContext.getAttribute("name")%><br>request设定的值:<%=pageContext.getRequest().getAttribute("name")%><br>session设定的值:<%=pageContext.getSession().getAttribute("name")%><br>application设定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>范围1内的值:<%=pageContext.getAttribute("name",1)%><br>范围2内的值:<%=pageContext.getAttribute("name",2)%><br>范围3内的值:<%=pageContext.getAttribute("name",3)%><br>范围4内的值:<%=pageContext.getAttribute("name",4)%><br><!--从最小的范围page开始,然后是reques、session以及application--><%pageContext.removeAttribute("name",3);%>pageContext修改后的session设定的值:<%=session.getValue("name")%><br><%pageContext.setAttribute("name","宇宙",4);%>pageContext修改后的application设定的值:<%=pageContext.getServletContext().getAttribute("name")%><br>值的查找:<%=pageContext.findAttribute("name")%><br>属性name的范围:<%=pageContext.getAttributesScope("name")%><br></body></html>
显示结果:
page设定的值:地球 request设定的值:太阳系 session设定的值:银河系 application设定的值:宇宙 范围1内的值:地球 范围2内的值:太阳系 范围3内的值:银河系 范围4内的值:宇宙 pageContext修改后的session设定的值:nullpageContext修改后的application设定的值:宇宙 值的查找:地球 属性name的范围:1
4)它这样使用实现的原理。(为什么可以这么用?)
pageContext オブジェクト、このオブジェクトは主に JSP 間の共有データにアクセスするために使用されます。 JSP に対してリクエストが行われたときに開始され、応答が完了すると破棄されます。
以上がJava の 4 つの主要なドメインの最も完全な要約 (画像とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。