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の役割:
- アプリケーションスコープドメインオブジェクト:
データを格納、取得、削除するために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を表示します。
- アプリケーションレベルのパラメーター構成を取得
するための一般的なメソッド(グローバル構成パラメーター、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を返します。