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. lvm的磁盘管理知识点整理

    首先感谢参考的博客网址: http://blog.51cto.com/dreamfire/1084729 https://www.cnblogs.com/kevingrace/p/5825963.ht ...

  2. python面向对象 : 反射和内置方法

    一. 反射 1. isinstance()和issubclass() isinstance( 对象名, 类名) : 判断对象所属关系,包括父类  (注:type(对象名) is 类名 : 判断对象所属 ...

  3. MyBatis配置Mapping,JavaType和JDBCType的对应关系,#与$区别

    Mybatis中javaType和jdbcType对应关系:JDBC Type Java TypeCHAR StringVARCHAR StringLONGVARCHAR  StringNUMERIC ...

  4. windows server 2012 本地用户和组

  5. geoserver 常见问题笔记

    1.cql查询示例,根据点查询返回code的空间查询示例 http://192.168.0.226:8080/geoserver/lgum/ows?service=WFS&version=1. ...

  6. boost 学习笔记 2: timer

    boost 学习笔记 2: timer copy from:http://einverne.github.io/post/2015/12/boost-learning-note-2.html 1:ti ...

  7. 使用vim时生成的.swp文件

    1. 在使用vim时,退出编辑后,发现生成了swp文件,如下: 发现用vim打开一个文件时,都会产生一个.swp的隐藏文件(即文件名.开头的),这个文件是一个临时交换文件,用来备份缓冲区中的内容,用于 ...

  8. MYSQL--表分区、查看分区

      一.       mysql分区简介 数据库分区 数据库分区是一种物理数据库设计技术.虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减sql语句的响应时 ...

  9. 为DOM节点添加或者删除class

    项目中如果应用了常用的javascript类库,多数情况下,这些已经封装好的类库,都会封装一个类似于addClass和removeClass的方法,以便于我们对DOM节点的class进行操作. 以jQ ...

  10. java容器思维导图

    转载自:https://blog.csdn.net/zbdxcyg/article/details/72330833