• 締切済み

Contextとは何でしょうか?

Contextとは何でしょうか? HttpServletを継承するクラス(例えば、DoSomethingServlet)を定義する中で、しばしば getServletContext() の呼び出しにより、ServletContextインターフェイス型オブジェクト(以下、オブジェクトSCと略)への参照を得ますが、このオブジェクトSCとはなんなのか?、そもそもServletの世界においてContextとは一体なんなのか?、どうもピンと来ません。 http://java.sun.com/javase/6/docs/api/ javax.servlet.http Class HttpServlet Methods inherited from class javax.servlet.GenericServlet getServletContext javax.servlet Class GenericServlet getServletContext() Returns a reference to the ServletContext in which this servlet is running. (オブジェクトSCは、その中で、DoSomethingServletクラス型オブジェクトが実行中の、ServletContextインターフェイス型オブジェクトのことである。) javax.servlet Interface ServletContext Defines a set of methods that a servlet uses to communicate with its servlet container, for example, to get the MIME type of a file, dispatch requests, or write to a log file. (オブジェクトSCは、DoSomethingServletクラス型オブジェクトが、そのコンテナ(Tomcatなど)にメッセージを送るためのメソッドをまとめたオブジェクトである。) javax.naming Interface Context This interface represents a naming context, which consists of a set of name-to-object bindings. It contains methods for examining and updating these bindings. (一般に、Context(インターフェイス)型オブジェクトとは、binding(名前とオブジェクトの関連)をまとめたオブジェクトである。) JAVA ENTERPRIZE IN A NUTSHELL, Chap-6 (http://docstore.mik.ua/orelly/java-ent/jenut/ch06_03.htm) A naming service associates names with objects. An association between a name and an object is called a binding, and a set of such bindings is called a context. A name in a context can be bound to another context that uses the same naming conventions; the bound context is called a subcontext. For example, in a filesystem, a directory (such as /temp) is a context that contains bindings between filenames and objects that the system can use to manipulate the files (often called file handles). If a directory contains a binding for another directory (e.g., /temp/javax), the subdirectory is a subcontext. (contextは、サブcontextを持つことがある。サブcontextは、contextである。  → 任意のcontextに注目したとき、そのcontextは、親や子を持つことがある。) 以上、よろしくお願いします。

  • Java
  • 回答数3
  • ありがとう数8

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

レイア間のやり取りをするための空間をコンテキストと呼んでいるだけ。 ServletContextはそれをJavaで表現したものよ。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

難しいわね。 そもそもの定義があいまいだから。 これにしか、こういうときにしか使っちゃいけない という定義がないから。 日本語で無理やりに訳すなら 層間の情報群とかそんな言葉になるんじゃないかしら。 正直こういうものだっていう概念で理解するしかないわね。

erichgumma
質問者

補足

Javaの package の日本語訳は パッケージ ですが、その定義は、Wikipedia に書かれているとおりです。 Servletの Context の日本語訳は コンテキスト のままでよいと思いますが、その定義はどのようになるのでしょうか?

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

Contextを単純に説明すると 「情報の塊」 てところね。 Javaではレイヤ間でデータをやり取りする際の 入れ物をContextとして名づけることが多いわ。 ServletContextはServletがServletコンテナとやり取りする際に利用する入れ物よ。 ServletコンテナていうのはServletの実行環境のことだと思ってくれていいわ。 ServletContextが保持している情報にはweb.xmlの値があったり パスの通っているところに置かれているファイルを参照するための情報をもっていたりするわね。

erichgumma
質問者

補足

ご回答ありがとうございます。 「context」を、曖昧さが残らないように正確に表現すると、どのようになるのでしょうか?

関連するQ&A

  • サーブレットコンテキストの意味がわからなくて困っています。

    やさしいJava活用編で勉強しているのですが、 サーブレットコンテキストの説明が書いてなく、ネットで調べても意味不明です。 サーブレットコンテキストは、 javax.servlet.ServletContextインタフェースを実装するクラスのインスタンスで、そのアプリケーションに一つあるとのことですが、 そのサーブレットコンテキストの意味がわからなくて困っています。 HttpSessionのようなもので、クライアントではなく、そのアプリケーションに対して1つあるということですが... ServletContextオブジェクトは、具体的に何の情報を持っているのですか? また以下のソースですが、 なぜ指定されたパスにあるリソースを、ラッパーとして機能するRequestDispatcherオブジェクトを返してから、 forwardで転送するのですか? ServletContext sc = getServletContext(); sc.getRequestDispatcher("/thanks.html").forward(request, response);

    • ベストアンサー
    • Java
  • newしないインスタンス?実体化しなくてもいいの?

    JAVAについて教えて下さい。 ServletContext application = getServletContext(); の成り立ちの意味なのですが、newがなぜないのか教えて下さい。 ~自身の考え~ (1)サーブレットコンテキストというクラスをインスタンス化して (サーブレットコンテキスト 変数A = new サーブレットコンテキスト();)     ↑                         ↑   クラス                       クラス (2)変数Aドットメソッド()によって、代入変数Bを作り上げる (サーブレットコンテキスト 代入変数B = 変数A . メソッド();) (3)のはずが、上記の式にはnewがありません。 なんで?? ~~ ~疑問点~ もしかしたらHttpServletでimportしているからそこでnewインスタンス化宣言している? だとするならどのような式になっているのでしょうか。 もしくはメソッドのF3キーとして上位をたどったときに出てきた public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { public ServletContext getServletContext() { return getServletConfig().getServletContext(); } } として抽象クラスが出てきましたが、どこにもnew実体化していません。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • RequestDispatcher でURL引数の扱い

    はじめまして。SINといいます。 今、ServletとJSPを使っているんですが、JSPからServletにはURL引数を渡す ことはできているんですが、ServletからJSPにはURL引数を渡すことはできるのでしょうか? 色々と調べていたんですが、わからず困っています。 SrvletからJSPへはRequestDispatcher の forward メソッドを使っています。 どなたか知恵をお貸しください。 下記にソースを抜粋したものを書きました。 String nextUrl = "/xxxx/xxxxx.jsp?aaa"; ServletContext context = request.getSession().getServletContext(); RequestDispatcher requestDispatcher = context.getRequestDispatcher(nextUrl); requestDispatcher.forward(request, response);

  • DB呼び出すページのはずなのですが以下のエラーが…

    わかる方、対応お願いいたします。 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: javax.servlet.ServletException: javax.naming.NameNotFoundException: 名前 jdbc はこのコンテキストにバインドされていません org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) day10.LogFilter.doFilter(LogFilter.java:46) 原因 javax.servlet.ServletException: javax.naming.NameNotFoundException: 名前 jdbc はこのコンテキストにバインドされていません org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) org.apache.jsp.day06.select_jsp._jspService(select_jsp.java:117) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) day10.LogFilter.doFilter(LogFilter.java:46) 原因 javax.naming.NameNotFoundException: 名前 jdbc はこのコンテキストにバインドされていません org.apache.naming.NamingContext.lookup(NamingContext.java:770) org.apache.naming.NamingContext.lookup(NamingContext.java:140) org.apache.naming.NamingContext.lookup(NamingContext.java:781) org.apache.naming.NamingContext.lookup(NamingContext.java:140) org.apache.naming.NamingContext.lookup(NamingContext.java:781) org.apache.naming.NamingContext.lookup(NamingContext.java:153) org.apache.naming.SelectorContext.loo

  • trusted context

    添削お願いします。 If an object is created statically by a role within a trusted context and the ROLE AS OBJECT OWNER clause is specified, who becomes the object owner when executing the pachage? トラステッド・コンテクスト内の役割や 節が指定されているオブジェクト所有者としての役割によって オブジェクトが静的に作られるならば、 パッケージを実行する時、誰がオブジェクトオーナーになりますか? A.The role B.The shema name C.The owner keyword D.The current SQLID(if set) Correct:A A.ロール B.スキーマネーム C.オーナーキーワード D.カレントSQLID(セットされている場合) 正解:A トラステッド・コンテクストとは何でしょうか?

  • サーブレットのコンパイルエラー

    会社の開発環境でコンパイルできたサーブレットを 自宅でコンパイルしようとすると、下のエラーが出てしまい困っています。だれか知恵を貸してください。 ちなみに自宅の開発環境は j2sdk1.4.0とtomcat3.2.3 です。 よろしくお願いします。 ----------------------------------- ReserveControlServlet.java:26: シンボルを解釈処理できません。 シンボル: メソッド setCharacterEncoding (java.lang.String) 位置 : javax.servlet.http.HttpServletRequest の インタフェース request.setCharacterEncoding("JISAutoDetect"); ^ ReserveControlServlet.java:33: シンボルを解釈処理できません。 シンボル: メソッド getRequestDispacher (java.lang.String) 位置 : javax.servlet.ServletContext の インタフェース sc.getRequestDispacher("/index.jsp").forward(request, response); ------------------------------------

    • ベストアンサー
    • Java
  • DB接続しようと思ったら下記のようなエラー

    JSPでDB接続するページを作成してアクセスしたら下記のようなエラー出てしまいました。解決策をお願いします。 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: javax.servlet.ServletException: javax.naming.NameNotFoundException: 名前 jdbc はこのコンテキストにバインドされていません org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) day10.LogFilter.doFilter(LogFilter.java:46) 原因 javax.servlet.ServletException: javax.naming.NameNotFoundException: 名前 jdbc はこのコンテキストにバインドされていません org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) org.apache.jsp.day06.insert2_jsp._jspService(insert2_jsp.java:81) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) day10.LogFilter.doFilter(LogFilter.java:46) 原因 javax.naming.NameNotFoundException: 名前 jdbc はこのコンテキストにバインドされていません org.apache.naming.NamingContext.lookup(NamingContext.java:770) 略 org.apache.naming.NamingContext.lookup(NamingContext.java:153) org.apache.naming.SelectorContext.looku

    • ベストアンサー
    • Java
  • HTTPステータス 404 - /servlet/Testが表示される

    はじめまして。Javaの初心者です。 どうしてもわからないことがあります。それは、 最初にTest.jspを実行して送信ボタンを押すと、 サーブレットからforwardされてきた「あああああ」 が表示されるのですが、再び送信ボタンを押すと、 「HTTPステータス 404 - /servlet/Test」が表示 されます。なぜなのでしょうか?また、どのようにす れば、404エラーを出すことがなく実行できるのが どうか教えてください。お願いします。 ************************************************* <%-- Test.jsp --%> <%@ page contentType="text/html; charset=Shift_JIS" %> <html> <head> <title>Test</title> </head> <body> <form method="POST" action="/servlet/Test"> <input type="submit" name="submit" value="送信"/><br/> </form> <% if(request.getParameter("submit") != null) { %> <hr/> <%= (String)request.getAttribute("b") %> <% } %> </body> </html> ************************************************* import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; public final class Test extends HttpServlet { public void doPost ( HttpServletRequest request, HttpServletResponse response ) throws IOException,ServletException { request.setAttribute("b","あああああ"); ServletContext sc = this.getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher("/Test.jsp"); rd.forward(request,response); } } *************************************************

    • ベストアンサー
    • Java
  • setAttribute(String, int)は適用できない

    setAttribute(String, int)は適用できない 今、servletでセッションの勉強をしています。 ある本に載っているソースコードをそのままコピーしたんですが、 「HttpSessionのメソッド setAttribute(String, Object)は(String, int)に適用できません。」 …というエラーが出て動きません。 こういう場合、実行するにはどうしたら良いのでしょうか? アクセスした回数をカウントすることなんてよくあると思うんです。 intも(Stringなんかも)Objectの下に含まれてるんじゃないんですか? intでも良い気がするんですけど…。 一応、ソースコードを貼っておきます: ### Sample229TestServlet.java ### package com.tips; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class Sample228TestServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; private int count = 0; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(); session.setAttribute("param",count++); //問題の箇所 out.println("<html><head><title>Sample228</title></head><body>"); out.println("<h2>SessionAttributeListenerの例</h2>"); out.println("sessionの属性countが" + count + "に変化しました。"); out.println("</body></html>"); out.close(); } } ### Sample228.java ### package com.tips; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; public class Sample228 implements HttpSessionAttributeListener { public void attributeAdded(HttpSessionBindingEvent event) { } public void attributeRemoved(HttpSessionBindingEvent event) { } public void attributeReplaced(HttpSessionBindingEvent event) { ServletContext app = (event.getSession()).getServletContext(); app.log(">> Sample228 Listener detects attribute changed."); } } …必要であれば補足します。では、宜しくお願いします。

    • ベストアンサー
    • Java
  • getRequestDispatcher

    includeメソッドで処理を転送するプログラムを学習しようと思い、 exDispatcherServlet.javaとexDispatcherServlet2.javaの2つのファイルを作りました。 web-inf\classes配下に2つのクラスファイルを入れました。web.xmlファイルのservlet-classはexDispatcherServletを指定しました。 exDispatcherServlet.javaでは、 req.setAttribute("name", "java"); ServletContext sc = getServletContext( ); RequestDispatcher rd = sc.getRequestDispatcher("/exDispatcherServlet2"); rd.include(req, res); のようにexDispatcherServlet2.classファイルに送り、 exDispatcherServlet2.javaで PrintWriter out = res.getWriter( ); out.println("name : "); のようにしたのですが、exDispatcherServlet2の方のプログラムが反応なしです。 getRequestDispatcher WEB-INF¥classesで指定するURLはコンテキストルートからの絶対パスとのことだったので、WEB-INFと同じ場所にexDispatcherServlet2.classをおいてみたのですが、だめでした。 どのようにすればうまくいくでしょうか? 参考URLはこちらです。 http://www.javaroad.jp/servletjsp/sj_servlet7.htm よろしくお願いいたします。

    • ベストアンサー
    • Java