Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用

初始化参数:(init-param)

初始化参数写在web.xml文件中:(写在<servlet>标签内部)

1 <servlet>
2     <servlet-name>BeerAdvisorServlet</servlet-name>
3     <servlet-class>com.example.web.BeerServlet</servlet-class>
4
5     <init-param>
6         <param-name>Email</param-name>
7         <param-value>[email protected]</param-value>
8     </init-param>
9 </servlet>

一个Servlet在执行构造函数时,只是实例化了一个普通的对象,要想变成真正的Servlet,需要两样东西 :ServletConfig、ServletContext

Web容器(Tomcat)在初始化一个Servlet的时候,会为这个Servlet构建一个唯一的ServletConfig

Web容器从部署描述文件(web.xml)读出Servlet的初始化参数(init-param),并把这些参数交给ServletConfig,然后把ServletConfig传递给init()方法

Web容器读取DD(web.xml)中的初始化参数,在一个Servlet的生命周期中,只读取一次,就像构造函数、init()初始化函数一样,只执行一次。

每次重启Tomcat时,Tomcat会查看自己的webapps目录,并部署在那里发现的所有应用。

<servlet>初始化参数只对一个Servlet有效,而<web-app>上下文参数对整个Web应用都有效。上下文参数不写在某个<servlet>中,因为对整个Web应用有效,所以写在<web-app>里面:

1 <web-app>
2     <context-param>
3         <param-name>adminEmail</param-name>
4         <param-value>[email protected]</param-value>
5     </context-param>
6 </web-app>

每个Servlet有一个ServletConfig,一个Web应用只有一个ServletContext。

比较ServletConfig对象和ServletContext对象
  ServletConfig对象(保存着初始化参数) ServletContext对象(保存着上下文参数)
 使用方法 getServletConfig().getInitParameter("参数名"); getServletContext.getInitParameter("参数名");
 可用范围  
只对配置了<init-param>的Servlet可用;不过可以

通过保存在一个属性中来得到更大范围的可用性


对整个Web应用的所有Servlet、JSP都可用

 个数  一个Servlet有一个ServletConfig  一个Web应用只有一个ServletContext(分布式应用除外)

在web.xml

中的配置


<servlet>

  <init-param>

    <param-name>参数名</param-name>

    <param-value>参数值</param-value>

  </init-param>

</servlet>


<web-app>

  <context-param>

    <param-name>参数名</param-name>

    <param-value>参数值</param-value>

  <context-param>

</web-app>


对象赋值


在Servlet刚初始化的时候,提供ServletConfig


在Servlet刚初始化的时候,提供ServletContext

要把初始化参数<init-param>和上下文参数<context-param>认为是部署常量,即在Web应用运行的时候修改这些参数是没用的,它们只在刚刚部署时读取一次。

ServletContextListener(上下文监听者)

ServletContextListener能够监听一个上下文初始化事件,这样就能得到上下文参数,并在应用为客户提供服务之前运行一些代码。

就像告诉Web容器,Web应用其他部分的有关情况一样,用部署描述文件(web.xml)同样来配置ServletContextListener,Web容器就可以发现和使用ServletContextListener。

1 <web-app>
2     <listener>
3         <listener-class>
4             com.example.listener.MyServletContextListener
5         </listener-class>
6     </listener>
7 </web-app>

三个属性作用域:

上下文(Context)、会话(HttpSession)、请求(ServletRequest)

上下文属性不是线程安全的:一个Servlet  A设置了一个上下文属性,并赋值;马上另一个Servlet  B也给这个上下文属性赋值;这个时候Servlet  A在获取这个上下文属性的值,就不是自己当初的赋值了。

会话属性也不是线程安全的:一个客户可以打开多个浏览器窗口发出请求,容器还是用同一个会话。

只有请求属性和局部变量是线程安全的。

原文地址:https://www.cnblogs.com/czp2bconfident/p/8886209.html

时间: 2024-08-29 11:44:05

Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用的相关文章

Head First Servlets &amp; JSP 学习笔记 第七章 —— 作为JSP

<%@ -- %> 这是指令 <%@ page --import="java.util.Date" %> 这是page指令,import是page指令的一个属性 <% -- %> 这是Scriptlet,里面是纯Java代码,需要分号结尾 <% = -- %> 这是表达式,表达式不用分号结尾:绝对不能把一个返回类型为void的方法用作表达式 JSP经过Web容器的转换,生成了Servlet: JSP中的Scriptlet和表达式的内容都会

《Spring实战》学习笔记-第五章:构建Spring web应用

之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. 本章中,将会接触到Spring MVC基础,以及如何编写控制器来处理web请求,如何通明地绑定请求参数到业务对象上,同时还可以提供数据校验和错误处理的功能. Spring MVC初探 跟踪Spring MVC请求 在请求离开浏览器时,会带有用户所请求内容的信息,例如请求的URL.用户提交的表单信息. 请求旅

javascript高级程序设计 学习笔记 第五章 上

第五章 引用类型的值(对象)是引用类型的一个实例.在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当.尽管 ECMAScript 从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构.引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法. 对象是某个特定引用类型的实例.新对象是使用 new 操作符后跟一个构造函数来创建的. 构造函数本身就是一个函数,只不过该函数是出于创建新

Android学习笔记—第五章 进程与线程

第五章 进程与线程 进程:一个应用程序就是一个进程 (1)进程的优先级: Foreground Process 前台进程 a. 当前用户正在操作的Activity所在的进程 b. 绑定了当前用户操作的Activity的service所在的进程 c. 通过调用了startForeground()方法提升优先级的service所在的进程 d. 正在调用onCreate().onStart().onDestory()方法的service所在的进程 e. 正在调用onReceiver()方法的Broad

Java学习笔记—第五章

第五章  Java运算符和表达式 定义:运算符是指具有运算功能的符号.参与运算的数据称为操作数.运算符和操作数按照一定的规则组成的式子称为表达式. 运算符的分类: 根据操作数个数不同分类:单目运算符(一元运算符).双目运算符(二元运算符).三目运算符(三元运算符) 根据性质或用途不同分类:算术运算符(+.-.*./.%.++.--).关系运算符(>.<.>=.<=.= =.!=).逻辑运算符(!.&&.||).位运算符(>>.<<.>&

《spring实战》学习笔记-第五章:构建spring web应用程序

5.1 Spring MVC起步 5.1.1 跟踪Spring MVC的请求 每当用户在Web浏览器中点击链接或提交表单的时候,请求就开始工作了.对请求的工作描述就像是快递投送员.与邮局投递员或FedEx投送员一样,请求会将信息从一个地方带到另 一个地方. 在请求离开浏览器时 ①,会带有用户所请求内容的信息,例如用户提交的表单信息. 请求旅程的第一站是Spring的前端控制器DispatcherServlet,在这里一个单实例的Servlet将请求委托给应用程序的其他组件来执行实际的处理. Di

JSP学习笔记(五):自定义标签-JSP1.x

1.任何一个标签都对应一个Java类,该类必须实现Tag接口. 2.一个标签可以通过 tld 文件查找该标签的是实现类,并运行该类的相关方法. 一.简单标签实现 (一)实现Tag接口 1.实现代码: <span style="font-family:Arial;">package taglib.jsp_one; import java.io.IOException; import java.util.ResourceBundle; import javax.servlet.

JSP学习笔记(五):日期处理

一.JSP 日期处理: 使用JSP最重要的优势之一,就是可以使用所有Java  API.本节讲述Java中的Date类,它在java.util包下,封装了当前日期和时间. Date类有两个构造函数.第一个构造函数使用当前日期和时间来初始化对象:Date( ) 第二个构造函数接受一个参数,这个参数表示从1970年1月1日凌晨至所要表示时间的毫秒数:Date(long millisec) 获取Date对象后,可使用下列方法: boolean after(Date date):如果比给定的日期晚,则返

JavaScript高级程序设计学习笔记第五章--引用类型(函数部分)

四.Function类型: 1.函数定义的方法: 函数声明:function sum (num1, num2) {return num1 + num2;} 函数表达式:var sum = function(num1, num2){return num1 + num2;};//注意有个分号 构造函数的方式:var sum = new Function("num1", "num2", "return num1 + num2");// 2.函数的重复声