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. android scrollview listview显示不全

    原来处理方法是重写ListView import android.content.Context; import android.util.AttributeSet; import android.v ...

  2. JavaScript中的类(class)、构造函数(constructor)、原型(prototype)

    类 Class 类的概念应该是面向对象语言的一个特色,但是JavaScript并不像Java,C++等高级语言那样拥有正式的类,而是多数通过构造器以及原型方式来仿造实现.在讨论构造器和原型方法前,我可 ...

  3. [UE4]删除UI:Remove from Parent

    同时要将保存UI的变量清空,以释放占用的系统内存

  4. 结对编程——paperOne基于java的四则运算 功能改进

    项目成员:张金生     张政 由于新的需求,原本使用JSP的实现方式目前改为Java实现,即去除了B/S端. 需求分析: 1.四则运算要满足整数运算.分数运算两种: 2.运算题目随机,并且可以打印题 ...

  5. Linux开机自动挂载windows网络共享

    yum install samba-client yum install cifs.utils yum install samba-common 命令: mount -v -t  cifs    // ...

  6. linux系统配置jdk环境

    前提:linux服务器+JDK8-linux版本 工具:FileZilla+Xshell 将jdk上传到服务器的某个文件夹(本人是JDK) 进入该文件夹,输入tar xzvf  jdk-8u77-li ...

  7. navicat创建存储过程的小问题

    再简单的东西长时间不用了就会出错,特此即时的记录下来,以便以后参考! 转自:http://blog.csdn.net/winy_lm/article/details/49690633 以下为navic ...

  8. Java - 14 Java 日期时间

    java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函数接收一个参 ...

  9. Everything You Always Wanted to Know About SDRAM (Memory): But Were Afraid to Ask

    It’s coming up on a year since we published our last memory review; possibly the longest hiatus this ...

  10. Fragment onActivityResult提前响应,startActivityForResult执行后立即响应onActivityResult的解决方法

    找不到病根真是让人愁白了头: 今天写了一个startActivityForResult,开启一个Activity并拿到返回的结果,但是startActivityForResult刚走,onActivi ...