1、サーブレットのライフサイクル
初期化時         ⇒  init()                  【初回リクエスト時】
  ↓
リクエスト時       ⇒service() ⇒doGet()         【Httpリクエストメソッドにより振り分け】
                        或は⇒doPost()
                        或は⇒・・・
  ↓
サーバ停止時      ⇒destroy()

init()について、
初回リクエスト時に呼ばれる。初期化を遅らせる処理は、遅延初期化(Lazy Loading)と呼ばれる。
遅延初期化を行わず、最初にinit()を呼び出したいときは、<load-on-startup>要素を設定する。
これで、指定されたサーブレットがwebアプリケーション起動時にロードされる。

2、アプリケーションスコープ
頻繁に更新されるようなデータをアプリスコープに保存してしまうと、同期制御の影響が大きくなる。
よって、共通に利用する読み取り専用のデータを格納するケースが多い。
アプリケーションスコープは、javax.servlet.ServletContextインタフェースを通して操作する。
ServletContextオブジェクトの取得はHttpServlet.getServletContextで。

3、シングルインスタンス・マルチスレッド
サーブレットは同時に複数のクライアントからアクセスされる可能性がありますので、マルチスレッドで動作する。
即ち、同じサーブレットへのリクエストに対しては同じインスタンスが利用される。
このため、サーブレットのフィールドは、private宣言しても、複数のリクエスト間で共有されるということになる。
読み取り専用のデータや定数以外はサーブレットのフィールドに定義すべきではない。

4、同時アクセス
同じセッションのFirefoxの場合、同じURLへのアクセスはレスポンスが戻ってくるまで待機するようなので、サーブレット同時アクセスの確認はIEなどでください。
⇒ Firefox Ver.22.0 で試したけど、大丈夫だった。

5、スレッドセーフ
データ          スレッドセーフか
---------------------------------------------
ローカル変数         ○
インスタンス変数       ×
static変数          ×
リクエスト属性        ○
セッション属性        ×
アプリケーション属性    ×
ページ属性          ○

また、SingleThreadModelインタフェースを実装することでサーブレットの実行が同期化されるが、パフォーマンスが悪い。
例: public class MyServlet extends HttpServlet implements SingleThreadModel {
(同期は必要なコードのみ最小限行うべき)

Servlet基本_サーブレットのライフサイクル、スレッドセーフ的更多相关文章

  1. Servlet基本_クッキー、URLリライティング

    1.クッキーの基礎クッキーは.クライアント側に保存されるテキストデータです. セキュリティ上の制約.・自分で発行したクッキーにしかアクセスできない.クッキーには発行元のホストの情報が記録されている.・ ...

  2. Servlet基本_初期化パラメータ、外部ファイル

    1.サーブレットの初期化パラメータサーブレットの初期化パラメータを利用するには.必ずweb.xmlにおいてサーブレットマッピングを指定する必要がある.(Tomactのinvokerサーブレットは利用で ...

  3. Servlet基本_セッション属性

    1.概念セッション: ユーザーごとの状態を保存する仕組みです.セッションID: アプリケーションサーバから一意の識別子が割り当てられ.これをセッションIDと言う. 2.サーブレットAPIサーブレットA ...

  4. Servlet基本_オブジェクトのスコープ

    1.スコープ種類Servletには以下のスコープがあります.Request.Session.Applicationの順にスコープは広くなっていきます.・Applicationスコープ:アプリケーション ...

  5. Servlet基本_画面遷移

    画面遷移方法は.下記ようがある.・リクエストのディスパッチ・リダイレクト(画面から) 1.ディスパッチ1)概念サーブレットから他のリソース(サーブレット.JSP.Htmlなど)にリクエストを転送するこ ...

  6. scala 101

    * scala 安装: 下载可以执行的文件. 注意版本.  spark 0.8.0 对应的scala 为2.9.3 * scala 编译: 和java 很像: 1,  直接编译脚本: scalac H ...

  7. sbt公布assembly解决jar包冲突 deduplicate: different file contents found in the following

    一个.问题定义 近期使用sbt战斗assembly发生故障时,包,在package什么时候,发生jar包冲突/文件冲突,两个相同class来自不同jar包classpath内心冲突. 有关详细信息:我 ...

  8. javabean+servlet+jsp程序_个人辛苦探索

    主要介绍主流的java web编程技术.设计模式和框架,以及如何利用Eclipese开发Web应用程序. 要点:1.Java Web编程的主要组件技术: 2.MVC设计模式: 3.用Eclipse构建 ...

  9. Java面试题_第二阶段(Servlet、HTTP、Session、JSP、 Ajax、Filter、JDBC、Mysql、Spring)

    1.1. 描述Servlet调用过程? 答案: (1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址. (2)浏览器根据 ...

随机推荐

  1. Node.js 搭建HTTP服务器,提供文件下载

    直接上代码,这是第一版,可以判断扩展名 var http = require('http'); var express = require('express'); var fs=require(&qu ...

  2. 如何获取阿里云OSS上每个文件夹的大小

    原文 https://help.aliyun.com/document_detail/88458.html?spm=a2c4g.11186623.2.11.792462b15oU02q OSS文件按照 ...

  3. 凭什么说AMQP比JMS优秀啊?JMS才是真正实现了一个客户端调用多种产品的消息中间件啊

    一.AMQP 历史​ 消息队列(Message Queue)起源于一位来自 MIT 的硬件设计教育工作者 Vivek Ranadivé 设想了一种通用软件总线,就像主板上的总线那样,供其他应用程序接入 ...

  4. Java注解的基本概念和原理及其简单实用

      一.注解的基本概念和原理及其简单实用 注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析 ...

  5. MVC 访问静态页面 View 下面放JS

    http://blog.csdn.net/qq_17255515/article/details/53293120

  6. MySQL 8.0的关系数据库新特性详解

    前言 MySQL 8.0 当前的最新版本是 8.0.4 rc,估计正式版本出来也快了.本文介绍几个 8.0 在关系数据库方面的主要新特性. 你可能已经知道 MySQL 从版本 5.7 开始提供了 No ...

  7. 1-Lombok工具使用

    1.先给Eclispe安装Lombok插件 首先下载 lombok-1.16.6.jar 这个jar包  存放在系统任意盘里面  我这里是放在  c:\lombok-1.16.6.jar 运行命令 点 ...

  8. Flume案例Ganglia监控

    Flume案例和Flume监控系统的使用: 安装 将apache-flume-1.7.0-bin.tar.gz上传到linux的/opt/software目录下 解压apache-flume-1.7. ...

  9. OpenStack Nova虚拟机创建流程解析

    https://yikun.github.io/2017/09/27/OpenStack-Nova%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%88%9B%E5%BB%BA%E6%B5 ...

  10. 设置IIS7/IIS7.5的FTP支持断点续传

    Windows Server 2003的IIS自带FTP默认支持断点续传,但是Windows Server 2008/R2默认已经不支持,因此需要注意设置,才能让其支持断点续传,更好的利用宝贵的服务器 ...