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. java Files类和Paths类的用法 (转)

    http://blog.csdn.net/u010889616/article/details/52694061 Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java. ...

  2. 哈希表(Hash Table)原理及其实现

    原理 介绍 哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映 ...

  3. [UE4]修改枪支碰撞体

    一.Simple Collision:显示简单碰撞体,Comlex Collision:显示复杂碰撞体 二.添加简单和复杂碰撞体 三.自动生成复杂精确的碰撞体

  4. Linux下SSL证书申请以及配置到Nginx

    wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.shchmod +x l ...

  5. spark新闻项目环境搭建

    前面安装好三节点的centos 6.5 和配置好静态ip,这里就不多说了 创建kfk用户,然后重启 Last login: Fri Jan :: from 192.168.86.1 [spark@sp ...

  6. js第四天学习小结:

    (1)函数的四种形式小结: 无参无返回值 function tellstory(){     console.log("从前有座山");     console.log(" ...

  7. Sebastian Ruder : NLP 领域知名博主博士论文面向自然语言处理的神经网络迁移学习

    Sebastian Ruder 博士的答辩 PPT<Neural Transfer Learning for Natural Language Processing>介绍了面向自然语言的迁 ...

  8. python第三方库,你要的这里都有

    Python的第三方库多的超出我的想象. python 第三方模块 转 https://github.com/masterpy/zwpy_lst   Chardet,字符编码探测器,可以自动检测文本. ...

  9. apt-get 常用命令总结

    apt-get  高级包装工具(英语:Advanced Packaging Tools,简称:APT)是Debian及其衍生发行版(如:ubuntu)的软件包管理器.APT可以自动下载,配置,安装二进 ...

  10. SVG 学习<三>渐变

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...