JAVAWEB 4ドメインオブジェクトの概要

4つのドメインオブジェクトに含まれるメソッド

1,pubic void setAttribute(String name,*Object value*):向域中存储数据,指定名称
2,public *Object* getAttribute(String name):获取域对象中指定name的值
3,public void removeAttribute(String name):删除域对象中指定name的值

サーブレットコンテキストドメインオブジェクト

生命周期:
  • 作成:サーバーが起動すると、サーバーはサーバー上のWebプロジェクトごとにServletContextドメインオブジェクトを作成します
  • 破壊:サーバーがシャットダウンしたとき、またはアイテムがサーバーから削除されたとき
  • スコープ:プロジェクトが実行されている限り使用でき、最大のドメインオブジェクトであり、すべてのサーブレットからアクセスできます。

servletContextの役割:

  1. アプリケーションスコープドメインオブジェクト:
    データを格納、取得、削除するために3つのサーブレットを個別に作成し、servletcontextドメインオブジェクトが現在のすべてのサーブレットに対して有効であることをテストします。
    コードの表示:
    step1:
    リンクを作成します。
<body>
  <a href="${pageContext.request.contextPath}/ContextServlet">存储数据</a>
  <a href="${pageContext.request.contextPath}/Context1Servlet">获取数据</a>
  <a href="${pageContext.request.contextPath}/Context2Servlet">删除数据</a>
  </body>
step2:
	创建ContextServlet:
@WebServlet("/ContextServlet")
public class ContextServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //告诉浏览器响应的数据类型
        response.setContentType("text/html;charset=utf-8");
        //获取servletContext域对象,方法是从父类中继承过来的
        ServletContext sc = getServletContext();
        //存放数据到域对象中
        sc.setAttribute("wp","666");
        response.getWriter().write("存储成功!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}
step3:
	创建Context1Servlet:
@WebServlet("/Context1Servlet")
public class Context1Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //告诉浏览器响应的数据类型
        response.setContentType("text/html;charset=utf-8");
        //获取servletContext域对象,方法是从父类中继承过来的
        ServletContext sc = getServletContext();
        //获取servletContext域对象中的数据
        String wp = (String) sc.getAttribute("wp");
        response.getWriter().write("获取到的数据是:"+wp);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

step4:
	创建Context2Servlet:
@WebServlet("/Context2Servlet")
public class Context2Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //告诉浏览器响应的数据类型
        response.setContentType("text/html;charset=utf-8");
        //获取servletContext域对象,方法是从父类中继承过来的
        ServletContext sc = getServletContext();
        //删除域对象中name为“wp”的数据
        sc.removeAttribute("wp");
        response.getWriter().write("删除成功!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

結果:[データの保存]をクリックすると、データはservletContextドメインオブジェクトに保存されます。この時点で、[データの取得]をクリックしてデータ666を表示します。[データの削除]をクリックしたら、[データの取得]をクリックしてnullを表示します。

  1. アプリケーションレベルのパラメーター構成を取得
    するための一般的なメソッド(グローバル構成パラメーター、xmlのみ)
    1、public String getInitParamter(String name):指定された名前の構成パラメーター情報を取得
    2、public Enumeration <String> getInitParamterNames():すべてのアプリケーションを取得レベルパラメータ
    コードショー:
    STEP1:
    web.xml構成アプリケーション・レベル・パラメータ:
<context-param>
        <param-name>wp</param-name>
        <param-value>66</param-value>
    </context-param>
    <context-param>
        <param-name>wpp</param-name>
        <param-value>666</param-value>
    </context-param>
step2:
	创建Deno1Servlet:
@WebServlet("/Demo1Servlet")
public class Demo1Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取servletContext域对象
        ServletContext sc = getServletContext();
        //获取wp的取值
        String wp = sc.getInitParameter("wp");
        System.out.println(wp);
        //获取所有的配置参数
        Enumeration<String> ipn = sc.getInitParameterNames();
        //遍历
        while (ipn.hasMoreElements()){
            String s = ipn.nextElement();
            System.out.println(sc.getInitParameter(s));
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

出力:
66
666
66

  • Webリソースの実際のパスを取得し
    ます。共通のメソッド:
    1、パブリック文字列getRealPath( "/パス"):実際のパスを取得します(servlet3.0の前にある必要があります)
    2. public inputstream getresourceAsStream( "/ path"):これへの入力を取得しますストリームオブジェクト
    コードの表示:
@WebServlet("/Demo2Servlet")
public class Demo2Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取servletContext域对象
        ServletContext sc = getServletContext();
        //获取真实路径
        String realPath = sc.getRealPath("/images/5.jsp");
        System.out.println("真实路径:"+realPath);
        //输出结果:真实路径:E:\idea工作区间\javaweb129\out\artifacts\MyTest_war_exploded\images\5.jpg
        //getrealpath()方法不管路径存不存在,都可以获取到真实路径
        //需要注意的是,此图片的路径在web下的images文件夹下
        InputStream is = sc.getResourceAsStream("/images/5.jpg");
        ServletOutputStream os = response.getOutputStream();
        int len;
        byte[] b=new byte[1024];
        while ((len=is.read(b))!=-1){
            os.write(b,0,len);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

HttpSessionドメインオブジェクト

ライフサイクル:

  • 作成:Javaでは、セッションで初めてgetSession()が呼び出されたときにサーバーによって作成され、jspでは、セッションで初めてjspインターフェースにアクセスしたときに作成されます。
  • 破壊:
    invalidate()メソッドを呼び出すとき
    サーバーがタイムアウトするとき:Webサーバーはデフォルトのタイムアウトを指定し、tomcatは30分です
//此代码在tomcat的conf目录的web.xml中
<session-config>
        <session-timeout>30</session-timeout>
    </session-config>
服务器关闭时:服务器关闭时,我们可以通过钝化(将session数据保存到硬盘中)和活化(将session数据回复到session中)
  • アクションの範囲:セッションでは、関係するサーブレットとjspの両方を使用できます

HttpServletRequestドメインオブジェクト

ライフサイクル:

  • 作成:ブラウザから要求されたときにサーバーによって作成されます
  • 破壊:応答が生成されたときにサーバーによって破棄されます
  • スコープ:1つのリクエストのみ
  • 注意!データリクエスト・ドメイン・オブジェクトは、データを転送する2つのサーブレットではなくリダイレクトで共有することができる
    コードを示し:
    STEP1を:
    ドメイン・オブジェクトにDemo3Servlet格納されたデータを作成します
@WebServlet("/Demo3Servlet")
public class Demo3Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //向httpservletrequest域对象中存储数据
        request.setAttribute("data","一对数据");
        //转发到Demo4Servlet
        request.getRequestDispatcher("Demo4Servlet").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}
step2:
	在此域对象中获取到了转发来的数据
@WebServlet("/Demo4Servlet")
public class Demo4Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取域中的数据
        String data = (String) request.getAttribute("data");
        //输出:一对数据
        System.out.println(data);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

PageContextドメインオブジェクト

ライフサイクル:

  • 作成:jspへのリクエストの開始時に作成します

  • Destroy:応答が終わったら破棄します

  • スコープ:ページ全体(4つのドメインオブジェクトの最小スコープ)が
    機能します。

  • 他の8つの組み込みオブジェクトを
    取得するgetException()は例外を返します。
    getPage()はPageを返します。
    getRequest()はリクエストを返します。
    getResponse()は応答を返します。
    getServletConfig()は設定を返します。
    getServletContext()はアプリケーションを返します。
    getSession()はセッションを返します。
    getOut()は戻ります

  • ドメインオブジェクトとして

  • 現在のインターフェースでは、他の3つのドメインオブジェクトを操作できます
    。setAttribute(フィールドは文字列キー、文字列値、int):
    getAttribute(文字列キーのフィールド、int)
    removeAttribute(文字列キーのフィールド、int)
    nd Attribute(文字列キー):次にjspから小から大(フィールドの範囲)までの4つのフィールドから、指定されたキーを1つずつ検索します。見つかった場合は直接戻り、検索が終了しない場合はnullを返します。

オリジナルの記事を公開 Likes0 Visits1

おすすめ

転載: blog.csdn.net/SUPER__W/article/details/105440298