Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用
初始化参数:(init-param)
初始化参数写在web.xml文件中:(写在<servlet>标签内部)
<servlet>
<servlet-name>BeerAdvisorServlet</servlet-name>
<servlet-class>com.example.web.BeerServlet</servlet-class> <init-param>
<param-name>Email</param-name>
<param-value>101101@qq.com</param-value>
</init-param>
</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>里面:
<web-app>
<context-param>
<param-name>adminEmail</param-name>
<param-value>adminEmail@163.com</param-value>
</context-param>
</web-app>
每个Servlet有一个ServletConfig,一个Web应用只有一个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。
<web-app>
<listener>
<listener-class>
com.example.listener.MyServletContextListener
</listener-class>
</listener>
</web-app>
三个属性作用域:
上下文(Context)、会话(HttpSession)、请求(ServletRequest)
上下文属性不是线程安全的:一个Servlet A设置了一个上下文属性,并赋值;马上另一个Servlet B也给这个上下文属性赋值;这个时候Servlet A在获取这个上下文属性的值,就不是自己当初的赋值了。
会话属性也不是线程安全的:一个客户可以打开多个浏览器窗口发出请求,容器还是用同一个会话。
只有请求属性和局部变量是线程安全的。
Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用的更多相关文章
- Head First Servlets & JSP 学习笔记 第三章 —— MVC迷你教程
临渊羡鱼,不如退而结网!是时候动手搞事情了! 我们的四大步骤: ①分析用户的视图(也就是浏览器要显示的东西),以及高层体系结构: (这个就是所谓的前端吧?用JSP?JSP可以当成Html来用吧?高层体 ...
- Head First Servlets & JSP 学习笔记 第十一章 —— Web应用部署
jar:java archive(java归档) war:web archive(web归档) war文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式(它实际上就是一个jar文件).建立 ...
- Head First Servlets & JSP 学习笔记 第七章 —— 作为JSP
<%@ …… %> 这是指令 <%@ page ……import="java.util.Date" %> 这是page指令,import是page指令的一个 ...
- Head First Servlets & JSP 学习笔记 第十三章 —— 过滤器的威力
过滤器可能是最强大的Web应用开发工具了! 与Servlet非常类似,过滤器就是Java组件,请求发送到Servlet之前,可以用过滤器截获和处理请求:另外Servlet结束工作之后,但在响应发回给客 ...
- Head First Servlets & JSP 学习笔记 第六章 —— 会话状态
MVC中的M(模型),通常就是一个普通的类,这个类里面的信息就是业务逻辑. 会话(Session) 我们可以使用一个HttpSession对象,来保存横跨多个请求的会话状态. HTTP协议使用的是无状 ...
- Head First Servlets & JSP 学习笔记 第四章 —— 作为Servlet
Servlet的任务是得到一个客户的请求,再发回一个响应. 请求: 容器控制着Servlet的一生,它会创建请求和响应对象.为Servlet创建一个新线程或分配一个线程,另外调用Servlet的ser ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像
[HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...
随机推荐
- Servlet基本_オブジェクトのスコープ
1.スコープ種類Servletには以下のスコープがあります.Request.Session.Applicationの順にスコープは広くなっていきます.・Applicationスコープ:アプリケーション ...
- 尚硅谷springboot学习13-配置的加载
配置可以有很多不同的来源,也有不同的加载顺序,下面来具体的看一下 配置文件加载位置 spring boot 启动会扫描以下位置的application.properties或者application. ...
- 如何查看虚拟机的ip地址,以及如何给虚拟机配置静态ip
1 在命令行上敲ifconfig 如下图: 通过inet addr : 192.168.25.129就是你的虚拟机当前的ip 2. 我们一般在局域网内是通过dhcp协议向网关发送ip请求,因此获取的i ...
- 阿里支付宝java接口
网上关于Java支付宝接口的文章很多,都大同小异,但是具体到代码中,还是不太一样,对于以前没有调试的新手来说还是很费解的,这是通过调试认为比较有用的版本,贴在这里供大家参考. 1.从本站提交到支付宝: ...
- 【原】linux学习路径
1. <<The Linux Command Line A Complete Introduction>> 2. <<Advanced Programming ...
- Structs复习 Action
引入jar包 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...
- 浏览器唤起APP的思路(本文转载)
在做 h5 页面中,会遇到这样一个需求,有一个立即打开的按钮,如果本地安装了我们的 app,那么点击就直接唤起本地 app,如果没有安装,则跳转到下载. 首先想到的是两个问题:一是如何唤起本地 app ...
- ubuntu上安装mysql的正确步骤
1.在Ubuntu software Center中下载mysql:[注:mysql下载下来后好像就安装上了] 2.使用命令检查mysql是否已安装上: 2.1 运行sudo netstat -tap ...
- CommonJS/AMD/CMD/UMD
为什么会有这几种模式? 起源:Javascript模块化 模块化就是把复杂问题分解成不同模块,这样可维护性高,从而达到高复用,低耦合. 1.Commonjs CommonJS是服务器端模块的规范,No ...
- kotlin集合操作
1.1 总数操作 方法作用: any--判断集合中是否有满足条件 的元素: all--判断集合中的元素是否都满足条件: count--查询集合中满足条件的元素个数: fold--在给定初始值的基础上, ...